Name: series-workflowdfsb6 Phase: Succeeded StartedAt: 2026-09-12 15:23:14 +0000 UTC FinishedAt: 2026-09-12 19:28:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[0] Phase: Succeeded StartedAt: 2026-09-12 15:23:14 +0000 UTC FinishedAt: 2026-09-12 15:47:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 15:23:14 +0000 UTC FinishedAt: 2026-09-12 15:47:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IPGRE", "NET_IPGRE_DEMUX", "NET_IP_TUNNEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IPGRE", "NET_IPGRE_DEMUX", "NET_IP_TUNNEL" ], "series_id": "5f9a71b8-dd58-4258-94ec-e5a3514ccfb7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_tunnel_refresh_lengths", "ipgre_link_update", "erspan_link_update", "erspan_set_hlen", "ipgre_netlink_parms", "erspan_netlink_parms", "ipgre_changelink", "erspan_changelink", "ipgre_tunnel_ctl", "erspan_tunnel_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OywKICAgICYjMzQ7TkVUX0lQX1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMmIzM0OywKICAgICYjMzQ7aXBncmVfbGlua191cGRhdGUmIzM0OywKICAgICYjMzQ7ZXJzcGFuX2xpbmtfdXBkYXRlJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9zZXRfaGxlbiYjMzQ7LAogICAgJiMzNDtpcGdyZV9uZXRsaW5rX3Bhcm1zJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9uZXRsaW5rX3Bhcm1zJiMzNDssCiAgICAmIzM0O2lwZ3JlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7ZXJzcGFuX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBncmVfdHVubmVsX2N0bCYjMzQ7LAogICAgJiMzNDtlcnNwYW5fdHVubmVsX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGp1c3RzIGhlYWRlciBsZW5ndGgsIGhlYWRyb29tLCBhbmQgTVRVIGNhbGN1bGF0aW9uIGxvZ2ljIGZvciBJUCBHUkUgYW5kIEVSU1BBTiB0dW5uZWwgZGV2aWNlcyAoaW50cm9kdWNpbmcgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocywgdXBkYXRpbmcgaXBncmVfbGlua191cGRhdGUgYW5kIGVyc3Bhbl9saW5rX3VwZGF0ZSwgYW5kIGRlZmVycmluZyB0dW5uZWwgc3RhdGUgdXBkYXRlcyB1bnRpbCBuZXRsaW5rIHZhbGlkYXRpb24gY29tcGxldGVzKS4gXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggKHN1Y2ggYXMgb2xkX2hsZW4sIGVyc3Bhbl92ZXIsIGluZGV4LCBod2lkLCBkaXIsIGFuZCBtdHUpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcgc3RydWN0IGZpZWxkcyBvciBmdW5jdGlvbiByZXR1cm4gdmFsdWVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBpbmNvcnJlY3QgaGVhZHJvb20gb3IgTVRVIGNhbGN1bGF0aW9ucyB3b3VsZCBtYW5pZmVzdCBhcyBidWZmZXIgYm91bmRhcnkvb3ZlcmZsb3cgb3IgcGFja2V0IHRyYW5zbWlzc2lvbiBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIG9yIG5ldHdvcmsgc3RhY2sgYXNzZXJ0aW9ucyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGFuZCBmaXhlcyBkZXZpY2UgaGVhZGVyIGxlbmd0aCwgTVRVLCBhbmQgaGVhZHJvb20gdXBkYXRlcyBpbiB0aGUgSVB2NCBHUkUgYW5kIEVSU1BBTiB0dW5uZWxpbmcgZHJpdmVycy4gSXQgaW50cm9kdWNlcyBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKCkgYW5kIHVwZGF0ZXMgbGluayBjb25maWd1cmF0aW9uIGFuZCBlcnJvci1oYW5kbGluZyBwYXRocyBpbiBpcGdyZV9jaGFuZ2VsaW5rKCksIGVyc3Bhbl9jaGFuZ2VsaW5rKCksIGFuZCBpb2N0bC9uZXRsaW5rIHBhcmFtZXRlciBwYXJzZXJzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGxvZ2ljIGV4ZXJjaXNhYmxlIHZpYSBydG5sIG5ldGxpbmsgYW5kIHR1bm5lbCBpb2N0bHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjU5MDhiZDA3NDVjMzA0YWIxNDAyNGUzMjI3ZDc2ZWUwYjU3MThmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDE1OjQyOjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuaW5kZXggN2M5YWFkZmU4ZmUzOS4uZmQwMzk2YWE1MDM5NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG5AQCAtNDI5LDYgJiM0Mzs0MjksNyBAQCBpbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCxcbiBcdFx0ICAgICAgX191MzIgZndtYXJrKTtcbiB2b2lkIGlwX3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbmV0X2lkKTtcbiYjNDM7dm9pZCBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSk7XG4gXG4gYm9vbCBpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4gXHRcdFx0XHQgICBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplbmNhcCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuY1xuaW5kZXggODIzMDllZmQ0MTdlMC4uNDgwN2ZjNmQyZmQ4OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX2dyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9ncmUuY1xuQEAgLTc4OSwyMyAmIzQzOzc4OSwyOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBpcGdyZV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpXG4mIzQzOy8qIHR1bm5lbC1cdTAwM2VobGVuIGRlcGVuZHMgb24gdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MgYW5kIG9uIHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuLFxuJiM0MzsgKiBib3RoIG9mIHdoaWNoIGlwZ3JlX2NoYW5nZWxpbmsoKSBjYW4gY2hhbmdlLiBSZWNvbXB1dGUgaXQgdGhlIHdheVxuJiM0MzsgKiBfX2dyZV90dW5uZWxfaW5pdCgpIGRvZXMsIHRoZW4gbGV0IGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlXG4mIzQzOyAqIGxlbmd0aHMgZnJvbSBpdC5cbiYjNDM7ICpcbiYjNDM7ICogQG9sZF9obGVuIGlzIG9ubHkgdXNlZCB0byB0ZWxsIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWUgc3RhbGUsIG5ldmVyIGFzIGFcbiYjNDM7ICogZGlmZmVyZW5jZSB0byBhcHBseSwgc28gaXQgY2FuIG5vdCBtYWtlIHRoZSBsZW5ndGhzIGRyaWZ0LiBJdCBtdXN0IGJlXG4mIzQzOyAqIHNhbXBsZWQgYmVmb3JlIGlwX3R1bm5lbF9lbmNhcF9zZXR1cCgpLCB3aGljaCBhbHJlYWR5IHB1Ymxpc2hlcyB0aGUgbmV3XG4mIzQzOyAqIHR1bm5lbC1cdTAwM2VobGVuIGZvciB1cy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGlwZ3JlX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSxcbiYjNDM7XHRcdFx0ICAgICAgaW50IG9sZF9obGVuKVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRpbnQgbGVuO1xuIFxuLVx0bGVuID0gdHVubmVsLVx1MDAzZXR1bl9obGVuO1xuIFx0dHVubmVsLVx1MDAzZXR1bl9obGVuID0gZ3JlX2NhbGNfaGxlbih0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4tXHRsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gLSBsZW47XG4tXHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IGxlbjtcbi1cbi1cdGlmIChkZXYtXHUwMDNlaGVhZGVyX29wcylcbi1cdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOz0gbGVuO1xuLVx0ZWxzZVxuLVx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICYjNDM7PSBsZW47XG4mIzQzO1x0dHVubmVsLVx1MDAzZWhsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gJiM0MzsgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW47XG4gXG4tXHRpZiAoc2V0X210dSlcbi1cdFx0V1JJVEVfT05DRShkZXYtXHUwMDNlbXR1LCBtYXhfdChpbnQsIGRldi1cdTAwM2VtdHUgLSBsZW4sIDY4KSk7XG4mIzQzO1x0LyogT25seSByZXNldCBhIE1UVSB0aGF0IHRoZSBoZWFkZXIgbGVuZ3RoIGp1c3QgaW52YWxpZGF0ZWQsIHNvIHRoYXRcbiYjNDM7XHQgKiBhIE1UVSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyIHN1cnZpdmVzIGFuIHVucmVsYXRlZCBjaGFuZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbiBcbiBcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpIHx8XG4gXHQgICAgKHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpIFx1MDAyNlx1MDAyNlxuQEAgLTg1Myw3ICYjNDM7ODU4LDcgQEAgc3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMub19mbGFncywgcC1cdTAwM2VvX2ZsYWdzKTtcbiBcbiBcdFx0aWYgKHN0cmNtcChkZXYtXHUwMDNlcnRubF9saW5rX29wcy1cdTAwM2VraW5kLCBcJiMzNDtlcnNwYW5cJiMzNDspKVxuLVx0XHRcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSk7XG4mIzQzO1x0XHRcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSwgdC1cdTAwM2VobGVuKTtcbiBcdH1cbiBcbiBcdGlfZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVx1MDAzZWlfZmxhZ3MpO1xuQEAgLTEyMzMsMTIgJiM0MzsxMjM4LDYgQEAgc3RhdGljIGludCBpcGdyZV9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHBhcm1zLVx1MDAzZWlwaC5mcmFnX29mZiA9IGh0b25zKElQX0RGKTtcbiBcdH1cbiBcbi1cdGlmIChkYXRhW0lGTEFfR1JFX0NPTExFQ1RfTUVUQURBVEFdKSB7XG4tXHRcdHQtXHUwMDNlY29sbGVjdF9tZCA9IHRydWU7XG4tXHRcdGlmIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSVBHUkUpXG4tXHRcdFx0ZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTk9ORTtcbi1cdH1cbi1cbiBcdGlmIChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pIHtcbiBcdFx0aWYgKG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKVxuIFx0XHQgIFx1MDAyNlx1MDAyNiAocGFybXMtXHUwMDNlaXBoLmZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9ERikpKVxuQEAgLTEyNDYsNiAmIzQzOzEyNDUsMTMgQEAgc3RhdGljIGludCBpcGdyZV9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHQtXHUwMDNlaWdub3JlX2RmID0gISFubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSk7XG4gXHR9XG4gXG4mIzQzO1x0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAZGV2IGFuZCBAdC4gKi9cbiYjNDM7XHRpZiAoZGF0YVtJRkxBX0dSRV9DT0xMRUNUX01FVEFEQVRBXSkge1xuJiM0MztcdFx0dC1cdTAwM2Vjb2xsZWN0X21kID0gdHJ1ZTtcbiYjNDM7XHRcdGlmIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSVBHUkUpXG4mIzQzO1x0XHRcdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChkYXRhW0lGTEFfR1JFX0ZXTUFSS10pXG4gXHRcdCpmd21hcmsgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0ZXTUFSS10pO1xuIFxuQEAgLTEyNTksNDAgJiM0MzsxMjY1LDUxIEBAIHN0YXRpYyBpbnQgZXJzcGFuX25ldGxpbmtfcGFybXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdF9fdTMyICpmd21hcmspXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0dTggZXJzcGFuX3ZlciA9IHQtXHUwMDNlZXJzcGFuX3ZlcjtcbiYjNDM7XHR1MzIgaW5kZXggPSB0LVx1MDAzZWluZGV4O1xuJiM0MztcdHUxNiBod2lkID0gdC1cdTAwM2Vod2lkO1xuJiM0MztcdHU4IGRpciA9IHQtXHUwMDNlZGlyO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuIFx0aWYgKCFkYXRhKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xuIFxuIFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pIHtcbi1cdFx0dC1cdTAwM2VlcnNwYW5fdmVyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKTtcbiYjNDM7XHRcdGVyc3Bhbl92ZXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pO1xuIFxuLVx0XHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyIFx1MDAzZSAyKVxuJiM0MztcdFx0aWYgKGVyc3Bhbl92ZXIgXHUwMDNlIDIpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyID09IDEpIHtcbiYjNDM7XHRpZiAoZXJzcGFuX3ZlciA9PSAxKSB7XG4gXHRcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pIHtcbi1cdFx0XHR0LVx1MDAzZWluZGV4ID0gbmxhX2dldF91MzIoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSU5ERVhdKTtcbi1cdFx0XHRpZiAodC1cdTAwM2VpbmRleCBcdTAwMjYgfklOREVYX01BU0spXG4mIzQzO1x0XHRcdGluZGV4ID0gbmxhX2dldF91MzIoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSU5ERVhdKTtcbiYjNDM7XHRcdFx0aWYgKGluZGV4IFx1MDAyNiB+SU5ERVhfTUFTSylcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4tXHR9IGVsc2UgaWYgKHQtXHUwMDNlZXJzcGFuX3ZlciA9PSAyKSB7XG4mIzQzO1x0fSBlbHNlIGlmIChlcnNwYW5fdmVyID09IDIpIHtcbiBcdFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pIHtcbi1cdFx0XHR0LVx1MDAzZWRpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7XG4tXHRcdFx0aWYgKHQtXHUwMDNlZGlyIFx1MDAyNiB+KERJUl9NQVNLIFx1MDAzZVx1MDAzZSBESVJfT0ZGU0VUKSlcbiYjNDM7XHRcdFx0ZGlyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9ESVJdKTtcbiYjNDM7XHRcdFx0aWYgKGRpciBcdTAwMjYgfihESVJfTUFTSyBcdTAwM2VcdTAwM2UgRElSX09GRlNFVCkpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0XHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pIHtcbi1cdFx0XHR0LVx1MDAzZWh3aWQgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfR1JFX0VSU1BBTl9IV0lEXSk7XG4tXHRcdFx0aWYgKHQtXHUwMDNlaHdpZCBcdTAwMjYgfihIV0lEX01BU0sgXHUwMDNlXHUwMDNlIEhXSURfT0ZGU0VUKSlcbiYjNDM7XHRcdFx0aHdpZCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKTtcbiYjNDM7XHRcdFx0aWYgKGh3aWQgXHUwMDI2IH4oSFdJRF9NQVNLIFx1MDAzZVx1MDAzZSBIV0lEX09GRlNFVCkpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIEFsbCBhdHRyaWJ1dGVzIGhhdmUgYmVlbiB2YWxpZGF0ZWQsIHdlIGNhbiBjaGFuZ2UgQHQuICovXG4mIzQzO1x0dC1cdTAwM2VlcnNwYW5fdmVyID0gZXJzcGFuX3ZlcjtcbiYjNDM7XHR0LVx1MDAzZWluZGV4ID0gaW5kZXg7XG4mIzQzO1x0dC1cdTAwM2Vod2lkID0gaHdpZDtcbiYjNDM7XHR0LVx1MDAzZWRpciA9IGRpcjtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTM1MSwxOCAmIzQzOzEzNjgsNDMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBncmVfdGFwX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX2ZpbGxfbWV0YWRhdGFfZHN0XHQ9IGdyZV9maWxsX21ldGFkYXRhX2RzdCxcbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBlcnNwYW5fc2V0X2hsZW4oc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsKVxuJiM0Mzt7XG4mIzQzO1x0LyogVmVyc2lvbiAwIHVzZXMgYSA0LWJ5dGUgR1JFIGhlYWRlciwgb3RoZXIgdmVyc2lvbnMgdXNlIDggYnl0ZXMuICovXG4mIzQzO1x0dHVubmVsLVx1MDAzZXR1bl9obGVuID0gdHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIgPT0gMCA/IDQgOiA4O1xuJiM0MztcbiYjNDM7XHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2V0dW5faGxlbiAmIzQzOyB0dW5uZWwtXHUwMDNlZW5jYXBfaGxlbiAmIzQzO1xuJiM0MztcdFx0ICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQm90aCB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciBhbmQgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbVxuJiM0MzsgKiBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgYm90aCBmZWVkIHR1bm5lbC1cdTAwM2VobGVuLiBSZWNvbXB1dGUgaXQsIHRoZW4gbGV0XG4mIzQzOyAqIGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlIGxlbmd0aHMgZnJvbSBpdC5cbiYjNDM7ICpcbiYjNDM7ICogQXMgaW4gaXBncmVfbGlua191cGRhdGUoKSwgQG9sZF9obGVuIG9ubHkgdGVsbHMgd2hldGhlciB0aGUgTVRVIGJlY2FtZVxuJiM0MzsgKiBzdGFsZSBhbmQgbXVzdCBiZSBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2hcbiYjNDM7ICogcmVjb21wdXRlcyB0dW5uZWwtXHUwMDNlaGxlbiB3aXRob3V0IHRoZSBFUlNQQU4gcGFydC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGVyc3Bhbl9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXG4mIzQzO1x0XHRcdCAgICAgICBpbnQgb2xkX2hsZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRlcnNwYW5fc2V0X2hsZW4odHVubmVsKTtcbiYjNDM7XG4mIzQzO1x0LyogT25seSByZXNldCBhIE1UVSB0aGF0IHRoZSBoZWFkZXIgbGVuZ3RoIGp1c3QgaW52YWxpZGF0ZWQsIHNvIHRoYXRcbiYjNDM7XHQgKiBhIE1UVSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyIHN1cnZpdmVzIGFuIHVucmVsYXRlZCBjaGFuZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGVyc3Bhbl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4tXHRpZiAodHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIgPT0gMClcbi1cdFx0dHVubmVsLVx1MDAzZXR1bl9obGVuID0gNDsgLyogNC1ieXRlIEdSRSBoZHIuICovXG4tXHRlbHNlXG4tXHRcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IDg7IC8qIDgtYnl0ZSBHUkUgaGRyLiAqL1xuJiM0MztcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xuIFxuIFx0dHVubmVsLVx1MDAzZXBhcm1zLmlwaC5wcm90b2NvbCA9IElQUFJPVE9fR1JFO1xuLVx0dHVubmVsLVx1MDAzZWhsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gJiM0MzsgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gJiM0Mztcbi1cdFx0ICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyKTtcbiBcbiBcdGRldi1cdTAwM2VmZWF0dXJlc1x0XHR8PSBHUkVfRkVBVFVSRVM7XG4gXHRkZXYtXHUwMDNlaHdfZmVhdHVyZXNcdHw9IEdSRV9GRUFUVVJFUztcbkBAIC0xNDU5LDYgJiM0MzsxNTAxLDcgQEAgc3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XG4gXHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbiYjNDM7XHRpbnQgb2xkX2hsZW4gPSB0LVx1MDAzZWhsZW47XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cdTAwM2VuZXQpKVxuQEAgLTE0NzAsMTggJiM0MzsxNTEzLDI0IEBAIHN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFxuIFx0ZXJyID0gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBcdTAwMjZwLCBcdTAwMjZmd21hcmspO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gbGlua191cGRhdGU7XG4gXG4gXHRlcnIgPSBpcF90dW5uZWxfY2hhbmdlbGluayhkZXYsIHRiLCBcdTAwMjZwLCBmd21hcmspO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gbGlua191cGRhdGU7XG4gXG4gXHRpcF90dW5uZWxfZmxhZ3NfY29weSh0LVx1MDAzZXBhcm1zLmlfZmxhZ3MsIHAuaV9mbGFncyk7XG4gXHRpcF90dW5uZWxfZmxhZ3NfY29weSh0LVx1MDAzZXBhcm1zLm9fZmxhZ3MsIHAub19mbGFncyk7XG4gXG4tXHRpcGdyZV9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0pO1xuJiM0MztsaW5rX3VwZGF0ZTpcbiYjNDM7XHQvKiBpcGdyZV9uZXdsaW5rX2VuY2FwX3NldHVwKCkgaGFzIHB1Ymxpc2hlZCBhIG5ldyBlbmNhcHN1bGF0aW9uIGV2ZW5cbiYjNDM7XHQgKiBpZiB0aGUgcmVzdCBvZiB0aGUgcmVxdWVzdCBmYWlsZWQsIHNvIHRoZSBsZW5ndGhzIG11c3QgYmUgcmVmcmVzaGVkXG4mIzQzO1x0ICogb24gdGhlIGVycm9yIHBhdGhzIGFzIHdlbGwuIFRoaXMgaGFzIHRvIGNvbWUgbGFzdCwgYmVjYXVzZVxuJiM0MztcdCAqIGlwZ3JlX2xpbmtfdXBkYXRlKCkgbmVlZHMgdGhlIGZsYWdzIGNvcGllZCBhYm92ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpcGdyZV9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbkBAIC0xNDkxLDYgJiM0MzsxNTQwLDcgQEAgc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xuIFx0X191MzIgZndtYXJrID0gdC1cdTAwM2Vmd21hcms7XG4mIzQzO1x0aW50IG9sZF9obGVuID0gdC1cdTAwM2VobGVuO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbkBAIC0xNTAxLDYgJiM0MzsxNTUxLDE2IEBAIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGVyciA9IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIFx1MDAyNnAsIFx1MDAyNmZ3bWFyayk7XG4mIzQzO1xuJiM0MztcdC8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24sIGFuZFxuJiM0MztcdCAqIGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKCkgYSBuZXcgRVJTUEFOIHZlcnNpb24sIGJvdGggb2Ygd2hpY2ggY2hhbmdlXG4mIzQzO1x0ICogdGhlIGhlYWRlciBsZW5ndGguIFJlZnJlc2ggdGhlIGxlbmd0aHMgYmVmb3JlIGxvb2tpbmcgYXQgQGVycjpcbiYjNDM7XHQgKiBlcnNwYW5feG1pdCgpIHNpemVzIGl0cyBwdXNoIGZyb20gdHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIsIGFuZCBib3RoIHRoaXNcbiYjNDM7XHQgKiBlcnJvciBwYXRoIGFuZCBpcF90dW5uZWxfY2hhbmdlbGluaygpIGJlbG93IGxlYXZlIHRoZSBuZXdcbiYjNDM7XHQgKiBlbmNhcHN1bGF0aW9uIGJlaGluZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnNwYW5fbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdLCBvbGRfaGxlbik7XG4mIzQzO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5pbmRleCBlNmJjZjAxNDExZDBiLi42YjkzYzFmZGE0OTQ4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5AQCAtMzI2LDYgJiM0MzszMjYsMjIgQEAgc3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBtdHU7XG4gfVxuIFxuJiM0MzsvKiBSZWNvbXB1dGUgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSBhbmQgZGV2LVx1MDAzZW10dSBhZnRlciB0dW5uZWwtXHUwMDNlaGxlbiBjaGFuZ2VkLlxuJiM0MzsgKlxuJiM0MzsgKiBCb3RoIGFyZSBkZXJpdmVkIGZyb20gdHVubmVsLVx1MDAzZWhsZW4sIHNvIHRoZXkgbXVzdCBiZSByZWNvbXB1dGVkIGZyb20gaXRcbiYjNDM7ICogcmF0aGVyIHRoYW4gYWRqdXN0ZWQgYnkgdGhlIGRpZmZlcmVuY2U6IGlwX3R1bm5lbF9iaW5kX2RldigpIGlzIGFsc29cbiYjNDM7ICogY2FsbGVkIGZyb20gbmRvX2luaXQoKSBhbmQgZnJvbSBpcF90dW5uZWxfdXBkYXRlKCksIGFuZCBhIGRyaXZlciBhZGRpbmdcbiYjNDM7ICogaXRzIG93biBkZWx0YSBvbiB0b3Agd291bGQgZG91YmxlIGNvdW50IGl0LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSlcbiYjNDM7e1xuJiM0MztcdGludCBtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldF9tdHUpXG4mIzQzO1x0XHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG10dSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Rocyk7XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwYXJtcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0RFTVVYJiMzNDssCiAgICAmIzM0O05FVF9JUF9UVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzJiMzNDssCiAgICAmIzM0O2lwZ3JlX2xpbmtfdXBkYXRlJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9saW5rX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtlcnNwYW5fc2V0X2hsZW4mIzM0OywKICAgICYjMzQ7aXBncmVfbmV0bGlua19wYXJtcyYjMzQ7LAogICAgJiMzNDtlcnNwYW5fbmV0bGlua19wYXJtcyYjMzQ7LAogICAgJiMzNDtpcGdyZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX3R1bm5lbF9jdGwmIzM0OywKICAgICYjMzQ7ZXJzcGFuX3R1bm5lbF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBhbmQgZml4ZXMgZGV2aWNlIGhlYWRlciBsZW5ndGgsIE1UVSwgYW5kIGhlYWRyb29tIHVwZGF0ZXMgaW4gdGhlIElQdjQgR1JFIGFuZCBFUlNQQU4gdHVubmVsaW5nIGRyaXZlcnMuIEl0IGludHJvZHVjZXMgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocygpIGFuZCB1cGRhdGVzIGxpbmsgY29uZmlndXJhdGlvbiBhbmQgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gaXBncmVfY2hhbmdlbGluaygpLCBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgaW9jdGwvbmV0bGluayBwYXJhbWV0ZXIgcGFyc2Vycy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBleGVyY2lzYWJsZSB2aWEgcnRubCBuZXRsaW5rIGFuZCB0dW5uZWwgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1OTA4YmQwNzQ1YzMwNGFiMTQwMjRlMzIyN2Q3NmVlMGI1NzE4ZjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxNTo0MjoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaAppbmRleCA3YzlhYWRmZThmZTM5Li5mZDAzOTZhYTUwMzk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oCkBAIC00MjksNiAmIzQzOzQyOSw3IEBAIGludCBpcF90dW5uZWxfbmV3bGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLAogCQkgICAgICBfX3UzMiBmd21hcmspOwogdm9pZCBpcF90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG5ldF9pZCk7CiYjNDM7dm9pZCBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSk7CiAKIGJvb2wgaXBfdHVubmVsX25ldGxpbmtfZW5jYXBfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLAogCQkJCSAgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmVuY2FwKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggODIzMDllZmQ0MTdlMC4uNDgwN2ZjNmQyZmQ4OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTc4OSwyMyAmIzQzOzc4OSwyOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KQomIzQzOy8qIHR1bm5lbC0mZ3Q7aGxlbiBkZXBlbmRzIG9uIHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncyBhbmQgb24gdHVubmVsLSZndDtlbmNhcF9obGVuLAomIzQzOyAqIGJvdGggb2Ygd2hpY2ggaXBncmVfY2hhbmdlbGluaygpIGNhbiBjaGFuZ2UuIFJlY29tcHV0ZSBpdCB0aGUgd2F5CiYjNDM7ICogX19ncmVfdHVubmVsX2luaXQoKSBkb2VzLCB0aGVuIGxldCBpcF90dW5uZWxfYmluZF9kZXYoKSBkZXJpdmUgdGhlIGRldmljZQomIzQzOyAqIGxlbmd0aHMgZnJvbSBpdC4KJiM0MzsgKgomIzQzOyAqIEBvbGRfaGxlbiBpcyBvbmx5IHVzZWQgdG8gdGVsbCB3aGV0aGVyIHRoZSBNVFUgYmVjYW1lIHN0YWxlLCBuZXZlciBhcyBhCiYjNDM7ICogZGlmZmVyZW5jZSB0byBhcHBseSwgc28gaXQgY2FuIG5vdCBtYWtlIHRoZSBsZW5ndGhzIGRyaWZ0LiBJdCBtdXN0IGJlCiYjNDM7ICogc2FtcGxlZCBiZWZvcmUgaXBfdHVubmVsX2VuY2FwX3NldHVwKCksIHdoaWNoIGFscmVhZHkgcHVibGlzaGVzIHRoZSBuZXcKJiM0MzsgKiB0dW5uZWwtJmd0O2hsZW4gZm9yIHVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlwZ3JlX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSwKJiM0MzsJCQkgICAgICBpbnQgb2xkX2hsZW4pCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgbGVuOwogCi0JbGVuID0gdHVubmVsLSZndDt0dW5faGxlbjsKIAl0dW5uZWwtJmd0O3R1bl9obGVuID0gZ3JlX2NhbGNfaGxlbih0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwotCWxlbiA9IHR1bm5lbC0mZ3Q7dHVuX2hsZW4gLSBsZW47Ci0JdHVubmVsLSZndDtobGVuID0gdHVubmVsLSZndDtobGVuICYjNDM7IGxlbjsKLQotCWlmIChkZXYtJmd0O2hlYWRlcl9vcHMpCi0JCWRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7PSBsZW47Ci0JZWxzZQotCQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSAmIzQzOz0gbGVuOwomIzQzOwl0dW5uZWwtJmd0O2hsZW4gPSB0dW5uZWwtJmd0O3R1bl9obGVuICYjNDM7IHR1bm5lbC0mZ3Q7ZW5jYXBfaGxlbjsKIAotCWlmIChzZXRfbXR1KQotCQlXUklURV9PTkNFKGRldi0mZ3Q7bXR1LCBtYXhfdChpbnQsIGRldi0mZ3Q7bXR1IC0gbGVuLCA2OCkpOwomIzQzOwkvKiBPbmx5IHJlc2V0IGEgTVRVIHRoYXQgdGhlIGhlYWRlciBsZW5ndGgganVzdCBpbnZhbGlkYXRlZCwgc28gdGhhdAomIzQzOwkgKiBhIE1UVSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyIHN1cnZpdmVzIGFuIHVucmVsYXRlZCBjaGFuZ2UuCiYjNDM7CSAqLwomIzQzOwlpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKGRldiwgc2V0X210dSAmYW1wOyZhbXA7IHR1bm5lbC0mZ3Q7aGxlbiAhPSBvbGRfaGxlbik7CiAKIAlpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncykgfHwKIAkgICAgKHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKSAmYW1wOyZhbXA7CkBAIC04NTMsNyAmIzQzOzg1OCw3IEBAIHN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlpcF90dW5uZWxfZmxhZ3NfY29weSh0LSZndDtwYXJtcy5vX2ZsYWdzLCBwLSZndDtvX2ZsYWdzKTsKIAogCQlpZiAoc3RyY21wKGRldi0mZ3Q7cnRubF9saW5rX29wcy0mZ3Q7a2luZCwgJiMzNDtlcnNwYW4mIzM0OykpCi0JCQlpcGdyZV9saW5rX3VwZGF0ZShkZXYsIHRydWUpOwomIzQzOwkJCWlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSwgdC0mZ3Q7aGxlbik7CiAJfQogCiAJaV9mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtJmd0O2lfZmxhZ3MpOwpAQCAtMTIzMywxMiAmIzQzOzEyMzgsNiBAQCBzdGF0aWMgaW50IGlwZ3JlX25ldGxpbmtfcGFybXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJcGFybXMtJmd0O2lwaC5mcmFnX29mZiA9IGh0b25zKElQX0RGKTsKIAl9CiAKLQlpZiAoZGF0YVtJRkxBX0dSRV9DT0xMRUNUX01FVEFEQVRBXSkgewotCQl0LSZndDtjb2xsZWN0X21kID0gdHJ1ZTsKLQkJaWYgKGRldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSVBHUkUpCi0JCQlkZXYtJmd0O3R5cGUgPSBBUlBIUkRfTk9ORTsKLQl9Ci0KIAlpZiAoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKSB7CiAJCWlmIChubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSkKIAkJICAmYW1wOyZhbXA7IChwYXJtcy0mZ3Q7aXBoLmZyYWdfb2ZmICZhbXA7IGh0b25zKElQX0RGKSkpCkBAIC0xMjQ2LDYgJiM0MzsxMjQ1LDEzIEBAIHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQl0LSZndDtpZ25vcmVfZGYgPSAhIW5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKTsKIAl9CiAKJiM0MzsJLyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAZGV2IGFuZCBAdC4gKi8KJiM0MzsJaWYgKGRhdGFbSUZMQV9HUkVfQ09MTEVDVF9NRVRBREFUQV0pIHsKJiM0MzsJCXQtJmd0O2NvbGxlY3RfbWQgPSB0cnVlOwomIzQzOwkJaWYgKGRldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSVBHUkUpCiYjNDM7CQkJZGV2LSZndDt0eXBlID0gQVJQSFJEX05PTkU7CiYjNDM7CX0KJiM0MzsKIAlpZiAoZGF0YVtJRkxBX0dSRV9GV01BUktdKQogCQkqZndtYXJrID0gbmxhX2dldF91MzIoZGF0YVtJRkxBX0dSRV9GV01BUktdKTsKIApAQCAtMTI1OSw0MCAmIzQzOzEyNjUsNTEgQEAgc3RhdGljIGludCBlcnNwYW5fbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCV9fdTMyICpmd21hcmspCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXU4IGVyc3Bhbl92ZXIgPSB0LSZndDtlcnNwYW5fdmVyOwomIzQzOwl1MzIgaW5kZXggPSB0LSZndDtpbmRleDsKJiM0MzsJdTE2IGh3aWQgPSB0LSZndDtod2lkOwomIzQzOwl1OCBkaXIgPSB0LSZndDtkaXI7CiAJaW50IGVycjsKIAotCWVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKIAlpZiAoIWRhdGEpCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7CiAKIAlpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSkgewotCQl0LSZndDtlcnNwYW5fdmVyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKTsKJiM0MzsJCWVyc3Bhbl92ZXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pOwogCi0JCWlmICh0LSZndDtlcnNwYW5fdmVyICZndDsgMikKJiM0MzsJCWlmIChlcnNwYW5fdmVyICZndDsgMikKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICh0LSZndDtlcnNwYW5fdmVyID09IDEpIHsKJiM0MzsJaWYgKGVyc3Bhbl92ZXIgPT0gMSkgewogCQlpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSU5ERVhdKSB7Ci0JCQl0LSZndDtpbmRleCA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0lOREVYXSk7Ci0JCQlpZiAodC0mZ3Q7aW5kZXggJmFtcDsgfklOREVYX01BU0spCiYjNDM7CQkJaW5kZXggPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pOwomIzQzOwkJCWlmIChpbmRleCAmYW1wOyB+SU5ERVhfTUFTSykKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCX0gZWxzZSBpZiAodC0mZ3Q7ZXJzcGFuX3ZlciA9PSAyKSB7CiYjNDM7CX0gZWxzZSBpZiAoZXJzcGFuX3ZlciA9PSAyKSB7CiAJCWlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9ESVJdKSB7Ci0JCQl0LSZndDtkaXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pOwotCQkJaWYgKHQtJmd0O2RpciAmYW1wOyB+KERJUl9NQVNLICZndDsmZ3Q7IERJUl9PRkZTRVQpKQomIzQzOwkJCWRpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7CiYjNDM7CQkJaWYgKGRpciAmYW1wOyB+KERJUl9NQVNLICZndDsmZ3Q7IERJUl9PRkZTRVQpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9IV0lEXSkgewotCQkJdC0mZ3Q7aHdpZCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKTsKLQkJCWlmICh0LSZndDtod2lkICZhbXA7IH4oSFdJRF9NQVNLICZndDsmZ3Q7IEhXSURfT0ZGU0VUKSkKJiM0MzsJCQlod2lkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pOwomIzQzOwkJCWlmIChod2lkICZhbXA7IH4oSFdJRF9NQVNLICZndDsmZ3Q7IEhXSURfT0ZGU0VUKSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAomIzQzOwllcnIgPSBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJLyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAdC4gKi8KJiM0MzsJdC0mZ3Q7ZXJzcGFuX3ZlciA9IGVyc3Bhbl92ZXI7CiYjNDM7CXQtJmd0O2luZGV4ID0gaW5kZXg7CiYjNDM7CXQtJmd0O2h3aWQgPSBod2lkOwomIzQzOwl0LSZndDtkaXIgPSBkaXI7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNTEsMTggJiM0MzsxMzY4LDQzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3JlX3RhcF9uZXRkZXZfb3BzID0gewogCS5uZG9fZmlsbF9tZXRhZGF0YV9kc3QJPSBncmVfZmlsbF9tZXRhZGF0YV9kc3QsCiB9OwogCiYjNDM7c3RhdGljIHZvaWQgZXJzcGFuX3NldF9obGVuKHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCkKJiM0Mzt7CiYjNDM7CS8qIFZlcnNpb24gMCB1c2VzIGEgNC1ieXRlIEdSRSBoZWFkZXIsIG90aGVyIHZlcnNpb25zIHVzZSA4IGJ5dGVzLiAqLwomIzQzOwl0dW5uZWwtJmd0O3R1bl9obGVuID0gdHVubmVsLSZndDtlcnNwYW5fdmVyID09IDAgPyA0IDogODsKJiM0MzsKJiM0MzsJdHVubmVsLSZndDtobGVuID0gdHVubmVsLSZndDt0dW5faGxlbiAmIzQzOyB0dW5uZWwtJmd0O2VuY2FwX2hsZW4gJiM0MzsKJiM0MzsJCSAgICAgICBlcnNwYW5faGRyX2xlbih0dW5uZWwtJmd0O2Vyc3Bhbl92ZXIpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBCb3RoIHR1bm5lbC0mZ3Q7ZXJzcGFuX3ZlciBhbmQgdHVubmVsLSZndDtlbmNhcF9obGVuIGNhbiBiZSBjaGFuZ2VkIGZyb20KJiM0MzsgKiBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgYm90aCBmZWVkIHR1bm5lbC0mZ3Q7aGxlbi4gUmVjb21wdXRlIGl0LCB0aGVuIGxldAomIzQzOyAqIGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlIGxlbmd0aHMgZnJvbSBpdC4KJiM0MzsgKgomIzQzOyAqIEFzIGluIGlwZ3JlX2xpbmtfdXBkYXRlKCksIEBvbGRfaGxlbiBvbmx5IHRlbGxzIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWUKJiM0MzsgKiBzdGFsZSBhbmQgbXVzdCBiZSBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2gKJiM0MzsgKiByZWNvbXB1dGVzIHR1bm5lbC0mZ3Q7aGxlbiB3aXRob3V0IHRoZSBFUlNQQU4gcGFydC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBlcnNwYW5fbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1LAomIzQzOwkJCSAgICAgICBpbnQgb2xkX2hsZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwomIzQzOwllcnNwYW5fc2V0X2hsZW4odHVubmVsKTsKJiM0MzsKJiM0MzsJLyogT25seSByZXNldCBhIE1UVSB0aGF0IHRoZSBoZWFkZXIgbGVuZ3RoIGp1c3QgaW52YWxpZGF0ZWQsIHNvIHRoYXQKJiM0MzsJICogYSBNVFUgY29uZmlndXJlZCBieSB0aGUgdXNlciBzdXJ2aXZlcyBhbiB1bnJlbGF0ZWQgY2hhbmdlLgomIzQzOwkgKi8KJiM0MzsJaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgJmFtcDsmYW1wOyB0dW5uZWwtJmd0O2hsZW4gIT0gb2xkX2hsZW4pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZXJzcGFuX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICh0dW5uZWwtJmd0O2Vyc3Bhbl92ZXIgPT0gMCkKLQkJdHVubmVsLSZndDt0dW5faGxlbiA9IDQ7IC8qIDQtYnl0ZSBHUkUgaGRyLiAqLwotCWVsc2UKLQkJdHVubmVsLSZndDt0dW5faGxlbiA9IDg7IC8qIDgtYnl0ZSBHUkUgaGRyLiAqLwomIzQzOwllcnNwYW5fc2V0X2hsZW4odHVubmVsKTsKIAogCXR1bm5lbC0mZ3Q7cGFybXMuaXBoLnByb3RvY29sID0gSVBQUk9UT19HUkU7Ci0JdHVubmVsLSZndDtobGVuID0gdHVubmVsLSZndDt0dW5faGxlbiAmIzQzOyB0dW5uZWwtJmd0O2VuY2FwX2hsZW4gJiM0MzsKLQkJICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC0mZ3Q7ZXJzcGFuX3Zlcik7CiAKIAlkZXYtJmd0O2ZlYXR1cmVzCQl8PSBHUkVfRkVBVFVSRVM7CiAJZGV2LSZndDtod19mZWF0dXJlcwl8PSBHUkVfRkVBVFVSRVM7CkBAIC0xNDU5LDYgJiM0MzsxNTAxLDcgQEAgc3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sCiAJc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDsKIAlfX3UzMiBmd21hcmsgPSB0LSZndDtmd21hcms7CiYjNDM7CWludCBvbGRfaGxlbiA9IHQtJmd0O2hsZW47CiAJaW50IGVycjsKIAogCWlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtJmd0O25ldCkpCkBAIC0xNDcwLDE4ICYjNDM7MTUxMywyNCBAQCBzdGF0aWMgaW50IGlwZ3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAogCWVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgJmFtcDtwLCAmYW1wO2Z3bWFyayk7CiAJaWYgKGVyciAmbHQ7IDApCi0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGxpbmtfdXBkYXRlOwogCiAJZXJyID0gaXBfdHVubmVsX2NoYW5nZWxpbmsoZGV2LCB0YiwgJmFtcDtwLCBmd21hcmspOwogCWlmIChlcnIgJmx0OyAwKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBsaW5rX3VwZGF0ZTsKIAogCWlwX3R1bm5lbF9mbGFnc19jb3B5KHQtJmd0O3Bhcm1zLmlfZmxhZ3MsIHAuaV9mbGFncyk7CiAJaXBfdHVubmVsX2ZsYWdzX2NvcHkodC0mZ3Q7cGFybXMub19mbGFncywgcC5vX2ZsYWdzKTsKIAotCWlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSk7CiYjNDM7bGlua191cGRhdGU6CiYjNDM7CS8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24gZXZlbgomIzQzOwkgKiBpZiB0aGUgcmVzdCBvZiB0aGUgcmVxdWVzdCBmYWlsZWQsIHNvIHRoZSBsZW5ndGhzIG11c3QgYmUgcmVmcmVzaGVkCiYjNDM7CSAqIG9uIHRoZSBlcnJvciBwYXRocyBhcyB3ZWxsLiBUaGlzIGhhcyB0byBjb21lIGxhc3QsIGJlY2F1c2UKJiM0MzsJICogaXBncmVfbGlua191cGRhdGUoKSBuZWVkcyB0aGUgZmxhZ3MgY29waWVkIGFib3ZlLgomIzQzOwkgKi8KJiM0MzsJaXBncmVfbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdLCBvbGRfaGxlbik7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLApAQCAtMTQ5MSw2ICYjNDM7MTU0MCw3IEBAIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwOwogCV9fdTMyIGZ3bWFyayA9IHQtJmd0O2Z3bWFyazsKJiM0MzsJaW50IG9sZF9obGVuID0gdC0mZ3Q7aGxlbjsKIAlpbnQgZXJyOwogCiAJaWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC0mZ3Q7bmV0KSkKQEAgLTE1MDEsNiAmIzQzOzE1NTEsMTYgQEAgc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gZXJzcGFuX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgJmFtcDtwLCAmYW1wO2Z3bWFyayk7CiYjNDM7CiYjNDM7CS8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24sIGFuZAomIzQzOwkgKiBlcnNwYW5fbmV0bGlua19wYXJtcygpIGEgbmV3IEVSU1BBTiB2ZXJzaW9uLCBib3RoIG9mIHdoaWNoIGNoYW5nZQomIzQzOwkgKiB0aGUgaGVhZGVyIGxlbmd0aC4gUmVmcmVzaCB0aGUgbGVuZ3RocyBiZWZvcmUgbG9va2luZyBhdCBAZXJyOgomIzQzOwkgKiBlcnNwYW5feG1pdCgpIHNpemVzIGl0cyBwdXNoIGZyb20gdHVubmVsLSZndDtlcnNwYW5fdmVyLCBhbmQgYm90aCB0aGlzCiYjNDM7CSAqIGVycm9yIHBhdGggYW5kIGlwX3R1bm5lbF9jaGFuZ2VsaW5rKCkgYmVsb3cgbGVhdmUgdGhlIG5ldwomIzQzOwkgKiBlbmNhcHN1bGF0aW9uIGJlaGluZC4KJiM0MzsJICovCiYjNDM7CWVyc3Bhbl9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTsKJiM0MzsKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwppbmRleCBlNmJjZjAxNDExZDBiLi42YjkzYzFmZGE0OTQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwpAQCAtMzI2LDYgJiM0MzszMjYsMjIgQEAgc3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlyZXR1cm4gbXR1OwogfQogCiYjNDM7LyogUmVjb21wdXRlIGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tIGFuZCBkZXYtJmd0O210dSBhZnRlciB0dW5uZWwtJmd0O2hsZW4gY2hhbmdlZC4KJiM0MzsgKgomIzQzOyAqIEJvdGggYXJlIGRlcml2ZWQgZnJvbSB0dW5uZWwtJmd0O2hsZW4sIHNvIHRoZXkgbXVzdCBiZSByZWNvbXB1dGVkIGZyb20gaXQKJiM0MzsgKiByYXRoZXIgdGhhbiBhZGp1c3RlZCBieSB0aGUgZGlmZmVyZW5jZTogaXBfdHVubmVsX2JpbmRfZGV2KCkgaXMgYWxzbwomIzQzOyAqIGNhbGxlZCBmcm9tIG5kb19pbml0KCkgYW5kIGZyb20gaXBfdHVubmVsX3VwZGF0ZSgpLCBhbmQgYSBkcml2ZXIgYWRkaW5nCiYjNDM7ICogaXRzIG93biBkZWx0YSBvbiB0b3Agd291bGQgZG91YmxlIGNvdW50IGl0LgomIzQzOyAqLwomIzQzO3ZvaWQgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpCiYjNDM7ewomIzQzOwlpbnQgbXR1ID0gaXBfdHVubmVsX2JpbmRfZGV2KGRldik7CiYjNDM7CiYjNDM7CWlmIChzZXRfbXR1KQomIzQzOwkJV1JJVEVfT05DRShkZXYtJmd0O210dSwgbXR1KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Rocyk7CiYjNDM7CiBzdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqaXBfdHVubmVsX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSAgc3RydWN0IGlwX3R1bm5lbF9uZXQgKml0biwKIAkJCQkJICBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcGFybXMpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHRoZSB0YXNrIGlzIHRvIGFzc2VzcyB0aGlzIGtlcm5lbCBwYXRjaCBzZXJpZXMsIGFuZCBteSBleHBlcnRpc2UgaW1tZWRpYXRlbHkga2lja3MgaW4uIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSVB2NCBHUkUvRVJTUEFOIHR1bm5lbHMsIHNwZWNpZmljYWxseSBtb2RpZmljYXRpb25zIHRvIGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLCBgbmV0L2lwdjQvaXBfZ3JlLmNgLCBhbmQgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYC4gVGhlIGNoYW5nZXMgaW52b2x2ZSBhIG5ldyBmdW5jdGlvbiwgYGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHNgLCBhbmQgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgd2l0aGluIHRoZSBHUkUvRVJTUEFOIG5ldGxpbmsgY29uZmlndXJhdGlvbiBhbmQgTVRVL2hlYWRyb29tIGhhbmRsaW5nLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gIFdlJiMzOTtyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyBsaWtlIGBpcGdyZV9jaGFuZ2VsaW5rYCwgYGVyc3Bhbl9jaGFuZ2VsaW5rYCwgYGlwZ3JlX25ldGxpbmtfcGFybXNgLCBgZXJzcGFuX25ldGxpbmtfcGFybXNgLiAgVGhlc2UgYXJlIGNydWNpYWwgcGFydHMgb2YgdGhlIGtlcm5lbC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHJlYWNoYWJpbGl0eS4gSSBrbm93IHRoaXMgY29kZSBpcyBjb3JlIG5ldHdvcmtpbmcsIGRlYWxpbmcgd2l0aCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24sIGBSVE1fTkVXTElOS2AsIGBSVE1fU0VUTElOS2AgYW5kIGlvY3RsLCBhbGwgc3RhbmRhcmQgbWV0aG9kcyBmb3Igc2V0dGluZyB1cCBhbmQgY29udHJvbGxpbmcgbmV0d29yayB0dW5uZWxzLiBUaGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdlIHVzZSwgZXNwZWNpYWxseSBzeXprYWxsZXIsIHJvdXRpbmVseSBleGVyY2lzZXMgdGhlc2UgY29kZXBhdGhzLiBTeXprYWxsZXIgZnJlcXVlbnRseSBjcmVhdGVzIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMuCgpCYXNlZCBvbiB0aGUgY3JpdGVyaWEsIGl0JiMzOTtzIGNsZWFyIHRoaXMgcGF0Y2ggZmFsbHMgaW50byB0aGUgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGNhdGVnb3J5LiBXZSBoYXZlIG1vZGlmaWNhdGlvbnMgdG8gY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBhbmQgdGhlc2UgbmV0ZGV2aWNlcyBhcmUgYWNjZXNzaWJsZS4gV2Ugc2hvdWxkIGRlZmluaXRlbHkgZnV6eiB0aGlzIGFyZWEuCgpOZXh0LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMsIHRvIGVuc3VyZSB0aGUgY29kZSBpcyBjb25maWd1cmVkIHByb3Blcmx5IHVzaW5nIGBncmVwcGVyYCB0byBmaW5kIHRoZSByZWxldmFudCBNYWtlZmlsZSBlbnRyaWVzLiBJdCYjMzk7cyBhIHF1aWNrIHNhbml0eSBjaGVjayBidXQgaW1wb3J0YW50IHRvIGF2b2lkIGJsaW5kIGFsbGV5cy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoYXQgYGlwX2dyZS5vYCBhbmQgYGlwX3R1bm5lbC5vYCBhcmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9ncmV8aXBfdHVubmVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE2Olx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTctXHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXG5uZXQvaXB2NC9NYWtlZmlsZS0xOC1cbm5ldC9pcHY0L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSAmIzQzOz0gaXBfdHVubmVsLm9cbm5ldC9pcHY0L01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjQub1xuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTI5PW9iai0kKENPTkZJR19ORVRfSVBHUkVfREVNVVgpICYjNDM7PSBncmUub1xubmV0L2lwdjQvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX05FVF9JUEdSRSkgJiM0Mzs9IGlwX2dyZS5vXG5uZXQvaXB2NC9NYWtlZmlsZS0zMS11ZHBfdHVubmVsLXkgOj0gdWRwX3R1bm5lbF9jb3JlLm8gdWRwX3R1bm5lbF9uaWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBUdW5uZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBJUEdSRSBhbmQgSVAgVHVubmVsaW5nLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHN0YXRlIG9mIGBDT05GSUdfTkVUX0lQR1JFYCBhbmQgYENPTkZJR19ORVRfSVBfVFVOTkVMYCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIGlzIHByb2JhYmx5IGEgcHJlbGltaW5hcnkgc3RlcCB0byB1bmRlcnN0YW5kaW5nLCBvciBtb2RpZnlpbmcsIHRoZSBhdmFpbGFibGUgbmV0d29yayB0dW5uZWxpbmcgY2FwYWJpbGl0aWVzIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZWxldmFudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldCB0byBtb2R1bGUsIHNpbmNlIHRoYXQgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSBob3cgbmV0d29yayB0cmFmZmljIGNhbiBiZSBoYW5kbGVkLiBJIHByb2JhYmx5IHdhbnQgdG8gdHJhY2sgZG93biBhbnkgZGVwZW5kZW5jaWVzIGFzIHdlbGwuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCB0aGlzIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGRlYnVnZ2luZyBhIG5ldHdvcmsgaXNzdWUsIG9yIHBlcmhhcHMgY29uZmlndXJpbmcgYSBuZXcgbmV0d29yayBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JUEdSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0xNjI9Y29uZmlnIE5FVF9JUElQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xNzktXG5uZXQvaXB2NC9LY29uZmlnOjE4MDpjb25maWcgTkVUX0lQR1JFX0RFTVVYXG5uZXQvaXB2NC9LY29uZmlnLTE4MS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgZGVtdWx0aXBsZXhlclwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MTg2PWNvbmZpZyBORVRfSVBfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xOTEtXG5uZXQvaXB2NC9LY29uZmlnOjE5Mjpjb25maWcgTkVUX0lQR1JFXG5uZXQvaXB2NC9LY29uZmlnLTE5My1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgdHVubmVscyBvdmVyIElQXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0yMDYtXG5uZXQvaXB2NC9LY29uZmlnOjIwNzpjb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O0lQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODcwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnOgoKKipEZWVwIERpdmUgaW50byBJUEdSRSBhbmQgSVAgVHVubmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBLY29uZmlnIG9wdGlvbnMgc3Vycm91bmRpbmcgYE5FVF9JUEdSRWAgYW5kIGBORVRfSVBfVFVOTkVMYC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdHVubmVsaW5nIGFuZCBlbmNhcHN1bGF0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIGludGVycGxheSBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMsIGFuZCBwb3NzaWJsZSBjb25mbGljdHMgYmV0d2VlbiB0aGVzZSB0d28uIEFyZSB0aGV5IG11dHVhbGx5IGV4Y2x1c2l2ZSwgb3IgZG9lcyBvbmUgYnVpbGQgdXBvbiB0aGUgb3RoZXI/IFdoYXQgY29uZmlndXJhdGlvbnMgcmVseSBvbiB0aGVzZT8gQXJlIHRoZXJlIGFueSBzdWJ0bGV0aWVzIGluIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgbmV0d29yayBmZWF0dXJlcz8gVGhpcyBncmFudWxhciBsZXZlbCBvZiBhbmFseXNpcyBpcyBrZXkgdG8gb3B0aW1pemluZyB0aGUgbmV0d29yayBzdGFjayBhbmQgZW5zdXJpbmcgcm9idXN0IHR1bm5lbCBzdXBwb3J0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSAmIzM0O3doeSYjMzQ7IGJlaGluZCB0aGUgZGVzaWduIGNob2ljZXMsIG5vdCBqdXN0IHRoZSAmIzM0O3doYXQmIzM0Oy4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRjb25maWcgTkVUX0lQR1JFX0RFTVVYXG4gMTgxOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogR1JFIGRlbXVsdGlwbGV4ZXJcJiMzNDtcbiAxODI6XHRcdGhlbHBcbiAxODM6XHRcdCAgVGhpcyBpcyBoZWxwZXIgbW9kdWxlIHRvIGRlbXVsdGlwbGV4IEdSRSBwYWNrZXRzIG9uIEdSRSB2ZXJzaW9uIGZpZWxkIGNyaXRlcmlhLlxuIDE4NDpcdFx0ICBSZXF1aXJlZCBieSBpcF9ncmUgYW5kIHBwdHAgbW9kdWxlcy5cbiAxODU6XHRcbiAxODY6XHRjb25maWcgTkVUX0lQX1RVTk5FTFxuIDE4NzpcdFx0dHJpc3RhdGVcbiAxODg6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAxODk6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAxOTA6XHRcdGRlZmF1bHQgblxuIDE5MTpcdFxuIDE5MjpcdGNvbmZpZyBORVRfSVBHUkVcbiAxOTM6XHRcdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgdHVubmVscyBvdmVyIElQXCYjMzQ7XG4gMTk0Olx0XHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxuIDE5NTpcdFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbiAxOTY6XHRcdGhlbHBcbiAxOTc6XHRcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cbiAxOTg6XHRcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxuIDE5OTpcdFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXG4gMjAwOlx0XHQgIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIGFuZCBhdCB0aGlzIHRpbWUgYWxsb3dzXG4gMjAxOlx0XHQgIGVuY2Fwc3VsYXRpbmcgb2YgSVB2NCBvciBJUHY2IG92ZXIgZXhpc3RpbmcgSVB2NCBpbmZyYXN0cnVjdHVyZS5cbiAyMDI6XHRcdCAgVGhpcyBkcml2ZXIgaXMgdXNlZnVsIGlmIHRoZSBvdGhlciBlbmRwb2ludCBpcyBhIENpc2NvIHJvdXRlcjogQ2lzY29cbiAyMDM6XHRcdCAgbGlrZXMgR1JFIG11Y2ggYmV0dGVyIHRoYW4gdGhlIG90aGVyIExpbnV4IHR1bm5lbGluZyBkcml2ZXIgKFwmIzM0O0lQXG4gMjA0Olx0XHQgIHR1bm5lbGluZ1wmIzM0OyBhYm92ZSkuIEluIGFkZGl0aW9uLCBHUkUgYWxsb3dzIG11bHRpY2FzdCByZWRpc3RyaWJ1dGlvblxuIDIwNTpcdFx0ICB0aHJvdWdoIHRoZSB0dW5uZWwuXG4gMjA2Olx0XG4gMjA3Olx0Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcbiAyMDg6XHRcdGJvb2wgXCYjMzQ7SVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFwmIzM0O1xuIDIwOTpcdFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1QgXHUwMDI2XHUwMDI2IE5FVF9JUEdSRVxuIDIxMDpcdFx0aGVscFxuIDIxMTpcdFx0ICBPbmUgYXBwbGljYXRpb24gb2YgR1JFL0lQIGlzIHRvIGNvbnN0cnVjdCBhIGJyb2FkY2FzdCBXQU4gKFdpZGUgQXJlYVxuIDIxMjpcdFx0ICBOZXR3b3JrKSwgd2hpY2ggbG9va3MgbGlrZSBhIG5vcm1hbCBFdGhlcm5ldCBMQU4gKExvY2FsIEFyZWFcbiAyMTM6XHRcdCAgTmV0d29yayksIGJ1dCBjYW4gYmUgZGlzdHJpYnV0ZWQgYWxsIG92ZXIgdGhlIEludGVybmV0LiBJZiB5b3Ugd2FudFxuIDIxNDpcdFx0ICB0byBkbyB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byBcJiMzNDtJUCBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0OyBiZWxvdy5cbiAyMTU6XHRcbiAyMTY6XHRjb25maWcgSVBfTVJPVVRFX0NPTU1PTlxuIDIxNzpcdFx0Ym9vbFxuIDIxODpcdFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgfHwgSVBWNl9NUk9VVEVcbiAyMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzI4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYENPTkZJR19ORVRfSVBHUkVgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQgZGVwZW5kcyBvbiBgQ09ORklHX05FVF9JUEdSRV9ERU1VWGAgYW5kIGF1dG9tYXRpY2FsbHkgcHVsbHMgaW4gYENPTkZJR19ORVRfSVBfVFVOTkVMYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBhbmQgbWFrZXMgc2Vuc2UgZm9yIEdSRS4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIgdGhhbiBqdXN0IHRoZSBiYXNpY3MuCgpNeSBmb2N1cyByaWdodCBub3cgaXMgRVJTUEFOIGFuZCBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgcmVsZXZhbnQgRVJTUEFOIHNldHRpbmdzIGFyZSBhY3RpdmUsIG9yIHRoYXQgRVJTUEFOIGZ1bmN0aW9uYWxpdHkgaXMgaW5oZXJlbnRseSBpbmNsdWRlZCBzb21ld2hlcmUsIGxpa2Ugd2l0aGluIGBDT05GSUdfTkVUX0lQR1JFYCBpdHNlbGYuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IEVSU1BBTiBzdXBwb3J0IGlzIGltcGxlbWVudGVkIGluIHRoaXMgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGxpa2VseSBjYW5kaWRhdGVzIHRoYXQgc2VlbSByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfLipFUlNQQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIEVSU1BBTiBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBzbyBFUlNQQU4mIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5IGlzIGJha2VkIGRpcmVjdGx5IGludG8gdGhlIGBuZXQvaXB2NC9pcF9ncmUuY2AgYW5kIGBpcDZfZ3JlLmNgIGZpbGVzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgbWUgYSBjbGVhciBzdGFydGluZyBwb2ludCBmb3IgZGl2aW5nIGludG8gdGhlIGNvZGUuIE5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIHRoZSBgaXBfZ3JlYCBtb2R1bGUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0PyBJJiMzOTttIHRoaW5raW5nIGNvbmZpZ3VyYXRpb24sIGVycm9yIGhhbmRsaW5nLCBtYXliZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBwb3RlbnRpYWxseSBleHRlbnNpb25zIHRoYXQgd2VyZSBidWlsdCBpbiBvdmVyIHRpbWUuIEtub3dpbmcgdGhlIG1vZHVsZSYjMzk7cyBjb21wbGV0ZSBmb290cHJpbnQgaXMgZXNzZW50aWFsIGZvciBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGZ1cnRoZXIgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIEVSU1BBTiYjMzk7cyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9ncmUtb2JqcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjYzCgkJCQkJCQlvdXRwdXQ6IDYwCgkJCQkJCQl0aG91Z2h0czogNTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBHUkUgYW5kIFR1bm5lbGluZyBNb2R1bGVzIGZvciBGb2N1c1N5bWJvbCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIGFuZCB0dW5uZWxpbmcgbW9kdWxlcyBhcmUgcHV0IHRvZ2V0aGVyLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhleSYjMzk7cmUgY29tcGlsZWQgYW5kIHdoYXQmIzM5O3MgY2hhbmdlZC4gVGhlIGBpcF9ncmUuY2AgY29kZSBpcyBjb21waWxlZCBpZiBgQ09ORklHX05FVF9JUEdSRWAgaXMgZW5hYmxlZCwgYW5kIGBpcF90dW5uZWwuY2AgZ2V0cyBidWlsdCB3aGVuIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAgaXMgc2V0LiAgSSBzZWUgdGhhdCBgQ09ORklHX05FVF9JUEdSRWAgZGVwZW5kcyBvbiBhbmQgc2VsZWN0cyBgQ09ORklHX05FVF9JUEdSRV9ERU1VWGAgYW5kIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAgd2hpY2ggdGVsbHMgbWUgdGhhdCBgTkVUX0lQR1JFYCBhbmQgYE5FVF9JUEdSRV9ERU1VWGAgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMuCgpOb3csIG15IG1haW4gZ29hbCBpcyB0byBpZGVudGlmeSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIGVudHJ5IHBvaW50cyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50IHRvIHRoZSBGb2N1c1N5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBhZGRlZCwgY2hhbmdlZCwgb3IgcmVtb3ZlZC4gSSYjMzk7dmUgZ290IGEgbGlzdCBmcm9tIHRoZSBkaWZmOgoKMS4gIGBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzYCDigJMgVGhpcyBpcyBhIG5ldywgZXhwb3J0ZWQgZnVuY3Rpb24gaW4gYGlwX3R1bm5lbC5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYXMgaXQgaW5kaWNhdGVzIG5ldyBleHRlcm5hbCBmdW5jdGlvbmFsaXR5LgoyLiAgYGlwZ3JlX2xpbmtfdXBkYXRlYCwgYGVyc3Bhbl9saW5rX3VwZGF0ZWAsIGBlcnNwYW5fc2V0X2hsZW5gLCAg4oCTIFRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGluIGBpcF9ncmUuY2AuCjMuICBgaXBncmVfY2hhbmdlbGlua2AsIGBlcnNwYW5fY2hhbmdlbGlua2Ag4oCTIFRoZXNlIGFyZSBzdGF0aWMsIGFuZCBjcnVjaWFsbHksIHRoZXkgYXJlIGBydG5sX2xpbmtfb3BzIC5jaGFuZ2VsaW5rYCBpbXBsZW1lbnRhdGlvbnMsIHdoaWNoIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSBvZiB0aGVpciBpbnRlZ3JhdGlvbiB3aXRoIG5ldGxpbmsuCjQuICBgaXBncmVfdHVubmVsX2N0bGAg4oCTIFRoaXMgaXMgYW5vdGhlciBzdGF0aWMgb25lLCBhIGBuZXRkZXZfb3BzIC5uZG9fc2lvY2RldnByaXZhdGUgLyAubmRvX2RvX2lvY3RsYCBmdW5jdGlvbiwgc2hvd2luZyB1cCBhcyBhIGNvbnRyb2wgcGF0aC4KNS4gIGBlcnNwYW5fdHVubmVsX2luaXRgIOKAkyBBbHNvIHN0YXRpYywgdXNlZCBhcyBlaXRoZXIgdGhlIGBydG5sX2xpbmtfb3BzIC5zZXR1cGAgb3IgYG5ldGRldl9vcHMgLm5kb19pbml0YCBmb3IgYSBuZXQgZGV2aWNlLgo2LiAgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYCwgYGlwZ3JlX25ldGxpbmtfcGFybXNgIOKAkyBUaGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG5ldGxpbmsgcGFyYW1ldGVyIGhhbmRsaW5nLgoKTm93IEkgbmVlZCB0byBnbyBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBzcGVjaWZpY2FsbHkgYXQgdGhlIHZpc2liaWxpdHkgb2Ygc3ltYm9scywgbWFraW5nIHN1cmUgSSBpZGVudGlmeSB3aGF0JiMzOTtzIG5vdCBpbmxpbmVkLCBhbmQgdGhlbiBJJiMzOTtsbCBzY3J1dGluaXplIHRoZSBsaW5lcyBpbiB0aGUgY29kZSBmb3IgYGlwZ3JlX2NoYW5nZWxpbmtgLCBgZXJzcGFuX2NoYW5nZWxpbmtgLCBgaXBncmVfdHVubmVsX2N0bGAsIGFuZCB0aGUgb3RoZXJzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIG92ZXJhbGwgR1JFL3R1bm5lbGluZyBmdW5jdGlvbmFsaXR5LCB3aGljaCBzaG91bGQgbGVhZCBtZSByaWdodCB0byB0aGUgRm9jdXNTeW1ib2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoaXBncmVfY2hhbmdlbGlua3xlcnNwYW5fY2hhbmdlbGlua3xpcGdyZV90dW5uZWxfY3RsfGVyc3Bhbl90dW5uZWxfaW5pdHxpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz03NjE9c3RhdGljIG5ldGRldl90eF90IGdyZV90YXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTc5Mi0vKiB0dW5uZWwtXHUwMDNlaGxlbiBkZXBlbmRzIG9uIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzIGFuZCBvbiB0dW5uZWwtXHUwMDNlZW5jYXBfaGxlbixcbm5ldC9pcHY0L2lwX2dyZS5jOjc5MzogKiBib3RoIG9mIHdoaWNoIGlwZ3JlX2NoYW5nZWxpbmsoKSBjYW4gY2hhbmdlLiBSZWNvbXB1dGUgaXQgdGhlIHdheVxubmV0L2lwdjQvaXBfZ3JlLmMtNzk0LSAqIF9fZ3JlX3R1bm5lbF9pbml0KCkgZG9lcywgdGhlbiBsZXQgaXBfdHVubmVsX2JpbmRfZGV2KCkgZGVyaXZlIHRoZSBkZXZpY2Vcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz04MDI9c3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTgxMi1cdCAqL1xubmV0L2lwdjQvaXBfZ3JlLmM6ODEzOlx0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTgxNC1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy04MjUtXG5uZXQvaXB2NC9pcF9ncmUuYzo4MjY6c3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXB2NC9pcF9ncmUuYy04MjctXHRcdFx0ICAgIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTk4OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTAwMC1cdC5uZG9fZ2V0X2lmbGlua1x0XHQ9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxubmV0L2lwdjQvaXBfZ3JlLmM6MTAwMTpcdC5uZG9fdHVubmVsX2N0bFx0XHQ9IGlwZ3JlX3R1bm5lbF9jdGwsXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDAyLX07XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTM3MT1zdGF0aWMgdm9pZCBlcnNwYW5fc2V0X2hsZW4oc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsKVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTEzODAtLyogQm90aCB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciBhbmQgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbVxubmV0L2lwdjQvaXBfZ3JlLmM6MTM4MTogKiBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgYm90aCBmZWVkIHR1bm5lbC1cdTAwM2VobGVuLiBSZWNvbXB1dGUgaXQsIHRoZW4gbGV0XG5uZXQvaXB2NC9pcF9ncmUuYy0xMzgyLSAqIGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlIGxlbmd0aHMgZnJvbSBpdC5cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMzg4PXN0YXRpYyB2b2lkIGVyc3Bhbl9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5Ny1cdCAqL1xubmV0L2lwdjQvaXBfZ3JlLmM6MTM5ODpcdGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoZGV2LCBzZXRfbXR1IFx1MDAyNlx1MDAyNiB0dW5uZWwtXHUwMDNlaGxlbiAhPSBvbGRfaGxlbik7XG5uZXQvaXB2NC9pcF9ncmUuYy0xMzk5LX1cbm5ldC9pcHY0L2lwX2dyZS5jLTE0MDAtXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDAxOnN0YXRpYyBpbnQgZXJzcGFuX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDAyLXtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZXJzcGFuX25ldGRldl9vcHMgPSB7XG5uZXQvaXB2NC9pcF9ncmUuYzoxNDE4Olx0Lm5kb19pbml0XHRcdD0gZXJzcGFuX3R1bm5lbF9pbml0LFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQxOS1cdC5uZG9fdW5pbml0XHRcdD0gaXBfdHVubmVsX3VuaW5pdCxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDc2PXN0YXRpYyBpbnQgZXJzcGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDk2LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ5NzpzdGF0aWMgaW50IGlwZ3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0OTgtXHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTM1LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTUzNjpzdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTM3LVx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE3Mzg9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwZ3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTc0NS1cdC5uZXdsaW5rXHQ9IGlwZ3JlX25ld2xpbmssXG5uZXQvaXB2NC9pcF9ncmUuYzoxNzQ2Olx0LmNoYW5nZWxpbmtcdD0gaXBncmVfY2hhbmdlbGluayxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3NDctXHQuZGVsbGlua1x0PSBpcF90dW5uZWxfZGVsbGluayxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNzUzPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcGdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTc2MC1cdC5uZXdsaW5rXHQ9IGlwZ3JlX25ld2xpbmssXG5uZXQvaXB2NC9pcF9ncmUuYzoxNzYxOlx0LmNoYW5nZWxpbmtcdD0gaXBncmVfY2hhbmdlbGluayxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3NjItXHQuZGVsbGlua1x0PSBpcF90dW5uZWxfZGVsbGluayxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNzY4PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBlcnNwYW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzc1LVx0Lm5ld2xpbmtcdD0gZXJzcGFuX25ld2xpbmssXG5uZXQvaXB2NC9pcF9ncmUuYzoxNzc2Olx0LmNoYW5nZWxpbmtcdD0gZXJzcGFuX2NoYW5nZWxpbmssXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzc3LVx0LmRlbGxpbmtcdD0gaXBfdHVubmVsX2RlbGxpbmssXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MjgwPXN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzM1LSAqL1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MzM2OnZvaWQgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zMzcte1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM0Mi19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzozNDM6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Rocyk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTc1CgkJCQkJCQlvdXRwdXQ6IDI0MAoJCQkJCQkJdGhvdWdodHM6IDkxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJUCBUdW5uZWwvR1JFL0VSU1BBTiBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBtb2RpZmllZCBhbmQgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnM6IGBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzYCwgYGlwZ3JlX2xpbmtfdXBkYXRlYCwgYGVyc3Bhbl9saW5rX3VwZGF0ZWAsIGBlcnNwYW5fc2V0X2hsZW5gLCBhbmQgdGhlIG1vZGlmaWVkIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCwgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYCwgYGlwZ3JlX2NoYW5nZWxpbmtgLCBgZXJzcGFuX2NoYW5nZWxpbmtgLCBgaXBncmVfdHVubmVsX2N0bGAsIGFuZCBgZXJzcGFuX3R1bm5lbF9pbml0YC4gVGhlc2UgYXJlIGFsbCBjbGVhcmx5IGZvY3VzZWQgb24gSVAgdHVubmVsaW5nLCBzcGVjaWZpY2FsbHkgR1JFIGFuZCBFUlNQQU4gbGluayBtYW5hZ2VtZW50LCBpbmNsdWRpbmcgTVRVIGFuZCBoZWFkcm9vbSBjYWxjdWxhdGlvbnMuIE5vbmUgb2YgdGhlc2UgYXJlIGNvcmUsIHViaXF1aXRvdXMgbmV0d29ya2luZyBmdW5jdGlvbnMuCgpOZXh0LCBJIHZlcmlmaWVkIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnM6IGBORVRfSVBHUkVgLCBgTkVUX0lQR1JFX0RFTVVYYCwgYW5kIGBORVRfSVBfVFVOTkVMYC4gVGhlIEtjb25maWcgY29uZmlybXMgdGhhdCBgTkVUX0lQR1JFYCBkZXBlbmRzIG9uIGFuZCBzZWxlY3RzIGBORVRfSVBHUkVfREVNVVhgLCBhbmQgYE5FVF9JUEdSRWAgc2VsZWN0cyBgTkVUX0lQX1RVTk5FTGAuIFRoZXJlZm9yZSwgZXhwbGljaXRseSBzcGVjaWZ5aW5nIGFsbCB0aHJlZSBpcyBhY2N1cmF0ZS4KClRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIEkgbGlzdGVkIGVhcmxpZXIsIHRob3NlIGRlZGljYXRlZCB0byBHUkUvRVJTUEFOLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlc2UgY2hhbmdlcyB0b3VjaCBvbiBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIElQIHR1bm5lbGluZyDigJMgdGhlIHZlcnkgY29yZSBvZiB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGJlaGF2aW9yLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGhlYWRlciBsZW5ndGggY2FsY3VsYXRpb25zLCBkZXZpY2UgaGVhZHJvb20sIE1UVSB1cGRhdGVzIHRyaWdnZXJlZCBieSBuZXRsaW5rIChSVE1fTkVXTElOSywgUlRNX1NFVExJTkspIGFuZCBpb2N0bCAoU0lPQ0NIR1RVTk5FTCwgZXRjLikgY29uZmlndXJhdGlvbnMsIGFsbCBjcml0aWNhbCB0byBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eS4gSSBzZWUgY2hhbmdlcyBpbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGlwZ3JlX2NoYW5nZWxpbmtgIGFuZCBgZXJzcGFuX2NoYW5nZWxpbmtgIHJlZ2FyZGluZyBsZW5ndGggdXBkYXRlcyBldmVuIGR1cmluZyBlcnJvciBwYXRocy4gSSBzZWUgY2hhbmdlcyBpbiB2YWxpZGF0aW9uIG9yZGVyIGluIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgYW5kIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc2AgZnVydGhlciBhbXBsaWZpZXMgdGhlIG5lZWQgZm9yIHRob3JvdWdoIGZ1enppbmcuIFRoZXNlIGFyZSBhbGwgZXhwb3NlZCB2aWEgbmV0bGluayBhbmQgaW9jdGwgaW50ZXJmYWNlcywgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhpcyBpcyBhIGNsZWFyIGNhc2UgZm9yIHZ1bG5lcmFiaWxpdHkgYW5hbHlzaXMuIEV2ZXJ5dGhpbmcgaXMgc29saWQuIEkmIzM5O20gcmVhZHkgdG8gbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OywKICAgICYjMzQ7TkVUX0lQX1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMmIzM0OywKICAgICYjMzQ7aXBncmVfbGlua191cGRhdGUmIzM0OywKICAgICYjMzQ7ZXJzcGFuX2xpbmtfdXBkYXRlJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9zZXRfaGxlbiYjMzQ7LAogICAgJiMzNDtpcGdyZV9uZXRsaW5rX3Bhcm1zJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9uZXRsaW5rX3Bhcm1zJiMzNDssCiAgICAmIzM0O2lwZ3JlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7ZXJzcGFuX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBncmVfdHVubmVsX2N0bCYjMzQ7LAogICAgJiMzNDtlcnNwYW5fdHVubmVsX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGFuZCBmaXhlcyBkZXZpY2UgaGVhZGVyIGxlbmd0aCwgTVRVLCBhbmQgaGVhZHJvb20gdXBkYXRlcyBpbiB0aGUgSVB2NCBHUkUgYW5kIEVSU1BBTiB0dW5uZWxpbmcgZHJpdmVycy4gSXQgaW50cm9kdWNlcyBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKCkgYW5kIHVwZGF0ZXMgbGluayBjb25maWd1cmF0aW9uIGFuZCBlcnJvci1oYW5kbGluZyBwYXRocyBpbiBpcGdyZV9jaGFuZ2VsaW5rKCksIGVyc3Bhbl9jaGFuZ2VsaW5rKCksIGFuZCBpb2N0bC9uZXRsaW5rIHBhcmFtZXRlciBwYXJzZXJzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGxvZ2ljIGV4ZXJjaXNhYmxlIHZpYSBydG5sIG5ldGxpbmsgYW5kIHR1bm5lbCBpb2N0bHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0RFTVVYJiMzNDssCiAgICAmIzM0O05FVF9JUF9UVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzJiMzNDssCiAgICAmIzM0O2lwZ3JlX2xpbmtfdXBkYXRlJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9saW5rX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtlcnNwYW5fc2V0X2hsZW4mIzM0OywKICAgICYjMzQ7aXBncmVfbmV0bGlua19wYXJtcyYjMzQ7LAogICAgJiMzNDtlcnNwYW5fbmV0bGlua19wYXJtcyYjMzQ7LAogICAgJiMzNDtpcGdyZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX3R1bm5lbF9jdGwmIzM0OywKICAgICYjMzQ7ZXJzcGFuX3R1bm5lbF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBhbmQgZml4ZXMgZGV2aWNlIGhlYWRlciBsZW5ndGgsIE1UVSwgYW5kIGhlYWRyb29tIHVwZGF0ZXMgaW4gdGhlIElQdjQgR1JFIGFuZCBFUlNQQU4gdHVubmVsaW5nIGRyaXZlcnMuIEl0IGludHJvZHVjZXMgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocygpIGFuZCB1cGRhdGVzIGxpbmsgY29uZmlndXJhdGlvbiBhbmQgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gaXBncmVfY2hhbmdlbGluaygpLCBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgaW9jdGwvbmV0bGluayBwYXJhbWV0ZXIgcGFyc2Vycy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBleGVyY2lzYWJsZSB2aWEgcnRubCBuZXRsaW5rIGFuZCB0dW5uZWwgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkanVzdHMgaGVhZGVyIGxlbmd0aCwgaGVhZHJvb20sIGFuZCBNVFUgY2FsY3VsYXRpb24gbG9naWMgZm9yIElQIEdSRSBhbmQgRVJTUEFOIHR1bm5lbCBkZXZpY2VzIChpbnRyb2R1Y2luZyBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzLCB1cGRhdGluZyBpcGdyZV9saW5rX3VwZGF0ZSBhbmQgZXJzcGFuX2xpbmtfdXBkYXRlLCBhbmQgZGVmZXJyaW5nIHR1bm5lbCBzdGF0ZSB1cGRhdGVzIHVudGlsIG5ldGxpbmsgdmFsaWRhdGlvbiBjb21wbGV0ZXMpLiBcblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCAoc3VjaCBhcyBvbGRfaGxlbiwgZXJzcGFuX3ZlciwgaW5kZXgsIGh3aWQsIGRpciwgYW5kIG10dSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIG9yIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBoZWFkcm9vbSBvciBNVFUgY2FsY3VsYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIGJ1ZmZlciBib3VuZGFyeS9vdmVyZmxvdyBvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gb3IgbmV0d29yayBzdGFjayBhc3NlcnRpb25zIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjU5MDhiZDA3NDVjMzA0YWIxNDAyNGUzMjI3ZDc2ZWUwYjU3MThmMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDE1OjQyOjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oCmluZGV4IDdjOWFhZGZlOGZlMzkuLmZkMDM5NmFhNTAzOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgKQEAgLTQyOSw2ICYjNDM7NDI5LDcgQEAgaW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsCiAJCSAgICAgIF9fdTMyIGZ3bWFyayk7CiB2b2lkIGlwX3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbmV0X2lkKTsKJiM0Mzt2b2lkIGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KTsKIAogYm9vbCBpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sCiAJCQkJICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZW5jYXApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCA4MjMwOWVmZDQxN2UwLi40ODA3ZmM2ZDJmZDg4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtNzg5LDIzICYjNDM7Nzg5LDI4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBncmVfdGFwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi1zdGF0aWMgdm9pZCBpcGdyZV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpCiYjNDM7LyogdHVubmVsLSZndDtobGVuIGRlcGVuZHMgb24gdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzIGFuZCBvbiB0dW5uZWwtJmd0O2VuY2FwX2hsZW4sCiYjNDM7ICogYm90aCBvZiB3aGljaCBpcGdyZV9jaGFuZ2VsaW5rKCkgY2FuIGNoYW5nZS4gUmVjb21wdXRlIGl0IHRoZSB3YXkKJiM0MzsgKiBfX2dyZV90dW5uZWxfaW5pdCgpIGRvZXMsIHRoZW4gbGV0IGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlCiYjNDM7ICogbGVuZ3RocyBmcm9tIGl0LgomIzQzOyAqCiYjNDM7ICogQG9sZF9obGVuIGlzIG9ubHkgdXNlZCB0byB0ZWxsIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWUgc3RhbGUsIG5ldmVyIGFzIGEKJiM0MzsgKiBkaWZmZXJlbmNlIHRvIGFwcGx5LCBzbyBpdCBjYW4gbm90IG1ha2UgdGhlIGxlbmd0aHMgZHJpZnQuIEl0IG11c3QgYmUKJiM0MzsgKiBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2ggYWxyZWFkeSBwdWJsaXNoZXMgdGhlIG5ldwomIzQzOyAqIHR1bm5lbC0mZ3Q7aGxlbiBmb3IgdXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1LAomIzQzOwkJCSAgICAgIGludCBvbGRfaGxlbikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBsZW47CiAKLQlsZW4gPSB0dW5uZWwtJmd0O3R1bl9obGVuOwogCXR1bm5lbC0mZ3Q7dHVuX2hsZW4gPSBncmVfY2FsY19obGVuKHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncyk7Ci0JbGVuID0gdHVubmVsLSZndDt0dW5faGxlbiAtIGxlbjsKLQl0dW5uZWwtJmd0O2hsZW4gPSB0dW5uZWwtJmd0O2hsZW4gJiM0MzsgbGVuOwotCi0JaWYgKGRldi0mZ3Q7aGVhZGVyX29wcykKLQkJZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0Mzs9IGxlbjsKLQllbHNlCi0JCWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tICYjNDM7PSBsZW47CiYjNDM7CXR1bm5lbC0mZ3Q7aGxlbiA9IHR1bm5lbC0mZ3Q7dHVuX2hsZW4gJiM0MzsgdHVubmVsLSZndDtlbmNhcF9obGVuOwogCi0JaWYgKHNldF9tdHUpCi0JCVdSSVRFX09OQ0UoZGV2LSZndDttdHUsIG1heF90KGludCwgZGV2LSZndDttdHUgLSBsZW4sIDY4KSk7CiYjNDM7CS8qIE9ubHkgcmVzZXQgYSBNVFUgdGhhdCB0aGUgaGVhZGVyIGxlbmd0aCBqdXN0IGludmFsaWRhdGVkLCBzbyB0aGF0CiYjNDM7CSAqIGEgTVRVIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIgc3Vydml2ZXMgYW4gdW5yZWxhdGVkIGNoYW5nZS4KJiM0MzsJICovCiYjNDM7CWlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoZGV2LCBzZXRfbXR1ICZhbXA7JmFtcDsgdHVubmVsLSZndDtobGVuICE9IG9sZF9obGVuKTsKIAogCWlmICh0ZXN0X2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKSB8fAogCSAgICAodGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpICZhbXA7JmFtcDsKQEAgLTg1Myw3ICYjNDM7ODU4LDcgQEAgc3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCWlwX3R1bm5lbF9mbGFnc19jb3B5KHQtJmd0O3Bhcm1zLm9fZmxhZ3MsIHAtJmd0O29fZmxhZ3MpOwogCiAJCWlmIChzdHJjbXAoZGV2LSZndDtydG5sX2xpbmtfb3BzLSZndDtraW5kLCAmIzM0O2Vyc3BhbiYjMzQ7KSkKLQkJCWlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSk7CiYjNDM7CQkJaXBncmVfbGlua191cGRhdGUoZGV2LCB0cnVlLCB0LSZndDtobGVuKTsKIAl9CiAKIAlpX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC0mZ3Q7aV9mbGFncyk7CkBAIC0xMjMzLDEyICYjNDM7MTIzOCw2IEBAIHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlwYXJtcy0mZ3Q7aXBoLmZyYWdfb2ZmID0gaHRvbnMoSVBfREYpOwogCX0KIAotCWlmIChkYXRhW0lGTEFfR1JFX0NPTExFQ1RfTUVUQURBVEFdKSB7Ci0JCXQtJmd0O2NvbGxlY3RfbWQgPSB0cnVlOwotCQlpZiAoZGV2LSZndDt0eXBlID09IEFSUEhSRF9JUEdSRSkKLQkJCWRldi0mZ3Q7dHlwZSA9IEFSUEhSRF9OT05FOwotCX0KLQogCWlmIChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pIHsKIAkJaWYgKG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKQogCQkgICZhbXA7JmFtcDsgKHBhcm1zLSZndDtpcGguZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfREYpKSkKQEAgLTEyNDYsNiAmIzQzOzEyNDUsMTMgQEAgc3RhdGljIGludCBpcGdyZV9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXQtJmd0O2lnbm9yZV9kZiA9ICEhbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pOwogCX0KIAomIzQzOwkvKiBBbGwgYXR0cmlidXRlcyBoYXZlIGJlZW4gdmFsaWRhdGVkLCB3ZSBjYW4gY2hhbmdlIEBkZXYgYW5kIEB0LiAqLwomIzQzOwlpZiAoZGF0YVtJRkxBX0dSRV9DT0xMRUNUX01FVEFEQVRBXSkgewomIzQzOwkJdC0mZ3Q7Y29sbGVjdF9tZCA9IHRydWU7CiYjNDM7CQlpZiAoZGV2LSZndDt0eXBlID09IEFSUEhSRF9JUEdSRSkKJiM0MzsJCQlkZXYtJmd0O3R5cGUgPSBBUlBIUkRfTk9ORTsKJiM0MzsJfQomIzQzOwogCWlmIChkYXRhW0lGTEFfR1JFX0ZXTUFSS10pCiAJCSpmd21hcmsgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0ZXTUFSS10pOwogCkBAIC0xMjU5LDQwICYjNDM7MTI2NSw1MSBAQCBzdGF0aWMgaW50IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJX191MzIgKmZ3bWFyaykKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJdTggZXJzcGFuX3ZlciA9IHQtJmd0O2Vyc3Bhbl92ZXI7CiYjNDM7CXUzMiBpbmRleCA9IHQtJmd0O2luZGV4OwomIzQzOwl1MTYgaHdpZCA9IHQtJmd0O2h3aWQ7CiYjNDM7CXU4IGRpciA9IHQtJmd0O2RpcjsKIAlpbnQgZXJyOwogCi0JZXJyID0gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBwYXJtcywgZndtYXJrKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwogCWlmICghZGF0YSkKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBwYXJtcywgZndtYXJrKTsKIAogCWlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKSB7Ci0JCXQtJmd0O2Vyc3Bhbl92ZXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pOwomIzQzOwkJZXJzcGFuX3ZlciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSk7CiAKLQkJaWYgKHQtJmd0O2Vyc3Bhbl92ZXIgJmd0OyAyKQomIzQzOwkJaWYgKGVyc3Bhbl92ZXIgJmd0OyAyKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKHQtJmd0O2Vyc3Bhbl92ZXIgPT0gMSkgewomIzQzOwlpZiAoZXJzcGFuX3ZlciA9PSAxKSB7CiAJCWlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pIHsKLQkJCXQtJmd0O2luZGV4ID0gbmxhX2dldF91MzIoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSU5ERVhdKTsKLQkJCWlmICh0LSZndDtpbmRleCAmYW1wOyB+SU5ERVhfTUFTSykKJiM0MzsJCQlpbmRleCA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0lOREVYXSk7CiYjNDM7CQkJaWYgKGluZGV4ICZhbXA7IH5JTkRFWF9NQVNLKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JfSBlbHNlIGlmICh0LSZndDtlcnNwYW5fdmVyID09IDIpIHsKJiM0MzsJfSBlbHNlIGlmIChlcnNwYW5fdmVyID09IDIpIHsKIAkJaWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pIHsKLQkJCXQtJmd0O2RpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7Ci0JCQlpZiAodC0mZ3Q7ZGlyICZhbXA7IH4oRElSX01BU0sgJmd0OyZndDsgRElSX09GRlNFVCkpCiYjNDM7CQkJZGlyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9ESVJdKTsKJiM0MzsJCQlpZiAoZGlyICZhbXA7IH4oRElSX01BU0sgJmd0OyZndDsgRElSX09GRlNFVCkpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKSB7Ci0JCQl0LSZndDtod2lkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pOwotCQkJaWYgKHQtJmd0O2h3aWQgJmFtcDsgfihIV0lEX01BU0sgJmd0OyZndDsgSFdJRF9PRkZTRVQpKQomIzQzOwkJCWh3aWQgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfR1JFX0VSU1BBTl9IV0lEXSk7CiYjNDM7CQkJaWYgKGh3aWQgJmFtcDsgfihIV0lEX01BU0sgJmd0OyZndDsgSFdJRF9PRkZTRVQpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCiYjNDM7CWVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwkvKiBBbGwgYXR0cmlidXRlcyBoYXZlIGJlZW4gdmFsaWRhdGVkLCB3ZSBjYW4gY2hhbmdlIEB0LiAqLwomIzQzOwl0LSZndDtlcnNwYW5fdmVyID0gZXJzcGFuX3ZlcjsKJiM0MzsJdC0mZ3Q7aW5kZXggPSBpbmRleDsKJiM0MzsJdC0mZ3Q7aHdpZCA9IGh3aWQ7CiYjNDM7CXQtJmd0O2RpciA9IGRpcjsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM1MSwxOCAmIzQzOzEzNjgsNDMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBncmVfdGFwX25ldGRldl9vcHMgPSB7CiAJLm5kb19maWxsX21ldGFkYXRhX2RzdAk9IGdyZV9maWxsX21ldGFkYXRhX2RzdCwKIH07CiAKJiM0MztzdGF0aWMgdm9pZCBlcnNwYW5fc2V0X2hsZW4oc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsKQomIzQzO3sKJiM0MzsJLyogVmVyc2lvbiAwIHVzZXMgYSA0LWJ5dGUgR1JFIGhlYWRlciwgb3RoZXIgdmVyc2lvbnMgdXNlIDggYnl0ZXMuICovCiYjNDM7CXR1bm5lbC0mZ3Q7dHVuX2hsZW4gPSB0dW5uZWwtJmd0O2Vyc3Bhbl92ZXIgPT0gMCA/IDQgOiA4OwomIzQzOwomIzQzOwl0dW5uZWwtJmd0O2hsZW4gPSB0dW5uZWwtJmd0O3R1bl9obGVuICYjNDM7IHR1bm5lbC0mZ3Q7ZW5jYXBfaGxlbiAmIzQzOwomIzQzOwkJICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC0mZ3Q7ZXJzcGFuX3Zlcik7CiYjNDM7fQomIzQzOwomIzQzOy8qIEJvdGggdHVubmVsLSZndDtlcnNwYW5fdmVyIGFuZCB0dW5uZWwtJmd0O2VuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbQomIzQzOyAqIGVyc3Bhbl9jaGFuZ2VsaW5rKCksIGFuZCBib3RoIGZlZWQgdHVubmVsLSZndDtobGVuLiBSZWNvbXB1dGUgaXQsIHRoZW4gbGV0CiYjNDM7ICogaXBfdHVubmVsX2JpbmRfZGV2KCkgZGVyaXZlIHRoZSBkZXZpY2UgbGVuZ3RocyBmcm9tIGl0LgomIzQzOyAqCiYjNDM7ICogQXMgaW4gaXBncmVfbGlua191cGRhdGUoKSwgQG9sZF9obGVuIG9ubHkgdGVsbHMgd2hldGhlciB0aGUgTVRVIGJlY2FtZQomIzQzOyAqIHN0YWxlIGFuZCBtdXN0IGJlIHNhbXBsZWQgYmVmb3JlIGlwX3R1bm5lbF9lbmNhcF9zZXR1cCgpLCB3aGljaAomIzQzOyAqIHJlY29tcHV0ZXMgdHVubmVsLSZndDtobGVuIHdpdGhvdXQgdGhlIEVSU1BBTiBwYXJ0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGVyc3Bhbl9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsCiYjNDM7CQkJICAgICAgIGludCBvbGRfaGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpOwomIzQzOwomIzQzOwkvKiBPbmx5IHJlc2V0IGEgTVRVIHRoYXQgdGhlIGhlYWRlciBsZW5ndGgganVzdCBpbnZhbGlkYXRlZCwgc28gdGhhdAomIzQzOwkgKiBhIE1UVSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyIHN1cnZpdmVzIGFuIHVucmVsYXRlZCBjaGFuZ2UuCiYjNDM7CSAqLwomIzQzOwlpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKGRldiwgc2V0X210dSAmYW1wOyZhbXA7IHR1bm5lbC0mZ3Q7aGxlbiAhPSBvbGRfaGxlbik7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBlcnNwYW5fdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKHR1bm5lbC0mZ3Q7ZXJzcGFuX3ZlciA9PSAwKQotCQl0dW5uZWwtJmd0O3R1bl9obGVuID0gNDsgLyogNC1ieXRlIEdSRSBoZHIuICovCi0JZWxzZQotCQl0dW5uZWwtJmd0O3R1bl9obGVuID0gODsgLyogOC1ieXRlIEdSRSBoZHIuICovCiYjNDM7CWVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpOwogCiAJdHVubmVsLSZndDtwYXJtcy5pcGgucHJvdG9jb2wgPSBJUFBST1RPX0dSRTsKLQl0dW5uZWwtJmd0O2hsZW4gPSB0dW5uZWwtJmd0O3R1bl9obGVuICYjNDM7IHR1bm5lbC0mZ3Q7ZW5jYXBfaGxlbiAmIzQzOwotCQkgICAgICAgZXJzcGFuX2hkcl9sZW4odHVubmVsLSZndDtlcnNwYW5fdmVyKTsKIAogCWRldi0mZ3Q7ZmVhdHVyZXMJCXw9IEdSRV9GRUFUVVJFUzsKIAlkZXYtJmd0O2h3X2ZlYXR1cmVzCXw9IEdSRV9GRUFUVVJFUzsKQEAgLTE0NTksNiAmIzQzOzE1MDEsNyBAQCBzdGF0aWMgaW50IGlwZ3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwOwogCV9fdTMyIGZ3bWFyayA9IHQtJmd0O2Z3bWFyazsKJiM0MzsJaW50IG9sZF9obGVuID0gdC0mZ3Q7aGxlbjsKIAlpbnQgZXJyOwogCiAJaWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC0mZ3Q7bmV0KSkKQEAgLTE0NzAsMTggJiM0MzsxNTEzLDI0IEBAIHN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCiAJZXJyID0gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCAmYW1wO3AsICZhbXA7ZndtYXJrKTsKIAlpZiAoZXJyICZsdDsgMCkKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gbGlua191cGRhdGU7CiAKIAllcnIgPSBpcF90dW5uZWxfY2hhbmdlbGluayhkZXYsIHRiLCAmYW1wO3AsIGZ3bWFyayk7CiAJaWYgKGVyciAmbHQ7IDApCi0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGxpbmtfdXBkYXRlOwogCiAJaXBfdHVubmVsX2ZsYWdzX2NvcHkodC0mZ3Q7cGFybXMuaV9mbGFncywgcC5pX2ZsYWdzKTsKIAlpcF90dW5uZWxfZmxhZ3NfY29weSh0LSZndDtwYXJtcy5vX2ZsYWdzLCBwLm9fZmxhZ3MpOwogCi0JaXBncmVfbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdKTsKJiM0MztsaW5rX3VwZGF0ZToKJiM0MzsJLyogaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cCgpIGhhcyBwdWJsaXNoZWQgYSBuZXcgZW5jYXBzdWxhdGlvbiBldmVuCiYjNDM7CSAqIGlmIHRoZSByZXN0IG9mIHRoZSByZXF1ZXN0IGZhaWxlZCwgc28gdGhlIGxlbmd0aHMgbXVzdCBiZSByZWZyZXNoZWQKJiM0MzsJICogb24gdGhlIGVycm9yIHBhdGhzIGFzIHdlbGwuIFRoaXMgaGFzIHRvIGNvbWUgbGFzdCwgYmVjYXVzZQomIzQzOwkgKiBpcGdyZV9saW5rX3VwZGF0ZSgpIG5lZWRzIHRoZSBmbGFncyBjb3BpZWQgYWJvdmUuCiYjNDM7CSAqLwomIzQzOwlpcGdyZV9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sCkBAIC0xNDkxLDYgJiM0MzsxNTQwLDcgQEAgc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCXN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7CiAJX191MzIgZndtYXJrID0gdC0mZ3Q7ZndtYXJrOwomIzQzOwlpbnQgb2xkX2hsZW4gPSB0LSZndDtobGVuOwogCWludCBlcnI7CiAKIAlpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LSZndDtuZXQpKQpAQCAtMTUwMSw2ICYjNDM7MTU1MSwxNiBAQCBzdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sCiAJCXJldHVybiBlcnI7CiAKIAllcnIgPSBlcnNwYW5fbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCAmYW1wO3AsICZhbXA7ZndtYXJrKTsKJiM0MzsKJiM0MzsJLyogaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cCgpIGhhcyBwdWJsaXNoZWQgYSBuZXcgZW5jYXBzdWxhdGlvbiwgYW5kCiYjNDM7CSAqIGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKCkgYSBuZXcgRVJTUEFOIHZlcnNpb24sIGJvdGggb2Ygd2hpY2ggY2hhbmdlCiYjNDM7CSAqIHRoZSBoZWFkZXIgbGVuZ3RoLiBSZWZyZXNoIHRoZSBsZW5ndGhzIGJlZm9yZSBsb29raW5nIGF0IEBlcnI6CiYjNDM7CSAqIGVyc3Bhbl94bWl0KCkgc2l6ZXMgaXRzIHB1c2ggZnJvbSB0dW5uZWwtJmd0O2Vyc3Bhbl92ZXIsIGFuZCBib3RoIHRoaXMKJiM0MzsJICogZXJyb3IgcGF0aCBhbmQgaXBfdHVubmVsX2NoYW5nZWxpbmsoKSBiZWxvdyBsZWF2ZSB0aGUgbmV3CiYjNDM7CSAqIGVuY2Fwc3VsYXRpb24gYmVoaW5kLgomIzQzOwkgKi8KJiM0MzsJZXJzcGFuX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSwgb2xkX2hsZW4pOwomIzQzOwogCWlmIChlcnIgJmx0OyAwKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jCmluZGV4IGU2YmNmMDE0MTFkMGIuLjZiOTNjMWZkYTQ5NDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jCkBAIC0zMjYsNiAmIzQzOzMyNiwyMiBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXJldHVybiBtdHU7CiB9CiAKJiM0MzsvKiBSZWNvbXB1dGUgZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gYW5kIGRldi0mZ3Q7bXR1IGFmdGVyIHR1bm5lbC0mZ3Q7aGxlbiBjaGFuZ2VkLgomIzQzOyAqCiYjNDM7ICogQm90aCBhcmUgZGVyaXZlZCBmcm9tIHR1bm5lbC0mZ3Q7aGxlbiwgc28gdGhleSBtdXN0IGJlIHJlY29tcHV0ZWQgZnJvbSBpdAomIzQzOyAqIHJhdGhlciB0aGFuIGFkanVzdGVkIGJ5IHRoZSBkaWZmZXJlbmNlOiBpcF90dW5uZWxfYmluZF9kZXYoKSBpcyBhbHNvCiYjNDM7ICogY2FsbGVkIGZyb20gbmRvX2luaXQoKSBhbmQgZnJvbSBpcF90dW5uZWxfdXBkYXRlKCksIGFuZCBhIGRyaXZlciBhZGRpbmcKJiM0MzsgKiBpdHMgb3duIGRlbHRhIG9uIHRvcCB3b3VsZCBkb3VibGUgY291bnQgaXQuCiYjNDM7ICovCiYjNDM7dm9pZCBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSkKJiM0Mzt7CiYjNDM7CWludCBtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHNldF9tdHUpCiYjNDM7CQlXUklURV9PTkNFKGRldi0mZ3Q7bXR1LCBtdHUpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKTsKJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICBzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuLAogCQkJCQkgIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwYXJtcykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBpbiB0aGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCYjMzk7cyBnb2luZyB0byBjYXVzZSB1cyBoZWFkYWNoZXMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMsIGFuZCB3aGV0aGVyIHdlIG5lZWQgdG8gZmlyZSB1cCBLTVNBTiBmb3IgYSBkZWVwIGRpdmUuIFRoZSBwYXRjaCBpdHNlbGYgaXMgbGFiZWxlZCBhcyAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldywmIzM0OyB3aGljaCB1c3VhbGx5IG1lYW5zIGl0IHdhcyBmbGFnZ2VkIGJ5IHN5emthbGxlci4KClRoZSBmaWxlcyBtb2RpZmllZCBhcmU6IGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLCBgbmV0L2lwdjQvaXBfZ3JlLmNgLCBhbmQgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYC4gT2theSwgdGhyZWUgZmlsZXMuIExldCYjMzk7cyBzdGFydCBieSBtZXRob2RpY2FsbHkgcmVhZGluZyB0aGUgY2hhbmdlcy4KCkxvb2tpbmcgYXQgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYCwgdGhlcmUmIzM5O3MgYSBmdW5jdGlvbiBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpYC4gSXQgY2FsbHMgYGlwX3R1bm5lbF9iaW5kX2RldihkZXYpYCBhbmQgc2V0cyBgZGV2LSZndDttdHVgIGlmIGBzZXRfbXR1YCBpcyB0cnVlLiBIbW0sIHRoYXQgYGlwX3R1bm5lbF9iaW5kX2RldmAgY2FsbCBsb29rcyBpbXBvcnRhbnQuIExldCYjMzk7cyBqdW1wIG92ZXIgYW5kIGluc3BlY3QgYGlwX3R1bm5lbF9iaW5kX2RldihkZXYpYCBpbiB0aGUgc2FtZSBmaWxlIHRvIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KHR1bm5lbC1cdTAwM2VuZXQsIFx1MDAyNmZsNCk7XG4gMzAxOlx0XG4gMzAyOlx0XHRcdGlmICghSVNfRVJSKHJ0KSkge1xuIDMwMzpcdFx0XHRcdHRkZXYgPSBydC1cdTAwM2Vkc3QuZGV2O1xuIDMwNDpcdFx0XHRcdGlwX3J0X3B1dChydCk7XG4gMzA1Olx0XHRcdH1cbiAzMDY6XHRcdFx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUilcbiAzMDc6XHRcdFx0XHRkZXYtXHUwMDNlZmxhZ3MgfD0gSUZGX1BPSU5UT1BPSU5UO1xuIDMwODpcdFxuIDMwOTpcdFx0XHRkc3RfY2FjaGVfcmVzZXQoXHUwMDI2dHVubmVsLVx1MDAzZWRzdF9jYWNoZSk7XG4gMzEwOlx0XHR9XG4gMzExOlx0XG4gMzEyOlx0XHRpZiAoIXRkZXYgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VwYXJtcy5saW5rKVxuIDMxMzpcdFx0XHR0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHR1bm5lbC1cdTAwM2VuZXQsIHR1bm5lbC1cdTAwM2VwYXJtcy5saW5rKTtcbiAzMTQ6XHRcbiAzMTU6XHRcdGlmICh0ZGV2KSB7XG4gMzE2Olx0XHRcdGhsZW4gPSB0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyB0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbTtcbiAzMTc6XHRcdFx0bXR1ID0gbWluKHRkZXYtXHUwMDNlbXR1LCBJUF9NQVhfTVRVKTtcbiAzMTg6XHRcdH1cbiAzMTk6XHRcbiAzMjA6XHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICYjNDM7IGhsZW4pO1xuIDMyMTpcdFx0bXR1IC09IHRfaGxlbiAmIzQzOyAoZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDApO1xuIDMyMjpcdFxuIDMyMzpcdFx0aWYgKG10dSBcdTAwM2MgSVBWNF9NSU5fTVRVKVxuIDMyNDpcdFx0XHRtdHUgPSBJUFY0X01JTl9NVFU7XG4gMzI1Olx0XG4gMzI2Olx0XHRyZXR1cm4gbXR1O1xuIDMyNzpcdH1cbiAzMjg6XHRcbiAzMjk6XHQvKiBSZWNvbXB1dGUgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSBhbmQgZGV2LVx1MDAzZW10dSBhZnRlciB0dW5uZWwtXHUwMDNlaGxlbiBjaGFuZ2VkLlxuIDMzMDpcdCAqXG4gMzMxOlx0ICogQm90aCBhcmUgZGVyaXZlZCBmcm9tIHR1bm5lbC1cdTAwM2VobGVuLCBzbyB0aGV5IG11c3QgYmUgcmVjb21wdXRlZCBmcm9tIGl0XG4gMzMyOlx0ICogcmF0aGVyIHRoYW4gYWRqdXN0ZWQgYnkgdGhlIGRpZmZlcmVuY2U6IGlwX3R1bm5lbF9iaW5kX2RldigpIGlzIGFsc29cbiAzMzM6XHQgKiBjYWxsZWQgZnJvbSBuZG9faW5pdCgpIGFuZCBmcm9tIGlwX3R1bm5lbF91cGRhdGUoKSwgYW5kIGEgZHJpdmVyIGFkZGluZ1xuIDMzNDpcdCAqIGl0cyBvd24gZGVsdGEgb24gdG9wIHdvdWxkIGRvdWJsZSBjb3VudCBpdC5cbiAzMzU6XHQgKi9cbiAzMzY6XHR2b2lkIGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KVxuIDMzNzpcdHtcbiAzMzg6XHRcdGludCBtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcbiAzMzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE5OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwX3R1bm5lbF9iaW5kX2RldmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgbGluZXMgMjcwLTMwMC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgcGFydGljdWxhciBjaHVuayBvZiB0aGUgY29kZS4gTGV0IG1lIHBhcnNlIHRoaXMgc2VjdGlvbiBjYXJlZnVsbHksIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbnMgYW5kIHRoZSBkYXRhIGZsb3cuIEhvcGVmdWxseSwgdGhpcyBzZWN0aW9uIGlzbiYjMzk7dCB0b28gb2J0dXNlLiBJIHN1c3BlY3QgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHRoZSBhY3R1YWwgYmluZGluZyBsb2dpYywgcHJvYmFibHkgaW5jb3Jwb3JhdGluZyBzb21lIGRldmljZS1zcGVjaWZpYyBhc3BlY3RzLCBvciBwZXJoYXBzIHNvbWUgc2VjdXJpdHkgY2hlY2tzLiBUaW1lIHRvIGZvY3VzIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyB0aGlzIHNlY3Rpb24gcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0XHRcdGdvdG8gZmFpbGVkX2ZyZWU7XG4gMjcxOlx0XG4gMjcyOlx0XHRyZXR1cm4gZGV2O1xuIDI3MzpcdFxuIDI3NDpcdGZhaWxlZF9mcmVlOlxuIDI3NTpcdFx0ZnJlZV9uZXRkZXYoZGV2KTtcbiAyNzY6XHRmYWlsZWQ6XG4gMjc3Olx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIDI3ODpcdH1cbiAyNzk6XHRcbiAyODA6XHRzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDI4MTpcdHtcbiAyODI6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICp0ZGV2ID0gTlVMTDtcbiAyODM6XHRcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gMjg0Olx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcbiAyODU6XHRcdGludCBobGVuID0gTExfTUFYX0hFQURFUjtcbiAyODY6XHRcdGludCBtdHUgPSBFVEhfREFUQV9MRU47XG4gMjg3Olx0XHRpbnQgdF9obGVuID0gdHVubmVsLVx1MDAzZWhsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG4gMjg4Olx0XG4gMjg5Olx0XHRpcGggPSBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoO1xuIDI5MDpcdFxuIDI5MTpcdFx0LyogR3Vlc3Mgb3V0cHV0IGRldmljZSB0byBjaG9vc2UgcmVhc29uYWJsZSBtdHUgYW5kIG5lZWRlZF9oZWFkcm9vbSAqL1xuIDI5MjpcdFx0aWYgKGlwaC1cdTAwM2VkYWRkcikge1xuIDI5MzpcdFx0XHRzdHJ1Y3QgZmxvd2k0IGZsNDtcbiAyOTQ6XHRcdFx0c3RydWN0IHJ0YWJsZSAqcnQ7XG4gMjk1Olx0XG4gMjk2Olx0XHRcdGlwX3R1bm5lbF9pbml0X2Zsb3coXHUwMDI2Zmw0LCBpcGgtXHUwMDNlcHJvdG9jb2wsIGlwaC1cdTAwM2VkYWRkcixcbiAyOTc6XHRcdFx0XHRcdCAgICBpcGgtXHUwMDNlc2FkZHIsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2tleSxcbiAyOTg6XHRcdFx0XHRcdCAgICBpcGgtXHUwMDNldG9zIFx1MDAyNiBJTkVUX0RTQ1BfTUFTSywgdHVubmVsLVx1MDAzZW5ldCxcbiAyOTk6XHRcdFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlcGFybXMubGluaywgdHVubmVsLVx1MDAzZWZ3bWFyaywgMCwgMCk7XG4gMzAwOlx0XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSh0dW5uZWwtXHUwMDNlbmV0LCBcdTAwMjZmbDQpO1xuIDMwMTpcdFxuIDMwMjpcdFx0XHRpZiAoIUlTX0VSUihydCkpIHtcbiAzMDM6XHRcdFx0XHR0ZGV2ID0gcnQtXHUwMDNlZHN0LmRldjtcbiAzMDQ6XHRcdFx0XHRpcF9ydF9wdXQocnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTEwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBmb2N1c2luZyBpbiBvbiB0aGUgY2hhbmdlcyB3aXRoaW4gYG5ldC9pcHY0L2lwX2dyZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gZ28gbGluZS1ieS1saW5lLCBjb21wYXJpbmcgdGhlIGRpZmYgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBnZXQgdGhlIGZ1bGwgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aHJvdWdoIHRoZSBjaGFuZ2VzIGFuZCBpbnRlcnByZXQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQwOlx0XHRpZiAoY21kID09IFNJT0NBRERUVU5ORUwgfHwgY21kID09IFNJT0NDSEdUVU5ORUwpIHtcbiA4NDE6XHRcdFx0aWYgKHAtXHUwMDNlaXBoLnZlcnNpb24gIT0gNCB8fCBwLVx1MDAzZWlwaC5wcm90b2NvbCAhPSBJUFBST1RPX0dSRSB8fFxuIDg0MjpcdFx0XHQgICAgcC1cdTAwM2VpcGguaWhsICE9IDUgfHwgKHAtXHUwMDNlaXBoLmZyYWdfb2ZmIFx1MDAyNiBodG9ucyh+SVBfREYpKSB8fFxuIDg0MzpcdFx0XHQgICAgKChpX2ZsYWdzIHwgb19mbGFncykgXHUwMDI2IChHUkVfVkVSU0lPTiB8IEdSRV9ST1VUSU5HKSkpXG4gODQ0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODQ1Olx0XHR9XG4gODQ2Olx0XG4gODQ3Olx0XHRncmVfZmxhZ3NfdG9fdG5sX2ZsYWdzKHAtXHUwMDNlaV9mbGFncywgaV9mbGFncyk7XG4gODQ4Olx0XHRncmVfZmxhZ3NfdG9fdG5sX2ZsYWdzKHAtXHUwMDNlb19mbGFncywgb19mbGFncyk7XG4gODQ5Olx0XG4gODUwOlx0XHRlcnIgPSBpcF90dW5uZWxfY3RsKGRldiwgcCwgY21kKTtcbiA4NTE6XHRcdGlmIChlcnIpXG4gODUyOlx0XHRcdHJldHVybiBlcnI7XG4gODUzOlx0XG4gODU0Olx0XHRpZiAoY21kID09IFNJT0NDSEdUVU5ORUwpIHtcbiA4NTU6XHRcdFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4gODU2Olx0XG4gODU3Olx0XHRcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMuaV9mbGFncywgcC1cdTAwM2VpX2ZsYWdzKTtcbiA4NTg6XHRcdFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLVx1MDAzZW9fZmxhZ3MpO1xuIDg1OTpcdFxuIDg2MDpcdFx0XHRpZiAoc3RyY21wKGRldi1cdTAwM2VydG5sX2xpbmtfb3BzLVx1MDAzZWtpbmQsIFwmIzM0O2Vyc3BhblwmIzM0OykpXG4gODYxOlx0XHRcdFx0aXBncmVfbGlua191cGRhdGUoZGV2LCB0cnVlLCB0LVx1MDAzZWhsZW4pO1xuIDg2MjpcdFx0fVxuIDg2MzpcdFxuIDg2NDpcdFx0aV9mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlaV9mbGFncyk7XG4gODY1Olx0XHRpcF90dW5uZWxfZmxhZ3NfZnJvbV9iZTE2KHAtXHUwMDNlaV9mbGFncywgaV9mbGFncyk7XG4gODY2Olx0XHRvX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cdTAwM2VvX2ZsYWdzKTtcbiA4Njc6XHRcdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYocC1cdTAwM2VvX2ZsYWdzLCBvX2ZsYWdzKTtcbiA4Njg6XHRcbiA4Njk6XHRcdHJldHVybiAwO1xuIDg3MDpcdH1cbiA4NzE6XHRcbiA4NzI6XHQvKiBOaWNlIHRveS4gVW5mb3J0dW5hdGVseSwgdXNlbGVzcyBpbiByZWFsIGxpZmUgOi0pXG4gODczOlx0ICAgSXQgYWxsb3dzIHRvIGNvbnN0cnVjdCB2aXJ0dWFsIG11bHRpcHJvdG9jb2wgYnJvYWRjYXN0IFwmIzM0O0xBTlwmIzM0O1xuIDg3NDpcdCAgIG92ZXIgdGhlIEludGVybmV0LCBwcm92aWRlZCBtdWx0aWNhc3Qgcm91dGluZyBpcyB0dW5lZC5cbiA4NzU6XHRcbiA4NzY6XHRcbiA4Nzc6XHQgICBJIGhhdmUgbm8gaWRlYSB3YXMgdGhpcyBiaWN5Y2xlIGludmVudGVkIGJlZm9yZSBtZSxcbiA4Nzg6XHQgICBzbyB0aGF0IEkgaGFkIHRvIHNldCBBUlBIUkRfSVBHUkUgdG8gYSByYW5kb20gdmFsdWUuXG4gODc5Olx0ICAgSSBoYXZlIGFuIGltcHJlc3Npb24sIHRoYXQgQ2lzY28gY291bGQgbWFrZSBzb21ldGhpbmcgc2ltaWxhcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE5ldGxpbmsgUGFyYW1ldGVyIFN0cnVjdHVyZXMgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhZ2Fpbi4gQmFzZWQgb24gdGhlIGlzc3VlIHJlcG9ydCwgSSBuZWVkIHRvIGZvY3VzIG9uIHBvdGVudGlhbCBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBJUEdSRSBhbmQgRVJTUEFOIG5ldGxpbmsgcGFyYW1ldGVycy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBhcm91bmQgbGluZXMgMTIyMCB0byAxMzIwLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBleGFtaW5lIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCBhbmQgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24sIGluY29ycmVjdCB0eXBlIGhhbmRsaW5nLCBvciBwb3NzaWJsZSBidWZmZXIgb3ZlcmZsb3dzIHdoZW4gdGhlc2Ugc3RydWN0dXJlcyBhcmUgYmVpbmcgcG9wdWxhdGVkIG9yIGFjY2Vzc2VkIHRocm91Z2ggdGhlIG5ldGxpbmsgaW50ZXJmYWNlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHdheSB0aGUgZGF0YSBpcyBiZWluZyB2YWxpZGF0ZWQgYW5kIHdoZXRoZXIgcHJvcGVyIGVycm9yIGNoZWNraW5nIGlzIGltcGxlbWVudGVkLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSByb290IG9mIHRoZSBwcm9ibGVtIGxpZXMuIEkmIzM5O2xsIGxpa2VseSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgbmV0bGluayBzb2NrZXQgYWxsIHRoZSB3YXkgdGhyb3VnaCB0byB3aGVyZSB0aGVzZSBwYXJhbWV0ZXJzIGFyZSB1c2VkIGluIHRoZSB0dW5uZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjMwOlx0XHRcdHBhcm1zLVx1MDAzZWlwaC50dGwgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfVFRMXSk7XG4xMjMxOlx0XG4xMjMyOlx0XHRpZiAoZGF0YVtJRkxBX0dSRV9UT1NdKVxuMTIzMzpcdFx0XHRwYXJtcy1cdTAwM2VpcGgudG9zID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX1RPU10pO1xuMTIzNDpcdFxuMTIzNTpcdFx0aWYgKCFkYXRhW0lGTEFfR1JFX1BNVFVESVNDXSB8fCBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfUE1UVURJU0NdKSkge1xuMTIzNjpcdFx0XHRpZiAodC1cdTAwM2VpZ25vcmVfZGYpXG4xMjM3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjM4Olx0XHRcdHBhcm1zLVx1MDAzZWlwaC5mcmFnX29mZiA9IGh0b25zKElQX0RGKTtcbjEyMzk6XHRcdH1cbjEyNDA6XHRcbjEyNDE6XHRcdGlmIChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pIHtcbjEyNDI6XHRcdFx0aWYgKG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKVxuMTI0MzpcdFx0XHQgIFx1MDAyNlx1MDAyNiAocGFybXMtXHUwMDNlaXBoLmZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9ERikpKVxuMTI0NDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI0NTpcdFx0XHR0LVx1MDAzZWlnbm9yZV9kZiA9ICEhbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pO1xuMTI0NjpcdFx0fVxuMTI0NzpcdFxuMTI0ODpcdFx0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAZGV2IGFuZCBAdC4gKi9cbjEyNDk6XHRcdGlmIChkYXRhW0lGTEFfR1JFX0NPTExFQ1RfTUVUQURBVEFdKSB7XG4xMjUwOlx0XHRcdHQtXHUwMDNlY29sbGVjdF9tZCA9IHRydWU7XG4xMjUxOlx0XHRcdGlmIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSVBHUkUpXG4xMjUyOlx0XHRcdFx0ZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTk9ORTtcbjEyNTM6XHRcdH1cbjEyNTQ6XHRcbjEyNTU6XHRcdGlmIChkYXRhW0lGTEFfR1JFX0ZXTUFSS10pXG4xMjU2Olx0XHRcdCpmd21hcmsgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0ZXTUFSS10pO1xuMTI1NzpcdFxuMTI1ODpcdFx0cmV0dXJuIDA7XG4xMjU5Olx0fVxuMTI2MDpcdFxuMTI2MTpcdHN0YXRpYyBpbnQgZXJzcGFuX25ldGxpbmtfcGFybXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjEyNjI6XHRcdFx0XHRcdHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbjEyNjM6XHRcdFx0XHRcdHN0cnVjdCBubGF0dHIgKnRiW10sXG4xMjY0Olx0XHRcdFx0XHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcGFybXMsXG4xMjY1Olx0XHRcdFx0XHRfX3UzMiAqZndtYXJrKVxuMTI2NjpcdHtcbjEyNjc6XHRcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuMTI2ODpcdFx0dTggZXJzcGFuX3ZlciA9IHQtXHUwMDNlZXJzcGFuX3ZlcjtcbjEyNjk6XHRcdHUzMiBpbmRleCA9IHQtXHUwMDNlaW5kZXg7XG4xMjcwOlx0XHR1MTYgaHdpZCA9IHQtXHUwMDNlaHdpZDtcbjEyNzE6XHRcdHU4IGRpciA9IHQtXHUwMDNlZGlyO1xuMTI3MjpcdFx0aW50IGVycjtcbjEyNzM6XHRcbjEyNzQ6XHRcdGlmICghZGF0YSlcbjEyNzU6XHRcdFx0cmV0dXJuIGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4xMjc2Olx0XG4xMjc3Olx0XHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSkge1xuMTI3ODpcdFx0XHRlcnNwYW5fdmVyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKTtcbjEyNzk6XHRcbjEyODA6XHRcdFx0aWYgKGVyc3Bhbl92ZXIgXHUwMDNlIDIpXG4xMjgxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjgyOlx0XHR9XG4xMjgzOlx0XG4xMjg0Olx0XHRpZiAoZXJzcGFuX3ZlciA9PSAxKSB7XG4xMjg1Olx0XHRcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pIHtcbjEyODY6XHRcdFx0XHRpbmRleCA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0lOREVYXSk7XG4xMjg3Olx0XHRcdFx0aWYgKGluZGV4IFx1MDAyNiB+SU5ERVhfTUFTSylcbjEyODg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI4OTpcdFx0XHR9XG4xMjkwOlx0XHR9IGVsc2UgaWYgKGVyc3Bhbl92ZXIgPT0gMikge1xuMTI5MTpcdFx0XHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSkge1xuMTI5MjpcdFx0XHRcdGRpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7XG4xMjkzOlx0XHRcdFx0aWYgKGRpciBcdTAwMjYgfihESVJfTUFTSyBcdTAwM2VcdTAwM2UgRElSX09GRlNFVCkpXG4xMjk0Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyOTU6XHRcdFx0fVxuMTI5NjpcdFx0XHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pIHtcbjEyOTc6XHRcdFx0XHRod2lkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pO1xuMTI5ODpcdFx0XHRcdGlmIChod2lkIFx1MDAyNiB+KEhXSURfTUFTSyBcdTAwM2VcdTAwM2UgSFdJRF9PRkZTRVQpKVxuMTI5OTpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMzAwOlx0XHRcdH1cbjEzMDE6XHRcdH1cbjEzMDI6XHRcbjEzMDM6XHRcdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4xMzA0Olx0XHRpZiAoZXJyKVxuMTMwNTpcdFx0XHRyZXR1cm4gZXJyO1xuMTMwNjpcdFxuMTMwNzpcdFx0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAdC4gKi9cbjEzMDg6XHRcdHQtXHUwMDNlZXJzcGFuX3ZlciA9IGVyc3Bhbl92ZXI7XG4xMzA5Olx0XHR0LVx1MDAzZWluZGV4ID0gaW5kZXg7XG4xMzEwOlx0XHR0LVx1MDAzZWh3aWQgPSBod2lkO1xuMTMxMTpcdFx0dC1cdTAwM2VkaXIgPSBkaXI7XG4xMzEyOlx0XG4xMzEzOlx0XHRyZXR1cm4gMDtcbjEzMTQ6XHR9XG4xMzE1Olx0XG4xMzE2Olx0LyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBFTkNBUCBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50IGluIHRoZSBubCBtc2cgKi9cbjEzMTc6XHRzdGF0aWMgYm9vbCBpcGdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbjEzMTg6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmlwZW5jYXApXG4xMzE5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGlwX2dyZS5jOiBlcnNwYW5fY2hhbmdlbGluayBhbmQgaXBncmVfY2hhbmdlbGluayBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIHRob3NlIGBlcnNwYW5fY2hhbmdlbGlua2AgYW5kIGBpcGdyZV9jaGFuZ2VsaW5rYCBmdW5jdGlvbnMgaW4gYGlwX2dyZS5jYC4gTGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgYmxvY2ssIHJvdWdobHkgZnJvbSBsaW5lIDE0NTAgdG8gMTU3MC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgaGFuZGxpbmcgbGluayBjaGFuZ2Vz4oCUcHJvYmFibHkgZGVhbGluZyB3aXRoIHVwZGF0ZXMgdG8gdGhlIEdSRS9FUlNQQU4gdHVubmVsIGNvbmZpZ3VyYXRpb25zIG9yIHN0YXRlIHRyYW5zaXRpb25zIGFmdGVyIGFuIGludGVyZmFjZSBnb2VzIHVwIG9yIGRvd24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgc3lzdGVtIGFkYXB0cyB0byBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIGxpbmssIHBhcnRpY3VsYXJseSBob3cgaXQgYWZmZWN0cyB0aGUgZXN0YWJsaXNoZWQgdHVubmVscy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBjYWxscyB0byBsb3dlci1sZXZlbCBuZXR3b3JraW5nIGZ1bmN0aW9ucywgYW5kIGFueSBlcnJvciBoYW5kbGluZyBvciByZXRyeSBtZWNoYW5pc21zIGltcGxlbWVudGVkLiBJJiMzOTttIGFudGljaXBhdGluZyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcm91dGluZyB0YWJsZSBhcyB3ZWxsLCB0byBzZWUgaG93IHRoZXNlIGxpbmsgY2hhbmdlcyBhZmZlY3QgZm9yd2FyZGluZyBiZWhhdmlvci4gSXQmIzM5O3MgYWxzbyBwb3NzaWJsZSB0aGVyZSYjMzk7cyBzb21lIGludGVyYWN0aW9uIHdpdGggbmV0d29yayBuYW1lc3BhY2VzLCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbnRhaW5lcml6ZWQgZW52aXJvbm1lbnRzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0OTA6XHRcdGVyciA9IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIFx1MDAyNnAsIFx1MDAyNmZ3bWFyayk7XG4xNDkxOlx0XHRpZiAoZXJyKVxuMTQ5MjpcdFx0XHRyZXR1cm4gZXJyO1xuMTQ5MzpcdFx0cmV0dXJuIGlwX3R1bm5lbF9uZXdsaW5rKHBhcmFtcy1cdTAwM2VsaW5rX25ldCA/IDogZGV2X25ldChkZXYpLCBkZXYsIHRiLCBcdTAwMjZwLFxuMTQ5NDpcdFx0XHRcdFx0IGZ3bWFyayk7XG4xNDk1Olx0fVxuMTQ5NjpcdFxuMTQ5NzpcdHN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuMTQ5ODpcdFx0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4xNDk5Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjE1MDA6XHR7XG4xNTAxOlx0XHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbjE1MDI6XHRcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XG4xNTAzOlx0XHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbjE1MDQ6XHRcdGludCBvbGRfaGxlbiA9IHQtXHUwMDNlaGxlbjtcbjE1MDU6XHRcdGludCBlcnI7XG4xNTA2Olx0XG4xNTA3Olx0XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG4xNTA4Olx0XHRcdHJldHVybiAtRVBFUk07XG4xNTA5Olx0XG4xNTEwOlx0XHRlcnIgPSBpcGdyZV9uZXdsaW5rX2VuY2FwX3NldHVwKGRldiwgZGF0YSk7XG4xNTExOlx0XHRpZiAoZXJyKVxuMTUxMjpcdFx0XHRyZXR1cm4gZXJyO1xuMTUxMzpcdFxuMTUxNDpcdFx0ZXJyID0gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBcdTAwMjZwLCBcdTAwMjZmd21hcmspO1xuMTUxNTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjE1MTY6XHRcdFx0Z290byBsaW5rX3VwZGF0ZTtcbjE1MTc6XHRcbjE1MTg6XHRcdGVyciA9IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKGRldiwgdGIsIFx1MDAyNnAsIGZ3bWFyayk7XG4xNTE5Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTUyMDpcdFx0XHRnb3RvIGxpbmtfdXBkYXRlO1xuMTUyMTpcdFxuMTUyMjpcdFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5pX2ZsYWdzLCBwLmlfZmxhZ3MpO1xuMTUyMzpcdFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLm9fZmxhZ3MpO1xuMTUyNDpcdFxuMTUyNTpcdGxpbmtfdXBkYXRlOlxuMTUyNjpcdFx0LyogaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cCgpIGhhcyBwdWJsaXNoZWQgYSBuZXcgZW5jYXBzdWxhdGlvbiBldmVuXG4xNTI3Olx0XHQgKiBpZiB0aGUgcmVzdCBvZiB0aGUgcmVxdWVzdCBmYWlsZWQsIHNvIHRoZSBsZW5ndGhzIG11c3QgYmUgcmVmcmVzaGVkXG4xNTI4Olx0XHQgKiBvbiB0aGUgZXJyb3IgcGF0aHMgYXMgd2VsbC4gVGhpcyBoYXMgdG8gY29tZSBsYXN0LCBiZWNhdXNlXG4xNTI5Olx0XHQgKiBpcGdyZV9saW5rX3VwZGF0ZSgpIG5lZWRzIHRoZSBmbGFncyBjb3BpZWQgYWJvdmUuXG4xNTMwOlx0XHQgKi9cbjE1MzE6XHRcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSwgb2xkX2hsZW4pO1xuMTUzMjpcdFxuMTUzMzpcdFx0cmV0dXJuIGVycjtcbjE1MzQ6XHR9XG4xNTM1Olx0XG4xNTM2Olx0c3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuMTUzNzpcdFx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuMTUzODpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTUzOTpcdHtcbjE1NDA6XHRcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuMTU0MTpcdFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcbjE1NDI6XHRcdF9fdTMyIGZ3bWFyayA9IHQtXHUwMDNlZndtYXJrO1xuMTU0MzpcdFx0aW50IG9sZF9obGVuID0gdC1cdTAwM2VobGVuO1xuMTU0NDpcdFx0aW50IGVycjtcbjE1NDU6XHRcbjE1NDY6XHRcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbjE1NDc6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjE1NDg6XHRcbjE1NDk6XHRcdGVyciA9IGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoZGV2LCBkYXRhKTtcbjE1NTA6XHRcdGlmIChlcnIpXG4xNTUxOlx0XHRcdHJldHVybiBlcnI7XG4xNTUyOlx0XG4xNTUzOlx0XHRlcnIgPSBlcnNwYW5fbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBcdTAwMjZwLCBcdTAwMjZmd21hcmspO1xuMTU1NDpcdFxuMTU1NTpcdFx0LyogaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cCgpIGhhcyBwdWJsaXNoZWQgYSBuZXcgZW5jYXBzdWxhdGlvbiwgYW5kXG4xNTU2Olx0XHQgKiBlcnNwYW5fbmV0bGlua19wYXJtcygpIGEgbmV3IEVSU1BBTiB2ZXJzaW9uLCBib3RoIG9mIHdoaWNoIGNoYW5nZVxuMTU1NzpcdFx0ICogdGhlIGhlYWRlciBsZW5ndGguIFJlZnJlc2ggdGhlIGxlbmd0aHMgYmVmb3JlIGxvb2tpbmcgYXQgQGVycjpcbjE1NTg6XHRcdCAqIGVyc3Bhbl94bWl0KCkgc2l6ZXMgaXRzIHB1c2ggZnJvbSB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciwgYW5kIGJvdGggdGhpc1xuMTU1OTpcdFx0ICogZXJyb3IgcGF0aCBhbmQgaXBfdHVubmVsX2NoYW5nZWxpbmsoKSBiZWxvdyBsZWF2ZSB0aGUgbmV3XG4xNTYwOlx0XHQgKiBlbmNhcHN1bGF0aW9uIGJlaGluZC5cbjE1NjE6XHRcdCAqL1xuMTU2MjpcdFx0ZXJzcGFuX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSwgb2xkX2hsZW4pO1xuMTU2MzpcdFxuMTU2NDpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjE1NjU6XHRcdFx0cmV0dXJuIGVycjtcbjE1NjY6XHRcbjE1Njc6XHRcdGVyciA9IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKGRldiwgdGIsIFx1MDAyNnAsIGZ3bWFyayk7XG4xNTY4Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTU2OTpcdFx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVHVubmVsaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCB3aGF0JiMzOTtzIHRoZSBjb3JlIGlzc3VlIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZz8gSXQgc2VlbXMgbGlrZSByZXBlYXRlZCBjYWxscyB0byBgaXBncmVfY2hhbmdlbGlua2AgYW5kIGBlcnNwYW5fY2hhbmdlbGlua2AsIG9yIGNoYW5nZXMgaW4gZW5jYXBzdWxhdGlvbiwgd2VyZSBsZWFkaW5nIHRvIGluY29uc2lzdGVuY2llcyBpbiBgdHVubmVsLSZndDtobGVuYCwgYW5kIHRoZSBkZXZpY2UmIzM5O3MgaGVhZHJvb20gYW5kIE1UVSB3ZXJlIGJlY29taW5nIG1pc2FsaWduZWQuIFRoaXMgcmVzdWx0ZWQgaW4gbGVuZ3RoIGRyaWZ0LCBhbmQgdGhlIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgZnVuY3Rpb24gd2FzIG11dGF0aW5nIHR1bm5lbCBwYXJhbWV0ZXJzICpiZWZvcmUqIHRoZXkgd2VyZSB2YWxpZGF0ZWQsIHdoaWNoIHdvdWxkIGxlYXZlIHRoZSB0dW5uZWwgc3RydWN0dXJlIGluY29uc2lzdGVudCBpZiB2YWxpZGF0aW9uIGZhaWxlZC4gSW1wb3J0YW50bHksIGBlcnNwYW5fbGlua191cGRhdGVgIHdhc24mIzM5O3QgZXZlbiBwcmVzZW50IHByZXZpb3VzbHksIHdoaWNoIHNlZW1zIGxpa2UgYSBzaWduaWZpY2FudCBvdmVyc2lnaHQuIFRoZSBjb21tZW50IGluIGBpcGdyZV9saW5rX3VwZGF0ZWAgcmVpbmZvcmNlcyB0aGF0IGB0dW5uZWwtJmd0O2hsZW5gIGlzIGRlcGVuZGVudCBvbiBmbGFncyB0aGF0IGNhbiBjaGFuZ2UsIHNvIHdlICpuZWVkKiB0byByZWNvbXB1dGUgaXQgYW5kIGRlcml2ZSBkZXZpY2UgbGVuZ3RocyBmcm9tIHRoZXJlLiBXZSBhcmVuJiMzOTt0IGp1c3QgYWRqdXN0aW5nIGJ5IGEgZGVsdGEsIHNvIHRyYWNraW5nIGFuIGBvbGRfaGxlbmAgdmFsdWUgaXNuJiMzOTt0IHN1ZmZpY2llbnQuCgpOb3csIGFzIGFuIGV4cGVydCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgc2FmZXR5LiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIHNvIEkgbmVlZCB0byBjaGVjayBhZ2FpbnN0IHRoZSBmb3VyIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlOioqIEFyZSB3ZSBpbnRyb2R1Y2luZyBuZXcgb3IgbW9kaWZ5aW5nIHN0cnVjdHVyZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHBvdGVudGlhbCBhdmVudWVzIHdoZXJlIGtlcm5lbCBkYXRhIGxlYWtzIG91dCwgYW5kIHRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBkcmlsbCBkb3duLgogICAgKiAgIE5vIGJyYW5kLW5ldyBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGF0JiMzOTtzIGEgZ29vZCBmaXJzdCBjaGVjay4KICAgICogICBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgZXhpc3RpbmcgbmV0bGluayByZXBseSBwYXRoczogYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCwgYW5kIGBncmVfdGFwX2ZpbGxfaW5mb2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IGZpZWxkcyBpbiBgbmV0ZGV2YCBvciBgaXBfdHVubmVsYCBhcmUgcmVhZCBhbmQgc2VudCB0byB1c2Vyc3BhY2UsIG9yIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkIGJ5IG91ciBjaGFuZ2VzLiBBcmUgd2Ugd3JpdGluZyB2YWx1ZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdW5pbml0aWFsaXplZCwgb3IgYXJlIHdlIGNoYW5naW5nIGxvZ2ljIGFuZCBwb3RlbnRpYWxseSBsZWFraW5nIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PwoKSSBuZWVkIHRvIGNvbmZpcm0gYWxsIHRoZSBwYXRocyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gbG9vayB3aXRoaW4gdGhvc2UgbmV0bGluayBmaWxsIGZ1bmN0aW9ucyB0byBzZWUgd2hlcmUgdGhlIGRhdGEgZnJvbSB0dW5uZWwgc3RydWN0dXJlcyBnZXRzIGNvcGllZCBpbnRvIHRoZSBza2IgYXR0cmlidXRlcy4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgZWFjaCBmaWVsZCB0aG9yb3VnaGx5LiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXJzcGFuX2ZpbGxfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jPTE2MjU9c3RhdGljIGludCBpcGdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjc1LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTY3NjpzdGF0aWMgaW50IGVyc3Bhbl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwX2dyZS5jLTE2Nzcte1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE3Njg9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGVyc3Bhbl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE3NzgtXHQuZ2V0X3NpemVcdD0gaXBncmVfZ2V0X3NpemUsXG5uZXQvaXB2NC9pcF9ncmUuYzoxNzc5Olx0LmZpbGxfaW5mb1x0PSBlcnNwYW5fZmlsbF9pbmZvLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTc4MC1cdC5nZXRfbGlua19uZXRcdD0gaXBfdHVubmVsX2dldF9saW5rX25ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIGBlcnNwYW5fZmlsbF9pbmZvYCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgZXJzcGFuX2ZpbGxfaW5mb2AuIFNpbmNlIEkmIzM5O20gd29ya2luZyBvbiB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgaXQmIzM5O3MgZGVzaWduZWQgdG8gcG9wdWxhdGUgYW5kIHRoZSBvdmVyYWxsIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJdCBsaWtlbHkgZGVhbHMgd2l0aCBzb21lIGZvcm0gb2YgRVJTUEFOIChFbmNhcHN1bGF0ZWQgUmVtb3RlIFNQQU4pIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBleGFtaW5lIHRoZSBjb2RlIGNsb3NlbHkgdG8gZ3Jhc3AgaXRzIGlucHV0cywgb3V0cHV0cywgYW5kIGFueSBpbnRlcm5hbCBsb2dpYy4gS25vd2luZyBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBFUlNQQU4gaW1wbGVtZW50YXRpb24gaXMgY3JpdGljYWwgZm9yIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjc1Olx0XG4xNjc2Olx0c3RhdGljIGludCBlcnNwYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xNjc3Olx0e1xuMTY3ODpcdFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4xNjc5Olx0XG4xNjgwOlx0XHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyIFx1MDAzYz0gMikge1xuMTY4MTpcdFx0XHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR1JFX0VSU1BBTl9WRVIsIHQtXHUwMDNlZXJzcGFuX3ZlcikpXG4xNjgyOlx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNjgzOlx0XG4xNjg0Olx0XHRcdGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgPT0gMSkge1xuMTY4NTpcdFx0XHRcdGlmIChubGFfcHV0X3UzMihza2IsIElGTEFfR1JFX0VSU1BBTl9JTkRFWCwgdC1cdTAwM2VpbmRleCkpXG4xNjg2Olx0XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjE2ODc6XHRcdFx0fSBlbHNlIGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgPT0gMikge1xuMTY4ODpcdFx0XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HUkVfRVJTUEFOX0RJUiwgdC1cdTAwM2VkaXIpKVxuMTY4OTpcdFx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNjkwOlx0XHRcdFx0aWYgKG5sYV9wdXRfdTE2KHNrYiwgSUZMQV9HUkVfRVJTUEFOX0hXSUQsIHQtXHUwMDNlaHdpZCkpXG4xNjkxOlx0XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjE2OTI6XHRcdFx0fVxuMTY5MzpcdFx0fVxuMTY5NDpcdFxuMTY5NTpcdFx0cmV0dXJuIGlwZ3JlX2ZpbGxfaW5mbyhza2IsIGRldik7XG4xNjk2Olx0XG4xNjk3Olx0bmxhX3B1dF9mYWlsdXJlOlxuMTY5ODpcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjE2OTk6XHR9XG4xNzAwOlx0XG4xNzAxOlx0c3RhdGljIHZvaWQgZXJzcGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xNzAyOlx0e1xuMTcwMzpcdFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4xNzA0Olx0XG4xNzA1Olx0XHRldGhlcl9zZXR1cChkZXYpO1xuMTcwNjpcdFx0ZGV2LVx1MDAzZW1heF9tdHUgPSAwO1xuMTcwNzpcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZlcnNwYW5fbmV0ZGV2X29wcztcbjE3MDg6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNj0gfklGRl9UWF9TS0JfU0hBUklORztcbjE3MDk6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ5MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBWYXJpYWJsZSBJc3N1ZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB3aXRoaW4gdGhpcyBuZXR3b3JrIGRldmljZSBjb2RlLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byB0aGUgRVJTUEFOIGFuZCBHUkUgdHVubmVscy4KCkZpcnN0LCB3aXRoaW4gdGhlIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgZnVuY3Rpb24sIEkgc2VlIHRoYXQgYGVyc3Bhbl92ZXJgLCBgaW5kZXhgLCBgaHdpZGAsIGFuZCBgZGlyYCBhcmUgbG9jYWwgdmFyaWFibGVzLiBUaGV5IGFyZSBkaXJlY3RseSBpbml0aWFsaXplZCBmcm9tIGZpZWxkcyBvZiB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdCBgdGAuIEFuZCwgY3J1Y2lhbGx5LCB0aGlzIHN0cnVjdCBgdGAgaXMgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlJiMzOTtzIG5vIHdheSB0aGVzZSB2YXJpYWJsZXMgYXJlIHVuaW5pdGlhbGl6ZWQgYXQgdGhlIHBvaW50IG9mIHRoZWlyIGRlY2xhcmF0aW9uLiBJdCYjMzk7cyBhIHRleHRib29rIGluaXRpYWxpemF0aW9uIHBhdHRlcm4uCgpOb3csIGZvciBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdmFyaWFibGVzLCBhcmUgd2UgbG9va2luZyBhdCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gSSBzZWUgYG9sZF9obGVuYCBiZWluZyB1c2VkIGluIGBpcGdyZV9saW5rX3VwZGF0ZWAsIGFuZCB0aGF0IGl0IG9yaWdpbmF0ZXMgZnJvbSBgaXBncmVfY2hhbmdlbGlua2Agb3IgYGlwZ3JlX3R1bm5lbF9jdGxgLiBCb3RoIGBpcGdyZV9jaGFuZ2VsaW5rYCBhbmQgYGVyc3Bhbl9jaGFuZ2VsaW5rYCBpbml0aWFsaXplIHRoZSBgb2xkX2hsZW5gIHZhcmlhYmxlIGZyb20gYHQtJmd0O2hsZW5gLCB3aGljaCBtZWFucyB3ZSBhcmUgc2FmZS4KClJlZ2FyZGluZyBhbGxvY2F0aW9ucyBhbmQgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWRkZWQuIFRoYXQmIzM5O3MgZ29vZDsgaXQgc2ltcGxpZmllcyB0aGluZ3MuCgpCdXQgdGhpcyBicmluZ3MgdXMgdG8gdGhlIHBvdGVudGlhbGx5IHRyaWNreSBwYXJ0OiBib3VuZHMgY2hlY2tzIGFuZCBhY2Nlc3MgdG8gZXhpc3RpbmcgYnVmZmVycy4gSGVyZSwgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBmb3IgdnVsbmVyYWJpbGl0aWVzIHdoZXJlIGNoYW5nZXMgdG8gTVRVLCBoZWFkZXIgbGVuZ3RoIChgaGxlbmApLCBldGMuIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcyBkdWUgdG8gaW1wcm9wZXIgY2FsY3VsYXRpb25zIG9yIGNoZWNrcy4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIQoKSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBgdHVubmVsLSZndDtobGVuYCwgYHR1bm5lbC0mZ3Q7dHVuX2hsZW5gLCBgZGV2LSZndDtuZWVkZWRfaGVhZHJvb21gLCBgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW5gLCBhbmQgYGRldi0mZ3Q7bXR1YCBhcmUgYWxsIHVzZWQgdG9nZXRoZXIsIGVzcGVjaWFsbHkgZHVyaW5nIHRyYW5zbWlzc2lvbiBvciBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYTsgYSBzdWJ0bGUgb2ZmLWJ5LW9uZSBlcnJvciBvciBpbmNvcnJlY3QgY2FsY3VsYXRpb24gaGVyZSBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBvciBldmVuIGdhcmJhZ2UgZGF0YS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgb2YgYHR1bm5lbC0mZ3Q7aGxlbmAgYW5kIGB0dW5uZWwtJmd0O3R1bl9obGVuYCBkdXJpbmcgdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzIGFuZCBzZWUgaWYgYW55IGFzc3VtcHRpb25zIG9yIGNhbGN1bGF0aW9ucyBhcmUgcmlza3kuIFRoaXMgd2FycmFudHMgYSBtb3JlIGRldGFpbGVkIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9obGVufGhsZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz00NzY9c3RhdGljIHZvaWQgX19ncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTQ4Mi1cdC8qIFB1c2ggR1JFIGhlYWRlci4gKi9cbm5ldC9pcHY0L2lwX2dyZS5jOjQ4MzpcdGdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWwtXHUwMDNldHVuX2hsZW4sXG5uZXQvaXB2NC9pcF9ncmUuYy00ODQtXHRcdFx0IGZsYWdzLCBwcm90bywgdHVubmVsLVx1MDAzZXBhcm1zLm9fa2V5LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTQ5Nj1zdGF0aWMgdm9pZCBncmVfZmJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTUwMi1cdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfa2V5ICprZXk7XG5uZXQvaXB2NC9pcF9ncmUuYzo1MDM6XHRpbnQgdHVubmVsX2hsZW47XG5uZXQvaXB2NC9pcF9ncmUuYy01MDQtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNTEwLVx0a2V5ID0gXHUwMDI2dHVuX2luZm8tXHUwMDNla2V5O1xubmV0L2lwdjQvaXBfZ3JlLmM6NTExOlx0dHVubmVsX2hsZW4gPSBncmVfY2FsY19obGVuKGtleS1cdTAwM2V0dW5fZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtNTEyLVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTUyNS1cbm5ldC9pcHY0L2lwX2dyZS5jOjUyNjpcdGdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWxfaGxlbiwgZmxhZ3MsIHByb3RvLFxubmV0L2lwdjQvaXBfZ3JlLmMtNTI3LVx0XHRcdCB0dW5uZWxfaWRfdG9fa2V5MzIodHVuX2luZm8tXHUwMDNla2V5LnR1bl9pZCksXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNTMwLVxubmV0L2lwdjQvaXBfZ3JlLmM6NTMxOlx0aXBfbWRfdHVubmVsX3htaXQoc2tiLCBkZXYsIElQUFJPVE9fR1JFLCB0dW5uZWxfaGxlbik7XG5uZXQvaXB2NC9pcF9ncmUuYy01MzItXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9NTQwPXN0YXRpYyB2b2lkIGVyc3Bhbl9mYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNTQ4LVx0X19iZTE2IHByb3RvO1xubmV0L2lwdjQvaXBfZ3JlLmM6NTQ5Olx0aW50IHR1bm5lbF9obGVuO1xubmV0L2lwdjQvaXBfZ3JlLmMtNTUwLVx0aW50IHZlcnNpb247XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNTY2LVx0dmVyc2lvbiA9IG1kLVx1MDAzZXZlcnNpb247XG5uZXQvaXB2NC9pcF9ncmUuYzo1Njc6XHR0dW5uZWxfaGxlbiA9IDggJiM0MzsgZXJzcGFuX2hkcl9sZW4odmVyc2lvbik7XG5uZXQvaXB2NC9pcF9ncmUuYy01NjgtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNjE1LVxubmV0L2lwdjQvaXBfZ3JlLmM6NjE2Olx0aXBfbWRfdHVubmVsX3htaXQoc2tiLCBkZXYsIElQUFJPVE9fR1JFLCB0dW5uZWxfaGxlbik7XG5uZXQvaXB2NC9pcF9ncmUuYy02MTctXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9NjQ5PXN0YXRpYyBuZXRkZXZfdHhfdCBpcGdyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNjY0LVx0aWYgKGRldi1cdTAwM2VoZWFkZXJfb3BzKSB7XG5uZXQvaXB2NC9pcF9ncmUuYzo2NjU6XHRcdGludCBwdWxsX2xlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xubmV0L2lwdjQvaXBfZ3JlLmMtNjY2LVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTc2MT1zdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNzkxLVxubmV0L2lwdjQvaXBfZ3JlLmM6NzkyOi8qIHR1bm5lbC1cdTAwM2VobGVuIGRlcGVuZHMgb24gdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MgYW5kIG9uIHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuLFxubmV0L2lwdjQvaXBfZ3JlLmMtNzkzLSAqIGJvdGggb2Ygd2hpY2ggaXBncmVfY2hhbmdlbGluaygpIGNhbiBjaGFuZ2UuIFJlY29tcHV0ZSBpdCB0aGUgd2F5XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNzk2LSAqXG5uZXQvaXB2NC9pcF9ncmUuYzo3OTc6ICogQG9sZF9obGVuIGlzIG9ubHkgdXNlZCB0byB0ZWxsIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWUgc3RhbGUsIG5ldmVyIGFzIGFcbm5ldC9pcHY0L2lwX2dyZS5jLTc5OC0gKiBkaWZmZXJlbmNlIHRvIGFwcGx5LCBzbyBpdCBjYW4gbm90IG1ha2UgdGhlIGxlbmd0aHMgZHJpZnQuIEl0IG11c3QgYmVcbm5ldC9pcHY0L2lwX2dyZS5jLTc5OS0gKiBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2ggYWxyZWFkeSBwdWJsaXNoZXMgdGhlIG5ld1xubmV0L2lwdjQvaXBfZ3JlLmM6ODAwOiAqIHR1bm5lbC1cdTAwM2VobGVuIGZvciB1cy5cbm5ldC9pcHY0L2lwX2dyZS5jLTgwMS0gKi9cbm5ldC9pcHY0L2lwX2dyZS5jPTgwMj1zdGF0aWMgdm9pZCBpcGdyZV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXG5uZXQvaXB2NC9pcF9ncmUuYzo4MDM6XHRcdFx0ICAgICAgaW50IG9sZF9obGVuKVxubmV0L2lwdjQvaXBfZ3JlLmMtODA0LXtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy04MDYtXG5uZXQvaXB2NC9pcF9ncmUuYzo4MDc6XHR0dW5uZWwtXHUwMDNldHVuX2hsZW4gPSBncmVfY2FsY19obGVuKHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjgwODpcdHR1bm5lbC1cdTAwM2VobGVuID0gdHVubmVsLVx1MDAzZXR1bl9obGVuICYjNDM7IHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuO1xubmV0L2lwdjQvaXBfZ3JlLmMtODA5LVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTgxMi1cdCAqL1xubmV0L2lwdjQvaXBfZ3JlLmM6ODEzOlx0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTgxNC1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz04MjY9c3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtODYwLVx0XHRpZiAoc3RyY21wKGRldi1cdTAwM2VydG5sX2xpbmtfb3BzLVx1MDAzZWtpbmQsIFwmIzM0O2Vyc3BhblwmIzM0OykpXG5uZXQvaXB2NC9pcF9ncmUuYzo4NjE6XHRcdFx0aXBncmVfbGlua191cGRhdGUoZGV2LCB0cnVlLCB0LVx1MDAzZWhsZW4pO1xubmV0L2lwdjQvaXBfZ3JlLmMtODYyLVx0fVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTg5OT1zdGF0aWMgaW50IGlwZ3JlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTkwNy1cbm5ldC9pcHY0L2lwX2dyZS5jOjkwODpcdG5lZWRlZCA9IHQtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2YoKmlwaCk7XG5uZXQvaXB2NC9pcF9ncmUuYy05MDktXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXHUwMDNjIG5lZWRlZCBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy05MjYtXHRpZiAoaXBoLVx1MDAzZWRhZGRyKVxubmV0L2lwdjQvaXBfZ3JlLmM6OTI3Olx0XHRyZXR1cm4gdC1cdTAwM2VobGVuICYjNDM7IHNpemVvZigqaXBoKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTkyOC1cbm5ldC9pcHY0L2lwX2dyZS5jOjkyOTpcdHJldHVybiAtKHQtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2YoKmlwaCkpO1xubmV0L2lwdjQvaXBfZ3JlLmMtOTMwLX1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDE2PXN0YXRpYyB2b2lkIF9fZ3JlX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTAyMC1cdHR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYzoxMDIxOlx0dHVubmVsLVx1MDAzZXR1bl9obGVuID0gZ3JlX2NhbGNfaGxlbih0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYy0xMDIyLVx0dHVubmVsLVx1MDAzZXBhcm1zLmlwaC5wcm90b2NvbCA9IElQUFJPVE9fR1JFO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTAyMy1cbm5ldC9pcHY0L2lwX2dyZS5jOjEwMjQ6XHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2V0dW5faGxlbiAmIzQzOyB0dW5uZWwtXHUwMDNlZW5jYXBfaGxlbjtcbm5ldC9pcHY0L2lwX2dyZS5jOjEwMjU6XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdHVubmVsLVx1MDAzZWhsZW4gJiM0Mzsgc2l6ZW9mKHR1bm5lbC1cdTAwM2VwYXJtcy5pcGgpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTAyNi1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDQ1PXN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDY1LVx0XHRcdGRldi1cdTAwM2VoZWFkZXJfb3BzID0gXHUwMDI2aXBncmVfaGVhZGVyX29wcztcbm5ldC9pcHY0L2lwX2dyZS5jOjEwNjY6XHRcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IHNpemVvZigqaXBoKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNjctXHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDA7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTA3MS1cdFx0ZGV2LVx1MDAzZWhlYWRlcl9vcHMgPSBcdTAwMjZpcGdyZV9oZWFkZXJfb3BzO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTA3MjpcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IHNpemVvZigqaXBoKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNzMtXHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSAwO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEzNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBncmVfdGFwX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3MC1cbm5ldC9pcHY0L2lwX2dyZS5jOjEzNzE6c3RhdGljIHZvaWQgZXJzcGFuX3NldF9obGVuKHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbClcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzIte1xubmV0L2lwdjQvaXBfZ3JlLmMtMTM3My1cdC8qIFZlcnNpb24gMCB1c2VzIGEgNC1ieXRlIEdSRSBoZWFkZXIsIG90aGVyIHZlcnNpb25zIHVzZSA4IGJ5dGVzLiAqL1xubmV0L2lwdjQvaXBfZ3JlLmM6MTM3NDpcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDAgPyA0IDogODtcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzUtXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzc2Olx0dHVubmVsLVx1MDAzZWhsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gJiM0MzsgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gJiM0Mztcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzctXHRcdCAgICAgICBlcnNwYW5faGRyX2xlbih0dW5uZWwtXHUwMDNlZXJzcGFuX3Zlcik7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3OS1cbm5ldC9pcHY0L2lwX2dyZS5jOjEzODA6LyogQm90aCB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciBhbmQgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbVxubmV0L2lwdjQvaXBfZ3JlLmM6MTM4MTogKiBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgYm90aCBmZWVkIHR1bm5lbC1cdTAwM2VobGVuLiBSZWNvbXB1dGUgaXQsIHRoZW4gbGV0XG5uZXQvaXB2NC9pcF9ncmUuYy0xMzgyLSAqIGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlIGxlbmd0aHMgZnJvbSBpdC5cbm5ldC9pcHY0L2lwX2dyZS5jLTEzODMtICpcbm5ldC9pcHY0L2lwX2dyZS5jOjEzODQ6ICogQXMgaW4gaXBncmVfbGlua191cGRhdGUoKSwgQG9sZF9obGVuIG9ubHkgdGVsbHMgd2hldGhlciB0aGUgTVRVIGJlY2FtZVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM4NS0gKiBzdGFsZSBhbmQgbXVzdCBiZSBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2hcbm5ldC9pcHY0L2lwX2dyZS5jOjEzODY6ICogcmVjb21wdXRlcyB0dW5uZWwtXHUwMDNlaGxlbiB3aXRob3V0IHRoZSBFUlNQQU4gcGFydC5cbm5ldC9pcHY0L2lwX2dyZS5jLTEzODctICovXG5uZXQvaXB2NC9pcF9ncmUuYz0xMzg4PXN0YXRpYyB2b2lkIGVyc3Bhbl9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzg5Olx0XHRcdCAgICAgICBpbnQgb2xkX2hsZW4pXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzkwLXtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzkyLVxubmV0L2lwdjQvaXBfZ3JlLmM6MTM5MzpcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTM5NC1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzk3LVx0ICovXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzk4Olx0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTktfVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE0MDE9c3RhdGljIGludCBlcnNwYW5fdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDA0LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTQwNTpcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTQwNi1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDk3PXN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE1MDMtXHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbm5ldC9pcHY0L2lwX2dyZS5jOjE1MDQ6XHRpbnQgb2xkX2hsZW4gPSB0LVx1MDAzZWhsZW47XG5uZXQvaXB2NC9pcF9ncmUuYy0xNTA1LVx0aW50IGVycjtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTMwLVx0ICovXG5uZXQvaXB2NC9pcF9ncmUuYzoxNTMxOlx0aXBncmVfbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdLCBvbGRfaGxlbik7XG5uZXQvaXB2NC9pcF9ncmUuYy0xNTMyLVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE1MzY9c3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE1NDItXHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbm5ldC9pcHY0L2lwX2dyZS5jOjE1NDM6XHRpbnQgb2xkX2hsZW4gPSB0LVx1MDAzZWhsZW47XG5uZXQvaXB2NC9pcF9ncmUuYy0xNTQ0LVx0aW50IGVycjtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTYxLVx0ICovXG5uZXQvaXB2NC9pcF9ncmUuYzoxNTYyOlx0ZXJzcGFuX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSwgb2xkX2hsZW4pO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTU2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYGVyc3Bhbl94bWl0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBlcnNwYW5feG1pdGAgZnVuY3Rpb24gaGFuZGxlcyBgdHVubmVsLSZndDtlcnNwYW5fdmVyYC4gVGhpcyBpcyBrZXkuIFRoZSBgZXJzcGFuX3ZlcmAgZmllbGQgbGlrZWx5IGRpY3RhdGVzIHRoZSBzcGVjaWZpYyBFUlNQQU4gdmVyc2lvbiBiZWluZyB1c2VkLCBhbmQgdGhhdCYjMzk7cyBnb2luZyB0byBpbmZsdWVuY2UgZXZlcnl0aGluZyBmcm9tIGhlYWRlciBjb25zdHJ1Y3Rpb24gdG8gaG93IHRoZSBwYWNrZXQgaXMgdWx0aW1hdGVseSB0cmFuc21pdHRlZC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgdmFyaWFibGUgd2l0aGluIHRoZSBmdW5jdGlvbi4gSXMgaXQgdXNlZCBpbiBjb25kaXRpb25hbCBsb2dpYz8gRG9lcyBpdCBkaXJlY3RseSBpbmZsdWVuY2UgYW55IGNhbGN1bGF0aW9ucz8gSXMgdGhlcmUgYSBsb29rdXAgdGFibGUgb3IgYSBzd2l0Y2ggc3RhdGVtZW50IHRoYXQgbWFrZXMgZGVjaXNpb25zIGJhc2VkIG9uIHRoaXMgZmllbGQ/IElzIGl0IHNpbXBseSBwYXNzZWQgYWxvbmcgYXMgYSBwYXJhbWV0ZXI/IFdoZXJlIGFuZCBob3cgaXQmIzM5O3MgdXNlZCBpcyB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGZ1bGx5LCBiZWNhdXNlIHRoZSBFUlNQQU4gdmVyc2lvbiBjb21wbGV0ZWx5IGFmZmVjdHMgdGhlIGZyYW1lJiMzOTtzIGZvcm1hdC4gSWYgSSBjYW4gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiB1dGlsaXplcyBgdHVubmVsLSZndDtlcnNwYW5fdmVyYCwgSSYjMzk7bGwgYmUgYWJsZSB0byBncmFzcCB0aGUgY29yZSBsb2dpYyBiZWhpbmQgdGhlIHZlcnNpb25pbmcgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vyc3Bhbl94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9NjQ5PXN0YXRpYyBuZXRkZXZfdHhfdCBpcGdyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNzAyLVxubmV0L2lwdjQvaXBfZ3JlLmM6NzAzOnN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvaXBfZ3JlLmMtNzA0LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE0MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlcnNwYW5fbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDE5LVx0Lm5kb191bmluaXRcdFx0PSBpcF90dW5uZWxfdW5pbml0LFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQyMDpcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGVyc3Bhbl94bWl0LFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQyMS1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNTM2PXN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTU3LVx0ICogdGhlIGhlYWRlciBsZW5ndGguIFJlZnJlc2ggdGhlIGxlbmd0aHMgYmVmb3JlIGxvb2tpbmcgYXQgQGVycjpcbm5ldC9pcHY0L2lwX2dyZS5jOjE1NTg6XHQgKiBlcnNwYW5feG1pdCgpIHNpemVzIGl0cyBwdXNoIGZyb20gdHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIsIGFuZCBib3RoIHRoaXNcbm5ldC9pcHY0L2lwX2dyZS5jLTE1NTktXHQgKiBlcnJvciBwYXRoIGFuZCBpcF90dW5uZWxfY2hhbmdlbGluaygpIGJlbG93IGxlYXZlIHRoZSBuZXdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2MzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDcwMCB0aHJvdWdoIDc2MCBvZiBgZXJzcGFuX3htaXRgLgoKKipBbmFseXppbmcgdGhlIGBlcnNwYW5feG1pdGAgQ29kZSBTZWdtZW50KioKCkFscmlnaHQsIGxpbmVzIDcwMC03NjAuLi4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIGxpa2VseSBoYW5kbGVzIHNvbWUgY29yZSBhc3BlY3RzIG9mIEVSU1BBTiB0cmFuc21pc3Npb24g4oCTIHByb2JhYmx5IGRhdGEgZm9ybWF0dGluZywgY2hlY2tzdW0gY2FsY3VsYXRpb25zLCBvciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JrIGludGVyZmFjZS4gS25vd2luZyBob3cgdGhpcyBtb2R1bGUgd29ya3MgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBFUlNQQU4gaXNzdWVzLiBJIHdhbnQgdG8gbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLCBWTEFOIGhhbmRsaW5nLCBvciB0aGUgYWN0dWFsIHF1ZXVpbmcgb2YgdGhlIHBhY2tldHMuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHN1YnRsZSBkZXRhaWxzIOKAkyBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gcGFja2V0IHNpemluZywgaW5jb3JyZWN0IGNoZWNrc3VtIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gZHJvcHBlZCBwYWNrZXRzLCBvciBhbnkgdW51c3VhbCBjb250cm9sIGZsb3cgcGF0aHMgdGhhdCBkZXZpYXRlIGZyb20gdGhlIHN0YW5kYXJkIEVSU1BBTiBwcm9jZWR1cmVzLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGFueSBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzeXN0ZW0gaW4gdGVybXMgb2YgbGF0ZW5jeSBvciB0aHJvdWdocHV0LiBJZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGVzcGVjaWFsbHkgbmVzdGVkIG9uZXMsIEkgd2FudCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGVhY2ggYnJhbmNoIHdpbGwgYmUgdGFrZW4uIEVzc2VudGlhbGx5LCBJJiMzOTttIHBlZWxpbmcgYmFjayB0aGUgbGF5ZXJzIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIEVSU1BBTiBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiA3MDE6XHR9XG4gNzAyOlx0XG4gNzAzOlx0c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gNzA0Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNzA1Olx0e1xuIDcwNjpcdFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiA3MDc6XHRcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcbiA3MDg6XHRcdGJvb2wgdHJ1bmNhdGUgPSBmYWxzZTtcbiA3MDk6XHRcdF9fYmUxNiBwcm90bztcbiA3MTA6XHRcbiA3MTE6XHRcdGlmICghcHNrYl9pbmV0X21heV9wdWxsKHNrYikpXG4gNzEyOlx0XHRcdGdvdG8gZnJlZV9za2I7XG4gNzEzOlx0XG4gNzE0Olx0XHRpZiAodHVubmVsLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiA3MTU6XHRcdFx0ZXJzcGFuX2ZiX3htaXQoc2tiLCBkZXYpO1xuIDcxNjpcdFx0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIDcxNzpcdFx0fVxuIDcxODpcdFxuIDcxOTpcdFx0aWYgKGdyZV9oYW5kbGVfb2ZmbG9hZHMoc2tiLCBmYWxzZSkpXG4gNzIwOlx0XHRcdGdvdG8gZnJlZV9za2I7XG4gNzIxOlx0XG4gNzIyOlx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpXG4gNzIzOlx0XHRcdGdvdG8gZnJlZV9za2I7XG4gNzI0Olx0XG4gNzI1Olx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2UgZGV2LVx1MDAzZW10dSAmIzQzOyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSB7XG4gNzI2Olx0XHRcdGlmIChwc2tiX3RyaW0oc2tiLCBkZXYtXHUwMDNlbXR1ICYjNDM7IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pKVxuIDcyNzpcdFx0XHRcdGdvdG8gZnJlZV9za2I7XG4gNzI4Olx0XHRcdHRydW5jYXRlID0gdHJ1ZTtcbiA3Mjk6XHRcdH1cbiA3MzA6XHRcbiA3MzE6XHRcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4gNzMyOlx0XG4gNzMzOlx0XHQvKiBQdXNoIEVSU1BBTiBoZWFkZXIgKi9cbiA3MzQ6XHRcdGlmICh0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciA9PSAwKSB7XG4gNzM1Olx0XHRcdHByb3RvID0gaHRvbnMoRVRIX1BfRVJTUEFOKTtcbiA3MzY6XHRcdFx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIGZsYWdzKTtcbiA3Mzc6XHRcdH0gZWxzZSBpZiAodHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIgPT0gMSkge1xuIDczODpcdFx0XHRlcnNwYW5fYnVpbGRfaGVhZGVyKHNrYiwgbnRvaGwodHVubmVsLVx1MDAzZXBhcm1zLm9fa2V5KSxcbiA3Mzk6XHRcdFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlaW5kZXgsXG4gNzQwOlx0XHRcdFx0XHQgICAgdHJ1bmNhdGUsIHRydWUpO1xuIDc0MTpcdFx0XHRwcm90byA9IGh0b25zKEVUSF9QX0VSU1BBTik7XG4gNzQyOlx0XHR9IGVsc2UgaWYgKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDIpIHtcbiA3NDM6XHRcdFx0ZXJzcGFuX2J1aWxkX2hlYWRlcl92Mihza2IsIG50b2hsKHR1bm5lbC1cdTAwM2VwYXJtcy5vX2tleSksXG4gNzQ0Olx0XHRcdFx0XHQgICAgICAgdHVubmVsLVx1MDAzZWRpciwgdHVubmVsLVx1MDAzZWh3aWQsXG4gNzQ1Olx0XHRcdFx0XHQgICAgICAgdHJ1bmNhdGUsIHRydWUpO1xuIDc0NjpcdFx0XHRwcm90byA9IGh0b25zKEVUSF9QX0VSU1BBTjIpO1xuIDc0NzpcdFx0fSBlbHNlIHtcbiA3NDg6XHRcdFx0Z290byBmcmVlX3NrYjtcbiA3NDk6XHRcdH1cbiA3NTA6XHRcbiA3NTE6XHRcdF9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCBmbGFncyk7XG4gNzUyOlx0XHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoLCBwcm90bywgZmxhZ3MpO1xuIDc1MzpcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiA3NTQ6XHRcbiA3NTU6XHRmcmVlX3NrYjpcbiA3NTY6XHRcdGtmcmVlX3NrYihza2IpO1xuIDc1NzpcdFx0REVWX1NUQVRTX0lOQyhkZXYsIHR4X2Ryb3BwZWQpO1xuIDc1ODpcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiA3NTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODg4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTM4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBFUlNQQU4gYW5kIElQR1JFIFR1bm5lbGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgZXJzcGFuX3htaXRgIHBhdGggYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IGhhaXJ5IHF1aWNrbHkuICBgc2tiX2Nvd19oZWFkYCBpcyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vay4gSSYjMzk7bSB0aGlua2luZywgaWYgdGhlIGluaXRpYWwgaGVhZHJvb20gaXMgd3JvbmcsIGVpdGhlciB0b28gc21hbGwgb3IgdGhlIE1UVSBjYWxjdWxhdGlvbiBkdXJpbmcgdGhlIGBwc2tiX3RyaW1gIGlzIGluYWNjdXJhdGUsIHRoYXTigJlzIGdvaW5nIHRvIG1hbmlmZXN0IGFzIGEgY3Jhc2guIFRoZSBrZXJuZWwmIzM5O3MgZ29pbmcgdG8gdGVsbCBtZSBwcmV0dHkgZmFzdCB3aGVuIEkgaGF2ZSBhIHByb2JsZW0sIGVpdGhlciB3aXRoIGEgcGFuaWMgZnJvbSB0aGUgYHNrYl9wdXNoYCwgb3IgdGhlIEtBU0FOL0JVR19PTiB3aWxsIGNhdGNoIGl0LiAgU28gaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGF0dGVtcHRpbmcgdG8gY29ycmVjdCB0aGUgYGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tYCBhbmQgTVRVIGNhbGN1bGF0aW9ucywgcGFydGljdWxhcmx5IGluIHJlc3BvbnNlIHRvIGNoYW5nZXMgaW4gbGluayBwYXJhbWV0ZXJzIGFuZCB0aGUgRVJTUEFOIHZlcnNpb24vaGVhZGVyIGxlbmd0aC4KClRoZSBgaXBncmVfdHVubmVsX2N0bGAgY2hhbmdlIGlzIGludGVyZXN0aW5nLiBUaGV5IGFyZSBtb3ZpbmcgdG8gdXNlIHRoZSBgaGxlbmAgd2l0aCB0aGUgYGlwZ3JlX2xpbmtfdXBkYXRlYC4gSSBuZWVkIHRvIHRyYWNrIHdoZXJlIHRoYXQmIzM5O3MgYmVpbmcgdXNlZC4gVGhlIHVwZGF0ZSBmdW5jdGlvbiBpcyB3aGF0IG1vZGlmaWVzIHRoZSB0dW5uZWxlZCBkZXZpY2UsIHNldHRpbmcgdGhlIGB0dW5uZWwtJmd0O3R1bl9obGVuYC4gVGhleSBhcmUgdGhlbiBzZXR0aW5nIGB0dW5uZWwtJmd0O2hsZW5gIGJhc2VkIG9uIGB0dW5uZWwtJmd0O3R1bl9obGVuYCBhbmQgYHR1bm5lbC0mZ3Q7ZW5jYXBfaGxlbmAuICBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc2Agc2VlbXMgbGlrZSB0aGUga2V5IGZ1bmN0aW9uIG5vdywgYXMgdGhhdCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCB0byByZXNldCBNVFUgd2hlbiB0aGUgaGVhZGVyIGxlbmd0aCBpcyBpbnZhbGlkYXRlZC4gIEkgbmVlZCB0byBjaGVjayBob3cgTVRVIGlzIHNldC4gQWgsIGBpcF90dW5uZWxfYmluZF9kZXYoZGV2KWAgcmVjYWxjdWxhdGVzIGBkZXYtJmd0O25lZWRlZF9oZWFkcm9vbWAgYW5kIHJldHVybnMgdGhlIE1UVS4gU28gdGhhdCYjMzk7cyB0aGUgTVRVIHNvdXJjZS4KCkxvb2tpbmcgZGVlcGVyIGludG8gYGlwZ3JlX25ldGxpbmtfcGFybXNgLCB0aGV5IG1vdmVkIHRoZSBtZXRhZGF0YSBoYW5kbGluZyBsb2dpYy4gIEl0IHNlZW1zIHRvIGNoYW5nZSB0aGUgdHlwZSBvZiBhIGRldmljZSwgaWYgbWV0YWRhdGEgY29sbGVjdGlvbiBpcyBlbmFibGVkLiBHb29kLiAgSSYjMzk7bSBnbGFkIHRoZXkgYXJlIG1vdmluZyBpdCBhcm91bmQgYmFzZWQgb24gdmFsaWRhdGlvbiBvZiB0aGUgb3RoZXIgYXR0cmlidXRlcy4KCkluIHRoZSBgZXJzcGFuX25ldGxpbmtfcGFybXNgLCBzdG9yaW5nIHRoZSB2YWx1ZXMgbG9jYWxseSBiZWZvcmUgc2V0dGluZyB0aGVtIHRvIHRoZSB0dW5uZWwmIzM5O3MgdmFyaWFibGVzIGlzIHNtYXJ0LCBhbmQgY2FsbGluZyBgaXBncmVfbmV0bGlua19wYXJtc2AgZW5zdXJlcyBjb25zaXN0ZW5jeS4gVGhlIGNhbGwgdG8gYGVyc3Bhbl9saW5rX3VwZGF0ZWAgYWxzbyBzdWdnZXN0cyBhIGNvbXBsZXRlIHN0YXRlIHVwZGF0ZS4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzbuKAmXQgaW50cm9kdWNpbmcgYSBzZWN1cml0eSBpc3N1ZSBieSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ2hlY2tpbmcgZm9yIGl0LCB0aGUgcmVhZHM6IGBlcnNwYW5fdmVyYCwgYGluZGV4YCwgYGh3aWRgLCBhbmQgYGRpcmAgYXJlIGFsbCBpbml0aWFsaXplZCAqZnJvbSogdGhlIHR1bm5lbCBkYXRhIHN0cnVjdHVyZSwgc28gdGhhdCYjMzk7cyBnb29kLiBJbiBgaXBncmVfY2hhbmdlbGlua2AgYW5kIGBlcnNwYW5fY2hhbmdlbGlua2AsIGBvbGRfaGxlbmAgYW5kIGBtdHVgIGFyZSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIHZhbHVlcyBvciByZXR1cm5lZCBmcm9tIHRoZSBiaW5kIGZ1bmN0aW9uLiBOb3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UgZGlyZWN0bHkuIEkgZG9uJiMzOTt0IHNlZSBhbnkgYGNvcHlfdG9fdXNlcmAgb3IgbmV0bGluayB3cml0ZSBjYWxscyBiZWluZyBpbnRyb2R1Y2VkLCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpGaW5hbGx5LCBJIGNoZWNrZWQgZm9yIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBTcGVjaWZpY2FsbHksIHRoZSBgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcGAgdXNlZCBpbiBgaXBncmVfY2hhbmdlbGlua2AgYW5kIGBlcnNwYW5fY2hhbmdlbGlua2AuIEkmIzM5O20gdmVyaWZ5aW5nIHRoZSBpbml0aWFsaXphdGlvbiBmbG93LCBhbmQgSSBzZWUgdGhhdCBgcGAgd2FzIHRoZXJlIGJlZm9yZSwgYW5kIHRoZW4gdGhlIG5ldGxpbmsgcGFybXMgYXJlIHNldCBiYXNlZCBvbiBuZXRsaW5rIGF0dHJpYnV0ZXMuIEFsbCB0aGUgcGFyYW1ldGVycyBhcmUgc2V0IGNvcnJlY3RseSB0byBgcGAuIE92ZXJhbGwsIHRoaXMgcGF0Y2ggYXBwZWFycyB0byBiZSBhIHRhcmdldGVkIGZpeCBhbmQgdXBkYXRlIHRvIE1UVSBhbmQgaGVhZHJvb20gY2FsY3VsYXRpb24sIHdoaWxlIG1pbmltaXppbmcgdGhlIHJpc2sgb2YgaW50cm9kdWNpbmcgbmV3IG1lbW9yeS1zYWZldHkgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAwOlx0XG4xMjAxOlx0XHRwYXJtcy1cdTAwM2VpcGgucHJvdG9jb2wgPSBJUFBST1RPX0dSRTtcbjEyMDI6XHRcbjEyMDM6XHRcdGlmICghZGF0YSlcbjEyMDQ6XHRcdFx0cmV0dXJuIDA7XG4xMjA1Olx0XG4xMjA2Olx0XHRpZiAoZGF0YVtJRkxBX0dSRV9MSU5LXSlcbjEyMDc6XHRcdFx0cGFybXMtXHUwMDNlbGluayA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfTElOS10pO1xuMTIwODpcdFxuMTIwOTpcdFx0aWYgKGRhdGFbSUZMQV9HUkVfSUZMQUdTXSlcbjEyMTA6XHRcdFx0Z3JlX2ZsYWdzX3RvX3RubF9mbGFncyhwYXJtcy1cdTAwM2VpX2ZsYWdzLFxuMTIxMTpcdFx0XHRcdFx0ICAgICAgIG5sYV9nZXRfYmUxNihkYXRhW0lGTEFfR1JFX0lGTEFHU10pKTtcbjEyMTI6XHRcbjEyMTM6XHRcdGlmIChkYXRhW0lGTEFfR1JFX09GTEFHU10pXG4xMjE0Olx0XHRcdGdyZV9mbGFnc190b190bmxfZmxhZ3MocGFybXMtXHUwMDNlb19mbGFncyxcbjEyMTU6XHRcdFx0XHRcdCAgICAgICBubGFfZ2V0X2JlMTYoZGF0YVtJRkxBX0dSRV9PRkxBR1NdKSk7XG4xMjE2Olx0XG4xMjE3Olx0XHRpZiAoZGF0YVtJRkxBX0dSRV9JS0VZXSlcbjEyMTg6XHRcdFx0cGFybXMtXHUwMDNlaV9rZXkgPSBubGFfZ2V0X2JlMzIoZGF0YVtJRkxBX0dSRV9JS0VZXSk7XG4xMjE5Olx0XG4xMjIwOlx0XHRpZiAoZGF0YVtJRkxBX0dSRV9PS0VZXSlcbjEyMjE6XHRcdFx0cGFybXMtXHUwMDNlb19rZXkgPSBubGFfZ2V0X2JlMzIoZGF0YVtJRkxBX0dSRV9PS0VZXSk7XG4xMjIyOlx0XG4xMjIzOlx0XHRpZiAoZGF0YVtJRkxBX0dSRV9MT0NBTF0pXG4xMjI0Olx0XHRcdHBhcm1zLVx1MDAzZWlwaC5zYWRkciA9IG5sYV9nZXRfaW5fYWRkcihkYXRhW0lGTEFfR1JFX0xPQ0FMXSk7XG4xMjI1Olx0XG4xMjI2Olx0XHRpZiAoZGF0YVtJRkxBX0dSRV9SRU1PVEVdKVxuMTIyNzpcdFx0XHRwYXJtcy1cdTAwM2VpcGguZGFkZHIgPSBubGFfZ2V0X2luX2FkZHIoZGF0YVtJRkxBX0dSRV9SRU1PVEVdKTtcbjEyMjg6XHRcbjEyMjk6XHRcdGlmIChkYXRhW0lGTEFfR1JFX1RUTF0pXG4xMjMwOlx0XHRcdHBhcm1zLVx1MDAzZWlwaC50dGwgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfVFRMXSk7XG4xMjMxOlx0XG4xMjMyOlx0XHRpZiAoZGF0YVtJRkxBX0dSRV9UT1NdKVxuMTIzMzpcdFx0XHRwYXJtcy1cdTAwM2VpcGgudG9zID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX1RPU10pO1xuMTIzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzcwMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGlwZ3JlX25ldGxpbmtfcGFybXNgIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gbGluZXMgMTE4MCB0aHJvdWdoIDEyMDUuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYGlwZ3JlX25ldGxpbmtfcGFybXNgIGluaXRpYWxpemVzIHRoZSBgcGFybXNgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBwb3B1bGF0aW5nIHRoYXQgc3RydWN0LiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgdGhhdCB0aGlzIGxpa2VseSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggcGFyYW1ldGVycyBwYXNzZWQgdGhyb3VnaCBOZXRsaW5rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGZyb20gdGhlIE5ldGxpbmsgbWVzc2FnZSBpbnRvIHRoZSBgcGFybXNgIHN0cnVjdHVyZS4gSXMgdGhlcmUgdmFsaWRhdGlvbj8gRGVmYXVsdCB2YWx1ZXM/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoZXJlJiMzOTtsbCBiZSBhIHN3aXRjaCBzdGF0ZW1lbnQgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gTmV0bGluayBhdHRyaWJ1dGVzIHRvIGZpbGwgdGhlIG1lbWJlcnMgb2YgdGhlIGBwYXJtc2Agc3RydWN0dXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhleSBhcmUgaGFuZGxpbmcgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYXMgd2VsbC4gTXkgZXhwZXJ0aXNlIGlzIE5ldGxpbmssIHNvIEkgZXhwZWN0IGEgc3RhbmRhcmQgcGF0dGVybiBvZiBhdHRyaWJ1dGUgcGFyc2luZywgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uLCB2YWxpZGF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcgdG8gYmUgaW4gcGxheS4gSSBhbSBpbnRlcmVzdGVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9wdGltaXphdGlvbnMgYXMgd2VsbC4gSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZywgYmVjYXVzZSBpdCYjMzk7cyBpbiB0aGUgaW5pdGlhbGl6YXRpb24sIHRoaXMgcHJvYmFibHkgYWxzbyBjb3ZlcnMgc29tZSBzYW5pdHkgY2hlY2tzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTgwOlx0XHRpZiAoZGF0YVtJRkxBX0dSRV9JS0VZXSBcdTAwMjZcdTAwMjZcbjExODE6XHRcdCAgICAobnRvaGwobmxhX2dldF9iZTMyKGRhdGFbSUZMQV9HUkVfSUtFWV0pKSBcdTAwMjYgfklEX01BU0spKVxuMTE4MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExODM6XHRcbjExODQ6XHRcdGlmIChkYXRhW0lGTEFfR1JFX09LRVldIFx1MDAyNlx1MDAyNlxuMTE4NTpcdFx0ICAgIChudG9obChubGFfZ2V0X2JlMzIoZGF0YVtJRkxBX0dSRV9PS0VZXSkpIFx1MDAyNiB+SURfTUFTSykpXG4xMTg2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTE4NzpcdFxuMTE4ODpcdFx0cmV0dXJuIDA7XG4xMTg5Olx0fVxuMTE5MDpcdFxuMTE5MTpcdHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuMTE5MjpcdFx0XHRcdFx0c3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuMTE5MzpcdFx0XHRcdFx0c3RydWN0IG5sYXR0ciAqdGJbXSxcbjExOTQ6XHRcdFx0XHRcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwYXJtcyxcbjExOTU6XHRcdFx0XHRcdF9fdTMyICpmd21hcmspXG4xMTk2Olx0e1xuMTE5NzpcdFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4xMTk4Olx0XG4xMTk5Olx0XHRtZW1zZXQocGFybXMsIDAsIHNpemVvZigqcGFybXMpKTtcbjEyMDA6XHRcbjEyMDE6XHRcdHBhcm1zLVx1MDAzZWlwaC5wcm90b2NvbCA9IElQUFJPVE9fR1JFO1xuMTIwMjpcdFxuMTIwMzpcdFx0aWYgKCFkYXRhKVxuMTIwNDpcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MzkKCQkJCQkJCW91dHB1dDogMjEyCgkJCQkJCQl0aG91Z2h0czogMTQyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgY2VudGVyZWQgYXJvdW5kIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIGV4YWNlcmJhdGVzIHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCwgYGlwZ3JlX2NoYW5nZWxpbmtgLCBhbmQgYGVyc3Bhbl9jaGFuZ2VsaW5rYCBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zLgoKRmlyc3QsIEkgc2VlIHRoYXQgYG1lbXNldChwYXJtcywgMCwgc2l6ZW9mKCpwYXJtcykpO2AgaXMgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYGlwZ3JlX25ldGxpbmtfcGFybXNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBub3RpY2UgdGhlIGBpcGdyZV9jaGFuZ2VsaW5rYCBjaGFuZ2VzLiBUaGUgaW1wb3J0YW50IHBvaW50IGhlcmUgaXMgdGhhdCBldmVuIGlmIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCBvciBgaXBfdHVubmVsX2NoYW5nZWxpbmtgIHJldHVybiBhbiBlcnJvciwgdGhlIGNvZGUgbm93ICpqdW1wcyogdG8gYSBgbGlua191cGRhdGVgIGxhYmVsLCBlbnN1cmluZyBgaXBncmVfbGlua191cGRhdGVgIGlzIGNhbGxlZCBpbiBhbGwgY2FzZXMuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzLCBldmVuIG9uIGVycm9yLCBgaXBncmVfbGlua191cGRhdGVgIGFjY2Vzc2VzIG1lbWJlcnMgb2YgYW4gYWxyZWFkeSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGBzdHJ1Y3QgaXBfdHVubmVsYCAoYHRgKS4gVGhlIGtleSBpcyB0aGF0IGBwLmlfZmxhZ3NgIGFuZCBgcC5vX2ZsYWdzYCBhcmVuJiMzOTt0IGNvcGllZCB0byBgdC0mZ3Q7cGFybXNgIG9uIGVycm9yLCBidXQgdGhlIGNvZGUgc3RpbGwgdXNlcyB0aGVtLCBzbyB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB0aGVyZSEgVGhlIGNvZGUgdGhlbiB1cGRhdGVzIGhlYWRlciBsZW5ndGhzIGJhc2VkIG9uIHZhbHVlcyBpbiAqdGhhdCogYHN0cnVjdCBpcF90dW5uZWxgIChgdGApLiBUaGlzIGlzIGNvbnNpc3RlbnQgYW5kIGRvZXNuJiMzOTt0IGFwcGVhciB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKTG9va2luZyBhdCB0aGUgYGVyc3Bhbl9jaGFuZ2VsaW5rYCBmdW5jdGlvbiwgdGhlcmUmIzM5O3MgYSBzaW1pbGFyIHBhdHRlcm4uIEV2ZW4gaWYgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYCByZXR1cm5zIGFuIGVycm9yLCB0aGUgY29kZSBwcm9jZWVkcyB0byBjYWxsIGBlcnNwYW5fbGlua191cGRhdGVgLiBIZXJlLCBpbXBvcnRhbnRseSwgYGVyc3Bhbl92ZXJgIGlzbiYjMzk7dCB1cGRhdGVkIGlmIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgcmV0dXJucyBhbiBlcnJvci4gVGhlIGBlcnNwYW5fbGlua191cGRhdGVgIGZ1bmN0aW9uIGFjY2Vzc2VzIGB0dW5uZWwtJmd0O2Vyc3Bhbl92ZXJgIGFuZCBgdHVubmVsLSZndDtlbmNhcF9obGVuYCwgd2hpY2ggYXJlIGZpZWxkcyBvZiBgdGAuIElmIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgZmFpbHMsIHRoZSBgZXJzcGFuX3ZlcmAgcmV0YWlucyBpdHMgcHJpb3IgdmFsdWUuIEl0IGxvb2tzIGxpa2UgYHR1bm5lbC0mZ3Q7ZW5jYXBfaGxlbmAgKm1pZ2h0KiBoYXZlIGJlZW4gdXBkYXRlZCBieSBgaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cGAuIFRoYXTigJlzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uLCB0aGF0IHRob3NlIHdlcmUgcG90ZW50aWFsbHkgcHJldmlvdXNseSBpbml0aWFsaXplZCBhbmQgdXBkYXRlZCEgVGhlbiBpdCBwcm9jZWVkcyB0byBjYWxsIGBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKC4uLilgLiBBZ2FpbiwgdGhpcyBsb29rcyBzYWZlLCBmb2N1c2luZyBvbiBgdGAsIGFuIGFscmVhZHkgYWxsb2NhdGVkIHN0cnVjdHVyZSwgZXZlbiBvbiBlcnJvciBwYXRocy4gTm8gZGF0YSBzZWVtcyB0byBiZSB1bmluaXRpYWxpemVkIGluIHRoZSBkZXNjcmliZWQgZmxvdy4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgYWxsIGFzcGVjdHMgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBleHBsaWNpdGx5IHZlcmlmeSB0aGUgZm9sbG93aW5nOgoKKiAgICoqU3RhY2sgVmFyaWFibGVzKio6IEFyZSB0aGVyZSBhbnkgc3RhY2sgdmFyaWFibGVzIGRlY2xhcmVkIGJ1dCAqbm90KiBpbml0aWFsaXplZCBiZWZvcmUgdXNlPyBJIHNlZSBsb2NhbCB2YXJpYWJsZXMgbGlrZSBgb2xkX2hsZW5gLCBgZXJzcGFuX3ZlcmAsIGBpbmRleGAsIGBod2lkYCwgYGRpcmAsIGBtdHVgLiBJIGNhbiBzZWUgdGhhdCBhbGwgdGhlc2UgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdoZW4gdGhleSBhcmUgZGVjbGFyZWQgb3IgYXNzaWduZWQgZnJvbSBvdGhlciBzb3VyY2VzLCBzbyBJIGRvbiYjMzk7dCBzZWUgYW4gaXNzdWUgdGhlcmUuCiogICAqKkhlYXAgQWxsb2NhdGlvbnMqKjogQXJlIGFueSBuZXcgaGVhcCBhbGxvY2F0aW9ucyBiZWluZyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkPyBObywgSSBkb24mIzM5O3Qgc2VlIGFueSBjaGFuZ2VzIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBpbiB0aGlzIHBhdGNoLgoqICAgKipVc2Vyc3BhY2UgRXhwb3N1cmUqKjogSXMgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZXMgc2VudD8gTm8sIEkgZG9uJiMzOTt0IHNlZSBhbnkgY2FsbHMgdG8gYGNvcHlfdG9fdXNlcmAgb3IgYW55IG5ldyBhdHRyaWJ1dGVzIGJlaW5nIGFkZGVkLCBzbyB0aGVyZSBzaG91bGQgbm90IGJlIGFuIGlzc3VlLgoqICAgKipVbmluaXRpYWxpemVkIERhdGEgQnJhbmNoaW5nKio6IElzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGJyYW5jaGVzIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIEkgZG9uJiMzOTt0IHNlZSBhbnkgc3VjaCBicmFuY2hpbmcgcGF0dGVybnMuCiogICAqKkJ1ZmZlciBBY2Nlc3MgUmlza3MqKjogQXJlIHRoZXJlIGFueSBidWZmZXIgYWNjZXNzZXMgKGUuZy4sIHdpdGhpbiBhbiBgc2tiYCkgdGhhdCBjb3VsZCBsZWFkIHRvIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgTVRVIGFuZCBoZWFkcm9vbSBhcmUgYmVpbmcgcmVjYWxjdWxhdGVkLiBUaGUgcG90ZW50aWFsIHJpc2tzIGhlcmUgYXJlIGVpdGhlciBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBidWZmZXIgb3ZlcmZsb3csIHdoaWNoIGlzIGhhbmRsZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgYXNzZXJ0aW9ucywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKQmFzZWQgb24gdGhpcyBjb21wcmVoZW5zaXZlIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhlIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZhY3QgdGhhdCBhbnkgcG90ZW50aWFsIGVycm9ycyBhcmUgbm93IGhhbmRsZWQgYnkgdXBkYXRpbmcgcmVsZXZhbnQgYXR0cmlidXRlcyBhbmQgZ29pbmcgdG8gYGxpbmtfdXBkYXRlYCwgYW5kIHRoYXQgdGhlc2UgdmFsdWVzIGFyZSBhbGwgaW5pdGlhbGl6ZWQgb3IgZXhwbGljaXRseSBjaGVja2VkIGJlZm9yZSB1c2UuIEkgYWxzbyBsb29rZWQgYXQgYWxsIGFzcGVjdHMgdG8gZW5zdXJlIHRoYXQgSSB3YXMgYmVpbmcgdGhvcm91Z2ggYW5kIHN5c3RlbWF0aWMgYWJvdXQgdGhpcy4gVGh1cywgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLgoKVGhlcmVmb3JlOgoKYGBgCk5lZWRzS01TQU4gPSBmYWxzZS4KS01TQU5SZWFzb25pbmc6ClRoZSBwYXRjaCB1cGRhdGVzIGhlYWRlciBsZW5ndGgsIGhlYWRyb29tLCBhbmQgTVRVIHJlY2FsY3VsYXRpb24gbG9naWMgZm9yIElQIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMgKGBpcGdyZV9saW5rX3VwZGF0ZWAsIGBlcnNwYW5fbGlua191cGRhdGVgLCBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc2ApLCBhbmQgZGVmZXJzIGNvbW1pdHRpbmcKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGp1c3RzIGhlYWRlciBsZW5ndGgsIGhlYWRyb29tLCBhbmQgTVRVIGNhbGN1bGF0aW9uIGxvZ2ljIGZvciBJUCBHUkUgYW5kIEVSU1BBTiB0dW5uZWwgZGV2aWNlcyAoaW50cm9kdWNpbmcgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocywgdXBkYXRpbmcgaXBncmVfbGlua191cGRhdGUgYW5kIGVyc3Bhbl9saW5rX3VwZGF0ZSwgYW5kIGRlZmVycmluZyB0dW5uZWwgc3RhdGUgdXBkYXRlcyB1bnRpbCBuZXRsaW5rIHZhbGlkYXRpb24gY29tcGxldGVzKS4gXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggKHN1Y2ggYXMgb2xkX2hsZW4sIGVyc3Bhbl92ZXIsIGluZGV4LCBod2lkLCBkaXIsIGFuZCBtdHUpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcgc3RydWN0IGZpZWxkcyBvciBmdW5jdGlvbiByZXR1cm4gdmFsdWVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBpbmNvcnJlY3QgaGVhZHJvb20gb3IgTVRVIGNhbGN1bGF0aW9ucyB3b3VsZCBtYW5pZmVzdCBhcyBidWZmZXIgYm91bmRhcnkvb3ZlcmZsb3cgb3IgcGFja2V0IHRyYW5zbWlzc2lvbiBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIG9yIG5ldHdvcmsgc3RhY2sgYXNzZXJ0aW9ucyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkanVzdHMgaGVhZGVyIGxlbmd0aCwgaGVhZHJvb20sIGFuZCBNVFUgY2FsY3VsYXRpb24gbG9naWMgZm9yIElQIEdSRSBhbmQgRVJTUEFOIHR1bm5lbCBkZXZpY2VzIChpbnRyb2R1Y2luZyBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzLCB1cGRhdGluZyBpcGdyZV9saW5rX3VwZGF0ZSBhbmQgZXJzcGFuX2xpbmtfdXBkYXRlLCBhbmQgZGVmZXJyaW5nIHR1bm5lbCBzdGF0ZSB1cGRhdGVzIHVudGlsIG5ldGxpbmsgdmFsaWRhdGlvbiBjb21wbGV0ZXMpLiBcblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCAoc3VjaCBhcyBvbGRfaGxlbiwgZXJzcGFuX3ZlciwgaW5kZXgsIGh3aWQsIGRpciwgYW5kIG10dSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIG9yIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBoZWFkcm9vbSBvciBNVFUgY2FsY3VsYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIGJ1ZmZlciBib3VuZGFyeS9vdmVyZmxvdyBvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gb3IgbmV0d29yayBzdGFjayBhc3NlcnRpb25zIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0MjoxMC44ODkxNTUzNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDc2MTAwNzg1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIixcbiAgICBcIk5FVF9JUF9UVU5ORUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzXCIsXG4gICAgXCJpcGdyZV9saW5rX3VwZGF0ZVwiLFxuICAgIFwiZXJzcGFuX2xpbmtfdXBkYXRlXCIsXG4gICAgXCJlcnNwYW5fc2V0X2hsZW5cIixcbiAgICBcImlwZ3JlX25ldGxpbmtfcGFybXNcIixcbiAgICBcImVyc3Bhbl9uZXRsaW5rX3Bhcm1zXCIsXG4gICAgXCJpcGdyZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJlcnNwYW5fY2hhbmdlbGlua1wiLFxuICAgIFwiaXBncmVfdHVubmVsX2N0bFwiLFxuICAgIFwiZXJzcGFuX3R1bm5lbF9pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIGhlYWRlciBsZW5ndGgsIGhlYWRyb29tLCBhbmQgTVRVIGNhbGN1bGF0aW9uIGxvZ2ljIGZvciBJUCBHUkUgYW5kIEVSU1BBTiB0dW5uZWwgZGV2aWNlcyAoaW50cm9kdWNpbmcgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocywgdXBkYXRpbmcgaXBncmVfbGlua191cGRhdGUgYW5kIGVyc3Bhbl9saW5rX3VwZGF0ZSwgYW5kIGRlZmVycmluZyB0dW5uZWwgc3RhdGUgdXBkYXRlcyB1bnRpbCBuZXRsaW5rIHZhbGlkYXRpb24gY29tcGxldGVzKS4gXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCAoc3VjaCBhcyBvbGRfaGxlbiwgZXJzcGFuX3ZlciwgaW5kZXgsIGh3aWQsIGRpciwgYW5kIG10dSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIG9yIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBoZWFkcm9vbSBvciBNVFUgY2FsY3VsYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIGJ1ZmZlciBib3VuZGFyeS9vdmVyZmxvdyBvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gb3IgbmV0d29yayBzdGFjayBhc3NlcnRpb25zIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBhbmQgZml4ZXMgZGV2aWNlIGhlYWRlciBsZW5ndGgsIE1UVSwgYW5kIGhlYWRyb29tIHVwZGF0ZXMgaW4gdGhlIElQdjQgR1JFIGFuZCBFUlNQQU4gdHVubmVsaW5nIGRyaXZlcnMuIEl0IGludHJvZHVjZXMgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocygpIGFuZCB1cGRhdGVzIGxpbmsgY29uZmlndXJhdGlvbiBhbmQgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gaXBncmVfY2hhbmdlbGluaygpLCBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgaW9jdGwvbmV0bGluayBwYXJhbWV0ZXIgcGFyc2Vycy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBleGVyY2lzYWJsZSB2aWEgcnRubCBuZXRsaW5rIGFuZCB0dW5uZWwgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDI6MTAuODg5MTYyMDA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzM1MzAzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNTkwOGJkMDc0NWMzMDRhYjE0MDI0ZTMyMjdkNzZlZTBiNTcxOGYzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDEyIDE1OjQyOjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxcbmluZGV4IDdjOWFhZGZlOGZlMzkuLmZkMDM5NmFhNTAzOTUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXFxuQEAgLTQyOSw2ICs0MjksNyBAQCBpbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCxcXG4gXFx0XFx0ICAgICAgX191MzIgZndtYXJrKTtcXG4gdm9pZCBpcF90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG5ldF9pZCk7XFxuK3ZvaWQgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpO1xcbiBcXG4gYm9vbCBpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmVuY2FwKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuY1xcbmluZGV4IDgyMzA5ZWZkNDE3ZTAuLjQ4MDdmYzZkMmZkODggMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmNcXG4rKysgYi9uZXQvaXB2NC9pcF9ncmUuY1xcbkBAIC03ODksMjMgKzc4OSwyOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGlwZ3JlX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSlcXG4rLyogdHVubmVsLVxcdTAwM2VobGVuIGRlcGVuZHMgb24gdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzIGFuZCBvbiB0dW5uZWwtXFx1MDAzZWVuY2FwX2hsZW4sXFxuKyAqIGJvdGggb2Ygd2hpY2ggaXBncmVfY2hhbmdlbGluaygpIGNhbiBjaGFuZ2UuIFJlY29tcHV0ZSBpdCB0aGUgd2F5XFxuKyAqIF9fZ3JlX3R1bm5lbF9pbml0KCkgZG9lcywgdGhlbiBsZXQgaXBfdHVubmVsX2JpbmRfZGV2KCkgZGVyaXZlIHRoZSBkZXZpY2VcXG4rICogbGVuZ3RocyBmcm9tIGl0LlxcbisgKlxcbisgKiBAb2xkX2hsZW4gaXMgb25seSB1c2VkIHRvIHRlbGwgd2hldGhlciB0aGUgTVRVIGJlY2FtZSBzdGFsZSwgbmV2ZXIgYXMgYVxcbisgKiBkaWZmZXJlbmNlIHRvIGFwcGx5LCBzbyBpdCBjYW4gbm90IG1ha2UgdGhlIGxlbmd0aHMgZHJpZnQuIEl0IG11c3QgYmVcXG4rICogc2FtcGxlZCBiZWZvcmUgaXBfdHVubmVsX2VuY2FwX3NldHVwKCksIHdoaWNoIGFscmVhZHkgcHVibGlzaGVzIHRoZSBuZXdcXG4rICogdHVubmVsLVxcdTAwM2VobGVuIGZvciB1cy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlwZ3JlX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSxcXG4rXFx0XFx0XFx0ICAgICAgaW50IG9sZF9obGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuLVxcdGludCBsZW47XFxuIFxcbi1cXHRsZW4gPSB0dW5uZWwtXFx1MDAzZXR1bl9obGVuO1xcbiBcXHR0dW5uZWwtXFx1MDAzZXR1bl9obGVuID0gZ3JlX2NhbGNfaGxlbih0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbi1cXHRsZW4gPSB0dW5uZWwtXFx1MDAzZXR1bl9obGVuIC0gbGVuO1xcbi1cXHR0dW5uZWwtXFx1MDAzZWhsZW4gPSB0dW5uZWwtXFx1MDAzZWhsZW4gKyBsZW47XFxuLVxcbi1cXHRpZiAoZGV2LVxcdTAwM2VoZWFkZXJfb3BzKVxcbi1cXHRcXHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArPSBsZW47XFxuLVxcdGVsc2VcXG4tXFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gKz0gbGVuO1xcbitcXHR0dW5uZWwtXFx1MDAzZWhsZW4gPSB0dW5uZWwtXFx1MDAzZXR1bl9obGVuICsgdHVubmVsLVxcdTAwM2VlbmNhcF9obGVuO1xcbiBcXG4tXFx0aWYgKHNldF9tdHUpXFxuLVxcdFxcdFdSSVRFX09OQ0UoZGV2LVxcdTAwM2VtdHUsIG1heF90KGludCwgZGV2LVxcdTAwM2VtdHUgLSBsZW4sIDY4KSk7XFxuK1xcdC8qIE9ubHkgcmVzZXQgYSBNVFUgdGhhdCB0aGUgaGVhZGVyIGxlbmd0aCBqdXN0IGludmFsaWRhdGVkLCBzbyB0aGF0XFxuK1xcdCAqIGEgTVRVIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIgc3Vydml2ZXMgYW4gdW5yZWxhdGVkIGNoYW5nZS5cXG4rXFx0ICovXFxuK1xcdGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoZGV2LCBzZXRfbXR1IFxcdTAwMjZcXHUwMDI2IHR1bm5lbC1cXHUwMDNlaGxlbiAhPSBvbGRfaGxlbik7XFxuIFxcbiBcXHRpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFncykgfHxcXG4gXFx0ICAgICh0ZXN0X2JpdChJUF9UVU5ORUxfQ1NVTV9CSVQsIHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFncykgXFx1MDAyNlxcdTAwMjZcXG5AQCAtODUzLDcgKzg1OCw3IEBAIHN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRpcF90dW5uZWxfZmxhZ3NfY29weSh0LVxcdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLVxcdTAwM2VvX2ZsYWdzKTtcXG4gXFxuIFxcdFxcdGlmIChzdHJjbXAoZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzLVxcdTAwM2VraW5kLCBcXFwiZXJzcGFuXFxcIikpXFxuLVxcdFxcdFxcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSk7XFxuK1xcdFxcdFxcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSwgdC1cXHUwMDNlaGxlbik7XFxuIFxcdH1cXG4gXFxuIFxcdGlfZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVxcdTAwM2VpX2ZsYWdzKTtcXG5AQCAtMTIzMywxMiArMTIzOCw2IEBAIHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRwYXJtcy1cXHUwMDNlaXBoLmZyYWdfb2ZmID0gaHRvbnMoSVBfREYpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoZGF0YVtJRkxBX0dSRV9DT0xMRUNUX01FVEFEQVRBXSkge1xcbi1cXHRcXHR0LVxcdTAwM2Vjb2xsZWN0X21kID0gdHJ1ZTtcXG4tXFx0XFx0aWYgKGRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfSVBHUkUpXFxuLVxcdFxcdFxcdGRldi1cXHUwMDNldHlwZSA9IEFSUEhSRF9OT05FO1xcbi1cXHR9XFxuLVxcbiBcXHRpZiAoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKSB7XFxuIFxcdFxcdGlmIChubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSlcXG4gXFx0XFx0ICBcXHUwMDI2XFx1MDAyNiAocGFybXMtXFx1MDAzZWlwaC5mcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX0RGKSkpXFxuQEAgLTEyNDYsNiArMTI0NSwxMyBAQCBzdGF0aWMgaW50IGlwZ3JlX25ldGxpbmtfcGFybXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0dC1cXHUwMDNlaWdub3JlX2RmID0gISFubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSk7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIEFsbCBhdHRyaWJ1dGVzIGhhdmUgYmVlbiB2YWxpZGF0ZWQsIHdlIGNhbiBjaGFuZ2UgQGRldiBhbmQgQHQuICovXFxuK1xcdGlmIChkYXRhW0lGTEFfR1JFX0NPTExFQ1RfTUVUQURBVEFdKSB7XFxuK1xcdFxcdHQtXFx1MDAzZWNvbGxlY3RfbWQgPSB0cnVlO1xcbitcXHRcXHRpZiAoZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9JUEdSRSlcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChkYXRhW0lGTEFfR1JFX0ZXTUFSS10pXFxuIFxcdFxcdCpmd21hcmsgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0ZXTUFSS10pO1xcbiBcXG5AQCAtMTI1OSw0MCArMTI2NSw1MSBAQCBzdGF0aWMgaW50IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdF9fdTMyICpmd21hcmspXFxuIHtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdHU4IGVyc3Bhbl92ZXIgPSB0LVxcdTAwM2VlcnNwYW5fdmVyO1xcbitcXHR1MzIgaW5kZXggPSB0LVxcdTAwM2VpbmRleDtcXG4rXFx0dTE2IGh3aWQgPSB0LVxcdTAwM2Vod2lkO1xcbitcXHR1OCBkaXIgPSB0LVxcdTAwM2VkaXI7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRpZiAoIWRhdGEpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBwYXJtcywgZndtYXJrKTtcXG4gXFxuIFxcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKSB7XFxuLVxcdFxcdHQtXFx1MDAzZWVyc3Bhbl92ZXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pO1xcbitcXHRcXHRlcnNwYW5fdmVyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKTtcXG4gXFxuLVxcdFxcdGlmICh0LVxcdTAwM2VlcnNwYW5fdmVyIFxcdTAwM2UgMilcXG4rXFx0XFx0aWYgKGVyc3Bhbl92ZXIgXFx1MDAzZSAyKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHQtXFx1MDAzZWVyc3Bhbl92ZXIgPT0gMSkge1xcbitcXHRpZiAoZXJzcGFuX3ZlciA9PSAxKSB7XFxuIFxcdFxcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pIHtcXG4tXFx0XFx0XFx0dC1cXHUwMDNlaW5kZXggPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pO1xcbi1cXHRcXHRcXHRpZiAodC1cXHUwMDNlaW5kZXggXFx1MDAyNiB+SU5ERVhfTUFTSylcXG4rXFx0XFx0XFx0aW5kZXggPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pO1xcbitcXHRcXHRcXHRpZiAoaW5kZXggXFx1MDAyNiB+SU5ERVhfTUFTSylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIGlmICh0LVxcdTAwM2VlcnNwYW5fdmVyID09IDIpIHtcXG4rXFx0fSBlbHNlIGlmIChlcnNwYW5fdmVyID09IDIpIHtcXG4gXFx0XFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pIHtcXG4tXFx0XFx0XFx0dC1cXHUwMDNlZGlyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9ESVJdKTtcXG4tXFx0XFx0XFx0aWYgKHQtXFx1MDAzZWRpciBcXHUwMDI2IH4oRElSX01BU0sgXFx1MDAzZVxcdTAwM2UgRElSX09GRlNFVCkpXFxuK1xcdFxcdFxcdGRpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7XFxuK1xcdFxcdFxcdGlmIChkaXIgXFx1MDAyNiB+KERJUl9NQVNLIFxcdTAwM2VcXHUwMDNlIERJUl9PRkZTRVQpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pIHtcXG4tXFx0XFx0XFx0dC1cXHUwMDNlaHdpZCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKTtcXG4tXFx0XFx0XFx0aWYgKHQtXFx1MDAzZWh3aWQgXFx1MDAyNiB+KEhXSURfTUFTSyBcXHUwMDNlXFx1MDAzZSBIV0lEX09GRlNFVCkpXFxuK1xcdFxcdFxcdGh3aWQgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfR1JFX0VSU1BBTl9IV0lEXSk7XFxuK1xcdFxcdFxcdGlmIChod2lkIFxcdTAwMjYgfihIV0lEX01BU0sgXFx1MDAzZVxcdTAwM2UgSFdJRF9PRkZTRVQpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRlcnIgPSBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAdC4gKi9cXG4rXFx0dC1cXHUwMDNlZXJzcGFuX3ZlciA9IGVyc3Bhbl92ZXI7XFxuK1xcdHQtXFx1MDAzZWluZGV4ID0gaW5kZXg7XFxuK1xcdHQtXFx1MDAzZWh3aWQgPSBod2lkO1xcbitcXHR0LVxcdTAwM2VkaXIgPSBkaXI7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTM1MSwxOCArMTM2OCw0MyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19maWxsX21ldGFkYXRhX2RzdFxcdD0gZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0LFxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgZXJzcGFuX3NldF9obGVuKHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbClcXG4re1xcbitcXHQvKiBWZXJzaW9uIDAgdXNlcyBhIDQtYnl0ZSBHUkUgaGVhZGVyLCBvdGhlciB2ZXJzaW9ucyB1c2UgOCBieXRlcy4gKi9cXG4rXFx0dHVubmVsLVxcdTAwM2V0dW5faGxlbiA9IHR1bm5lbC1cXHUwMDNlZXJzcGFuX3ZlciA9PSAwID8gNCA6IDg7XFxuK1xcbitcXHR0dW5uZWwtXFx1MDAzZWhsZW4gPSB0dW5uZWwtXFx1MDAzZXR1bl9obGVuICsgdHVubmVsLVxcdTAwM2VlbmNhcF9obGVuICtcXG4rXFx0XFx0ICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC1cXHUwMDNlZXJzcGFuX3Zlcik7XFxuK31cXG4rXFxuKy8qIEJvdGggdHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyIGFuZCB0dW5uZWwtXFx1MDAzZWVuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbVxcbisgKiBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgYm90aCBmZWVkIHR1bm5lbC1cXHUwMDNlaGxlbi4gUmVjb21wdXRlIGl0LCB0aGVuIGxldFxcbisgKiBpcF90dW5uZWxfYmluZF9kZXYoKSBkZXJpdmUgdGhlIGRldmljZSBsZW5ndGhzIGZyb20gaXQuXFxuKyAqXFxuKyAqIEFzIGluIGlwZ3JlX2xpbmtfdXBkYXRlKCksIEBvbGRfaGxlbiBvbmx5IHRlbGxzIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWVcXG4rICogc3RhbGUgYW5kIG11c3QgYmUgc2FtcGxlZCBiZWZvcmUgaXBfdHVubmVsX2VuY2FwX3NldHVwKCksIHdoaWNoXFxuKyAqIHJlY29tcHV0ZXMgdHVubmVsLVxcdTAwM2VobGVuIHdpdGhvdXQgdGhlIEVSU1BBTiBwYXJ0LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZXJzcGFuX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSxcXG4rXFx0XFx0XFx0ICAgICAgIGludCBvbGRfaGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXG4rXFx0ZXJzcGFuX3NldF9obGVuKHR1bm5lbCk7XFxuK1xcbitcXHQvKiBPbmx5IHJlc2V0IGEgTVRVIHRoYXQgdGhlIGhlYWRlciBsZW5ndGgganVzdCBpbnZhbGlkYXRlZCwgc28gdGhhdFxcbitcXHQgKiBhIE1UVSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyIHN1cnZpdmVzIGFuIHVucmVsYXRlZCBjaGFuZ2UuXFxuK1xcdCAqL1xcbitcXHRpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKGRldiwgc2V0X210dSBcXHUwMDI2XFx1MDAyNiB0dW5uZWwtXFx1MDAzZWhsZW4gIT0gb2xkX2hsZW4pO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGVyc3Bhbl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcbi1cXHRpZiAodHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyID09IDApXFxuLVxcdFxcdHR1bm5lbC1cXHUwMDNldHVuX2hsZW4gPSA0OyAvKiA0LWJ5dGUgR1JFIGhkci4gKi9cXG4tXFx0ZWxzZVxcbi1cXHRcXHR0dW5uZWwtXFx1MDAzZXR1bl9obGVuID0gODsgLyogOC1ieXRlIEdSRSBoZHIuICovXFxuK1xcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xcbiBcXG4gXFx0dHVubmVsLVxcdTAwM2VwYXJtcy5pcGgucHJvdG9jb2wgPSBJUFBST1RPX0dSRTtcXG4tXFx0dHVubmVsLVxcdTAwM2VobGVuID0gdHVubmVsLVxcdTAwM2V0dW5faGxlbiArIHR1bm5lbC1cXHUwMDNlZW5jYXBfaGxlbiArXFxuLVxcdFxcdCAgICAgICBlcnNwYW5faGRyX2xlbih0dW5uZWwtXFx1MDAzZWVyc3Bhbl92ZXIpO1xcbiBcXG4gXFx0ZGV2LVxcdTAwM2VmZWF0dXJlc1xcdFxcdHw9IEdSRV9GRUFUVVJFUztcXG4gXFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlc1xcdHw9IEdSRV9GRUFUVVJFUztcXG5AQCAtMTQ1OSw2ICsxNTAxLDcgQEAgc3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuIFxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xcbiBcXHRfX3UzMiBmd21hcmsgPSB0LVxcdTAwM2Vmd21hcms7XFxuK1xcdGludCBvbGRfaGxlbiA9IHQtXFx1MDAzZWhsZW47XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVxcdTAwM2VuZXQpKVxcbkBAIC0xNDcwLDE4ICsxNTEzLDI0IEBAIHN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbiBcXG4gXFx0ZXJyID0gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBcXHUwMDI2cCwgXFx1MDAyNmZ3bWFyayk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIGxpbmtfdXBkYXRlO1xcbiBcXG4gXFx0ZXJyID0gaXBfdHVubmVsX2NoYW5nZWxpbmsoZGV2LCB0YiwgXFx1MDAyNnAsIGZ3bWFyayk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIGxpbmtfdXBkYXRlO1xcbiBcXG4gXFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cXHUwMDNlcGFybXMuaV9mbGFncywgcC5pX2ZsYWdzKTtcXG4gXFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cXHUwMDNlcGFybXMub19mbGFncywgcC5vX2ZsYWdzKTtcXG4gXFxuLVxcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSk7XFxuK2xpbmtfdXBkYXRlOlxcbitcXHQvKiBpcGdyZV9uZXdsaW5rX2VuY2FwX3NldHVwKCkgaGFzIHB1Ymxpc2hlZCBhIG5ldyBlbmNhcHN1bGF0aW9uIGV2ZW5cXG4rXFx0ICogaWYgdGhlIHJlc3Qgb2YgdGhlIHJlcXVlc3QgZmFpbGVkLCBzbyB0aGUgbGVuZ3RocyBtdXN0IGJlIHJlZnJlc2hlZFxcbitcXHQgKiBvbiB0aGUgZXJyb3IgcGF0aHMgYXMgd2VsbC4gVGhpcyBoYXMgdG8gY29tZSBsYXN0LCBiZWNhdXNlXFxuK1xcdCAqIGlwZ3JlX2xpbmtfdXBkYXRlKCkgbmVlZHMgdGhlIGZsYWdzIGNvcGllZCBhYm92ZS5cXG4rXFx0ICovXFxuK1xcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSwgb2xkX2hsZW4pO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5AQCAtMTQ5MSw2ICsxNTQwLDcgQEAgc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbiBcXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcXG4gXFx0X191MzIgZndtYXJrID0gdC1cXHUwMDNlZndtYXJrO1xcbitcXHRpbnQgb2xkX2hsZW4gPSB0LVxcdTAwM2VobGVuO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG5AQCAtMTUwMSw2ICsxNTUxLDE2IEBAIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdGVyciA9IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIFxcdTAwMjZwLCBcXHUwMDI2ZndtYXJrKTtcXG4rXFxuK1xcdC8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24sIGFuZFxcbitcXHQgKiBlcnNwYW5fbmV0bGlua19wYXJtcygpIGEgbmV3IEVSU1BBTiB2ZXJzaW9uLCBib3RoIG9mIHdoaWNoIGNoYW5nZVxcbitcXHQgKiB0aGUgaGVhZGVyIGxlbmd0aC4gUmVmcmVzaCB0aGUgbGVuZ3RocyBiZWZvcmUgbG9va2luZyBhdCBAZXJyOlxcbitcXHQgKiBlcnNwYW5feG1pdCgpIHNpemVzIGl0cyBwdXNoIGZyb20gdHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyLCBhbmQgYm90aCB0aGlzXFxuK1xcdCAqIGVycm9yIHBhdGggYW5kIGlwX3R1bm5lbF9jaGFuZ2VsaW5rKCkgYmVsb3cgbGVhdmUgdGhlIG5ld1xcbitcXHQgKiBlbmNhcHN1bGF0aW9uIGJlaGluZC5cXG4rXFx0ICovXFxuK1xcdGVyc3Bhbl9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcXG4rXFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbmluZGV4IGU2YmNmMDE0MTFkMGIuLjZiOTNjMWZkYTQ5NDggMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbkBAIC0zMjYsNiArMzI2LDIyIEBAIHN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdHJldHVybiBtdHU7XFxuIH1cXG4gXFxuKy8qIFJlY29tcHV0ZSBkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSBhbmQgZGV2LVxcdTAwM2VtdHUgYWZ0ZXIgdHVubmVsLVxcdTAwM2VobGVuIGNoYW5nZWQuXFxuKyAqXFxuKyAqIEJvdGggYXJlIGRlcml2ZWQgZnJvbSB0dW5uZWwtXFx1MDAzZWhsZW4sIHNvIHRoZXkgbXVzdCBiZSByZWNvbXB1dGVkIGZyb20gaXRcXG4rICogcmF0aGVyIHRoYW4gYWRqdXN0ZWQgYnkgdGhlIGRpZmZlcmVuY2U6IGlwX3R1bm5lbF9iaW5kX2RldigpIGlzIGFsc29cXG4rICogY2FsbGVkIGZyb20gbmRvX2luaXQoKSBhbmQgZnJvbSBpcF90dW5uZWxfdXBkYXRlKCksIGFuZCBhIGRyaXZlciBhZGRpbmdcXG4rICogaXRzIG93biBkZWx0YSBvbiB0b3Agd291bGQgZG91YmxlIGNvdW50IGl0LlxcbisgKi9cXG4rdm9pZCBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSlcXG4re1xcbitcXHRpbnQgbXR1ID0gaXBfdHVubmVsX2JpbmRfZGV2KGRldik7XFxuK1xcbitcXHRpZiAoc2V0X210dSlcXG4rXFx0XFx0V1JJVEVfT05DRShkZXYtXFx1MDAzZW10dSwgbXR1KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKTtcXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwYXJtcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDI6MTEuMjYzMzg4NDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU4MDM2NDUzMzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiTkVUX0lQR1JFX0RFTVVYXCIsXG4gICAgXCJORVRfSVBfVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc1wiLFxuICAgIFwiaXBncmVfbGlua191cGRhdGVcIixcbiAgICBcImVyc3Bhbl9saW5rX3VwZGF0ZVwiLFxuICAgIFwiZXJzcGFuX3NldF9obGVuXCIsXG4gICAgXCJpcGdyZV9uZXRsaW5rX3Bhcm1zXCIsXG4gICAgXCJlcnNwYW5fbmV0bGlua19wYXJtc1wiLFxuICAgIFwiaXBncmVfY2hhbmdlbGlua1wiLFxuICAgIFwiZXJzcGFuX2NoYW5nZWxpbmtcIixcbiAgICBcImlwZ3JlX3R1bm5lbF9jdGxcIixcbiAgICBcImVyc3Bhbl90dW5uZWxfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBhbmQgZml4ZXMgZGV2aWNlIGhlYWRlciBsZW5ndGgsIE1UVSwgYW5kIGhlYWRyb29tIHVwZGF0ZXMgaW4gdGhlIElQdjQgR1JFIGFuZCBFUlNQQU4gdHVubmVsaW5nIGRyaXZlcnMuIEl0IGludHJvZHVjZXMgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocygpIGFuZCB1cGRhdGVzIGxpbmsgY29uZmlndXJhdGlvbiBhbmQgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gaXBncmVfY2hhbmdlbGluaygpLCBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgaW9jdGwvbmV0bGluayBwYXJhbWV0ZXIgcGFyc2Vycy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBleGVyY2lzYWJsZSB2aWEgcnRubCBuZXRsaW5rIGFuZCB0dW5uZWwgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNTkwOGJkMDc0NWMzMDRhYjE0MDI0ZTMyMjdkNzZlZTBiNTcxOGYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTU6NDI6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmggYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbmluZGV4IDdjOWFhZGZlOGZlMzkuLmZkMDM5NmFhNTAzOTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuQEAgLTQyOSw2ICs0MjksNyBAQCBpbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCxcbiBcdFx0ICAgICAgX191MzIgZndtYXJrKTtcbiB2b2lkIGlwX3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbmV0X2lkKTtcbit2b2lkIGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KTtcbiBcbiBib29sIGlwX3R1bm5lbF9uZXRsaW5rX2VuY2FwX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbiBcdFx0XHRcdCAgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmVuY2FwKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jXG5pbmRleCA4MjMwOWVmZDQxN2UwLi40ODA3ZmM2ZDJmZDg4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmNcbisrKyBiL25ldC9pcHY0L2lwX2dyZS5jXG5AQCAtNzg5LDIzICs3ODksMjggQEAgc3RhdGljIG5ldGRldl90eF90IGdyZV90YXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG4gXG4tc3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KVxuKy8qIHR1bm5lbC1cdTAwM2VobGVuIGRlcGVuZHMgb24gdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MgYW5kIG9uIHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuLFxuKyAqIGJvdGggb2Ygd2hpY2ggaXBncmVfY2hhbmdlbGluaygpIGNhbiBjaGFuZ2UuIFJlY29tcHV0ZSBpdCB0aGUgd2F5XG4rICogX19ncmVfdHVubmVsX2luaXQoKSBkb2VzLCB0aGVuIGxldCBpcF90dW5uZWxfYmluZF9kZXYoKSBkZXJpdmUgdGhlIGRldmljZVxuKyAqIGxlbmd0aHMgZnJvbSBpdC5cbisgKlxuKyAqIEBvbGRfaGxlbiBpcyBvbmx5IHVzZWQgdG8gdGVsbCB3aGV0aGVyIHRoZSBNVFUgYmVjYW1lIHN0YWxlLCBuZXZlciBhcyBhXG4rICogZGlmZmVyZW5jZSB0byBhcHBseSwgc28gaXQgY2FuIG5vdCBtYWtlIHRoZSBsZW5ndGhzIGRyaWZ0LiBJdCBtdXN0IGJlXG4rICogc2FtcGxlZCBiZWZvcmUgaXBfdHVubmVsX2VuY2FwX3NldHVwKCksIHdoaWNoIGFscmVhZHkgcHVibGlzaGVzIHRoZSBuZXdcbisgKiB0dW5uZWwtXHUwMDNlaGxlbiBmb3IgdXMuXG4rICovXG4rc3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1LFxuK1x0XHRcdCAgICAgIGludCBvbGRfaGxlbilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0aW50IGxlbjtcbiBcbi1cdGxlbiA9IHR1bm5lbC1cdTAwM2V0dW5faGxlbjtcbiBcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IGdyZV9jYWxjX2hsZW4odHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuLVx0bGVuID0gdHVubmVsLVx1MDAzZXR1bl9obGVuIC0gbGVuO1xuLVx0dHVubmVsLVx1MDAzZWhsZW4gPSB0dW5uZWwtXHUwMDNlaGxlbiArIGxlbjtcbi1cbi1cdGlmIChkZXYtXHUwMDNlaGVhZGVyX29wcylcbi1cdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArPSBsZW47XG4tXHRlbHNlXG4tXHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gKz0gbGVuO1xuK1x0dHVubmVsLVx1MDAzZWhsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gKyB0dW5uZWwtXHUwMDNlZW5jYXBfaGxlbjtcbiBcbi1cdGlmIChzZXRfbXR1KVxuLVx0XHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG1heF90KGludCwgZGV2LVx1MDAzZW10dSAtIGxlbiwgNjgpKTtcbitcdC8qIE9ubHkgcmVzZXQgYSBNVFUgdGhhdCB0aGUgaGVhZGVyIGxlbmd0aCBqdXN0IGludmFsaWRhdGVkLCBzbyB0aGF0XG4rXHQgKiBhIE1UVSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyIHN1cnZpdmVzIGFuIHVucmVsYXRlZCBjaGFuZ2UuXG4rXHQgKi9cbitcdGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoZGV2LCBzZXRfbXR1IFx1MDAyNlx1MDAyNiB0dW5uZWwtXHUwMDNlaGxlbiAhPSBvbGRfaGxlbik7XG4gXG4gXHRpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKSB8fFxuIFx0ICAgICh0ZXN0X2JpdChJUF9UVU5ORUxfQ1NVTV9CSVQsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbkBAIC04NTMsNyArODU4LDcgQEAgc3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMub19mbGFncywgcC1cdTAwM2VvX2ZsYWdzKTtcbiBcbiBcdFx0aWYgKHN0cmNtcChkZXYtXHUwMDNlcnRubF9saW5rX29wcy1cdTAwM2VraW5kLCBcImVyc3BhblwiKSlcbi1cdFx0XHRpcGdyZV9saW5rX3VwZGF0ZShkZXYsIHRydWUpO1xuK1x0XHRcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSwgdC1cdTAwM2VobGVuKTtcbiBcdH1cbiBcbiBcdGlfZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVx1MDAzZWlfZmxhZ3MpO1xuQEAgLTEyMzMsMTIgKzEyMzgsNiBAQCBzdGF0aWMgaW50IGlwZ3JlX25ldGxpbmtfcGFybXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cGFybXMtXHUwMDNlaXBoLmZyYWdfb2ZmID0gaHRvbnMoSVBfREYpO1xuIFx0fVxuIFxuLVx0aWYgKGRhdGFbSUZMQV9HUkVfQ09MTEVDVF9NRVRBREFUQV0pIHtcbi1cdFx0dC1cdTAwM2Vjb2xsZWN0X21kID0gdHJ1ZTtcbi1cdFx0aWYgKGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JUEdSRSlcbi1cdFx0XHRkZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9OT05FO1xuLVx0fVxuLVxuIFx0aWYgKGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSkge1xuIFx0XHRpZiAobmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pXG4gXHRcdCAgXHUwMDI2XHUwMDI2IChwYXJtcy1cdTAwM2VpcGguZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX0RGKSkpXG5AQCAtMTI0Niw2ICsxMjQ1LDEzIEBAIHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHR0LVx1MDAzZWlnbm9yZV9kZiA9ICEhbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pO1xuIFx0fVxuIFxuK1x0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAZGV2IGFuZCBAdC4gKi9cbitcdGlmIChkYXRhW0lGTEFfR1JFX0NPTExFQ1RfTUVUQURBVEFdKSB7XG4rXHRcdHQtXHUwMDNlY29sbGVjdF9tZCA9IHRydWU7XG4rXHRcdGlmIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSVBHUkUpXG4rXHRcdFx0ZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTk9ORTtcbitcdH1cbitcbiBcdGlmIChkYXRhW0lGTEFfR1JFX0ZXTUFSS10pXG4gXHRcdCpmd21hcmsgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0ZXTUFSS10pO1xuIFxuQEAgLTEyNTksNDAgKzEyNjUsNTEgQEAgc3RhdGljIGludCBlcnNwYW5fbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0X191MzIgKmZ3bWFyaylcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdHU4IGVyc3Bhbl92ZXIgPSB0LVx1MDAzZWVyc3Bhbl92ZXI7XG4rXHR1MzIgaW5kZXggPSB0LVx1MDAzZWluZGV4O1xuK1x0dTE2IGh3aWQgPSB0LVx1MDAzZWh3aWQ7XG4rXHR1OCBkaXIgPSB0LVx1MDAzZWRpcjtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiBcdGlmICghZGF0YSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xuIFxuIFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pIHtcbi1cdFx0dC1cdTAwM2VlcnNwYW5fdmVyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKTtcbitcdFx0ZXJzcGFuX3ZlciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSk7XG4gXG4tXHRcdGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgXHUwMDNlIDIpXG4rXHRcdGlmIChlcnNwYW5fdmVyIFx1MDAzZSAyKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0aWYgKHQtXHUwMDNlZXJzcGFuX3ZlciA9PSAxKSB7XG4rXHRpZiAoZXJzcGFuX3ZlciA9PSAxKSB7XG4gXHRcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pIHtcbi1cdFx0XHR0LVx1MDAzZWluZGV4ID0gbmxhX2dldF91MzIoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSU5ERVhdKTtcbi1cdFx0XHRpZiAodC1cdTAwM2VpbmRleCBcdTAwMjYgfklOREVYX01BU0spXG4rXHRcdFx0aW5kZXggPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pO1xuK1x0XHRcdGlmIChpbmRleCBcdTAwMjYgfklOREVYX01BU0spXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuLVx0fSBlbHNlIGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgPT0gMikge1xuK1x0fSBlbHNlIGlmIChlcnNwYW5fdmVyID09IDIpIHtcbiBcdFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pIHtcbi1cdFx0XHR0LVx1MDAzZWRpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7XG4tXHRcdFx0aWYgKHQtXHUwMDNlZGlyIFx1MDAyNiB+KERJUl9NQVNLIFx1MDAzZVx1MDAzZSBESVJfT0ZGU0VUKSlcbitcdFx0XHRkaXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pO1xuK1x0XHRcdGlmIChkaXIgXHUwMDI2IH4oRElSX01BU0sgXHUwMDNlXHUwMDNlIERJUl9PRkZTRVQpKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKSB7XG4tXHRcdFx0dC1cdTAwM2Vod2lkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pO1xuLVx0XHRcdGlmICh0LVx1MDAzZWh3aWQgXHUwMDI2IH4oSFdJRF9NQVNLIFx1MDAzZVx1MDAzZSBIV0lEX09GRlNFVCkpXG4rXHRcdFx0aHdpZCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKTtcbitcdFx0XHRpZiAoaHdpZCBcdTAwMjYgfihIV0lEX01BU0sgXHUwMDNlXHUwMDNlIEhXSURfT0ZGU0VUKSlcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHR9XG4gXG4rXHRlcnIgPSBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIEFsbCBhdHRyaWJ1dGVzIGhhdmUgYmVlbiB2YWxpZGF0ZWQsIHdlIGNhbiBjaGFuZ2UgQHQuICovXG4rXHR0LVx1MDAzZWVyc3Bhbl92ZXIgPSBlcnNwYW5fdmVyO1xuK1x0dC1cdTAwM2VpbmRleCA9IGluZGV4O1xuK1x0dC1cdTAwM2Vod2lkID0gaHdpZDtcbitcdHQtXHUwMDNlZGlyID0gZGlyO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEzNTEsMTggKzEzNjgsNDMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBncmVfdGFwX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX2ZpbGxfbWV0YWRhdGFfZHN0XHQ9IGdyZV9maWxsX21ldGFkYXRhX2RzdCxcbiB9O1xuIFxuK3N0YXRpYyB2b2lkIGVyc3Bhbl9zZXRfaGxlbihzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwpXG4re1xuK1x0LyogVmVyc2lvbiAwIHVzZXMgYSA0LWJ5dGUgR1JFIGhlYWRlciwgb3RoZXIgdmVyc2lvbnMgdXNlIDggYnl0ZXMuICovXG4rXHR0dW5uZWwtXHUwMDNldHVuX2hsZW4gPSB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciA9PSAwID8gNCA6IDg7XG4rXG4rXHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2V0dW5faGxlbiArIHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuICtcbitcdFx0ICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyKTtcbit9XG4rXG4rLyogQm90aCB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciBhbmQgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbVxuKyAqIGVyc3Bhbl9jaGFuZ2VsaW5rKCksIGFuZCBib3RoIGZlZWQgdHVubmVsLVx1MDAzZWhsZW4uIFJlY29tcHV0ZSBpdCwgdGhlbiBsZXRcbisgKiBpcF90dW5uZWxfYmluZF9kZXYoKSBkZXJpdmUgdGhlIGRldmljZSBsZW5ndGhzIGZyb20gaXQuXG4rICpcbisgKiBBcyBpbiBpcGdyZV9saW5rX3VwZGF0ZSgpLCBAb2xkX2hsZW4gb25seSB0ZWxscyB3aGV0aGVyIHRoZSBNVFUgYmVjYW1lXG4rICogc3RhbGUgYW5kIG11c3QgYmUgc2FtcGxlZCBiZWZvcmUgaXBfdHVubmVsX2VuY2FwX3NldHVwKCksIHdoaWNoXG4rICogcmVjb21wdXRlcyB0dW5uZWwtXHUwMDNlaGxlbiB3aXRob3V0IHRoZSBFUlNQQU4gcGFydC5cbisgKi9cbitzdGF0aWMgdm9pZCBlcnNwYW5fbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1LFxuK1x0XHRcdCAgICAgICBpbnQgb2xkX2hsZW4pXG4re1xuK1x0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xuK1xuK1x0LyogT25seSByZXNldCBhIE1UVSB0aGF0IHRoZSBoZWFkZXIgbGVuZ3RoIGp1c3QgaW52YWxpZGF0ZWQsIHNvIHRoYXRcbitcdCAqIGEgTVRVIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIgc3Vydml2ZXMgYW4gdW5yZWxhdGVkIGNoYW5nZS5cbitcdCAqL1xuK1x0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbit9XG4rXG4gc3RhdGljIGludCBlcnNwYW5fdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0aWYgKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDApXG4tXHRcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IDQ7IC8qIDQtYnl0ZSBHUkUgaGRyLiAqL1xuLVx0ZWxzZVxuLVx0XHR0dW5uZWwtXHUwMDNldHVuX2hsZW4gPSA4OyAvKiA4LWJ5dGUgR1JFIGhkci4gKi9cbitcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xuIFxuIFx0dHVubmVsLVx1MDAzZXBhcm1zLmlwaC5wcm90b2NvbCA9IElQUFJPVE9fR1JFO1xuLVx0dHVubmVsLVx1MDAzZWhsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gKyB0dW5uZWwtXHUwMDNlZW5jYXBfaGxlbiArXG4tXHRcdCAgICAgICBlcnNwYW5faGRyX2xlbih0dW5uZWwtXHUwMDNlZXJzcGFuX3Zlcik7XG4gXG4gXHRkZXYtXHUwMDNlZmVhdHVyZXNcdFx0fD0gR1JFX0ZFQVRVUkVTO1xuIFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzXHR8PSBHUkVfRkVBVFVSRVM7XG5AQCAtMTQ1OSw2ICsxNTAxLDcgQEAgc3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XG4gXHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbitcdGludCBvbGRfaGxlbiA9IHQtXHUwMDNlaGxlbjtcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG5AQCAtMTQ3MCwxOCArMTUxMywyNCBAQCBzdGF0aWMgaW50IGlwZ3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcbiBcdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgXHUwMDI2cCwgXHUwMDI2ZndtYXJrKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gbGlua191cGRhdGU7XG4gXG4gXHRlcnIgPSBpcF90dW5uZWxfY2hhbmdlbGluayhkZXYsIHRiLCBcdTAwMjZwLCBmd21hcmspO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBsaW5rX3VwZGF0ZTtcbiBcbiBcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMuaV9mbGFncywgcC5pX2ZsYWdzKTtcbiBcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMub19mbGFncywgcC5vX2ZsYWdzKTtcbiBcbi1cdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSk7XG4rbGlua191cGRhdGU6XG4rXHQvKiBpcGdyZV9uZXdsaW5rX2VuY2FwX3NldHVwKCkgaGFzIHB1Ymxpc2hlZCBhIG5ldyBlbmNhcHN1bGF0aW9uIGV2ZW5cbitcdCAqIGlmIHRoZSByZXN0IG9mIHRoZSByZXF1ZXN0IGZhaWxlZCwgc28gdGhlIGxlbmd0aHMgbXVzdCBiZSByZWZyZXNoZWRcbitcdCAqIG9uIHRoZSBlcnJvciBwYXRocyBhcyB3ZWxsLiBUaGlzIGhhcyB0byBjb21lIGxhc3QsIGJlY2F1c2VcbitcdCAqIGlwZ3JlX2xpbmtfdXBkYXRlKCkgbmVlZHMgdGhlIGZsYWdzIGNvcGllZCBhYm92ZS5cbitcdCAqL1xuK1x0aXBncmVfbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdLCBvbGRfaGxlbik7XG4gXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbkBAIC0xNDkxLDYgKzE1NDAsNyBAQCBzdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XG4gXHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbitcdGludCBvbGRfaGxlbiA9IHQtXHUwMDNlaGxlbjtcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG5AQCAtMTUwMSw2ICsxNTUxLDE2IEBAIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGVyciA9IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIFx1MDAyNnAsIFx1MDAyNmZ3bWFyayk7XG4rXG4rXHQvKiBpcGdyZV9uZXdsaW5rX2VuY2FwX3NldHVwKCkgaGFzIHB1Ymxpc2hlZCBhIG5ldyBlbmNhcHN1bGF0aW9uLCBhbmRcbitcdCAqIGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKCkgYSBuZXcgRVJTUEFOIHZlcnNpb24sIGJvdGggb2Ygd2hpY2ggY2hhbmdlXG4rXHQgKiB0aGUgaGVhZGVyIGxlbmd0aC4gUmVmcmVzaCB0aGUgbGVuZ3RocyBiZWZvcmUgbG9va2luZyBhdCBAZXJyOlxuK1x0ICogZXJzcGFuX3htaXQoKSBzaXplcyBpdHMgcHVzaCBmcm9tIHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyLCBhbmQgYm90aCB0aGlzXG4rXHQgKiBlcnJvciBwYXRoIGFuZCBpcF90dW5uZWxfY2hhbmdlbGluaygpIGJlbG93IGxlYXZlIHRoZSBuZXdcbitcdCAqIGVuY2Fwc3VsYXRpb24gYmVoaW5kLlxuK1x0ICovXG4rXHRlcnNwYW5fbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdLCBvbGRfaGxlbik7XG4rXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3R1bm5lbC5jIGIvbmV0L2lwdjQvaXBfdHVubmVsLmNcbmluZGV4IGU2YmNmMDE0MTFkMGIuLjZiOTNjMWZkYTQ5NDggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF90dW5uZWwuY1xuKysrIGIvbmV0L2lwdjQvaXBfdHVubmVsLmNcbkBAIC0zMjYsNiArMzI2LDIyIEBAIHN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gbXR1O1xuIH1cbiBcbisvKiBSZWNvbXB1dGUgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSBhbmQgZGV2LVx1MDAzZW10dSBhZnRlciB0dW5uZWwtXHUwMDNlaGxlbiBjaGFuZ2VkLlxuKyAqXG4rICogQm90aCBhcmUgZGVyaXZlZCBmcm9tIHR1bm5lbC1cdTAwM2VobGVuLCBzbyB0aGV5IG11c3QgYmUgcmVjb21wdXRlZCBmcm9tIGl0XG4rICogcmF0aGVyIHRoYW4gYWRqdXN0ZWQgYnkgdGhlIGRpZmZlcmVuY2U6IGlwX3R1bm5lbF9iaW5kX2RldigpIGlzIGFsc29cbisgKiBjYWxsZWQgZnJvbSBuZG9faW5pdCgpIGFuZCBmcm9tIGlwX3R1bm5lbF91cGRhdGUoKSwgYW5kIGEgZHJpdmVyIGFkZGluZ1xuKyAqIGl0cyBvd24gZGVsdGEgb24gdG9wIHdvdWxkIGRvdWJsZSBjb3VudCBpdC5cbisgKi9cbit2b2lkIGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KVxuK3tcbitcdGludCBtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcbitcbitcdGlmIChzZXRfbXR1KVxuK1x0XHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG10dSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMpO1xuK1xuIHN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwYXJtcylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQyOjExLjI2MzM5MDcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTczNDIyNTg0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gdGhlIHRhc2sgaXMgdG8gYXNzZXNzIHRoaXMga2VybmVsIHBhdGNoIHNlcmllcywgYW5kIG15IGV4cGVydGlzZSBpbW1lZGlhdGVseSBraWNrcyBpbi4gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIElQdjQgR1JFL0VSU1BBTiB0dW5uZWxzLCBzcGVjaWZpY2FsbHkgbW9kaWZpY2F0aW9ucyB0byBgaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oYCwgYG5ldC9pcHY0L2lwX2dyZS5jYCwgYW5kIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIFRoZSBjaGFuZ2VzIGludm9sdmUgYSBuZXcgZnVuY3Rpb24sIGBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzYCwgYW5kIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIHdpdGhpbiB0aGUgR1JFL0VSU1BBTiBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIE1UVS9oZWFkcm9vbSBoYW5kbGluZy5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gIFdlJ3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIGxpa2UgYGlwZ3JlX2NoYW5nZWxpbmtgLCBgZXJzcGFuX2NoYW5nZWxpbmtgLCBgaXBncmVfbmV0bGlua19wYXJtc2AsIGBlcnNwYW5fbmV0bGlua19wYXJtc2AuICBUaGVzZSBhcmUgY3J1Y2lhbCBwYXJ0cyBvZiB0aGUga2VybmVsLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHJlYWNoYWJpbGl0eS4gSSBrbm93IHRoaXMgY29kZSBpcyBjb3JlIG5ldHdvcmtpbmcsIGRlYWxpbmcgd2l0aCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24sIGBSVE1fTkVXTElOS2AsIGBSVE1fU0VUTElOS2AgYW5kIGlvY3RsLCBhbGwgc3RhbmRhcmQgbWV0aG9kcyBmb3Igc2V0dGluZyB1cCBhbmQgY29udHJvbGxpbmcgbmV0d29yayB0dW5uZWxzLiBUaGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdlIHVzZSwgZXNwZWNpYWxseSBzeXprYWxsZXIsIHJvdXRpbmVseSBleGVyY2lzZXMgdGhlc2UgY29kZXBhdGhzLiBTeXprYWxsZXIgZnJlcXVlbnRseSBjcmVhdGVzIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMuXG5cbkJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgaXQncyBjbGVhciB0aGlzIHBhdGNoIGZhbGxzIGludG8gdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBjYXRlZ29yeS4gV2UgaGF2ZSBtb2RpZmljYXRpb25zIHRvIGNvcmUgbmV0d29ya2luZyBsb2dpYywgYW5kIHRoZXNlIG5ldGRldmljZXMgYXJlIGFjY2Vzc2libGUuIFdlIHNob3VsZCBkZWZpbml0ZWx5IGZ1enogdGhpcyBhcmVhLlxuXG5OZXh0LCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucywgdG8gZW5zdXJlIHRoZSBjb2RlIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHkgdXNpbmcgYGdyZXBwZXJgIHRvIGZpbmQgdGhlIHJlbGV2YW50IE1ha2VmaWxlIGVudHJpZXMuIEl0J3MgYSBxdWljayBzYW5pdHkgY2hlY2sgYnV0IGltcG9ydGFudCB0byBhdm9pZCBibGluZCBhbGxleXMuIEknbGwgbmVlZCB0byBrbm93IHRoYXQgYGlwX2dyZS5vYCBhbmQgYGlwX3R1bm5lbC5vYCBhcmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQyOjI4LjYwNTY1MjY0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzM1NzY1MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfZ3JlfGlwX3R1bm5lbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNjpcXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNy1cXHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMTgtXFxubmV0L2lwdjQvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICs9IGlwX3R1bm5lbC5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY0Lm9cXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTI5PW9iai0kKENPTkZJR19ORVRfSVBHUkVfREVNVVgpICs9IGdyZS5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX05FVF9JUEdSRSkgKz0gaXBfZ3JlLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0zMS11ZHBfdHVubmVsLXkgOj0gdWRwX3R1bm5lbF9jb3JlLm8gdWRwX3R1bm5lbF9uaWMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0MjoyOC44NzkyMzU3MTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzE4NzU3OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBUdW5uZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgSVBHUkUgYW5kIElQIFR1bm5lbGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiBgQ09ORklHX05FVF9JUEdSRWAgYW5kIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gVGhpcyBpcyBwcm9iYWJseSBhIHByZWxpbWluYXJ5IHN0ZXAgdG8gdW5kZXJzdGFuZGluZywgb3IgbW9kaWZ5aW5nLCB0aGUgYXZhaWxhYmxlIG5ldHdvcmsgdHVubmVsaW5nIGNhcGFiaWxpdGllcyBvZiB0aGUgc3lzdGVtLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZWxldmFudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldCB0byBtb2R1bGUsIHNpbmNlIHRoYXQgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSBob3cgbmV0d29yayB0cmFmZmljIGNhbiBiZSBoYW5kbGVkLiBJIHByb2JhYmx5IHdhbnQgdG8gdHJhY2sgZG93biBhbnkgZGVwZW5kZW5jaWVzIGFzIHdlbGwuIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoaXMgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgZGVidWdnaW5nIGEgbmV0d29yayBpc3N1ZSwgb3IgcGVyaGFwcyBjb25maWd1cmluZyBhIG5ldyBuZXR3b3JrIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQwOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQyOjMxLjE5Nzk5NTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1MDM5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JUEdSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MTYyPWNvbmZpZyBORVRfSVBJUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNzktXFxubmV0L2lwdjQvS2NvbmZpZzoxODA6Y29uZmlnIE5FVF9JUEdSRV9ERU1VWFxcbm5ldC9pcHY0L0tjb25maWctMTgxLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIGRlbXVsdGlwbGV4ZXJcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTE4Nj1jb25maWcgTkVUX0lQX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xOTEtXFxubmV0L2lwdjQvS2NvbmZpZzoxOTI6Y29uZmlnIE5FVF9JUEdSRVxcbm5ldC9pcHY0L0tjb25maWctMTkzLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIHR1bm5lbHMgb3ZlciBJUFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjA2LVxcbm5ldC9pcHY0L0tjb25maWc6MjA3OmNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiSVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDI6MzEuMjQ0NTA2NzI3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI2NTgxNTY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGUgS2NvbmZpZzpcblxuKipEZWVwIERpdmUgaW50byBJUEdSRSBhbmQgSVAgVHVubmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBLY29uZmlnIG9wdGlvbnMgc3Vycm91bmRpbmcgYE5FVF9JUEdSRWAgYW5kIGBORVRfSVBfVFVOTkVMYC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdHVubmVsaW5nIGFuZCBlbmNhcHN1bGF0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIGludGVycGxheSBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMsIGFuZCBwb3NzaWJsZSBjb25mbGljdHMgYmV0d2VlbiB0aGVzZSB0d28uIEFyZSB0aGV5IG11dHVhbGx5IGV4Y2x1c2l2ZSwgb3IgZG9lcyBvbmUgYnVpbGQgdXBvbiB0aGUgb3RoZXI/IFdoYXQgY29uZmlndXJhdGlvbnMgcmVseSBvbiB0aGVzZT8gQXJlIHRoZXJlIGFueSBzdWJ0bGV0aWVzIGluIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgbmV0d29yayBmZWF0dXJlcz8gVGhpcyBncmFudWxhciBsZXZlbCBvZiBhbmFseXNpcyBpcyBrZXkgdG8gb3B0aW1pemluZyB0aGUgbmV0d29yayBzdGFjayBhbmQgZW5zdXJpbmcgcm9idXN0IHR1bm5lbCBzdXBwb3J0LiBJJ20gbG9va2luZyBmb3IgdGhlIFwid2h5XCIgYmVoaW5kIHRoZSBkZXNpZ24gY2hvaWNlcywgbm90IGp1c3QgdGhlIFwid2hhdFwiLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODcwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDI6MzQuNTEwMzI0MjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRjb25maWcgTkVUX0lQR1JFX0RFTVVYXFxuIDE4MTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEdSRSBkZW11bHRpcGxleGVyXFxcIlxcbiAxODI6XFx0XFx0aGVscFxcbiAxODM6XFx0XFx0ICBUaGlzIGlzIGhlbHBlciBtb2R1bGUgdG8gZGVtdWx0aXBsZXggR1JFIHBhY2tldHMgb24gR1JFIHZlcnNpb24gZmllbGQgY3JpdGVyaWEuXFxuIDE4NDpcXHRcXHQgIFJlcXVpcmVkIGJ5IGlwX2dyZSBhbmQgcHB0cCBtb2R1bGVzLlxcbiAxODU6XFx0XFxuIDE4NjpcXHRjb25maWcgTkVUX0lQX1RVTk5FTFxcbiAxODc6XFx0XFx0dHJpc3RhdGVcXG4gMTg4OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gMTg5OlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gMTkwOlxcdFxcdGRlZmF1bHQgblxcbiAxOTE6XFx0XFxuIDE5MjpcXHRjb25maWcgTkVUX0lQR1JFXFxuIDE5MzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcXFwiXFxuIDE5NDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxcbiAxOTU6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMTk2OlxcdFxcdGhlbHBcXG4gMTk3OlxcdFxcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cXG4gMTk4OlxcdFxcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxcbiAxOTk6XFx0XFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXFxuIDIwMDpcXHRcXHQgIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIGFuZCBhdCB0aGlzIHRpbWUgYWxsb3dzXFxuIDIwMTpcXHRcXHQgIGVuY2Fwc3VsYXRpbmcgb2YgSVB2NCBvciBJUHY2IG92ZXIgZXhpc3RpbmcgSVB2NCBpbmZyYXN0cnVjdHVyZS5cXG4gMjAyOlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgdXNlZnVsIGlmIHRoZSBvdGhlciBlbmRwb2ludCBpcyBhIENpc2NvIHJvdXRlcjogQ2lzY29cXG4gMjAzOlxcdFxcdCAgbGlrZXMgR1JFIG11Y2ggYmV0dGVyIHRoYW4gdGhlIG90aGVyIExpbnV4IHR1bm5lbGluZyBkcml2ZXIgKFxcXCJJUFxcbiAyMDQ6XFx0XFx0ICB0dW5uZWxpbmdcXFwiIGFib3ZlKS4gSW4gYWRkaXRpb24sIEdSRSBhbGxvd3MgbXVsdGljYXN0IHJlZGlzdHJpYnV0aW9uXFxuIDIwNTpcXHRcXHQgIHRocm91Z2ggdGhlIHR1bm5lbC5cXG4gMjA2OlxcdFxcbiAyMDc6XFx0Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG4gMjA4OlxcdFxcdGJvb2wgXFxcIklQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcXFwiXFxuIDIwOTpcXHRcXHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVCBcXHUwMDI2XFx1MDAyNiBORVRfSVBHUkVcXG4gMjEwOlxcdFxcdGhlbHBcXG4gMjExOlxcdFxcdCAgT25lIGFwcGxpY2F0aW9uIG9mIEdSRS9JUCBpcyB0byBjb25zdHJ1Y3QgYSBicm9hZGNhc3QgV0FOIChXaWRlIEFyZWFcXG4gMjEyOlxcdFxcdCAgTmV0d29yayksIHdoaWNoIGxvb2tzIGxpa2UgYSBub3JtYWwgRXRoZXJuZXQgTEFOIChMb2NhbCBBcmVhXFxuIDIxMzpcXHRcXHQgIE5ldHdvcmspLCBidXQgY2FuIGJlIGRpc3RyaWJ1dGVkIGFsbCBvdmVyIHRoZSBJbnRlcm5ldC4gSWYgeW91IHdhbnRcXG4gMjE0OlxcdFxcdCAgdG8gZG8gdGhhdCwgc2F5IFkgaGVyZSBhbmQgdG8gXFxcIklQIG11bHRpY2FzdCByb3V0aW5nXFxcIiBiZWxvdy5cXG4gMjE1OlxcdFxcbiAyMTY6XFx0Y29uZmlnIElQX01ST1VURV9DT01NT05cXG4gMjE3OlxcdFxcdGJvb2xcXG4gMjE4OlxcdFxcdGRlcGVuZHMgb24gSVBfTVJPVVRFIHx8IElQVjZfTVJPVVRFXFxuIDIxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDI6MzQuNTEwNDE4N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4MTQ4MzUyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfTkVUX0lQR1JFYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0IGRlcGVuZHMgb24gYENPTkZJR19ORVRfSVBHUkVfREVNVVhgIGFuZCBhdXRvbWF0aWNhbGx5IHB1bGxzIGluIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAuIFRoYXQncyBzdGFuZGFyZCBhbmQgbWFrZXMgc2Vuc2UgZm9yIEdSRS4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIgdGhhbiBqdXN0IHRoZSBiYXNpY3MuXG5cbk15IGZvY3VzIHJpZ2h0IG5vdyBpcyBFUlNQQU4gYW5kIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSByZWxldmFudCBFUlNQQU4gc2V0dGluZ3MgYXJlIGFjdGl2ZSwgb3IgdGhhdCBFUlNQQU4gZnVuY3Rpb25hbGl0eSBpcyBpbmhlcmVudGx5IGluY2x1ZGVkIHNvbWV3aGVyZSwgbGlrZSB3aXRoaW4gYENPTkZJR19ORVRfSVBHUkVgIGl0c2VsZi4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgRVJTUEFOIHN1cHBvcnQgaXMgaW1wbGVtZW50ZWQgaW4gdGhpcyBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBsaWtlbHkgY2FuZGlkYXRlcyB0aGF0IHNlZW0gcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQyOjM2LjMyNTI1NjIwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2NzI1NDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR18uKkVSU1BBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0MjozNi4zOTQ5Mzg4MzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTgzNjczODAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBFUlNQQU4gSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBFUlNQQU4ncyBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMgYmFrZWQgZGlyZWN0bHkgaW50byB0aGUgYG5ldC9pcHY0L2lwX2dyZS5jYCBhbmQgYGlwNl9ncmUuY2AgZmlsZXMuIFRoYXQncyBnb29kIHRvIGtub3cg4oCTIGl0IGdpdmVzIG1lIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQgZm9yIGRpdmluZyBpbnRvIHRoZSBjb2RlLiBOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgYGlwX2dyZWAgbW9kdWxlLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlbGV2YW50IGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdD8gSSdtIHRoaW5raW5nIGNvbmZpZ3VyYXRpb24sIGVycm9yIGhhbmRsaW5nLCBtYXliZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBwb3RlbnRpYWxseSBleHRlbnNpb25zIHRoYXQgd2VyZSBidWlsdCBpbiBvdmVyIHRpbWUuIEtub3dpbmcgdGhlIG1vZHVsZSdzIGNvbXBsZXRlIGZvb3RwcmludCBpcyBlc3NlbnRpYWwgZm9yIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZy4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhhdCBmdXJ0aGVyIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBFUlNQQU4ncyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0Mjo0Ni4yMzE2NzkwMDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDc5ODc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9ncmUtb2Jqc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQyOjQ2LjI4MTc2OTEyMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjU0NjYyNjEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgR1JFIGFuZCBUdW5uZWxpbmcgTW9kdWxlcyBmb3IgRm9jdXNTeW1ib2wgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgYW5kIHR1bm5lbGluZyBtb2R1bGVzIGFyZSBwdXQgdG9nZXRoZXIsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGV5J3JlIGNvbXBpbGVkIGFuZCB3aGF0J3MgY2hhbmdlZC4gVGhlIGBpcF9ncmUuY2AgY29kZSBpcyBjb21waWxlZCBpZiBgQ09ORklHX05FVF9JUEdSRWAgaXMgZW5hYmxlZCwgYW5kIGBpcF90dW5uZWwuY2AgZ2V0cyBidWlsdCB3aGVuIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAgaXMgc2V0LiAgSSBzZWUgdGhhdCBgQ09ORklHX05FVF9JUEdSRWAgZGVwZW5kcyBvbiBhbmQgc2VsZWN0cyBgQ09ORklHX05FVF9JUEdSRV9ERU1VWGAgYW5kIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAgd2hpY2ggdGVsbHMgbWUgdGhhdCBgTkVUX0lQR1JFYCBhbmQgYE5FVF9JUEdSRV9ERU1VWGAgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgbXkgbWFpbiBnb2FsIGlzIHRvIGlkZW50aWZ5IG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgZW50cnkgcG9pbnRzIHRoYXQgY291bGQgYmUgcmVsZXZhbnQgdG8gdGhlIEZvY3VzU3ltYm9scy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gYWRkZWQsIGNoYW5nZWQsIG9yIHJlbW92ZWQuIEkndmUgZ290IGEgbGlzdCBmcm9tIHRoZSBkaWZmOlxuXG4xLiAgYGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHNgIOKAkyBUaGlzIGlzIGEgbmV3LCBleHBvcnRlZCBmdW5jdGlvbiBpbiBgaXBfdHVubmVsLmNgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBhcyBpdCBpbmRpY2F0ZXMgbmV3IGV4dGVybmFsIGZ1bmN0aW9uYWxpdHkuXG4yLiAgYGlwZ3JlX2xpbmtfdXBkYXRlYCwgYGVyc3Bhbl9saW5rX3VwZGF0ZWAsIGBlcnNwYW5fc2V0X2hsZW5gLCAg4oCTIFRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGluIGBpcF9ncmUuY2AuXG4zLiAgYGlwZ3JlX2NoYW5nZWxpbmtgLCBgZXJzcGFuX2NoYW5nZWxpbmtgIOKAkyBUaGVzZSBhcmUgc3RhdGljLCBhbmQgY3J1Y2lhbGx5LCB0aGV5IGFyZSBgcnRubF9saW5rX29wcyAuY2hhbmdlbGlua2AgaW1wbGVtZW50YXRpb25zLCB3aGljaCBhcmUgaW1wb3J0YW50IGJlY2F1c2Ugb2YgdGhlaXIgaW50ZWdyYXRpb24gd2l0aCBuZXRsaW5rLlxuNC4gIGBpcGdyZV90dW5uZWxfY3RsYCDigJMgVGhpcyBpcyBhbm90aGVyIHN0YXRpYyBvbmUsIGEgYG5ldGRldl9vcHMgLm5kb19zaW9jZGV2cHJpdmF0ZSAvIC5uZG9fZG9faW9jdGxgIGZ1bmN0aW9uLCBzaG93aW5nIHVwIGFzIGEgY29udHJvbCBwYXRoLlxuNS4gIGBlcnNwYW5fdHVubmVsX2luaXRgIOKAkyBBbHNvIHN0YXRpYywgdXNlZCBhcyBlaXRoZXIgdGhlIGBydG5sX2xpbmtfb3BzIC5zZXR1cGAgb3IgYG5ldGRldl9vcHMgLm5kb19pbml0YCBmb3IgYSBuZXQgZGV2aWNlLlxuNi4gIGBlcnNwYW5fbmV0bGlua19wYXJtc2AsIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCDigJMgVGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXRsaW5rIHBhcmFtZXRlciBoYW5kbGluZy5cblxuTm93IEkgbmVlZCB0byBnbyBkZWVwZXIuIEknbSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBhdCB0aGUgdmlzaWJpbGl0eSBvZiBzeW1ib2xzLCBtYWtpbmcgc3VyZSBJIGlkZW50aWZ5IHdoYXQncyBub3QgaW5saW5lZCwgYW5kIHRoZW4gSSdsbCBzY3J1dGluaXplIHRoZSBsaW5lcyBpbiB0aGUgY29kZSBmb3IgYGlwZ3JlX2NoYW5nZWxpbmtgLCBgZXJzcGFuX2NoYW5nZWxpbmtgLCBgaXBncmVfdHVubmVsX2N0bGAsIGFuZCB0aGUgb3RoZXJzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGJlZW4gbW9kaWZpZWQgYW5kIGhvdyB0aGVzZSBjaGFuZ2VzIGltcGFjdCB0aGUgb3ZlcmFsbCBHUkUvdHVubmVsaW5nIGZ1bmN0aW9uYWxpdHksIHdoaWNoIHNob3VsZCBsZWFkIG1lIHJpZ2h0IHRvIHRoZSBGb2N1c1N5bWJvbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjYzLCJPdXRwdXRUb2tlbnMiOjYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQzOjAyLjgyODM5NzYwNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxMDUxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGlwZ3JlX2NoYW5nZWxpbmt8ZXJzcGFuX2NoYW5nZWxpbmt8aXBncmVfdHVubmVsX2N0bHxlcnNwYW5fdHVubmVsX2luaXR8aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTc2MT1zdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy03OTItLyogdHVubmVsLVxcdTAwM2VobGVuIGRlcGVuZHMgb24gdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzIGFuZCBvbiB0dW5uZWwtXFx1MDAzZWVuY2FwX2hsZW4sXFxubmV0L2lwdjQvaXBfZ3JlLmM6NzkzOiAqIGJvdGggb2Ygd2hpY2ggaXBncmVfY2hhbmdlbGluaygpIGNhbiBjaGFuZ2UuIFJlY29tcHV0ZSBpdCB0aGUgd2F5XFxubmV0L2lwdjQvaXBfZ3JlLmMtNzk0LSAqIF9fZ3JlX3R1bm5lbF9pbml0KCkgZG9lcywgdGhlbiBsZXQgaXBfdHVubmVsX2JpbmRfZGV2KCkgZGVyaXZlIHRoZSBkZXZpY2VcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTgwMj1zdGF0aWMgdm9pZCBpcGdyZV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy04MTItXFx0ICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6ODEzOlxcdGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoZGV2LCBzZXRfbXR1IFxcdTAwMjZcXHUwMDI2IHR1bm5lbC1cXHUwMDNlaGxlbiAhPSBvbGRfaGxlbik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtODE0LVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtODI1LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjgyNjpzdGF0aWMgaW50IGlwZ3JlX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2NC9pcF9ncmUuYy04MjctXFx0XFx0XFx0ICAgIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9OTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBncmVfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwMDAtXFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0PSBpcF90dW5uZWxfZ2V0X2lmbGluayxcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDAxOlxcdC5uZG9fdHVubmVsX2N0bFxcdFxcdD0gaXBncmVfdHVubmVsX2N0bCxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDAyLX07XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMzcxPXN0YXRpYyB2b2lkIGVyc3Bhbl9zZXRfaGxlbihzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzgwLS8qIEJvdGggdHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyIGFuZCB0dW5uZWwtXFx1MDAzZWVuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbVxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzODE6ICogZXJzcGFuX2NoYW5nZWxpbmsoKSwgYW5kIGJvdGggZmVlZCB0dW5uZWwtXFx1MDAzZWhsZW4uIFJlY29tcHV0ZSBpdCwgdGhlbiBsZXRcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzgyLSAqIGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlIGxlbmd0aHMgZnJvbSBpdC5cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEzODg9c3RhdGljIHZvaWQgZXJzcGFuX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTctXFx0ICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM5ODpcXHRpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKGRldiwgc2V0X210dSBcXHUwMDI2XFx1MDAyNiB0dW5uZWwtXFx1MDAzZWhsZW4gIT0gb2xkX2hsZW4pO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTktfVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MDAtXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQwMTpzdGF0aWMgaW50IGVyc3Bhbl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MDIte1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MTg6XFx0Lm5kb19pbml0XFx0XFx0PSBlcnNwYW5fdHVubmVsX2luaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQxOS1cXHQubmRvX3VuaW5pdFxcdFxcdD0gaXBfdHVubmVsX3VuaW5pdCxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE0NzY9c3RhdGljIGludCBlcnNwYW5fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ5Ni1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDk3OnN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0OTgtXFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE1MzUtXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTUzNjpzdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTUzNy1cXHRcXHRcXHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE3Mzg9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwZ3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzQ1LVxcdC5uZXdsaW5rXFx0PSBpcGdyZV9uZXdsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3NDY6XFx0LmNoYW5nZWxpbmtcXHQ9IGlwZ3JlX2NoYW5nZWxpbmssXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTc0Ny1cXHQuZGVsbGlua1xcdD0gaXBfdHVubmVsX2RlbGxpbmssXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNzUzPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcGdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzYwLVxcdC5uZXdsaW5rXFx0PSBpcGdyZV9uZXdsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3NjE6XFx0LmNoYW5nZWxpbmtcXHQ9IGlwZ3JlX2NoYW5nZWxpbmssXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTc2Mi1cXHQuZGVsbGlua1xcdD0gaXBfdHVubmVsX2RlbGxpbmssXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNzY4PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBlcnNwYW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3NzUtXFx0Lm5ld2xpbmtcXHQ9IGVyc3Bhbl9uZXdsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3NzY6XFx0LmNoYW5nZWxpbmtcXHQ9IGVyc3Bhbl9jaGFuZ2VsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3NzctXFx0LmRlbGxpbmtcXHQ9IGlwX3R1bm5lbF9kZWxsaW5rLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MjgwPXN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zMzUtICovXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MzM2OnZvaWQgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzM3LXtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM0Mi19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MzQzOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM0NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6MDIuODg4NTA5OTQ2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzMzMzOTY3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVAgVHVubmVsL0dSRS9FUlNQQU4gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkndmUgaWRlbnRpZmllZCB0aGUgbW9kaWZpZWQgYW5kIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25zOiBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc2AsIGBpcGdyZV9saW5rX3VwZGF0ZWAsIGBlcnNwYW5fbGlua191cGRhdGVgLCBgZXJzcGFuX3NldF9obGVuYCwgYW5kIHRoZSBtb2RpZmllZCBgaXBncmVfbmV0bGlua19wYXJtc2AsIGBlcnNwYW5fbmV0bGlua19wYXJtc2AsIGBpcGdyZV9jaGFuZ2VsaW5rYCwgYGVyc3Bhbl9jaGFuZ2VsaW5rYCwgYGlwZ3JlX3R1bm5lbF9jdGxgLCBhbmQgYGVyc3Bhbl90dW5uZWxfaW5pdGAuIFRoZXNlIGFyZSBhbGwgY2xlYXJseSBmb2N1c2VkIG9uIElQIHR1bm5lbGluZywgc3BlY2lmaWNhbGx5IEdSRSBhbmQgRVJTUEFOIGxpbmsgbWFuYWdlbWVudCwgaW5jbHVkaW5nIE1UVSBhbmQgaGVhZHJvb20gY2FsY3VsYXRpb25zLiBOb25lIG9mIHRoZXNlIGFyZSBjb3JlLCB1YmlxdWl0b3VzIG5ldHdvcmtpbmcgZnVuY3Rpb25zLlxuXG5OZXh0LCBJIHZlcmlmaWVkIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnM6IGBORVRfSVBHUkVgLCBgTkVUX0lQR1JFX0RFTVVYYCwgYW5kIGBORVRfSVBfVFVOTkVMYC4gVGhlIEtjb25maWcgY29uZmlybXMgdGhhdCBgTkVUX0lQR1JFYCBkZXBlbmRzIG9uIGFuZCBzZWxlY3RzIGBORVRfSVBHUkVfREVNVVhgLCBhbmQgYE5FVF9JUEdSRWAgc2VsZWN0cyBgTkVUX0lQX1RVTk5FTGAuIFRoZXJlZm9yZSwgZXhwbGljaXRseSBzcGVjaWZ5aW5nIGFsbCB0aHJlZSBpcyBhY2N1cmF0ZS5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSBsaXN0ZWQgZWFybGllciwgdGhvc2UgZGVkaWNhdGVkIHRvIEdSRS9FUlNQQU4uXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZXNlIGNoYW5nZXMgdG91Y2ggb24gZnVuZGFtZW50YWwgYXNwZWN0cyBvZiBJUCB0dW5uZWxpbmcg4oCTIHRoZSB2ZXJ5IGNvcmUgb2YgdmlydHVhbCBuZXR3b3JrIGRldmljZSBiZWhhdmlvci4gV2UncmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGhlYWRlciBsZW5ndGggY2FsY3VsYXRpb25zLCBkZXZpY2UgaGVhZHJvb20sIE1UVSB1cGRhdGVzIHRyaWdnZXJlZCBieSBuZXRsaW5rIChSVE1fTkVXTElOSywgUlRNX1NFVExJTkspIGFuZCBpb2N0bCAoU0lPQ0NIR1RVTk5FTCwgZXRjLikgY29uZmlndXJhdGlvbnMsIGFsbCBjcml0aWNhbCB0byBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eS4gSSBzZWUgY2hhbmdlcyBpbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGlwZ3JlX2NoYW5nZWxpbmtgIGFuZCBgZXJzcGFuX2NoYW5nZWxpbmtgIHJlZ2FyZGluZyBsZW5ndGggdXBkYXRlcyBldmVuIGR1cmluZyBlcnJvciBwYXRocy4gSSBzZWUgY2hhbmdlcyBpbiB2YWxpZGF0aW9uIG9yZGVyIGluIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgYW5kIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc2AgZnVydGhlciBhbXBsaWZpZXMgdGhlIG5lZWQgZm9yIHRob3JvdWdoIGZ1enppbmcuIFRoZXNlIGFyZSBhbGwgZXhwb3NlZCB2aWEgbmV0bGluayBhbmQgaW9jdGwgaW50ZXJmYWNlcywgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhpcyBpcyBhIGNsZWFyIGNhc2UgZm9yIHZ1bG5lcmFiaWxpdHkgYW5hbHlzaXMuIEV2ZXJ5dGhpbmcgaXMgc29saWQuIEknbSByZWFkeSB0byBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE3NSwiT3V0cHV0VG9rZW5zIjoyNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6MDkuMjIxOTA5MjM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5Mjg4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiTkVUX0lQR1JFX0RFTVVYXCIsXG4gICAgXCJORVRfSVBfVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc1wiLFxuICAgIFwiaXBncmVfbGlua191cGRhdGVcIixcbiAgICBcImVyc3Bhbl9saW5rX3VwZGF0ZVwiLFxuICAgIFwiZXJzcGFuX3NldF9obGVuXCIsXG4gICAgXCJpcGdyZV9uZXRsaW5rX3Bhcm1zXCIsXG4gICAgXCJlcnNwYW5fbmV0bGlua19wYXJtc1wiLFxuICAgIFwiaXBncmVfY2hhbmdlbGlua1wiLFxuICAgIFwiZXJzcGFuX2NoYW5nZWxpbmtcIixcbiAgICBcImlwZ3JlX3R1bm5lbF9jdGxcIixcbiAgICBcImVyc3Bhbl90dW5uZWxfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBhbmQgZml4ZXMgZGV2aWNlIGhlYWRlciBsZW5ndGgsIE1UVSwgYW5kIGhlYWRyb29tIHVwZGF0ZXMgaW4gdGhlIElQdjQgR1JFIGFuZCBFUlNQQU4gdHVubmVsaW5nIGRyaXZlcnMuIEl0IGludHJvZHVjZXMgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocygpIGFuZCB1cGRhdGVzIGxpbmsgY29uZmlndXJhdGlvbiBhbmQgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gaXBncmVfY2hhbmdlbGluaygpLCBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgaW9jdGwvbmV0bGluayBwYXJhbWV0ZXIgcGFyc2Vycy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBleGVyY2lzYWJsZSB2aWEgcnRubCBuZXRsaW5rIGFuZCB0dW5uZWwgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIk5FVF9JUEdSRV9ERU1VWFwiLFxuICAgIFwiTkVUX0lQX1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHNcIixcbiAgICBcImlwZ3JlX2xpbmtfdXBkYXRlXCIsXG4gICAgXCJlcnNwYW5fbGlua191cGRhdGVcIixcbiAgICBcImVyc3Bhbl9zZXRfaGxlblwiLFxuICAgIFwiaXBncmVfbmV0bGlua19wYXJtc1wiLFxuICAgIFwiZXJzcGFuX25ldGxpbmtfcGFybXNcIixcbiAgICBcImlwZ3JlX2NoYW5nZWxpbmtcIixcbiAgICBcImVyc3Bhbl9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGdyZV90dW5uZWxfY3RsXCIsXG4gICAgXCJlcnNwYW5fdHVubmVsX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgYW5kIGZpeGVzIGRldmljZSBoZWFkZXIgbGVuZ3RoLCBNVFUsIGFuZCBoZWFkcm9vbSB1cGRhdGVzIGluIHRoZSBJUHY0IEdSRSBhbmQgRVJTUEFOIHR1bm5lbGluZyBkcml2ZXJzLiBJdCBpbnRyb2R1Y2VzIGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoKSBhbmQgdXBkYXRlcyBsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIGVycm9yLWhhbmRsaW5nIHBhdGhzIGluIGlwZ3JlX2NoYW5nZWxpbmsoKSwgZXJzcGFuX2NoYW5nZWxpbmsoKSwgYW5kIGlvY3RsL25ldGxpbmsgcGFyYW1ldGVyIHBhcnNlcnMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgbG9naWMgZXhlcmNpc2FibGUgdmlhIHJ0bmwgbmV0bGluayBhbmQgdHVubmVsIGlvY3RscyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQzOjA5LjI5OTg0NTQ0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5MTk5Mzc4NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6MDkuMzAwMjYxODk0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjQ5MTk4OTU4NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIGhlYWRlciBsZW5ndGgsIGhlYWRyb29tLCBhbmQgTVRVIGNhbGN1bGF0aW9uIGxvZ2ljIGZvciBJUCBHUkUgYW5kIEVSU1BBTiB0dW5uZWwgZGV2aWNlcyAoaW50cm9kdWNpbmcgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocywgdXBkYXRpbmcgaXBncmVfbGlua191cGRhdGUgYW5kIGVyc3Bhbl9saW5rX3VwZGF0ZSwgYW5kIGRlZmVycmluZyB0dW5uZWwgc3RhdGUgdXBkYXRlcyB1bnRpbCBuZXRsaW5rIHZhbGlkYXRpb24gY29tcGxldGVzKS4gXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCAoc3VjaCBhcyBvbGRfaGxlbiwgZXJzcGFuX3ZlciwgaW5kZXgsIGh3aWQsIGRpciwgYW5kIG10dSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIG9yIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBoZWFkcm9vbSBvciBNVFUgY2FsY3VsYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIGJ1ZmZlciBib3VuZGFyeS9vdmVyZmxvdyBvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gb3IgbmV0d29yayBzdGFjayBhc3NlcnRpb25zIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI1OTA4YmQwNzQ1YzMwNGFiMTQwMjRlMzIyN2Q3NmVlMGI1NzE4ZjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxNTo0MjoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuaW5kZXggN2M5YWFkZmU4ZmUzOS4uZmQwMzk2YWE1MDM5NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG5AQCAtNDI5LDYgKzQyOSw3IEBAIGludCBpcF90dW5uZWxfbmV3bGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxuIFx0XHQgICAgICBfX3UzMiBmd21hcmspO1xuIHZvaWQgaXBfdHVubmVsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuZXRfaWQpO1xuK3ZvaWQgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpO1xuIFxuIGJvb2wgaXBfdHVubmVsX25ldGxpbmtfZW5jYXBfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuIFx0XHRcdFx0ICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZW5jYXApO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmNcbmluZGV4IDgyMzA5ZWZkNDE3ZTAuLjQ4MDdmYzZkMmZkODggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9ncmUuY1xuKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmNcbkBAIC03ODksMjMgKzc4OSwyOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBpcGdyZV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpXG4rLyogdHVubmVsLVx1MDAzZWhsZW4gZGVwZW5kcyBvbiB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyBhbmQgb24gdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4sXG4rICogYm90aCBvZiB3aGljaCBpcGdyZV9jaGFuZ2VsaW5rKCkgY2FuIGNoYW5nZS4gUmVjb21wdXRlIGl0IHRoZSB3YXlcbisgKiBfX2dyZV90dW5uZWxfaW5pdCgpIGRvZXMsIHRoZW4gbGV0IGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlXG4rICogbGVuZ3RocyBmcm9tIGl0LlxuKyAqXG4rICogQG9sZF9obGVuIGlzIG9ubHkgdXNlZCB0byB0ZWxsIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWUgc3RhbGUsIG5ldmVyIGFzIGFcbisgKiBkaWZmZXJlbmNlIHRvIGFwcGx5LCBzbyBpdCBjYW4gbm90IG1ha2UgdGhlIGxlbmd0aHMgZHJpZnQuIEl0IG11c3QgYmVcbisgKiBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2ggYWxyZWFkeSBwdWJsaXNoZXMgdGhlIG5ld1xuKyAqIHR1bm5lbC1cdTAwM2VobGVuIGZvciB1cy5cbisgKi9cbitzdGF0aWMgdm9pZCBpcGdyZV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXG4rXHRcdFx0ICAgICAgaW50IG9sZF9obGVuKVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRpbnQgbGVuO1xuIFxuLVx0bGVuID0gdHVubmVsLVx1MDAzZXR1bl9obGVuO1xuIFx0dHVubmVsLVx1MDAzZXR1bl9obGVuID0gZ3JlX2NhbGNfaGxlbih0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4tXHRsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gLSBsZW47XG4tXHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2VobGVuICsgbGVuO1xuLVxuLVx0aWYgKGRldi1cdTAwM2VoZWFkZXJfb3BzKVxuLVx0XHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICs9IGxlbjtcbi1cdGVsc2Vcbi1cdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSArPSBsZW47XG4rXHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2V0dW5faGxlbiArIHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuO1xuIFxuLVx0aWYgKHNldF9tdHUpXG4tXHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbWF4X3QoaW50LCBkZXYtXHUwMDNlbXR1IC0gbGVuLCA2OCkpO1xuK1x0LyogT25seSByZXNldCBhIE1UVSB0aGF0IHRoZSBoZWFkZXIgbGVuZ3RoIGp1c3QgaW52YWxpZGF0ZWQsIHNvIHRoYXRcbitcdCAqIGEgTVRVIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIgc3Vydml2ZXMgYW4gdW5yZWxhdGVkIGNoYW5nZS5cbitcdCAqL1xuK1x0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbiBcbiBcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpIHx8XG4gXHQgICAgKHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpIFx1MDAyNlx1MDAyNlxuQEAgLTg1Myw3ICs4NTgsNyBAQCBzdGF0aWMgaW50IGlwZ3JlX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLVx1MDAzZW9fZmxhZ3MpO1xuIFxuIFx0XHRpZiAoc3RyY21wKGRldi1cdTAwM2VydG5sX2xpbmtfb3BzLVx1MDAzZWtpbmQsIFwiZXJzcGFuXCIpKVxuLVx0XHRcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSk7XG4rXHRcdFx0aXBncmVfbGlua191cGRhdGUoZGV2LCB0cnVlLCB0LVx1MDAzZWhsZW4pO1xuIFx0fVxuIFxuIFx0aV9mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlaV9mbGFncyk7XG5AQCAtMTIzMywxMiArMTIzOCw2IEBAIHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRwYXJtcy1cdTAwM2VpcGguZnJhZ19vZmYgPSBodG9ucyhJUF9ERik7XG4gXHR9XG4gXG4tXHRpZiAoZGF0YVtJRkxBX0dSRV9DT0xMRUNUX01FVEFEQVRBXSkge1xuLVx0XHR0LVx1MDAzZWNvbGxlY3RfbWQgPSB0cnVlO1xuLVx0XHRpZiAoZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lQR1JFKVxuLVx0XHRcdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XG4tXHR9XG4tXG4gXHRpZiAoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKSB7XG4gXHRcdGlmIChubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSlcbiBcdFx0ICBcdTAwMjZcdTAwMjYgKHBhcm1zLVx1MDAzZWlwaC5mcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfREYpKSlcbkBAIC0xMjQ2LDYgKzEyNDUsMTMgQEAgc3RhdGljIGludCBpcGdyZV9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHQtXHUwMDNlaWdub3JlX2RmID0gISFubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSk7XG4gXHR9XG4gXG4rXHQvKiBBbGwgYXR0cmlidXRlcyBoYXZlIGJlZW4gdmFsaWRhdGVkLCB3ZSBjYW4gY2hhbmdlIEBkZXYgYW5kIEB0LiAqL1xuK1x0aWYgKGRhdGFbSUZMQV9HUkVfQ09MTEVDVF9NRVRBREFUQV0pIHtcbitcdFx0dC1cdTAwM2Vjb2xsZWN0X21kID0gdHJ1ZTtcbitcdFx0aWYgKGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JUEdSRSlcbitcdFx0XHRkZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9OT05FO1xuK1x0fVxuK1xuIFx0aWYgKGRhdGFbSUZMQV9HUkVfRldNQVJLXSlcbiBcdFx0KmZ3bWFyayA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRldNQVJLXSk7XG4gXG5AQCAtMTI1OSw0MCArMTI2NSw1MSBAQCBzdGF0aWMgaW50IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRfX3UzMiAqZndtYXJrKVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0dTggZXJzcGFuX3ZlciA9IHQtXHUwMDNlZXJzcGFuX3ZlcjtcbitcdHUzMiBpbmRleCA9IHQtXHUwMDNlaW5kZXg7XG4rXHR1MTYgaHdpZCA9IHQtXHUwMDNlaHdpZDtcbitcdHU4IGRpciA9IHQtXHUwMDNlZGlyO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuIFx0aWYgKCFkYXRhKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4gXG4gXHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSkge1xuLVx0XHR0LVx1MDAzZWVyc3Bhbl92ZXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pO1xuK1x0XHRlcnNwYW5fdmVyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKTtcbiBcbi1cdFx0aWYgKHQtXHUwMDNlZXJzcGFuX3ZlciBcdTAwM2UgMilcbitcdFx0aWYgKGVyc3Bhbl92ZXIgXHUwMDNlIDIpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyID09IDEpIHtcbitcdGlmIChlcnNwYW5fdmVyID09IDEpIHtcbiBcdFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0lOREVYXSkge1xuLVx0XHRcdHQtXHUwMDNlaW5kZXggPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pO1xuLVx0XHRcdGlmICh0LVx1MDAzZWluZGV4IFx1MDAyNiB+SU5ERVhfTUFTSylcbitcdFx0XHRpbmRleCA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0lOREVYXSk7XG4rXHRcdFx0aWYgKGluZGV4IFx1MDAyNiB+SU5ERVhfTUFTSylcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4tXHR9IGVsc2UgaWYgKHQtXHUwMDNlZXJzcGFuX3ZlciA9PSAyKSB7XG4rXHR9IGVsc2UgaWYgKGVyc3Bhbl92ZXIgPT0gMikge1xuIFx0XHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSkge1xuLVx0XHRcdHQtXHUwMDNlZGlyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9ESVJdKTtcbi1cdFx0XHRpZiAodC1cdTAwM2VkaXIgXHUwMDI2IH4oRElSX01BU0sgXHUwMDNlXHUwMDNlIERJUl9PRkZTRVQpKVxuK1x0XHRcdGRpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7XG4rXHRcdFx0aWYgKGRpciBcdTAwMjYgfihESVJfTUFTSyBcdTAwM2VcdTAwM2UgRElSX09GRlNFVCkpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0XHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pIHtcbi1cdFx0XHR0LVx1MDAzZWh3aWQgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfR1JFX0VSU1BBTl9IV0lEXSk7XG4tXHRcdFx0aWYgKHQtXHUwMDNlaHdpZCBcdTAwMjYgfihIV0lEX01BU0sgXHUwMDNlXHUwMDNlIEhXSURfT0ZGU0VUKSlcbitcdFx0XHRod2lkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pO1xuK1x0XHRcdGlmIChod2lkIFx1MDAyNiB+KEhXSURfTUFTSyBcdTAwM2VcdTAwM2UgSFdJRF9PRkZTRVQpKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdH1cbiBcbitcdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAdC4gKi9cbitcdHQtXHUwMDNlZXJzcGFuX3ZlciA9IGVyc3Bhbl92ZXI7XG4rXHR0LVx1MDAzZWluZGV4ID0gaW5kZXg7XG4rXHR0LVx1MDAzZWh3aWQgPSBod2lkO1xuK1x0dC1cdTAwM2VkaXIgPSBkaXI7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTM1MSwxOCArMTM2OCw0MyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fZmlsbF9tZXRhZGF0YV9kc3RcdD0gZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0LFxuIH07XG4gXG4rc3RhdGljIHZvaWQgZXJzcGFuX3NldF9obGVuKHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbClcbit7XG4rXHQvKiBWZXJzaW9uIDAgdXNlcyBhIDQtYnl0ZSBHUkUgaGVhZGVyLCBvdGhlciB2ZXJzaW9ucyB1c2UgOCBieXRlcy4gKi9cbitcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDAgPyA0IDogODtcbitcbitcdHR1bm5lbC1cdTAwM2VobGVuID0gdHVubmVsLVx1MDAzZXR1bl9obGVuICsgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gK1xuK1x0XHQgICAgICAgZXJzcGFuX2hkcl9sZW4odHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIpO1xuK31cbitcbisvKiBCb3RoIHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyIGFuZCB0dW5uZWwtXHUwMDNlZW5jYXBfaGxlbiBjYW4gYmUgY2hhbmdlZCBmcm9tXG4rICogZXJzcGFuX2NoYW5nZWxpbmsoKSwgYW5kIGJvdGggZmVlZCB0dW5uZWwtXHUwMDNlaGxlbi4gUmVjb21wdXRlIGl0LCB0aGVuIGxldFxuKyAqIGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlIGxlbmd0aHMgZnJvbSBpdC5cbisgKlxuKyAqIEFzIGluIGlwZ3JlX2xpbmtfdXBkYXRlKCksIEBvbGRfaGxlbiBvbmx5IHRlbGxzIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWVcbisgKiBzdGFsZSBhbmQgbXVzdCBiZSBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2hcbisgKiByZWNvbXB1dGVzIHR1bm5lbC1cdTAwM2VobGVuIHdpdGhvdXQgdGhlIEVSU1BBTiBwYXJ0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIGVyc3Bhbl9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXG4rXHRcdFx0ICAgICAgIGludCBvbGRfaGxlbilcbit7XG4rXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1xuK1x0ZXJzcGFuX3NldF9obGVuKHR1bm5lbCk7XG4rXG4rXHQvKiBPbmx5IHJlc2V0IGEgTVRVIHRoYXQgdGhlIGhlYWRlciBsZW5ndGgganVzdCBpbnZhbGlkYXRlZCwgc28gdGhhdFxuK1x0ICogYSBNVFUgY29uZmlndXJlZCBieSB0aGUgdXNlciBzdXJ2aXZlcyBhbiB1bnJlbGF0ZWQgY2hhbmdlLlxuK1x0ICovXG4rXHRpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKGRldiwgc2V0X210dSBcdTAwMjZcdTAwMjYgdHVubmVsLVx1MDAzZWhsZW4gIT0gb2xkX2hsZW4pO1xuK31cbitcbiBzdGF0aWMgaW50IGVyc3Bhbl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4tXHRpZiAodHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIgPT0gMClcbi1cdFx0dHVubmVsLVx1MDAzZXR1bl9obGVuID0gNDsgLyogNC1ieXRlIEdSRSBoZHIuICovXG4tXHRlbHNlXG4tXHRcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IDg7IC8qIDgtYnl0ZSBHUkUgaGRyLiAqL1xuK1x0ZXJzcGFuX3NldF9obGVuKHR1bm5lbCk7XG4gXG4gXHR0dW5uZWwtXHUwMDNlcGFybXMuaXBoLnByb3RvY29sID0gSVBQUk9UT19HUkU7XG4tXHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2V0dW5faGxlbiArIHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuICtcbi1cdFx0ICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyKTtcbiBcbiBcdGRldi1cdTAwM2VmZWF0dXJlc1x0XHR8PSBHUkVfRkVBVFVSRVM7XG4gXHRkZXYtXHUwMDNlaHdfZmVhdHVyZXNcdHw9IEdSRV9GRUFUVVJFUztcbkBAIC0xNDU5LDYgKzE1MDEsNyBAQCBzdGF0aWMgaW50IGlwZ3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcbiBcdF9fdTMyIGZ3bWFyayA9IHQtXHUwMDNlZndtYXJrO1xuK1x0aW50IG9sZF9obGVuID0gdC1cdTAwM2VobGVuO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbkBAIC0xNDcwLDE4ICsxNTEzLDI0IEBAIHN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFxuIFx0ZXJyID0gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBcdTAwMjZwLCBcdTAwMjZmd21hcmspO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBsaW5rX3VwZGF0ZTtcbiBcbiBcdGVyciA9IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKGRldiwgdGIsIFx1MDAyNnAsIGZ3bWFyayk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGxpbmtfdXBkYXRlO1xuIFxuIFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5pX2ZsYWdzLCBwLmlfZmxhZ3MpO1xuIFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLm9fZmxhZ3MpO1xuIFxuLVx0aXBncmVfbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdKTtcbitsaW5rX3VwZGF0ZTpcbitcdC8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24gZXZlblxuK1x0ICogaWYgdGhlIHJlc3Qgb2YgdGhlIHJlcXVlc3QgZmFpbGVkLCBzbyB0aGUgbGVuZ3RocyBtdXN0IGJlIHJlZnJlc2hlZFxuK1x0ICogb24gdGhlIGVycm9yIHBhdGhzIGFzIHdlbGwuIFRoaXMgaGFzIHRvIGNvbWUgbGFzdCwgYmVjYXVzZVxuK1x0ICogaXBncmVfbGlua191cGRhdGUoKSBuZWVkcyB0aGUgZmxhZ3MgY29waWVkIGFib3ZlLlxuK1x0ICovXG4rXHRpcGdyZV9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuQEAgLTE0OTEsNiArMTU0MCw3IEBAIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcbiBcdF9fdTMyIGZ3bWFyayA9IHQtXHUwMDNlZndtYXJrO1xuK1x0aW50IG9sZF9obGVuID0gdC1cdTAwM2VobGVuO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbkBAIC0xNTAxLDYgKzE1NTEsMTYgQEAgc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0ZXJyID0gZXJzcGFuX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgXHUwMDI2cCwgXHUwMDI2ZndtYXJrKTtcbitcbitcdC8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24sIGFuZFxuK1x0ICogZXJzcGFuX25ldGxpbmtfcGFybXMoKSBhIG5ldyBFUlNQQU4gdmVyc2lvbiwgYm90aCBvZiB3aGljaCBjaGFuZ2VcbitcdCAqIHRoZSBoZWFkZXIgbGVuZ3RoLiBSZWZyZXNoIHRoZSBsZW5ndGhzIGJlZm9yZSBsb29raW5nIGF0IEBlcnI6XG4rXHQgKiBlcnNwYW5feG1pdCgpIHNpemVzIGl0cyBwdXNoIGZyb20gdHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIsIGFuZCBib3RoIHRoaXNcbitcdCAqIGVycm9yIHBhdGggYW5kIGlwX3R1bm5lbF9jaGFuZ2VsaW5rKCkgYmVsb3cgbGVhdmUgdGhlIG5ld1xuK1x0ICogZW5jYXBzdWxhdGlvbiBiZWhpbmQuXG4rXHQgKi9cbitcdGVyc3Bhbl9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcbitcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuaW5kZXggZTZiY2YwMTQxMWQwYi4uNmI5M2MxZmRhNDk0OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuQEAgLTMyNiw2ICszMjYsMjIgQEAgc3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBtdHU7XG4gfVxuIFxuKy8qIFJlY29tcHV0ZSBkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tIGFuZCBkZXYtXHUwMDNlbXR1IGFmdGVyIHR1bm5lbC1cdTAwM2VobGVuIGNoYW5nZWQuXG4rICpcbisgKiBCb3RoIGFyZSBkZXJpdmVkIGZyb20gdHVubmVsLVx1MDAzZWhsZW4sIHNvIHRoZXkgbXVzdCBiZSByZWNvbXB1dGVkIGZyb20gaXRcbisgKiByYXRoZXIgdGhhbiBhZGp1c3RlZCBieSB0aGUgZGlmZmVyZW5jZTogaXBfdHVubmVsX2JpbmRfZGV2KCkgaXMgYWxzb1xuKyAqIGNhbGxlZCBmcm9tIG5kb19pbml0KCkgYW5kIGZyb20gaXBfdHVubmVsX3VwZGF0ZSgpLCBhbmQgYSBkcml2ZXIgYWRkaW5nXG4rICogaXRzIG93biBkZWx0YSBvbiB0b3Agd291bGQgZG91YmxlIGNvdW50IGl0LlxuKyAqL1xuK3ZvaWQgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpXG4re1xuK1x0aW50IG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xuK1xuK1x0aWYgKHNldF9tdHUpXG4rXHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbXR1KTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Rocyk7XG4rXG4gc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKmlwX3R1bm5lbF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG4sXG4gXHRcdFx0XHRcdCAgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnBhcm1zKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6MDkuMzAwMjYyOTE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MTAzOTM3MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgaW4gdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3MgZ29pbmcgdG8gY2F1c2UgdXMgaGVhZGFjaGVzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLCBhbmQgd2hldGhlciB3ZSBuZWVkIHRvIGZpcmUgdXAgS01TQU4gZm9yIGEgZGVlcCBkaXZlLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGxhYmVsZWQgYXMgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcsXCIgd2hpY2ggdXN1YWxseSBtZWFucyBpdCB3YXMgZmxhZ2dlZCBieSBzeXprYWxsZXIuXG5cblRoZSBmaWxlcyBtb2RpZmllZCBhcmU6IGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLCBgbmV0L2lwdjQvaXBfZ3JlLmNgLCBhbmQgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYC4gT2theSwgdGhyZWUgZmlsZXMuIExldCdzIHN0YXJ0IGJ5IG1ldGhvZGljYWxseSByZWFkaW5nIHRoZSBjaGFuZ2VzLlxuXG5Mb29raW5nIGF0IGBuZXQvaXB2NC9pcF90dW5uZWwuY2AsIHRoZXJlJ3MgYSBmdW5jdGlvbiBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpYC4gSXQgY2FsbHMgYGlwX3R1bm5lbF9iaW5kX2RldihkZXYpYCBhbmQgc2V0cyBgZGV2LVx1MDAzZW10dWAgaWYgYHNldF9tdHVgIGlzIHRydWUuIEhtbSwgdGhhdCBgaXBfdHVubmVsX2JpbmRfZGV2YCBjYWxsIGxvb2tzIGltcG9ydGFudC4gTGV0J3MganVtcCBvdmVyIGFuZCBpbnNwZWN0IGBpcF90dW5uZWxfYmluZF9kZXYoZGV2KWAgaW4gdGhlIHNhbWUgZmlsZSB0byBzZWUgd2hhdCBpdCdzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQ1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6MjMuNDA0MjAzNjgzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXHRcXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkodHVubmVsLVxcdTAwM2VuZXQsIFxcdTAwMjZmbDQpO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHRcXHRpZiAoIUlTX0VSUihydCkpIHtcXG4gMzAzOlxcdFxcdFxcdFxcdHRkZXYgPSBydC1cXHUwMDNlZHN0LmRldjtcXG4gMzA0OlxcdFxcdFxcdFxcdGlwX3J0X3B1dChydCk7XFxuIDMwNTpcXHRcXHRcXHR9XFxuIDMwNjpcXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUilcXG4gMzA3OlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlZmxhZ3MgfD0gSUZGX1BPSU5UT1BPSU5UO1xcbiAzMDg6XFx0XFxuIDMwOTpcXHRcXHRcXHRkc3RfY2FjaGVfcmVzZXQoXFx1MDAyNnR1bm5lbC1cXHUwMDNlZHN0X2NhY2hlKTtcXG4gMzEwOlxcdFxcdH1cXG4gMzExOlxcdFxcbiAzMTI6XFx0XFx0aWYgKCF0ZGV2IFxcdTAwMjZcXHUwMDI2IHR1bm5lbC1cXHUwMDNlcGFybXMubGluaylcXG4gMzEzOlxcdFxcdFxcdHRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgodHVubmVsLVxcdTAwM2VuZXQsIHR1bm5lbC1cXHUwMDNlcGFybXMubGluayk7XFxuIDMxNDpcXHRcXG4gMzE1OlxcdFxcdGlmICh0ZGV2KSB7XFxuIDMxNjpcXHRcXHRcXHRobGVuID0gdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tO1xcbiAzMTc6XFx0XFx0XFx0bXR1ID0gbWluKHRkZXYtXFx1MDAzZW10dSwgSVBfTUFYX01UVSk7XFxuIDMxODpcXHRcXHR9XFxuIDMxOTpcXHRcXG4gMzIwOlxcdFxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiArIGhsZW4pO1xcbiAzMjE6XFx0XFx0bXR1IC09IHRfaGxlbiArIChkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwKTtcXG4gMzIyOlxcdFxcbiAzMjM6XFx0XFx0aWYgKG10dSBcXHUwMDNjIElQVjRfTUlOX01UVSlcXG4gMzI0OlxcdFxcdFxcdG10dSA9IElQVjRfTUlOX01UVTtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0cmV0dXJuIG10dTtcXG4gMzI3OlxcdH1cXG4gMzI4OlxcdFxcbiAzMjk6XFx0LyogUmVjb21wdXRlIGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tIGFuZCBkZXYtXFx1MDAzZW10dSBhZnRlciB0dW5uZWwtXFx1MDAzZWhsZW4gY2hhbmdlZC5cXG4gMzMwOlxcdCAqXFxuIDMzMTpcXHQgKiBCb3RoIGFyZSBkZXJpdmVkIGZyb20gdHVubmVsLVxcdTAwM2VobGVuLCBzbyB0aGV5IG11c3QgYmUgcmVjb21wdXRlZCBmcm9tIGl0XFxuIDMzMjpcXHQgKiByYXRoZXIgdGhhbiBhZGp1c3RlZCBieSB0aGUgZGlmZmVyZW5jZTogaXBfdHVubmVsX2JpbmRfZGV2KCkgaXMgYWxzb1xcbiAzMzM6XFx0ICogY2FsbGVkIGZyb20gbmRvX2luaXQoKSBhbmQgZnJvbSBpcF90dW5uZWxfdXBkYXRlKCksIGFuZCBhIGRyaXZlciBhZGRpbmdcXG4gMzM0OlxcdCAqIGl0cyBvd24gZGVsdGEgb24gdG9wIHdvdWxkIGRvdWJsZSBjb3VudCBpdC5cXG4gMzM1OlxcdCAqL1xcbiAzMzY6XFx0dm9pZCBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSlcXG4gMzM3OlxcdHtcXG4gMzM4OlxcdFxcdGludCBtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcXG4gMzM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0MzoyMy40MDQzMDEzNjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU3MDgwMTY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGlwX3R1bm5lbF9iaW5kX2RldmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgbGluZXMgMjcwLTMwMC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGNodW5rIG9mIHRoZSBjb2RlLiBMZXQgbWUgcGFyc2UgdGhpcyBzZWN0aW9uIGNhcmVmdWxseSwgZm9jdXNpbmcgb24gdGhlIGludGVyYWN0aW9ucyBhbmQgdGhlIGRhdGEgZmxvdy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gaXNuJ3QgdG9vIG9idHVzZS4gSSBzdXNwZWN0IGl0J3MgZGVhbGluZyB3aXRoIHRoZSBhY3R1YWwgYmluZGluZyBsb2dpYywgcHJvYmFibHkgaW5jb3Jwb3JhdGluZyBzb21lIGRldmljZS1zcGVjaWZpYyBhc3BlY3RzLCBvciBwZXJoYXBzIHNvbWUgc2VjdXJpdHkgY2hlY2tzLiBUaW1lIHRvIGZvY3VzIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyB0aGlzIHNlY3Rpb24gcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE5OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6MjUuOTc1MTA2NDQ3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0XFx0XFx0Z290byBmYWlsZWRfZnJlZTtcXG4gMjcxOlxcdFxcbiAyNzI6XFx0XFx0cmV0dXJuIGRldjtcXG4gMjczOlxcdFxcbiAyNzQ6XFx0ZmFpbGVkX2ZyZWU6XFxuIDI3NTpcXHRcXHRmcmVlX25ldGRldihkZXYpO1xcbiAyNzY6XFx0ZmFpbGVkOlxcbiAyNzc6XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gMjc4OlxcdH1cXG4gMjc5OlxcdFxcbiAyODA6XFx0c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gMjgxOlxcdHtcXG4gMjgyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICp0ZGV2ID0gTlVMTDtcXG4gMjgzOlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuIDI4NDpcXHRcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4gMjg1OlxcdFxcdGludCBobGVuID0gTExfTUFYX0hFQURFUjtcXG4gMjg2OlxcdFxcdGludCBtdHUgPSBFVEhfREFUQV9MRU47XFxuIDI4NzpcXHRcXHRpbnQgdF9obGVuID0gdHVubmVsLVxcdTAwM2VobGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxuIDI4ODpcXHRcXG4gMjg5OlxcdFxcdGlwaCA9IFxcdTAwMjZ0dW5uZWwtXFx1MDAzZXBhcm1zLmlwaDtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0LyogR3Vlc3Mgb3V0cHV0IGRldmljZSB0byBjaG9vc2UgcmVhc29uYWJsZSBtdHUgYW5kIG5lZWRlZF9oZWFkcm9vbSAqL1xcbiAyOTI6XFx0XFx0aWYgKGlwaC1cXHUwMDNlZGFkZHIpIHtcXG4gMjkzOlxcdFxcdFxcdHN0cnVjdCBmbG93aTQgZmw0O1xcbiAyOTQ6XFx0XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQ7XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdFxcdGlwX3R1bm5lbF9pbml0X2Zsb3coXFx1MDAyNmZsNCwgaXBoLVxcdTAwM2Vwcm90b2NvbCwgaXBoLVxcdTAwM2VkYWRkcixcXG4gMjk3OlxcdFxcdFxcdFxcdFxcdCAgICBpcGgtXFx1MDAzZXNhZGRyLCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fa2V5LFxcbiAyOTg6XFx0XFx0XFx0XFx0XFx0ICAgIGlwaC1cXHUwMDNldG9zIFxcdTAwMjYgSU5FVF9EU0NQX01BU0ssIHR1bm5lbC1cXHUwMDNlbmV0LFxcbiAyOTk6XFx0XFx0XFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlcGFybXMubGluaywgdHVubmVsLVxcdTAwM2Vmd21hcmssIDAsIDApO1xcbiAzMDA6XFx0XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KHR1bm5lbC1cXHUwMDNlbmV0LCBcXHUwMDI2Zmw0KTtcXG4gMzAxOlxcdFxcbiAzMDI6XFx0XFx0XFx0aWYgKCFJU19FUlIocnQpKSB7XFxuIDMwMzpcXHRcXHRcXHRcXHR0ZGV2ID0gcnQtXFx1MDAzZWRzdC5kZXY7XFxuIDMwNDpcXHRcXHRcXHRcXHRpcF9ydF9wdXQocnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0MzoyNS45NzUyMTExNjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg0NTY2NTA1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGNoYW5nZXMgd2l0aGluIGBuZXQvaXB2NC9pcF9ncmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIG1vZGlmaWVkLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gZ28gbGluZS1ieS1saW5lLCBjb21wYXJpbmcgdGhlIGRpZmYgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBnZXQgdGhlIGZ1bGwgY29udGV4dC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIHRocm91Z2ggdGhlIGNoYW5nZXMgYW5kIGludGVycHJldCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTEwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0Mzo0NC40MzE4NjQxMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA4MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQwOlxcdFxcdGlmIChjbWQgPT0gU0lPQ0FERFRVTk5FTCB8fCBjbWQgPT0gU0lPQ0NIR1RVTk5FTCkge1xcbiA4NDE6XFx0XFx0XFx0aWYgKHAtXFx1MDAzZWlwaC52ZXJzaW9uICE9IDQgfHwgcC1cXHUwMDNlaXBoLnByb3RvY29sICE9IElQUFJPVE9fR1JFIHx8XFxuIDg0MjpcXHRcXHRcXHQgICAgcC1cXHUwMDNlaXBoLmlobCAhPSA1IHx8IChwLVxcdTAwM2VpcGguZnJhZ19vZmYgXFx1MDAyNiBodG9ucyh+SVBfREYpKSB8fFxcbiA4NDM6XFx0XFx0XFx0ICAgICgoaV9mbGFncyB8IG9fZmxhZ3MpIFxcdTAwMjYgKEdSRV9WRVJTSU9OIHwgR1JFX1JPVVRJTkcpKSlcXG4gODQ0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4NDU6XFx0XFx0fVxcbiA4NDY6XFx0XFxuIDg0NzpcXHRcXHRncmVfZmxhZ3NfdG9fdG5sX2ZsYWdzKHAtXFx1MDAzZWlfZmxhZ3MsIGlfZmxhZ3MpO1xcbiA4NDg6XFx0XFx0Z3JlX2ZsYWdzX3RvX3RubF9mbGFncyhwLVxcdTAwM2VvX2ZsYWdzLCBvX2ZsYWdzKTtcXG4gODQ5OlxcdFxcbiA4NTA6XFx0XFx0ZXJyID0gaXBfdHVubmVsX2N0bChkZXYsIHAsIGNtZCk7XFxuIDg1MTpcXHRcXHRpZiAoZXJyKVxcbiA4NTI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gODUzOlxcdFxcbiA4NTQ6XFx0XFx0aWYgKGNtZCA9PSBTSU9DQ0hHVFVOTkVMKSB7XFxuIDg1NTpcXHRcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gODU2OlxcdFxcbiA4NTc6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cXHUwMDNlcGFybXMuaV9mbGFncywgcC1cXHUwMDNlaV9mbGFncyk7XFxuIDg1ODpcXHRcXHRcXHRpcF90dW5uZWxfZmxhZ3NfY29weSh0LVxcdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLVxcdTAwM2VvX2ZsYWdzKTtcXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0XFx0aWYgKHN0cmNtcChkZXYtXFx1MDAzZXJ0bmxfbGlua19vcHMtXFx1MDAzZWtpbmQsIFxcXCJlcnNwYW5cXFwiKSlcXG4gODYxOlxcdFxcdFxcdFxcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSwgdC1cXHUwMDNlaGxlbik7XFxuIDg2MjpcXHRcXHR9XFxuIDg2MzpcXHRcXG4gODY0OlxcdFxcdGlfZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVxcdTAwM2VpX2ZsYWdzKTtcXG4gODY1OlxcdFxcdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYocC1cXHUwMDNlaV9mbGFncywgaV9mbGFncyk7XFxuIDg2NjpcXHRcXHRvX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cXHUwMDNlb19mbGFncyk7XFxuIDg2NzpcXHRcXHRpcF90dW5uZWxfZmxhZ3NfZnJvbV9iZTE2KHAtXFx1MDAzZW9fZmxhZ3MsIG9fZmxhZ3MpO1xcbiA4Njg6XFx0XFxuIDg2OTpcXHRcXHRyZXR1cm4gMDtcXG4gODcwOlxcdH1cXG4gODcxOlxcdFxcbiA4NzI6XFx0LyogTmljZSB0b3kuIFVuZm9ydHVuYXRlbHksIHVzZWxlc3MgaW4gcmVhbCBsaWZlIDotKVxcbiA4NzM6XFx0ICAgSXQgYWxsb3dzIHRvIGNvbnN0cnVjdCB2aXJ0dWFsIG11bHRpcHJvdG9jb2wgYnJvYWRjYXN0IFxcXCJMQU5cXFwiXFxuIDg3NDpcXHQgICBvdmVyIHRoZSBJbnRlcm5ldCwgcHJvdmlkZWQgbXVsdGljYXN0IHJvdXRpbmcgaXMgdHVuZWQuXFxuIDg3NTpcXHRcXG4gODc2OlxcdFxcbiA4Nzc6XFx0ICAgSSBoYXZlIG5vIGlkZWEgd2FzIHRoaXMgYmljeWNsZSBpbnZlbnRlZCBiZWZvcmUgbWUsXFxuIDg3ODpcXHQgICBzbyB0aGF0IEkgaGFkIHRvIHNldCBBUlBIUkRfSVBHUkUgdG8gYSByYW5kb20gdmFsdWUuXFxuIDg3OTpcXHQgICBJIGhhdmUgYW4gaW1wcmVzc2lvbiwgdGhhdCBDaXNjbyBjb3VsZCBtYWtlIHNvbWV0aGluZyBzaW1pbGFyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0Mzo0NC40MzIwMzY1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTk2MzQ4NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBOZXRsaW5rIFBhcmFtZXRlciBTdHJ1Y3R1cmVzIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhZ2Fpbi4gQmFzZWQgb24gdGhlIGlzc3VlIHJlcG9ydCwgSSBuZWVkIHRvIGZvY3VzIG9uIHBvdGVudGlhbCBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBJUEdSRSBhbmQgRVJTUEFOIG5ldGxpbmsgcGFyYW1ldGVycy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBhcm91bmQgbGluZXMgMTIyMCB0byAxMzIwLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBleGFtaW5lIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCBhbmQgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiwgaW5jb3JyZWN0IHR5cGUgaGFuZGxpbmcsIG9yIHBvc3NpYmxlIGJ1ZmZlciBvdmVyZmxvd3Mgd2hlbiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwb3B1bGF0ZWQgb3IgYWNjZXNzZWQgdGhyb3VnaCB0aGUgbmV0bGluayBpbnRlcmZhY2UuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB3YXkgdGhlIGRhdGEgaXMgYmVpbmcgdmFsaWRhdGVkIGFuZCB3aGV0aGVyIHByb3BlciBlcnJvciBjaGVja2luZyBpcyBpbXBsZW1lbnRlZC4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbSBsaWVzLiBJJ2xsIGxpa2VseSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgbmV0bGluayBzb2NrZXQgYWxsIHRoZSB3YXkgdGhyb3VnaCB0byB3aGVyZSB0aGVzZSBwYXJhbWV0ZXJzIGFyZSB1c2VkIGluIHRoZSB0dW5uZWwgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQzOjQ2LjYyODM4NzY3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA3MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzMDpcXHRcXHRcXHRwYXJtcy1cXHUwMDNlaXBoLnR0bCA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9UVExdKTtcXG4xMjMxOlxcdFxcbjEyMzI6XFx0XFx0aWYgKGRhdGFbSUZMQV9HUkVfVE9TXSlcXG4xMjMzOlxcdFxcdFxcdHBhcm1zLVxcdTAwM2VpcGgudG9zID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX1RPU10pO1xcbjEyMzQ6XFx0XFxuMTIzNTpcXHRcXHRpZiAoIWRhdGFbSUZMQV9HUkVfUE1UVURJU0NdIHx8IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9QTVRVRElTQ10pKSB7XFxuMTIzNjpcXHRcXHRcXHRpZiAodC1cXHUwMDNlaWdub3JlX2RmKVxcbjEyMzc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIzODpcXHRcXHRcXHRwYXJtcy1cXHUwMDNlaXBoLmZyYWdfb2ZmID0gaHRvbnMoSVBfREYpO1xcbjEyMzk6XFx0XFx0fVxcbjEyNDA6XFx0XFxuMTI0MTpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKSB7XFxuMTI0MjpcXHRcXHRcXHRpZiAobmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pXFxuMTI0MzpcXHRcXHRcXHQgIFxcdTAwMjZcXHUwMDI2IChwYXJtcy1cXHUwMDNlaXBoLmZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfREYpKSlcXG4xMjQ0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNDU6XFx0XFx0XFx0dC1cXHUwMDNlaWdub3JlX2RmID0gISFubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSk7XFxuMTI0NjpcXHRcXHR9XFxuMTI0NzpcXHRcXG4xMjQ4OlxcdFxcdC8qIEFsbCBhdHRyaWJ1dGVzIGhhdmUgYmVlbiB2YWxpZGF0ZWQsIHdlIGNhbiBjaGFuZ2UgQGRldiBhbmQgQHQuICovXFxuMTI0OTpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9DT0xMRUNUX01FVEFEQVRBXSkge1xcbjEyNTA6XFx0XFx0XFx0dC1cXHUwMDNlY29sbGVjdF9tZCA9IHRydWU7XFxuMTI1MTpcXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9JUEdSRSlcXG4xMjUyOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNldHlwZSA9IEFSUEhSRF9OT05FO1xcbjEyNTM6XFx0XFx0fVxcbjEyNTQ6XFx0XFxuMTI1NTpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9GV01BUktdKVxcbjEyNTY6XFx0XFx0XFx0KmZ3bWFyayA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRldNQVJLXSk7XFxuMTI1NzpcXHRcXG4xMjU4OlxcdFxcdHJldHVybiAwO1xcbjEyNTk6XFx0fVxcbjEyNjA6XFx0XFxuMTI2MTpcXHRzdGF0aWMgaW50IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuMTI2MjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuMTI2MzpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbjEyNjQ6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnBhcm1zLFxcbjEyNjU6XFx0XFx0XFx0XFx0XFx0X191MzIgKmZ3bWFyaylcXG4xMjY2OlxcdHtcXG4xMjY3OlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjEyNjg6XFx0XFx0dTggZXJzcGFuX3ZlciA9IHQtXFx1MDAzZWVyc3Bhbl92ZXI7XFxuMTI2OTpcXHRcXHR1MzIgaW5kZXggPSB0LVxcdTAwM2VpbmRleDtcXG4xMjcwOlxcdFxcdHUxNiBod2lkID0gdC1cXHUwMDNlaHdpZDtcXG4xMjcxOlxcdFxcdHU4IGRpciA9IHQtXFx1MDAzZWRpcjtcXG4xMjcyOlxcdFxcdGludCBlcnI7XFxuMTI3MzpcXHRcXG4xMjc0OlxcdFxcdGlmICghZGF0YSlcXG4xMjc1OlxcdFxcdFxcdHJldHVybiBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xcbjEyNzY6XFx0XFxuMTI3NzpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSkge1xcbjEyNzg6XFx0XFx0XFx0ZXJzcGFuX3ZlciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSk7XFxuMTI3OTpcXHRcXG4xMjgwOlxcdFxcdFxcdGlmIChlcnNwYW5fdmVyIFxcdTAwM2UgMilcXG4xMjgxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyODI6XFx0XFx0fVxcbjEyODM6XFx0XFxuMTI4NDpcXHRcXHRpZiAoZXJzcGFuX3ZlciA9PSAxKSB7XFxuMTI4NTpcXHRcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSU5ERVhdKSB7XFxuMTI4NjpcXHRcXHRcXHRcXHRpbmRleCA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0lOREVYXSk7XFxuMTI4NzpcXHRcXHRcXHRcXHRpZiAoaW5kZXggXFx1MDAyNiB+SU5ERVhfTUFTSylcXG4xMjg4OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyODk6XFx0XFx0XFx0fVxcbjEyOTA6XFx0XFx0fSBlbHNlIGlmIChlcnNwYW5fdmVyID09IDIpIHtcXG4xMjkxOlxcdFxcdFxcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9ESVJdKSB7XFxuMTI5MjpcXHRcXHRcXHRcXHRkaXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pO1xcbjEyOTM6XFx0XFx0XFx0XFx0aWYgKGRpciBcXHUwMDI2IH4oRElSX01BU0sgXFx1MDAzZVxcdTAwM2UgRElSX09GRlNFVCkpXFxuMTI5NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjk1OlxcdFxcdFxcdH1cXG4xMjk2OlxcdFxcdFxcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9IV0lEXSkge1xcbjEyOTc6XFx0XFx0XFx0XFx0aHdpZCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKTtcXG4xMjk4OlxcdFxcdFxcdFxcdGlmIChod2lkIFxcdTAwMjYgfihIV0lEX01BU0sgXFx1MDAzZVxcdTAwM2UgSFdJRF9PRkZTRVQpKVxcbjEyOTk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTMwMDpcXHRcXHRcXHR9XFxuMTMwMTpcXHRcXHR9XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XFxuMTMwNDpcXHRcXHRpZiAoZXJyKVxcbjEzMDU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMzA2OlxcdFxcbjEzMDc6XFx0XFx0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAdC4gKi9cXG4xMzA4OlxcdFxcdHQtXFx1MDAzZWVyc3Bhbl92ZXIgPSBlcnNwYW5fdmVyO1xcbjEzMDk6XFx0XFx0dC1cXHUwMDNlaW5kZXggPSBpbmRleDtcXG4xMzEwOlxcdFxcdHQtXFx1MDAzZWh3aWQgPSBod2lkO1xcbjEzMTE6XFx0XFx0dC1cXHUwMDNlZGlyID0gZGlyO1xcbjEzMTI6XFx0XFxuMTMxMzpcXHRcXHRyZXR1cm4gMDtcXG4xMzE0OlxcdH1cXG4xMzE1OlxcdFxcbjEzMTY6XFx0LyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBFTkNBUCBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50IGluIHRoZSBubCBtc2cgKi9cXG4xMzE3OlxcdHN0YXRpYyBib29sIGlwZ3JlX25ldGxpbmtfZW5jYXBfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbjEzMTg6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqaXBlbmNhcClcXG4xMzE5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6NDYuNjI4NTQwNDgzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNTYwMTg4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGlwX2dyZS5jOiBlcnNwYW5fY2hhbmdlbGluayBhbmQgaXBncmVfY2hhbmdlbGluayBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCB0aG9zZSBgZXJzcGFuX2NoYW5nZWxpbmtgIGFuZCBgaXBncmVfY2hhbmdlbGlua2AgZnVuY3Rpb25zIGluIGBpcF9ncmUuY2AuIExldCdzIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgYmxvY2ssIHJvdWdobHkgZnJvbSBsaW5lIDE0NTAgdG8gMTU3MC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgaGFuZGxpbmcgbGluayBjaGFuZ2Vz4oCUcHJvYmFibHkgZGVhbGluZyB3aXRoIHVwZGF0ZXMgdG8gdGhlIEdSRS9FUlNQQU4gdHVubmVsIGNvbmZpZ3VyYXRpb25zIG9yIHN0YXRlIHRyYW5zaXRpb25zIGFmdGVyIGFuIGludGVyZmFjZSBnb2VzIHVwIG9yIGRvd24uIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBzeXN0ZW0gYWRhcHRzIHRvIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgbGluaywgcGFydGljdWxhcmx5IGhvdyBpdCBhZmZlY3RzIHRoZSBlc3RhYmxpc2hlZCB0dW5uZWxzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgY2FsbHMgdG8gbG93ZXItbGV2ZWwgbmV0d29ya2luZyBmdW5jdGlvbnMsIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgb3IgcmV0cnkgbWVjaGFuaXNtcyBpbXBsZW1lbnRlZC4gSSdtIGFudGljaXBhdGluZyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcm91dGluZyB0YWJsZSBhcyB3ZWxsLCB0byBzZWUgaG93IHRoZXNlIGxpbmsgY2hhbmdlcyBhZmZlY3QgZm9yd2FyZGluZyBiZWhhdmlvci4gSXQncyBhbHNvIHBvc3NpYmxlIHRoZXJlJ3Mgc29tZSBpbnRlcmFjdGlvbiB3aXRoIG5ldHdvcmsgbmFtZXNwYWNlcywgaWYgd2UncmUgZGVhbGluZyB3aXRoIGNvbnRhaW5lcml6ZWQgZW52aXJvbm1lbnRzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQzOjQ4Ljg4NDU2NTgzM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ5MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ5MDpcXHRcXHRlcnIgPSBlcnNwYW5fbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBcXHUwMDI2cCwgXFx1MDAyNmZ3bWFyayk7XFxuMTQ5MTpcXHRcXHRpZiAoZXJyKVxcbjE0OTI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDkzOlxcdFxcdHJldHVybiBpcF90dW5uZWxfbmV3bGluayhwYXJhbXMtXFx1MDAzZWxpbmtfbmV0ID8gOiBkZXZfbmV0KGRldiksIGRldiwgdGIsIFxcdTAwMjZwLFxcbjE0OTQ6XFx0XFx0XFx0XFx0XFx0IGZ3bWFyayk7XFxuMTQ5NTpcXHR9XFxuMTQ5NjpcXHRcXG4xNDk3OlxcdHN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbjE0OTg6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4xNDk5OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTUwMDpcXHR7XFxuMTUwMTpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xNTAyOlxcdFxcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XFxuMTUwMzpcXHRcXHRfX3UzMiBmd21hcmsgPSB0LVxcdTAwM2Vmd21hcms7XFxuMTUwNDpcXHRcXHRpbnQgb2xkX2hsZW4gPSB0LVxcdTAwM2VobGVuO1xcbjE1MDU6XFx0XFx0aW50IGVycjtcXG4xNTA2OlxcdFxcbjE1MDc6XFx0XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG4xNTA4OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTUwOTpcXHRcXG4xNTEwOlxcdFxcdGVyciA9IGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoZGV2LCBkYXRhKTtcXG4xNTExOlxcdFxcdGlmIChlcnIpXFxuMTUxMjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1MTM6XFx0XFxuMTUxNDpcXHRcXHRlcnIgPSBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIFxcdTAwMjZwLCBcXHUwMDI2ZndtYXJrKTtcXG4xNTE1OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjE1MTY6XFx0XFx0XFx0Z290byBsaW5rX3VwZGF0ZTtcXG4xNTE3OlxcdFxcbjE1MTg6XFx0XFx0ZXJyID0gaXBfdHVubmVsX2NoYW5nZWxpbmsoZGV2LCB0YiwgXFx1MDAyNnAsIGZ3bWFyayk7XFxuMTUxOTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xNTIwOlxcdFxcdFxcdGdvdG8gbGlua191cGRhdGU7XFxuMTUyMTpcXHRcXG4xNTIyOlxcdFxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXFx1MDAzZXBhcm1zLmlfZmxhZ3MsIHAuaV9mbGFncyk7XFxuMTUyMzpcXHRcXHRpcF90dW5uZWxfZmxhZ3NfY29weSh0LVxcdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLm9fZmxhZ3MpO1xcbjE1MjQ6XFx0XFxuMTUyNTpcXHRsaW5rX3VwZGF0ZTpcXG4xNTI2OlxcdFxcdC8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24gZXZlblxcbjE1Mjc6XFx0XFx0ICogaWYgdGhlIHJlc3Qgb2YgdGhlIHJlcXVlc3QgZmFpbGVkLCBzbyB0aGUgbGVuZ3RocyBtdXN0IGJlIHJlZnJlc2hlZFxcbjE1Mjg6XFx0XFx0ICogb24gdGhlIGVycm9yIHBhdGhzIGFzIHdlbGwuIFRoaXMgaGFzIHRvIGNvbWUgbGFzdCwgYmVjYXVzZVxcbjE1Mjk6XFx0XFx0ICogaXBncmVfbGlua191cGRhdGUoKSBuZWVkcyB0aGUgZmxhZ3MgY29waWVkIGFib3ZlLlxcbjE1MzA6XFx0XFx0ICovXFxuMTUzMTpcXHRcXHRpcGdyZV9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcXG4xNTMyOlxcdFxcbjE1MzM6XFx0XFx0cmV0dXJuIGVycjtcXG4xNTM0OlxcdH1cXG4xNTM1OlxcdFxcbjE1MzY6XFx0c3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbjE1Mzc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuMTUzODpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xNTM5OlxcdHtcXG4xNTQwOlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjE1NDE6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcXG4xNTQyOlxcdFxcdF9fdTMyIGZ3bWFyayA9IHQtXFx1MDAzZWZ3bWFyaztcXG4xNTQzOlxcdFxcdGludCBvbGRfaGxlbiA9IHQtXFx1MDAzZWhsZW47XFxuMTU0NDpcXHRcXHRpbnQgZXJyO1xcbjE1NDU6XFx0XFxuMTU0NjpcXHRcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVxcdTAwM2VuZXQpKVxcbjE1NDc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xNTQ4OlxcdFxcbjE1NDk6XFx0XFx0ZXJyID0gaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cChkZXYsIGRhdGEpO1xcbjE1NTA6XFx0XFx0aWYgKGVycilcXG4xNTUxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTU1MjpcXHRcXG4xNTUzOlxcdFxcdGVyciA9IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIFxcdTAwMjZwLCBcXHUwMDI2ZndtYXJrKTtcXG4xNTU0OlxcdFxcbjE1NTU6XFx0XFx0LyogaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cCgpIGhhcyBwdWJsaXNoZWQgYSBuZXcgZW5jYXBzdWxhdGlvbiwgYW5kXFxuMTU1NjpcXHRcXHQgKiBlcnNwYW5fbmV0bGlua19wYXJtcygpIGEgbmV3IEVSU1BBTiB2ZXJzaW9uLCBib3RoIG9mIHdoaWNoIGNoYW5nZVxcbjE1NTc6XFx0XFx0ICogdGhlIGhlYWRlciBsZW5ndGguIFJlZnJlc2ggdGhlIGxlbmd0aHMgYmVmb3JlIGxvb2tpbmcgYXQgQGVycjpcXG4xNTU4OlxcdFxcdCAqIGVyc3Bhbl94bWl0KCkgc2l6ZXMgaXRzIHB1c2ggZnJvbSB0dW5uZWwtXFx1MDAzZWVyc3Bhbl92ZXIsIGFuZCBib3RoIHRoaXNcXG4xNTU5OlxcdFxcdCAqIGVycm9yIHBhdGggYW5kIGlwX3R1bm5lbF9jaGFuZ2VsaW5rKCkgYmVsb3cgbGVhdmUgdGhlIG5ld1xcbjE1NjA6XFx0XFx0ICogZW5jYXBzdWxhdGlvbiBiZWhpbmQuXFxuMTU2MTpcXHRcXHQgKi9cXG4xNTYyOlxcdFxcdGVyc3Bhbl9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcXG4xNTYzOlxcdFxcbjE1NjQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTU2NTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1NjY6XFx0XFxuMTU2NzpcXHRcXHRlcnIgPSBpcF90dW5uZWxfY2hhbmdlbGluayhkZXYsIHRiLCBcXHUwMDI2cCwgZndtYXJrKTtcXG4xNTY4OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjE1Njk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6NDguODg0NzI2MDczWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgyMjg1Nzc3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFR1bm5lbGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBhbHdheXMsIHdoYXQncyB0aGUgY29yZSBpc3N1ZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3Npbmc/IEl0IHNlZW1zIGxpa2UgcmVwZWF0ZWQgY2FsbHMgdG8gYGlwZ3JlX2NoYW5nZWxpbmtgIGFuZCBgZXJzcGFuX2NoYW5nZWxpbmtgLCBvciBjaGFuZ2VzIGluIGVuY2Fwc3VsYXRpb24sIHdlcmUgbGVhZGluZyB0byBpbmNvbnNpc3RlbmNpZXMgaW4gYHR1bm5lbC1cdTAwM2VobGVuYCwgYW5kIHRoZSBkZXZpY2UncyBoZWFkcm9vbSBhbmQgTVRVIHdlcmUgYmVjb21pbmcgbWlzYWxpZ25lZC4gVGhpcyByZXN1bHRlZCBpbiBsZW5ndGggZHJpZnQsIGFuZCB0aGUgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYCBmdW5jdGlvbiB3YXMgbXV0YXRpbmcgdHVubmVsIHBhcmFtZXRlcnMgKmJlZm9yZSogdGhleSB3ZXJlIHZhbGlkYXRlZCwgd2hpY2ggd291bGQgbGVhdmUgdGhlIHR1bm5lbCBzdHJ1Y3R1cmUgaW5jb25zaXN0ZW50IGlmIHZhbGlkYXRpb24gZmFpbGVkLiBJbXBvcnRhbnRseSwgYGVyc3Bhbl9saW5rX3VwZGF0ZWAgd2Fzbid0IGV2ZW4gcHJlc2VudCBwcmV2aW91c2x5LCB3aGljaCBzZWVtcyBsaWtlIGEgc2lnbmlmaWNhbnQgb3ZlcnNpZ2h0LiBUaGUgY29tbWVudCBpbiBgaXBncmVfbGlua191cGRhdGVgIHJlaW5mb3JjZXMgdGhhdCBgdHVubmVsLVx1MDAzZWhsZW5gIGlzIGRlcGVuZGVudCBvbiBmbGFncyB0aGF0IGNhbiBjaGFuZ2UsIHNvIHdlICpuZWVkKiB0byByZWNvbXB1dGUgaXQgYW5kIGRlcml2ZSBkZXZpY2UgbGVuZ3RocyBmcm9tIHRoZXJlLiBXZSBhcmVuJ3QganVzdCBhZGp1c3RpbmcgYnkgYSBkZWx0YSwgc28gdHJhY2tpbmcgYW4gYG9sZF9obGVuYCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50LlxuXG5Ob3csIGFzIGFuIGV4cGVydCwgSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBzYWZldHkuIE15IHByaW1hcnkgY29uY2VybiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgc28gSSBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhlIGZvdXIgY3JpdGVyaWE6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZToqKiBBcmUgd2UgaW50cm9kdWNpbmcgbmV3IG9yIG1vZGlmeWluZyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBwb3RlbnRpYWwgYXZlbnVlcyB3aGVyZSBrZXJuZWwgZGF0YSBsZWFrcyBvdXQsIGFuZCB0aGlzIGlzIHdoZXJlIEkgc3RhcnQgdG8gZHJpbGwgZG93bi5cbiAgICAqICAgTm8gYnJhbmQtbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoYXQncyBhIGdvb2QgZmlyc3QgY2hlY2suXG4gICAgKiAgIEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgcmV2aWV3IHRoZSBleGlzdGluZyBuZXRsaW5rIHJlcGx5IHBhdGhzOiBgaXBncmVfZmlsbF9pbmZvYCwgYGVyc3Bhbl9maWxsX2luZm9gLCBhbmQgYGdyZV90YXBfZmlsbF9pbmZvYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgZmllbGRzIGluIGBuZXRkZXZgIG9yIGBpcF90dW5uZWxgIGFyZSByZWFkIGFuZCBzZW50IHRvIHVzZXJzcGFjZSwgb3IgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQgYnkgb3VyIGNoYW5nZXMuIEFyZSB3ZSB3cml0aW5nIHZhbHVlcyB0aGF0IHdlcmUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkLCBvciBhcmUgd2UgY2hhbmdpbmcgbG9naWMgYW5kIHBvdGVudGlhbGx5IGxlYWtpbmcgZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/XG5cbkkgbmVlZCB0byBjb25maXJtIGFsbCB0aGUgcGF0aHMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcy4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gbG9vayB3aXRoaW4gdGhvc2UgbmV0bGluayBmaWxsIGZ1bmN0aW9ucyB0byBzZWUgd2hlcmUgdGhlIGRhdGEgZnJvbSB0dW5uZWwgc3RydWN0dXJlcyBnZXRzIGNvcGllZCBpbnRvIHRoZSBza2IgYXR0cmlidXRlcy4gSSdsbCBuZWVkIHRvIHZlcmlmeSBlYWNoIGZpZWxkIHRob3JvdWdobHkuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQzOjU3LjExMzMwNjg2NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU3NDcwOTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyc3Bhbl9maWxsX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9MTYyNT1zdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTY3NS1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNjc2OnN0YXRpYyBpbnQgZXJzcGFuX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE2Nzcte1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTc2OD1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZXJzcGFuX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzc4LVxcdC5nZXRfc2l6ZVxcdD0gaXBncmVfZ2V0X3NpemUsXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTc3OTpcXHQuZmlsbF9pbmZvXFx0PSBlcnNwYW5fZmlsbF9pbmZvLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3ODAtXFx0LmdldF9saW5rX25ldFxcdD0gaXBfdHVubmVsX2dldF9saW5rX25ldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6NTcuNDcwNzgyODAxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2NzA3OTY0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlIHNuaXBwZXQ6XG5cbioqRGl2aW5nIGludG8gYGVyc3Bhbl9maWxsX2luZm9gKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgZXJzcGFuX2ZpbGxfaW5mb2AuIFNpbmNlIEknbSB3b3JraW5nIG9uIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIGl0J3MgZGVzaWduZWQgdG8gcG9wdWxhdGUgYW5kIHRoZSBvdmVyYWxsIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJdCBsaWtlbHkgZGVhbHMgd2l0aCBzb21lIGZvcm0gb2YgRVJTUEFOIChFbmNhcHN1bGF0ZWQgUmVtb3RlIFNQQU4pIGluZm9ybWF0aW9uLiBJJ2xsIGV4YW1pbmUgdGhlIGNvZGUgY2xvc2VseSB0byBncmFzcCBpdHMgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYW55IGludGVybmFsIGxvZ2ljLiBLbm93aW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIEVSU1BBTiBpbXBsZW1lbnRhdGlvbiBpcyBjcml0aWNhbCBmb3IgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjY4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6NTkuMTQxNTgxNDUxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjc1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjc1OlxcdFxcbjE2NzY6XFx0c3RhdGljIGludCBlcnNwYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuMTY3NzpcXHR7XFxuMTY3ODpcXHRcXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xNjc5OlxcdFxcbjE2ODA6XFx0XFx0aWYgKHQtXFx1MDAzZWVyc3Bhbl92ZXIgXFx1MDAzYz0gMikge1xcbjE2ODE6XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dSRV9FUlNQQU5fVkVSLCB0LVxcdTAwM2VlcnNwYW5fdmVyKSlcXG4xNjgyOlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE2ODM6XFx0XFxuMTY4NDpcXHRcXHRcXHRpZiAodC1cXHUwMDNlZXJzcGFuX3ZlciA9PSAxKSB7XFxuMTY4NTpcXHRcXHRcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX0dSRV9FUlNQQU5fSU5ERVgsIHQtXFx1MDAzZWluZGV4KSlcXG4xNjg2OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE2ODc6XFx0XFx0XFx0fSBlbHNlIGlmICh0LVxcdTAwM2VlcnNwYW5fdmVyID09IDIpIHtcXG4xNjg4OlxcdFxcdFxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HUkVfRVJTUEFOX0RJUiwgdC1cXHUwMDNlZGlyKSlcXG4xNjg5OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE2OTA6XFx0XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTE2KHNrYiwgSUZMQV9HUkVfRVJTUEFOX0hXSUQsIHQtXFx1MDAzZWh3aWQpKVxcbjE2OTE6XFx0XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTY5MjpcXHRcXHRcXHR9XFxuMTY5MzpcXHRcXHR9XFxuMTY5NDpcXHRcXG4xNjk1OlxcdFxcdHJldHVybiBpcGdyZV9maWxsX2luZm8oc2tiLCBkZXYpO1xcbjE2OTY6XFx0XFxuMTY5NzpcXHRubGFfcHV0X2ZhaWx1cmU6XFxuMTY5ODpcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjE2OTk6XFx0fVxcbjE3MDA6XFx0XFxuMTcwMTpcXHRzdGF0aWMgdm9pZCBlcnNwYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xNzAyOlxcdHtcXG4xNzAzOlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjE3MDQ6XFx0XFxuMTcwNTpcXHRcXHRldGhlcl9zZXR1cChkZXYpO1xcbjE3MDY6XFx0XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gMDtcXG4xNzA3OlxcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZlcnNwYW5fbmV0ZGV2X29wcztcXG4xNzA4OlxcdFxcdGRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+SUZGX1RYX1NLQl9TSEFSSU5HO1xcbjE3MDk6XFx0XFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0Mzo1OS4xNDE3NDQyODFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTMxNzM0NDg2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ20gZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgd2l0aGluIHRoaXMgbmV0d29yayBkZXZpY2UgY29kZSwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIEVSU1BBTiBhbmQgR1JFIHR1bm5lbHMuXG5cbkZpcnN0LCB3aXRoaW4gdGhlIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgZnVuY3Rpb24sIEkgc2VlIHRoYXQgYGVyc3Bhbl92ZXJgLCBgaW5kZXhgLCBgaHdpZGAsIGFuZCBgZGlyYCBhcmUgbG9jYWwgdmFyaWFibGVzLiBUaGV5IGFyZSBkaXJlY3RseSBpbml0aWFsaXplZCBmcm9tIGZpZWxkcyBvZiB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdCBgdGAuIEFuZCwgY3J1Y2lhbGx5LCB0aGlzIHN0cnVjdCBgdGAgaXMgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gd2F5IHRoZXNlIHZhcmlhYmxlcyBhcmUgdW5pbml0aWFsaXplZCBhdCB0aGUgcG9pbnQgb2YgdGhlaXIgZGVjbGFyYXRpb24uIEl0J3MgYSB0ZXh0Ym9vayBpbml0aWFsaXphdGlvbiBwYXR0ZXJuLlxuXG5Ob3csIGZvciBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdmFyaWFibGVzLCBhcmUgd2UgbG9va2luZyBhdCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gSSBzZWUgYG9sZF9obGVuYCBiZWluZyB1c2VkIGluIGBpcGdyZV9saW5rX3VwZGF0ZWAsIGFuZCB0aGF0IGl0IG9yaWdpbmF0ZXMgZnJvbSBgaXBncmVfY2hhbmdlbGlua2Agb3IgYGlwZ3JlX3R1bm5lbF9jdGxgLiBCb3RoIGBpcGdyZV9jaGFuZ2VsaW5rYCBhbmQgYGVyc3Bhbl9jaGFuZ2VsaW5rYCBpbml0aWFsaXplIHRoZSBgb2xkX2hsZW5gIHZhcmlhYmxlIGZyb20gYHQtXHUwMDNlaGxlbmAsIHdoaWNoIG1lYW5zIHdlIGFyZSBzYWZlLlxuXG5SZWdhcmRpbmcgYWxsb2NhdGlvbnMgYW5kIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWRkZWQuIFRoYXQncyBnb29kOyBpdCBzaW1wbGlmaWVzIHRoaW5ncy5cblxuQnV0IHRoaXMgYnJpbmdzIHVzIHRvIHRoZSBwb3RlbnRpYWxseSB0cmlja3kgcGFydDogYm91bmRzIGNoZWNrcyBhbmQgYWNjZXNzIHRvIGV4aXN0aW5nIGJ1ZmZlcnMuIEhlcmUsIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgZm9yIHZ1bG5lcmFiaWxpdGllcyB3aGVyZSBjaGFuZ2VzIHRvIE1UVSwgaGVhZGVyIGxlbmd0aCAoYGhsZW5gKSwgZXRjLiBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIGltcHJvcGVyIGNhbGN1bGF0aW9ucyBvciBjaGVja3MuIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyFcblxuSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBgdHVubmVsLVx1MDAzZWhsZW5gLCBgdHVubmVsLVx1MDAzZXR1bl9obGVuYCwgYGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb21gLCBgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAsIGFuZCBgZGV2LVx1MDAzZW10dWAgYXJlIGFsbCB1c2VkIHRvZ2V0aGVyLCBlc3BlY2lhbGx5IGR1cmluZyB0cmFuc21pc3Npb24gb3IgcHJvY2Vzc2luZy4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWE7IGEgc3VidGxlIG9mZi1ieS1vbmUgZXJyb3Igb3IgaW5jb3JyZWN0IGNhbGN1bGF0aW9uIGhlcmUgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgb3IgZXZlbiBnYXJiYWdlIGRhdGEuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IG9mIGB0dW5uZWwtXHUwMDNlaGxlbmAgYW5kIGB0dW5uZWwtXHUwMDNldHVuX2hsZW5gIGR1cmluZyB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgYW5kIHNlZSBpZiBhbnkgYXNzdW1wdGlvbnMgb3IgY2FsY3VsYXRpb25zIGFyZSByaXNreS4gVGhpcyB3YXJyYW50cyBhIG1vcmUgZGV0YWlsZWQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0OTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0NDoxMi4zMTUxOTUxODRaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzM2MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9obGVufGhsZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9NDc2PXN0YXRpYyB2b2lkIF9fZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ4Mi1cXHQvKiBQdXNoIEdSRSBoZWFkZXIuICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6NDgzOlxcdGdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWwtXFx1MDAzZXR1bl9obGVuLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ4NC1cXHRcXHRcXHQgZmxhZ3MsIHByb3RvLCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fa2V5LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9NDk2PXN0YXRpYyB2b2lkIGdyZV9mYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy01MDItXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKmtleTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo1MDM6XFx0aW50IHR1bm5lbF9obGVuO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTUwNC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTUxMC1cXHRrZXkgPSBcXHUwMDI2dHVuX2luZm8tXFx1MDAzZWtleTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo1MTE6XFx0dHVubmVsX2hsZW4gPSBncmVfY2FsY19obGVuKGtleS1cXHUwMDNldHVuX2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy01MTItXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy01MjUtXFxubmV0L2lwdjQvaXBfZ3JlLmM6NTI2OlxcdGdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWxfaGxlbiwgZmxhZ3MsIHByb3RvLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTUyNy1cXHRcXHRcXHQgdHVubmVsX2lkX3RvX2tleTMyKHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2lkKSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTUzMC1cXG5uZXQvaXB2NC9pcF9ncmUuYzo1MzE6XFx0aXBfbWRfdHVubmVsX3htaXQoc2tiLCBkZXYsIElQUFJPVE9fR1JFLCB0dW5uZWxfaGxlbik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNTMyLVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9NTQwPXN0YXRpYyB2b2lkIGVyc3Bhbl9mYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy01NDgtXFx0X19iZTE2IHByb3RvO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjU0OTpcXHRpbnQgdHVubmVsX2hsZW47XFxubmV0L2lwdjQvaXBfZ3JlLmMtNTUwLVxcdGludCB2ZXJzaW9uO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNTY2LVxcdHZlcnNpb24gPSBtZC1cXHUwMDNldmVyc2lvbjtcXG5uZXQvaXB2NC9pcF9ncmUuYzo1Njc6XFx0dHVubmVsX2hsZW4gPSA4ICsgZXJzcGFuX2hkcl9sZW4odmVyc2lvbik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNTY4LVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNjE1LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjYxNjpcXHRpcF9tZF90dW5uZWxfeG1pdChza2IsIGRldiwgSVBQUk9UT19HUkUsIHR1bm5lbF9obGVuKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy02MTctXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz02NDk9c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTY2NC1cXHRpZiAoZGV2LVxcdTAwM2VoZWFkZXJfb3BzKSB7XFxubmV0L2lwdjQvaXBfZ3JlLmM6NjY1OlxcdFxcdGludCBwdWxsX2xlbiA9IHR1bm5lbC1cXHUwMDNlaGxlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTY2Ni1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTc2MT1zdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy03OTEtXFxubmV0L2lwdjQvaXBfZ3JlLmM6NzkyOi8qIHR1bm5lbC1cXHUwMDNlaGxlbiBkZXBlbmRzIG9uIHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFncyBhbmQgb24gdHVubmVsLVxcdTAwM2VlbmNhcF9obGVuLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTc5My0gKiBib3RoIG9mIHdoaWNoIGlwZ3JlX2NoYW5nZWxpbmsoKSBjYW4gY2hhbmdlLiBSZWNvbXB1dGUgaXQgdGhlIHdheVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNzk2LSAqXFxubmV0L2lwdjQvaXBfZ3JlLmM6Nzk3OiAqIEBvbGRfaGxlbiBpcyBvbmx5IHVzZWQgdG8gdGVsbCB3aGV0aGVyIHRoZSBNVFUgYmVjYW1lIHN0YWxlLCBuZXZlciBhcyBhXFxubmV0L2lwdjQvaXBfZ3JlLmMtNzk4LSAqIGRpZmZlcmVuY2UgdG8gYXBwbHksIHNvIGl0IGNhbiBub3QgbWFrZSB0aGUgbGVuZ3RocyBkcmlmdC4gSXQgbXVzdCBiZVxcbm5ldC9pcHY0L2lwX2dyZS5jLTc5OS0gKiBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2ggYWxyZWFkeSBwdWJsaXNoZXMgdGhlIG5ld1xcbm5ldC9pcHY0L2lwX2dyZS5jOjgwMDogKiB0dW5uZWwtXFx1MDAzZWhsZW4gZm9yIHVzLlxcbm5ldC9pcHY0L2lwX2dyZS5jLTgwMS0gKi9cXG5uZXQvaXB2NC9pcF9ncmUuYz04MDI9c3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1LFxcbm5ldC9pcHY0L2lwX2dyZS5jOjgwMzpcXHRcXHRcXHQgICAgICBpbnQgb2xkX2hsZW4pXFxubmV0L2lwdjQvaXBfZ3JlLmMtODA0LXtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTgwNi1cXG5uZXQvaXB2NC9pcF9ncmUuYzo4MDc6XFx0dHVubmVsLVxcdTAwM2V0dW5faGxlbiA9IGdyZV9jYWxjX2hsZW4odHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo4MDg6XFx0dHVubmVsLVxcdTAwM2VobGVuID0gdHVubmVsLVxcdTAwM2V0dW5faGxlbiArIHR1bm5lbC1cXHUwMDNlZW5jYXBfaGxlbjtcXG5uZXQvaXB2NC9pcF9ncmUuYy04MDktXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy04MTItXFx0ICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6ODEzOlxcdGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoZGV2LCBzZXRfbXR1IFxcdTAwMjZcXHUwMDI2IHR1bm5lbC1cXHUwMDNlaGxlbiAhPSBvbGRfaGxlbik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtODE0LVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9ODI2PXN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtODYwLVxcdFxcdGlmIChzdHJjbXAoZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzLVxcdTAwM2VraW5kLCBcXFwiZXJzcGFuXFxcIikpXFxubmV0L2lwdjQvaXBfZ3JlLmM6ODYxOlxcdFxcdFxcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSwgdC1cXHUwMDNlaGxlbik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtODYyLVxcdH1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTg5OT1zdGF0aWMgaW50IGlwZ3JlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtOTA3LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjkwODpcXHRuZWVkZWQgPSB0LVxcdTAwM2VobGVuICsgc2l6ZW9mKCppcGgpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTkwOS1cXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzYyBuZWVkZWQgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTkyNi1cXHRpZiAoaXBoLVxcdTAwM2VkYWRkcilcXG5uZXQvaXB2NC9pcF9ncmUuYzo5Mjc6XFx0XFx0cmV0dXJuIHQtXFx1MDAzZWhsZW4gKyBzaXplb2YoKmlwaCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtOTI4LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjkyOTpcXHRyZXR1cm4gLSh0LVxcdTAwM2VobGVuICsgc2l6ZW9mKCppcGgpKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy05MzAtfVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTAxNj1zdGF0aWMgdm9pZCBfX2dyZV90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAyMC1cXHR0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEwMjE6XFx0dHVubmVsLVxcdTAwM2V0dW5faGxlbiA9IGdyZV9jYWxjX2hsZW4odHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDIyLVxcdHR1bm5lbC1cXHUwMDNlcGFybXMuaXBoLnByb3RvY29sID0gSVBQUk9UT19HUkU7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAyMy1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDI0OlxcdHR1bm5lbC1cXHUwMDNlaGxlbiA9IHR1bm5lbC1cXHUwMDNldHVuX2hsZW4gKyB0dW5uZWwtXFx1MDAzZWVuY2FwX2hsZW47XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTAyNTpcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHR1bm5lbC1cXHUwMDNlaGxlbiArIHNpemVvZih0dW5uZWwtXFx1MDAzZXBhcm1zLmlwaCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAyNi1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEwNDU9c3RhdGljIGludCBpcGdyZV90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA2NS1cXHRcXHRcXHRkZXYtXFx1MDAzZWhlYWRlcl9vcHMgPSBcXHUwMDI2aXBncmVfaGVhZGVyX29wcztcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDY2OlxcdFxcdFxcdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gdHVubmVsLVxcdTAwM2VobGVuICsgc2l6ZW9mKCppcGgpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNjctXFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSAwO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA3MS1cXHRcXHRkZXYtXFx1MDAzZWhlYWRlcl9vcHMgPSBcXHUwMDI2aXBncmVfaGVhZGVyX29wcztcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDcyOlxcdFxcdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gdHVubmVsLVxcdTAwM2VobGVuICsgc2l6ZW9mKCppcGgpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNzMtXFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSAwO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTM1OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzAtXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM3MTpzdGF0aWMgdm9pZCBlcnNwYW5fc2V0X2hsZW4oc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzIte1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzMtXFx0LyogVmVyc2lvbiAwIHVzZXMgYSA0LWJ5dGUgR1JFIGhlYWRlciwgb3RoZXIgdmVyc2lvbnMgdXNlIDggYnl0ZXMuICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM3NDpcXHR0dW5uZWwtXFx1MDAzZXR1bl9obGVuID0gdHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyID09IDAgPyA0IDogODtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzc1LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNzY6XFx0dHVubmVsLVxcdTAwM2VobGVuID0gdHVubmVsLVxcdTAwM2V0dW5faGxlbiArIHR1bm5lbC1cXHUwMDNlZW5jYXBfaGxlbiArXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3Ny1cXHRcXHQgICAgICAgZXJzcGFuX2hkcl9sZW4odHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzktXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM4MDovKiBCb3RoIHR1bm5lbC1cXHUwMDNlZXJzcGFuX3ZlciBhbmQgdHVubmVsLVxcdTAwM2VlbmNhcF9obGVuIGNhbiBiZSBjaGFuZ2VkIGZyb21cXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzgxOiAqIGVyc3Bhbl9jaGFuZ2VsaW5rKCksIGFuZCBib3RoIGZlZWQgdHVubmVsLVxcdTAwM2VobGVuLiBSZWNvbXB1dGUgaXQsIHRoZW4gbGV0XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM4Mi0gKiBpcF90dW5uZWxfYmluZF9kZXYoKSBkZXJpdmUgdGhlIGRldmljZSBsZW5ndGhzIGZyb20gaXQuXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM4My0gKlxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzODQ6ICogQXMgaW4gaXBncmVfbGlua191cGRhdGUoKSwgQG9sZF9obGVuIG9ubHkgdGVsbHMgd2hldGhlciB0aGUgTVRVIGJlY2FtZVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzODUtICogc3RhbGUgYW5kIG11c3QgYmUgc2FtcGxlZCBiZWZvcmUgaXBfdHVubmVsX2VuY2FwX3NldHVwKCksIHdoaWNoXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM4NjogKiByZWNvbXB1dGVzIHR1bm5lbC1cXHUwMDNlaGxlbiB3aXRob3V0IHRoZSBFUlNQQU4gcGFydC5cXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzg3LSAqL1xcbm5ldC9pcHY0L2lwX2dyZS5jPTEzODg9c3RhdGljIHZvaWQgZXJzcGFuX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSxcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzg5OlxcdFxcdFxcdCAgICAgICBpbnQgb2xkX2hsZW4pXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5MC17XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzkyLVxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzOTM6XFx0ZXJzcGFuX3NldF9obGVuKHR1bm5lbCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5NC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTctXFx0ICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM5ODpcXHRpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKGRldiwgc2V0X210dSBcXHUwMDI2XFx1MDAyNiB0dW5uZWwtXFx1MDAzZWhsZW4gIT0gb2xkX2hsZW4pO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTktfVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTQwMT1zdGF0aWMgaW50IGVyc3Bhbl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQwNC1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDA1OlxcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MDYtXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDk3PXN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTUwMy1cXHRfX3UzMiBmd21hcmsgPSB0LVxcdTAwM2Vmd21hcms7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTUwNDpcXHRpbnQgb2xkX2hsZW4gPSB0LVxcdTAwM2VobGVuO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE1MDUtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE1MzAtXFx0ICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTUzMTpcXHRpcGdyZV9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTMyLVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTUzNj1zdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTQyLVxcdF9fdTMyIGZ3bWFyayA9IHQtXFx1MDAzZWZ3bWFyaztcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNTQzOlxcdGludCBvbGRfaGxlbiA9IHQtXFx1MDAzZWhsZW47XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTU0NC1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTU2MS1cXHQgKi9cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNTYyOlxcdGVyc3Bhbl9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0NDoxMi4zNjU1Mzg4NjRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzg3Nzc5NDU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIGBlcnNwYW5feG1pdGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBlcnNwYW5feG1pdGAgZnVuY3Rpb24gaGFuZGxlcyBgdHVubmVsLVx1MDAzZWVyc3Bhbl92ZXJgLiBUaGlzIGlzIGtleS4gVGhlIGBlcnNwYW5fdmVyYCBmaWVsZCBsaWtlbHkgZGljdGF0ZXMgdGhlIHNwZWNpZmljIEVSU1BBTiB2ZXJzaW9uIGJlaW5nIHVzZWQsIGFuZCB0aGF0J3MgZ29pbmcgdG8gaW5mbHVlbmNlIGV2ZXJ5dGhpbmcgZnJvbSBoZWFkZXIgY29uc3RydWN0aW9uIHRvIGhvdyB0aGUgcGFja2V0IGlzIHVsdGltYXRlbHkgdHJhbnNtaXR0ZWQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHZhcmlhYmxlIHdpdGhpbiB0aGUgZnVuY3Rpb24uIElzIGl0IHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWM/IERvZXMgaXQgZGlyZWN0bHkgaW5mbHVlbmNlIGFueSBjYWxjdWxhdGlvbnM/IElzIHRoZXJlIGEgbG9va3VwIHRhYmxlIG9yIGEgc3dpdGNoIHN0YXRlbWVudCB0aGF0IG1ha2VzIGRlY2lzaW9ucyBiYXNlZCBvbiB0aGlzIGZpZWxkPyBJcyBpdCBzaW1wbHkgcGFzc2VkIGFsb25nIGFzIGEgcGFyYW1ldGVyPyBXaGVyZSBhbmQgaG93IGl0J3MgdXNlZCBpcyB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGZ1bGx5LCBiZWNhdXNlIHRoZSBFUlNQQU4gdmVyc2lvbiBjb21wbGV0ZWx5IGFmZmVjdHMgdGhlIGZyYW1lJ3MgZm9ybWF0LiBJZiBJIGNhbiB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHV0aWxpemVzIGB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlcmAsIEknbGwgYmUgYWJsZSB0byBncmFzcCB0aGUgY29yZSBsb2dpYyBiZWhpbmQgdGhlIHZlcnNpb25pbmcgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTYwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDQ6MTYuMjQzMzM2MDM2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgyMDc5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcnNwYW5feG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF9ncmUuYz02NDk9c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTcwMi1cXG5uZXQvaXB2NC9pcF9ncmUuYzo3MDM6c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvaXBfZ3JlLmMtNzA0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQxOS1cXHQubmRvX3VuaW5pdFxcdFxcdD0gaXBfdHVubmVsX3VuaW5pdCxcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDIwOlxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gZXJzcGFuX3htaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQyMS1cXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gZXRoX21hY19hZGRyLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTUzNj1zdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTU3LVxcdCAqIHRoZSBoZWFkZXIgbGVuZ3RoLiBSZWZyZXNoIHRoZSBsZW5ndGhzIGJlZm9yZSBsb29raW5nIGF0IEBlcnI6XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTU1ODpcXHQgKiBlcnNwYW5feG1pdCgpIHNpemVzIGl0cyBwdXNoIGZyb20gdHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyLCBhbmQgYm90aCB0aGlzXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTU1OS1cXHQgKiBlcnJvciBwYXRoIGFuZCBpcF90dW5uZWxfY2hhbmdlbGluaygpIGJlbG93IGxlYXZlIHRoZSBuZXdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDQ6MTYuMjkwMTYzNzIyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MzQ2NDEzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgNzAwIHRocm91Z2ggNzYwIG9mIGBlcnNwYW5feG1pdGAuXG5cbioqQW5hbHl6aW5nIHRoZSBgZXJzcGFuX3htaXRgIENvZGUgU2VnbWVudCoqXG5cbkFscmlnaHQsIGxpbmVzIDcwMC03NjAuLi4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIGxpa2VseSBoYW5kbGVzIHNvbWUgY29yZSBhc3BlY3RzIG9mIEVSU1BBTiB0cmFuc21pc3Npb24g4oCTIHByb2JhYmx5IGRhdGEgZm9ybWF0dGluZywgY2hlY2tzdW0gY2FsY3VsYXRpb25zLCBvciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JrIGludGVyZmFjZS4gS25vd2luZyBob3cgdGhpcyBtb2R1bGUgd29ya3MgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBFUlNQQU4gaXNzdWVzLiBJIHdhbnQgdG8gbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLCBWTEFOIGhhbmRsaW5nLCBvciB0aGUgYWN0dWFsIHF1ZXVpbmcgb2YgdGhlIHBhY2tldHMuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3Igc3VidGxlIGRldGFpbHMg4oCTIHBvdGVudGlhbCBvZmYtYnktb25lIGVycm9ycyBpbiBwYWNrZXQgc2l6aW5nLCBpbmNvcnJlY3QgY2hlY2tzdW0gY2FsY3VsYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byBkcm9wcGVkIHBhY2tldHMsIG9yIGFueSB1bnVzdWFsIGNvbnRyb2wgZmxvdyBwYXRocyB0aGF0IGRldmlhdGUgZnJvbSB0aGUgc3RhbmRhcmQgRVJTUEFOIHByb2NlZHVyZXMuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoYXQgY291bGQgYWZmZWN0IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgc3lzdGVtIGluIHRlcm1zIG9mIGxhdGVuY3kgb3IgdGhyb3VnaHB1dC4gSWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBlc3BlY2lhbGx5IG5lc3RlZCBvbmVzLCBJIHdhbnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBlYWNoIGJyYW5jaCB3aWxsIGJlIHRha2VuLiBFc3NlbnRpYWxseSwgSSdtIHBlZWxpbmcgYmFjayB0aGUgbGF5ZXJzIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIEVSU1BBTiBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTYzNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQ0OjE4LjcyNDgwODA3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gNzAxOlxcdH1cXG4gNzAyOlxcdFxcbiA3MDM6XFx0c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIDcwNDpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNzA1OlxcdHtcXG4gNzA2OlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuIDcwNzpcXHRcXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XFxuIDcwODpcXHRcXHRib29sIHRydW5jYXRlID0gZmFsc2U7XFxuIDcwOTpcXHRcXHRfX2JlMTYgcHJvdG87XFxuIDcxMDpcXHRcXG4gNzExOlxcdFxcdGlmICghcHNrYl9pbmV0X21heV9wdWxsKHNrYikpXFxuIDcxMjpcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiA3MTM6XFx0XFxuIDcxNDpcXHRcXHRpZiAodHVubmVsLVxcdTAwM2Vjb2xsZWN0X21kKSB7XFxuIDcxNTpcXHRcXHRcXHRlcnNwYW5fZmJfeG1pdChza2IsIGRldik7XFxuIDcxNjpcXHRcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiA3MTc6XFx0XFx0fVxcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIGZhbHNlKSlcXG4gNzIwOlxcdFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuIDcyMTpcXHRcXG4gNzIyOlxcdFxcdGlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpXFxuIDcyMzpcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiA3MjQ6XFx0XFxuIDcyNTpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSBkZXYtXFx1MDAzZW10dSArIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSB7XFxuIDcyNjpcXHRcXHRcXHRpZiAocHNrYl90cmltKHNrYiwgZGV2LVxcdTAwM2VtdHUgKyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbikpXFxuIDcyNzpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiA3Mjg6XFx0XFx0XFx0dHJ1bmNhdGUgPSB0cnVlO1xcbiA3Mjk6XFx0XFx0fVxcbiA3MzA6XFx0XFxuIDczMTpcXHRcXHRpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzKTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0LyogUHVzaCBFUlNQQU4gaGVhZGVyICovXFxuIDczNDpcXHRcXHRpZiAodHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyID09IDApIHtcXG4gNzM1OlxcdFxcdFxcdHByb3RvID0gaHRvbnMoRVRIX1BfRVJTUEFOKTtcXG4gNzM2OlxcdFxcdFxcdF9fY2xlYXJfYml0KElQX1RVTk5FTF9TRVFfQklULCBmbGFncyk7XFxuIDczNzpcXHRcXHR9IGVsc2UgaWYgKHR1bm5lbC1cXHUwMDNlZXJzcGFuX3ZlciA9PSAxKSB7XFxuIDczODpcXHRcXHRcXHRlcnNwYW5fYnVpbGRfaGVhZGVyKHNrYiwgbnRvaGwodHVubmVsLVxcdTAwM2VwYXJtcy5vX2tleSksXFxuIDczOTpcXHRcXHRcXHRcXHRcXHQgICAgdHVubmVsLVxcdTAwM2VpbmRleCxcXG4gNzQwOlxcdFxcdFxcdFxcdFxcdCAgICB0cnVuY2F0ZSwgdHJ1ZSk7XFxuIDc0MTpcXHRcXHRcXHRwcm90byA9IGh0b25zKEVUSF9QX0VSU1BBTik7XFxuIDc0MjpcXHRcXHR9IGVsc2UgaWYgKHR1bm5lbC1cXHUwMDNlZXJzcGFuX3ZlciA9PSAyKSB7XFxuIDc0MzpcXHRcXHRcXHRlcnNwYW5fYnVpbGRfaGVhZGVyX3YyKHNrYiwgbnRvaGwodHVubmVsLVxcdTAwM2VwYXJtcy5vX2tleSksXFxuIDc0NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgdHVubmVsLVxcdTAwM2VkaXIsIHR1bm5lbC1cXHUwMDNlaHdpZCxcXG4gNzQ1OlxcdFxcdFxcdFxcdFxcdCAgICAgICB0cnVuY2F0ZSwgdHJ1ZSk7XFxuIDc0NjpcXHRcXHRcXHRwcm90byA9IGh0b25zKEVUSF9QX0VSU1BBTjIpO1xcbiA3NDc6XFx0XFx0fSBlbHNlIHtcXG4gNzQ4OlxcdFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuIDc0OTpcXHRcXHR9XFxuIDc1MDpcXHRcXG4gNzUxOlxcdFxcdF9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCBmbGFncyk7XFxuIDc1MjpcXHRcXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcXHUwMDI2dHVubmVsLVxcdTAwM2VwYXJtcy5pcGgsIHByb3RvLCBmbGFncyk7XFxuIDc1MzpcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiA3NTQ6XFx0XFxuIDc1NTpcXHRmcmVlX3NrYjpcXG4gNzU2OlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA3NTc6XFx0XFx0REVWX1NUQVRTX0lOQyhkZXYsIHR4X2Ryb3BwZWQpO1xcbiA3NTg6XFx0XFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gNzU5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDQ6MTguNzI0OTMwOTMxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkzNjAwMTMwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgRVJTUEFOIGFuZCBJUEdSRSBUdW5uZWxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBlcnNwYW5feG1pdGAgcGF0aCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGluZ3MgY2FuIGdldCBoYWlyeSBxdWlja2x5LiAgYHNrYl9jb3dfaGVhZGAgaXMgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2suIEknbSB0aGlua2luZywgaWYgdGhlIGluaXRpYWwgaGVhZHJvb20gaXMgd3JvbmcsIGVpdGhlciB0b28gc21hbGwgb3IgdGhlIE1UVSBjYWxjdWxhdGlvbiBkdXJpbmcgdGhlIGBwc2tiX3RyaW1gIGlzIGluYWNjdXJhdGUsIHRoYXTigJlzIGdvaW5nIHRvIG1hbmlmZXN0IGFzIGEgY3Jhc2guIFRoZSBrZXJuZWwncyBnb2luZyB0byB0ZWxsIG1lIHByZXR0eSBmYXN0IHdoZW4gSSBoYXZlIGEgcHJvYmxlbSwgZWl0aGVyIHdpdGggYSBwYW5pYyBmcm9tIHRoZSBgc2tiX3B1c2hgLCBvciB0aGUgS0FTQU4vQlVHX09OIHdpbGwgY2F0Y2ggaXQuICBTbyBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgYXR0ZW1wdGluZyB0byBjb3JyZWN0IHRoZSBgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbWAgYW5kIE1UVSBjYWxjdWxhdGlvbnMsIHBhcnRpY3VsYXJseSBpbiByZXNwb25zZSB0byBjaGFuZ2VzIGluIGxpbmsgcGFyYW1ldGVycyBhbmQgdGhlIEVSU1BBTiB2ZXJzaW9uL2hlYWRlciBsZW5ndGguXG5cblRoZSBgaXBncmVfdHVubmVsX2N0bGAgY2hhbmdlIGlzIGludGVyZXN0aW5nLiBUaGV5IGFyZSBtb3ZpbmcgdG8gdXNlIHRoZSBgaGxlbmAgd2l0aCB0aGUgYGlwZ3JlX2xpbmtfdXBkYXRlYC4gSSBuZWVkIHRvIHRyYWNrIHdoZXJlIHRoYXQncyBiZWluZyB1c2VkLiBUaGUgdXBkYXRlIGZ1bmN0aW9uIGlzIHdoYXQgbW9kaWZpZXMgdGhlIHR1bm5lbGVkIGRldmljZSwgc2V0dGluZyB0aGUgYHR1bm5lbC1cdTAwM2V0dW5faGxlbmAuIFRoZXkgYXJlIHRoZW4gc2V0dGluZyBgdHVubmVsLVx1MDAzZWhsZW5gIGJhc2VkIG9uIGB0dW5uZWwtXHUwMDNldHVuX2hsZW5gIGFuZCBgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW5gLiAgYGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHNgIHNlZW1zIGxpa2UgdGhlIGtleSBmdW5jdGlvbiBub3csIGFzIHRoYXQgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgdWx0aW1hdGVseSBjYWxsZWQgdG8gcmVzZXQgTVRVIHdoZW4gdGhlIGhlYWRlciBsZW5ndGggaXMgaW52YWxpZGF0ZWQuICBJIG5lZWQgdG8gY2hlY2sgaG93IE1UVSBpcyBzZXQuIEFoLCBgaXBfdHVubmVsX2JpbmRfZGV2KGRldilgIHJlY2FsY3VsYXRlcyBgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbWAgYW5kIHJldHVybnMgdGhlIE1UVS4gU28gdGhhdCdzIHRoZSBNVFUgc291cmNlLlxuXG5Mb29raW5nIGRlZXBlciBpbnRvIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCwgdGhleSBtb3ZlZCB0aGUgbWV0YWRhdGEgaGFuZGxpbmcgbG9naWMuICBJdCBzZWVtcyB0byBjaGFuZ2UgdGhlIHR5cGUgb2YgYSBkZXZpY2UsIGlmIG1ldGFkYXRhIGNvbGxlY3Rpb24gaXMgZW5hYmxlZC4gR29vZC4gIEknbSBnbGFkIHRoZXkgYXJlIG1vdmluZyBpdCBhcm91bmQgYmFzZWQgb24gdmFsaWRhdGlvbiBvZiB0aGUgb3RoZXIgYXR0cmlidXRlcy5cblxuSW4gdGhlIGBlcnNwYW5fbmV0bGlua19wYXJtc2AsIHN0b3JpbmcgdGhlIHZhbHVlcyBsb2NhbGx5IGJlZm9yZSBzZXR0aW5nIHRoZW0gdG8gdGhlIHR1bm5lbCdzIHZhcmlhYmxlcyBpcyBzbWFydCwgYW5kIGNhbGxpbmcgYGlwZ3JlX25ldGxpbmtfcGFybXNgIGVuc3VyZXMgY29uc2lzdGVuY3kuIFRoZSBjYWxsIHRvIGBlcnNwYW5fbGlua191cGRhdGVgIGFsc28gc3VnZ2VzdHMgYSBjb21wbGV0ZSBzdGF0ZSB1cGRhdGUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzbuKAmXQgaW50cm9kdWNpbmcgYSBzZWN1cml0eSBpc3N1ZSBieSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ2hlY2tpbmcgZm9yIGl0LCB0aGUgcmVhZHM6IGBlcnNwYW5fdmVyYCwgYGluZGV4YCwgYGh3aWRgLCBhbmQgYGRpcmAgYXJlIGFsbCBpbml0aWFsaXplZCAqZnJvbSogdGhlIHR1bm5lbCBkYXRhIHN0cnVjdHVyZSwgc28gdGhhdCdzIGdvb2QuIEluIGBpcGdyZV9jaGFuZ2VsaW5rYCBhbmQgYGVyc3Bhbl9jaGFuZ2VsaW5rYCwgYG9sZF9obGVuYCBhbmQgYG10dWAgYXJlIGluaXRpYWxpemVkIGZyb20gZXhpc3RpbmcgdmFsdWVzIG9yIHJldHVybmVkIGZyb20gdGhlIGJpbmQgZnVuY3Rpb24uIE5vdGhpbmcgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSBkaXJlY3RseS4gSSBkb24ndCBzZWUgYW55IGBjb3B5X3RvX3VzZXJgIG9yIG5ldGxpbmsgd3JpdGUgY2FsbHMgYmVpbmcgaW50cm9kdWNlZCwgc28gdGhhdCdzIGdvb2QuXG5cbkZpbmFsbHksIEkgY2hlY2tlZCBmb3IgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFNwZWNpZmljYWxseSwgdGhlIGBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwYCB1c2VkIGluIGBpcGdyZV9jaGFuZ2VsaW5rYCBhbmQgYGVyc3Bhbl9jaGFuZ2VsaW5rYC4gSSdtIHZlcmlmeWluZyB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdywgYW5kIEkgc2VlIHRoYXQgYHBgIHdhcyB0aGVyZSBiZWZvcmUsIGFuZCB0aGVuIHRoZSBuZXRsaW5rIHBhcm1zIGFyZSBzZXQgYmFzZWQgb24gbmV0bGluayBhdHRyaWJ1dGVzLiBBbGwgdGhlIHBhcmFtZXRlcnMgYXJlIHNldCBjb3JyZWN0bHkgdG8gYHBgLiBPdmVyYWxsLCB0aGlzIHBhdGNoIGFwcGVhcnMgdG8gYmUgYSB0YXJnZXRlZCBmaXggYW5kIHVwZGF0ZSB0byBNVFUgYW5kIGhlYWRyb29tIGNhbGN1bGF0aW9uLCB3aGlsZSBtaW5pbWl6aW5nIHRoZSByaXNrIG9mIGludHJvZHVjaW5nIG5ldyBtZW1vcnktc2FmZXR5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4ODgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDQ6MjguMDg0OTQ2NDk5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjAwOlxcdFxcbjEyMDE6XFx0XFx0cGFybXMtXFx1MDAzZWlwaC5wcm90b2NvbCA9IElQUFJPVE9fR1JFO1xcbjEyMDI6XFx0XFxuMTIwMzpcXHRcXHRpZiAoIWRhdGEpXFxuMTIwNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMjA1OlxcdFxcbjEyMDY6XFx0XFx0aWYgKGRhdGFbSUZMQV9HUkVfTElOS10pXFxuMTIwNzpcXHRcXHRcXHRwYXJtcy1cXHUwMDNlbGluayA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfTElOS10pO1xcbjEyMDg6XFx0XFxuMTIwOTpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9JRkxBR1NdKVxcbjEyMTA6XFx0XFx0XFx0Z3JlX2ZsYWdzX3RvX3RubF9mbGFncyhwYXJtcy1cXHUwMDNlaV9mbGFncyxcXG4xMjExOlxcdFxcdFxcdFxcdFxcdCAgICAgICBubGFfZ2V0X2JlMTYoZGF0YVtJRkxBX0dSRV9JRkxBR1NdKSk7XFxuMTIxMjpcXHRcXG4xMjEzOlxcdFxcdGlmIChkYXRhW0lGTEFfR1JFX09GTEFHU10pXFxuMTIxNDpcXHRcXHRcXHRncmVfZmxhZ3NfdG9fdG5sX2ZsYWdzKHBhcm1zLVxcdTAwM2VvX2ZsYWdzLFxcbjEyMTU6XFx0XFx0XFx0XFx0XFx0ICAgICAgIG5sYV9nZXRfYmUxNihkYXRhW0lGTEFfR1JFX09GTEFHU10pKTtcXG4xMjE2OlxcdFxcbjEyMTc6XFx0XFx0aWYgKGRhdGFbSUZMQV9HUkVfSUtFWV0pXFxuMTIxODpcXHRcXHRcXHRwYXJtcy1cXHUwMDNlaV9rZXkgPSBubGFfZ2V0X2JlMzIoZGF0YVtJRkxBX0dSRV9JS0VZXSk7XFxuMTIxOTpcXHRcXG4xMjIwOlxcdFxcdGlmIChkYXRhW0lGTEFfR1JFX09LRVldKVxcbjEyMjE6XFx0XFx0XFx0cGFybXMtXFx1MDAzZW9fa2V5ID0gbmxhX2dldF9iZTMyKGRhdGFbSUZMQV9HUkVfT0tFWV0pO1xcbjEyMjI6XFx0XFxuMTIyMzpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9MT0NBTF0pXFxuMTIyNDpcXHRcXHRcXHRwYXJtcy1cXHUwMDNlaXBoLnNhZGRyID0gbmxhX2dldF9pbl9hZGRyKGRhdGFbSUZMQV9HUkVfTE9DQUxdKTtcXG4xMjI1OlxcdFxcbjEyMjY6XFx0XFx0aWYgKGRhdGFbSUZMQV9HUkVfUkVNT1RFXSlcXG4xMjI3OlxcdFxcdFxcdHBhcm1zLVxcdTAwM2VpcGguZGFkZHIgPSBubGFfZ2V0X2luX2FkZHIoZGF0YVtJRkxBX0dSRV9SRU1PVEVdKTtcXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0aWYgKGRhdGFbSUZMQV9HUkVfVFRMXSlcXG4xMjMwOlxcdFxcdFxcdHBhcm1zLVxcdTAwM2VpcGgudHRsID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX1RUTF0pO1xcbjEyMzE6XFx0XFxuMTIzMjpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9UT1NdKVxcbjEyMzM6XFx0XFx0XFx0cGFybXMtXFx1MDAzZWlwaC50b3MgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfVE9TXSk7XFxuMTIzNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDQ6MjguMDg1MDU5MDk5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUwMjkyNDcxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgaXBncmVfbmV0bGlua19wYXJtc2AgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gZm9jdXNpbmcgaW4gb24gbGluZXMgMTE4MCB0aHJvdWdoIDEyMDUuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYGlwZ3JlX25ldGxpbmtfcGFybXNgIGluaXRpYWxpemVzIHRoZSBgcGFybXNgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIHBvcHVsYXRpbmcgdGhhdCBzdHJ1Y3QuIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUsIHRoYXQgdGhpcyBsaWtlbHkgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHBhcmFtZXRlcnMgcGFzc2VkIHRocm91Z2ggTmV0bGluay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBmcm9tIHRoZSBOZXRsaW5rIG1lc3NhZ2UgaW50byB0aGUgYHBhcm1zYCBzdHJ1Y3R1cmUuIElzIHRoZXJlIHZhbGlkYXRpb24/IERlZmF1bHQgdmFsdWVzPyBJJ20gYW50aWNpcGF0aW5nIHRoZXJlJ2xsIGJlIGEgc3dpdGNoIHN0YXRlbWVudCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBOZXRsaW5rIGF0dHJpYnV0ZXMgdG8gZmlsbCB0aGUgbWVtYmVycyBvZiB0aGUgYHBhcm1zYCBzdHJ1Y3R1cmUuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZXkgYXJlIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIGFzIHdlbGwuIE15IGV4cGVydGlzZSBpcyBOZXRsaW5rLCBzbyBJIGV4cGVjdCBhIHN0YW5kYXJkIHBhdHRlcm4gb2YgYXR0cmlidXRlIHBhcnNpbmcsIHBvdGVudGlhbCBtZW1vcnkgYWxsb2NhdGlvbiwgdmFsaWRhdGlvbiwgYW5kIGVycm9yIGhhbmRsaW5nIHRvIGJlIGluIHBsYXkuIEkgYW0gaW50ZXJlc3RlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvcHRpbWl6YXRpb25zIGFzIHdlbGwuIEknbSBhbHNvIGFudGljaXBhdGluZywgYmVjYXVzZSBpdCdzIGluIHRoZSBpbml0aWFsaXphdGlvbiwgdGhpcyBwcm9iYWJseSBhbHNvIGNvdmVycyBzb21lIHNhbml0eSBjaGVja3MuIExldCdzIHNlZSBob3cgdGhleSBkbyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3MDAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQ0OjMzLjExNDMwOTI1NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE4MDpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9JS0VZXSBcXHUwMDI2XFx1MDAyNlxcbjExODE6XFx0XFx0ICAgIChudG9obChubGFfZ2V0X2JlMzIoZGF0YVtJRkxBX0dSRV9JS0VZXSkpIFxcdTAwMjYgfklEX01BU0spKVxcbjExODI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTE4MzpcXHRcXG4xMTg0OlxcdFxcdGlmIChkYXRhW0lGTEFfR1JFX09LRVldIFxcdTAwMjZcXHUwMDI2XFxuMTE4NTpcXHRcXHQgICAgKG50b2hsKG5sYV9nZXRfYmUzMihkYXRhW0lGTEFfR1JFX09LRVldKSkgXFx1MDAyNiB+SURfTUFTSykpXFxuMTE4NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTg3OlxcdFxcbjExODg6XFx0XFx0cmV0dXJuIDA7XFxuMTE4OTpcXHR9XFxuMTE5MDpcXHRcXG4xMTkxOlxcdHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbjExOTI6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbjExOTM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbXSxcXG4xMTk0OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwYXJtcyxcXG4xMTk1OlxcdFxcdFxcdFxcdFxcdF9fdTMyICpmd21hcmspXFxuMTE5NjpcXHR7XFxuMTE5NzpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xMTk4OlxcdFxcbjExOTk6XFx0XFx0bWVtc2V0KHBhcm1zLCAwLCBzaXplb2YoKnBhcm1zKSk7XFxuMTIwMDpcXHRcXG4xMjAxOlxcdFxcdHBhcm1zLVxcdTAwM2VpcGgucHJvdG9jb2wgPSBJUFBST1RPX0dSRTtcXG4xMjAyOlxcdFxcbjEyMDM6XFx0XFx0aWYgKCFkYXRhKVxcbjEyMDQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQ0OjMzLjExNDQyMzM3NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjUzODQ3NzUyOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBjZW50ZXJlZCBhcm91bmQgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgb3IgZXhhY2VyYmF0ZXMgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEknbSBmb2N1c2luZyBvbiBgaXBncmVfbmV0bGlua19wYXJtc2AsIGBpcGdyZV9jaGFuZ2VsaW5rYCwgYW5kIGBlcnNwYW5fY2hhbmdlbGlua2AgYW5kIHRoZWlyIGludGVyYWN0aW9ucy5cblxuRmlyc3QsIEkgc2VlIHRoYXQgYG1lbXNldChwYXJtcywgMCwgc2l6ZW9mKCpwYXJtcykpO2AgaXMgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYGlwZ3JlX25ldGxpbmtfcGFybXNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5vdGljZSB0aGUgYGlwZ3JlX2NoYW5nZWxpbmtgIGNoYW5nZXMuIFRoZSBpbXBvcnRhbnQgcG9pbnQgaGVyZSBpcyB0aGF0IGV2ZW4gaWYgYGlwZ3JlX25ldGxpbmtfcGFybXNgIG9yIGBpcF90dW5uZWxfY2hhbmdlbGlua2AgcmV0dXJuIGFuIGVycm9yLCB0aGUgY29kZSBub3cgKmp1bXBzKiB0byBhIGBsaW5rX3VwZGF0ZWAgbGFiZWwsIGVuc3VyaW5nIGBpcGdyZV9saW5rX3VwZGF0ZWAgaXMgY2FsbGVkIGluIGFsbCBjYXNlcy4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMsIGV2ZW4gb24gZXJyb3IsIGBpcGdyZV9saW5rX3VwZGF0ZWAgYWNjZXNzZXMgbWVtYmVycyBvZiBhbiBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYHN0cnVjdCBpcF90dW5uZWxgIChgdGApLiBUaGUga2V5IGlzIHRoYXQgYHAuaV9mbGFnc2AgYW5kIGBwLm9fZmxhZ3NgIGFyZW4ndCBjb3BpZWQgdG8gYHQtXHUwMDNlcGFybXNgIG9uIGVycm9yLCBidXQgdGhlIGNvZGUgc3RpbGwgdXNlcyB0aGVtLCBzbyB0aGVyZSdzIGFuIGlzc3VlIHRoZXJlISBUaGUgY29kZSB0aGVuIHVwZGF0ZXMgaGVhZGVyIGxlbmd0aHMgYmFzZWQgb24gdmFsdWVzIGluICp0aGF0KiBgc3RydWN0IGlwX3R1bm5lbGAgKGB0YCkuIFRoaXMgaXMgY29uc2lzdGVudCBhbmQgZG9lc24ndCBhcHBlYXIgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTG9va2luZyBhdCB0aGUgYGVyc3Bhbl9jaGFuZ2VsaW5rYCBmdW5jdGlvbiwgdGhlcmUncyBhIHNpbWlsYXIgcGF0dGVybi4gRXZlbiBpZiBgZXJzcGFuX25ldGxpbmtfcGFybXNgIHJldHVybnMgYW4gZXJyb3IsIHRoZSBjb2RlIHByb2NlZWRzIHRvIGNhbGwgYGVyc3Bhbl9saW5rX3VwZGF0ZWAuIEhlcmUsIGltcG9ydGFudGx5LCBgZXJzcGFuX3ZlcmAgaXNuJ3QgdXBkYXRlZCBpZiBgZXJzcGFuX25ldGxpbmtfcGFybXNgIHJldHVybnMgYW4gZXJyb3IuIFRoZSBgZXJzcGFuX2xpbmtfdXBkYXRlYCBmdW5jdGlvbiBhY2Nlc3NlcyBgdHVubmVsLVx1MDAzZWVyc3Bhbl92ZXJgIGFuZCBgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW5gLCB3aGljaCBhcmUgZmllbGRzIG9mIGB0YC4gSWYgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYCBmYWlscywgdGhlIGBlcnNwYW5fdmVyYCByZXRhaW5zIGl0cyBwcmlvciB2YWx1ZS4gSXQgbG9va3MgbGlrZSBgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW5gICptaWdodCogaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgYGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXBgLiBUaGF04oCZcyBhbiBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbiwgdGhhdCB0aG9zZSB3ZXJlIHBvdGVudGlhbGx5IHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgYW5kIHVwZGF0ZWQhIFRoZW4gaXQgcHJvY2VlZHMgdG8gY2FsbCBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyguLi4pYC4gQWdhaW4sIHRoaXMgbG9va3Mgc2FmZSwgZm9jdXNpbmcgb24gYHRgLCBhbiBhbHJlYWR5IGFsbG9jYXRlZCBzdHJ1Y3R1cmUsIGV2ZW4gb24gZXJyb3IgcGF0aHMuIE5vIGRhdGEgc2VlbXMgdG8gYmUgdW5pbml0aWFsaXplZCBpbiB0aGUgZGVzY3JpYmVkIGZsb3cuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBhbGwgYXNwZWN0cyB0byBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gZXhwbGljaXRseSB2ZXJpZnkgdGhlIGZvbGxvd2luZzpcblxuKiAgICoqU3RhY2sgVmFyaWFibGVzKio6IEFyZSB0aGVyZSBhbnkgc3RhY2sgdmFyaWFibGVzIGRlY2xhcmVkIGJ1dCAqbm90KiBpbml0aWFsaXplZCBiZWZvcmUgdXNlPyBJIHNlZSBsb2NhbCB2YXJpYWJsZXMgbGlrZSBgb2xkX2hsZW5gLCBgZXJzcGFuX3ZlcmAsIGBpbmRleGAsIGBod2lkYCwgYGRpcmAsIGBtdHVgLiBJIGNhbiBzZWUgdGhhdCBhbGwgdGhlc2UgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdoZW4gdGhleSBhcmUgZGVjbGFyZWQgb3IgYXNzaWduZWQgZnJvbSBvdGhlciBzb3VyY2VzLCBzbyBJIGRvbid0IHNlZSBhbiBpc3N1ZSB0aGVyZS5cbiogICAqKkhlYXAgQWxsb2NhdGlvbnMqKjogQXJlIGFueSBuZXcgaGVhcCBhbGxvY2F0aW9ucyBiZWluZyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkPyBObywgSSBkb24ndCBzZWUgYW55IGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIGluIHRoaXMgcGF0Y2guXG4qICAgKipVc2Vyc3BhY2UgRXhwb3N1cmUqKjogSXMgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZXMgc2VudD8gTm8sIEkgZG9uJ3Qgc2VlIGFueSBjYWxscyB0byBgY29weV90b191c2VyYCBvciBhbnkgbmV3IGF0dHJpYnV0ZXMgYmVpbmcgYWRkZWQsIHNvIHRoZXJlIHNob3VsZCBub3QgYmUgYW4gaXNzdWUuXG4qICAgKipVbmluaXRpYWxpemVkIERhdGEgQnJhbmNoaW5nKio6IElzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGJyYW5jaGVzIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIEkgZG9uJ3Qgc2VlIGFueSBzdWNoIGJyYW5jaGluZyBwYXR0ZXJucy5cbiogICAqKkJ1ZmZlciBBY2Nlc3MgUmlza3MqKjogQXJlIHRoZXJlIGFueSBidWZmZXIgYWNjZXNzZXMgKGUuZy4sIHdpdGhpbiBhbiBgc2tiYCkgdGhhdCBjb3VsZCBsZWFkIHRvIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgTVRVIGFuZCBoZWFkcm9vbSBhcmUgYmVpbmcgcmVjYWxjdWxhdGVkLiBUaGUgcG90ZW50aWFsIHJpc2tzIGhlcmUgYXJlIGVpdGhlciBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBidWZmZXIgb3ZlcmZsb3csIHdoaWNoIGlzIGhhbmRsZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgYXNzZXJ0aW9ucywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5CYXNlZCBvbiB0aGlzIGNvbXByZWhlbnNpdmUgcmV2aWV3LCBJJ20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoZSBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBJJ20gZm9jdXNpbmcgb24gdGhlIGZhY3QgdGhhdCBhbnkgcG90ZW50aWFsIGVycm9ycyBhcmUgbm93IGhhbmRsZWQgYnkgdXBkYXRpbmcgcmVsZXZhbnQgYXR0cmlidXRlcyBhbmQgZ29pbmcgdG8gYGxpbmtfdXBkYXRlYCwgYW5kIHRoYXQgdGhlc2UgdmFsdWVzIGFyZSBhbGwgaW5pdGlhbGl6ZWQgb3IgZXhwbGljaXRseSBjaGVja2VkIGJlZm9yZSB1c2UuIEkgYWxzbyBsb29rZWQgYXQgYWxsIGFzcGVjdHMgdG8gZW5zdXJlIHRoYXQgSSB3YXMgYmVpbmcgdGhvcm91Z2ggYW5kIHN5c3RlbWF0aWMgYWJvdXQgdGhpcy4gVGh1cywgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlxuXG5UaGVyZWZvcmU6XG5cbmBgYFxuTmVlZHNLTVNBTiA9IGZhbHNlLlxuS01TQU5SZWFzb25pbmc6XG5UaGUgcGF0Y2ggdXBkYXRlcyBoZWFkZXIgbGVuZ3RoLCBoZWFkcm9vbSwgYW5kIE1UVSByZWNhbGN1bGF0aW9uIGxvZ2ljIGZvciBJUCBHUkUgYW5kIEVSU1BBTiB0dW5uZWxzIChgaXBncmVfbGlua191cGRhdGVgLCBgZXJzcGFuX2xpbmtfdXBkYXRlYCwgYGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHNgKSwgYW5kIGRlZmVycyBjb21taXR0aW5nXG5cbiIsIklucHV0VG9rZW5zIjoyNDQzOSwiT3V0cHV0VG9rZW5zIjoyMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDc6MTguNDk5MjAxMzE4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIGhlYWRlciBsZW5ndGgsIGhlYWRyb29tLCBhbmQgTVRVIGNhbGN1bGF0aW9uIGxvZ2ljIGZvciBJUCBHUkUgYW5kIEVSU1BBTiB0dW5uZWwgZGV2aWNlcyAoaW50cm9kdWNpbmcgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocywgdXBkYXRpbmcgaXBncmVfbGlua191cGRhdGUgYW5kIGVyc3Bhbl9saW5rX3VwZGF0ZSwgYW5kIGRlZmVycmluZyB0dW5uZWwgc3RhdGUgdXBkYXRlcyB1bnRpbCBuZXRsaW5rIHZhbGlkYXRpb24gY29tcGxldGVzKS4gXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCAoc3VjaCBhcyBvbGRfaGxlbiwgZXJzcGFuX3ZlciwgaW5kZXgsIGh3aWQsIGRpciwgYW5kIG10dSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIG9yIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBoZWFkcm9vbSBvciBNVFUgY2FsY3VsYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIGJ1ZmZlciBib3VuZGFyeS9vdmVyZmxvdyBvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gb3IgbmV0d29yayBzdGFjayBhc3NlcnRpb25zIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkanVzdHMgaGVhZGVyIGxlbmd0aCwgaGVhZHJvb20sIGFuZCBNVFUgY2FsY3VsYXRpb24gbG9naWMgZm9yIElQIEdSRSBhbmQgRVJTUEFOIHR1bm5lbCBkZXZpY2VzIChpbnRyb2R1Y2luZyBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzLCB1cGRhdGluZyBpcGdyZV9saW5rX3VwZGF0ZSBhbmQgZXJzcGFuX2xpbmtfdXBkYXRlLCBhbmQgZGVmZXJyaW5nIHR1bm5lbCBzdGF0ZSB1cGRhdGVzIHVudGlsIG5ldGxpbmsgdmFsaWRhdGlvbiBjb21wbGV0ZXMpLiBcXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIChzdWNoIGFzIG9sZF9obGVuLCBlcnNwYW5fdmVyLCBpbmRleCwgaHdpZCwgZGlyLCBhbmQgbXR1KSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIHN0cnVjdCBmaWVsZHMgb3IgZnVuY3Rpb24gcmV0dXJuIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgaGVhcC9zdGFjayBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IGhlYWRyb29tIG9yIE1UVSBjYWxjdWxhdGlvbnMgd291bGQgbWFuaWZlc3QgYXMgYnVmZmVyIGJvdW5kYXJ5L292ZXJmbG93IG9yIHBhY2tldCB0cmFuc21pc3Npb24gaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBvciBuZXR3b3JrIHN0YWNrIGFzc2VydGlvbnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowdfsb6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 15:23:14 +0000 UTC FinishedAt: 2026-09-12 15:47:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IPGRE", "NET_IPGRE_DEMUX", "NET_IP_TUNNEL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IPGRE", "NET_IPGRE_DEMUX", "NET_IP_TUNNEL" ], "series_id": "5f9a71b8-dd58-4258-94ec-e5a3514ccfb7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_tunnel_refresh_lengths", "ipgre_link_update", "erspan_link_update", "erspan_set_hlen", "ipgre_netlink_parms", "erspan_netlink_parms", "ipgre_changelink", "erspan_changelink", "ipgre_tunnel_ctl", "erspan_tunnel_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "e6b6078ea1731b05b3b552497b3bce4bf8b014ae", "base_tree": "net" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OywKICAgICYjMzQ7TkVUX0lQX1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMmIzM0OywKICAgICYjMzQ7aXBncmVfbGlua191cGRhdGUmIzM0OywKICAgICYjMzQ7ZXJzcGFuX2xpbmtfdXBkYXRlJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9zZXRfaGxlbiYjMzQ7LAogICAgJiMzNDtpcGdyZV9uZXRsaW5rX3Bhcm1zJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9uZXRsaW5rX3Bhcm1zJiMzNDssCiAgICAmIzM0O2lwZ3JlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7ZXJzcGFuX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBncmVfdHVubmVsX2N0bCYjMzQ7LAogICAgJiMzNDtlcnNwYW5fdHVubmVsX2luaXQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGp1c3RzIGhlYWRlciBsZW5ndGgsIGhlYWRyb29tLCBhbmQgTVRVIGNhbGN1bGF0aW9uIGxvZ2ljIGZvciBJUCBHUkUgYW5kIEVSU1BBTiB0dW5uZWwgZGV2aWNlcyAoaW50cm9kdWNpbmcgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocywgdXBkYXRpbmcgaXBncmVfbGlua191cGRhdGUgYW5kIGVyc3Bhbl9saW5rX3VwZGF0ZSwgYW5kIGRlZmVycmluZyB0dW5uZWwgc3RhdGUgdXBkYXRlcyB1bnRpbCBuZXRsaW5rIHZhbGlkYXRpb24gY29tcGxldGVzKS4gXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggKHN1Y2ggYXMgb2xkX2hsZW4sIGVyc3Bhbl92ZXIsIGluZGV4LCBod2lkLCBkaXIsIGFuZCBtdHUpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcgc3RydWN0IGZpZWxkcyBvciBmdW5jdGlvbiByZXR1cm4gdmFsdWVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBpbmNvcnJlY3QgaGVhZHJvb20gb3IgTVRVIGNhbGN1bGF0aW9ucyB3b3VsZCBtYW5pZmVzdCBhcyBidWZmZXIgYm91bmRhcnkvb3ZlcmZsb3cgb3IgcGFja2V0IHRyYW5zbWlzc2lvbiBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIG9yIG5ldHdvcmsgc3RhY2sgYXNzZXJ0aW9ucyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGFuZCBmaXhlcyBkZXZpY2UgaGVhZGVyIGxlbmd0aCwgTVRVLCBhbmQgaGVhZHJvb20gdXBkYXRlcyBpbiB0aGUgSVB2NCBHUkUgYW5kIEVSU1BBTiB0dW5uZWxpbmcgZHJpdmVycy4gSXQgaW50cm9kdWNlcyBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKCkgYW5kIHVwZGF0ZXMgbGluayBjb25maWd1cmF0aW9uIGFuZCBlcnJvci1oYW5kbGluZyBwYXRocyBpbiBpcGdyZV9jaGFuZ2VsaW5rKCksIGVyc3Bhbl9jaGFuZ2VsaW5rKCksIGFuZCBpb2N0bC9uZXRsaW5rIHBhcmFtZXRlciBwYXJzZXJzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGxvZ2ljIGV4ZXJjaXNhYmxlIHZpYSBydG5sIG5ldGxpbmsgYW5kIHR1bm5lbCBpb2N0bHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjU5MDhiZDA3NDVjMzA0YWIxNDAyNGUzMjI3ZDc2ZWUwYjU3MThmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDEyIDE1OjQyOjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuaW5kZXggN2M5YWFkZmU4ZmUzOS4uZmQwMzk2YWE1MDM5NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG5AQCAtNDI5LDYgJiM0Mzs0MjksNyBAQCBpbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCxcbiBcdFx0ICAgICAgX191MzIgZndtYXJrKTtcbiB2b2lkIGlwX3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbmV0X2lkKTtcbiYjNDM7dm9pZCBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSk7XG4gXG4gYm9vbCBpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4gXHRcdFx0XHQgICBzdHJ1Y3QgaXBfdHVubmVsX2VuY2FwICplbmNhcCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuY1xuaW5kZXggODIzMDllZmQ0MTdlMC4uNDgwN2ZjNmQyZmQ4OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX2dyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9ncmUuY1xuQEAgLTc4OSwyMyAmIzQzOzc4OSwyOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBpcGdyZV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpXG4mIzQzOy8qIHR1bm5lbC1cdTAwM2VobGVuIGRlcGVuZHMgb24gdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MgYW5kIG9uIHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuLFxuJiM0MzsgKiBib3RoIG9mIHdoaWNoIGlwZ3JlX2NoYW5nZWxpbmsoKSBjYW4gY2hhbmdlLiBSZWNvbXB1dGUgaXQgdGhlIHdheVxuJiM0MzsgKiBfX2dyZV90dW5uZWxfaW5pdCgpIGRvZXMsIHRoZW4gbGV0IGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlXG4mIzQzOyAqIGxlbmd0aHMgZnJvbSBpdC5cbiYjNDM7ICpcbiYjNDM7ICogQG9sZF9obGVuIGlzIG9ubHkgdXNlZCB0byB0ZWxsIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWUgc3RhbGUsIG5ldmVyIGFzIGFcbiYjNDM7ICogZGlmZmVyZW5jZSB0byBhcHBseSwgc28gaXQgY2FuIG5vdCBtYWtlIHRoZSBsZW5ndGhzIGRyaWZ0LiBJdCBtdXN0IGJlXG4mIzQzOyAqIHNhbXBsZWQgYmVmb3JlIGlwX3R1bm5lbF9lbmNhcF9zZXR1cCgpLCB3aGljaCBhbHJlYWR5IHB1Ymxpc2hlcyB0aGUgbmV3XG4mIzQzOyAqIHR1bm5lbC1cdTAwM2VobGVuIGZvciB1cy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGlwZ3JlX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSxcbiYjNDM7XHRcdFx0ICAgICAgaW50IG9sZF9obGVuKVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRpbnQgbGVuO1xuIFxuLVx0bGVuID0gdHVubmVsLVx1MDAzZXR1bl9obGVuO1xuIFx0dHVubmVsLVx1MDAzZXR1bl9obGVuID0gZ3JlX2NhbGNfaGxlbih0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4tXHRsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gLSBsZW47XG4tXHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IGxlbjtcbi1cbi1cdGlmIChkZXYtXHUwMDNlaGVhZGVyX29wcylcbi1cdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOz0gbGVuO1xuLVx0ZWxzZVxuLVx0XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tICYjNDM7PSBsZW47XG4mIzQzO1x0dHVubmVsLVx1MDAzZWhsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gJiM0MzsgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW47XG4gXG4tXHRpZiAoc2V0X210dSlcbi1cdFx0V1JJVEVfT05DRShkZXYtXHUwMDNlbXR1LCBtYXhfdChpbnQsIGRldi1cdTAwM2VtdHUgLSBsZW4sIDY4KSk7XG4mIzQzO1x0LyogT25seSByZXNldCBhIE1UVSB0aGF0IHRoZSBoZWFkZXIgbGVuZ3RoIGp1c3QgaW52YWxpZGF0ZWQsIHNvIHRoYXRcbiYjNDM7XHQgKiBhIE1UVSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyIHN1cnZpdmVzIGFuIHVucmVsYXRlZCBjaGFuZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbiBcbiBcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpIHx8XG4gXHQgICAgKHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpIFx1MDAyNlx1MDAyNlxuQEAgLTg1Myw3ICYjNDM7ODU4LDcgQEAgc3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMub19mbGFncywgcC1cdTAwM2VvX2ZsYWdzKTtcbiBcbiBcdFx0aWYgKHN0cmNtcChkZXYtXHUwMDNlcnRubF9saW5rX29wcy1cdTAwM2VraW5kLCBcJiMzNDtlcnNwYW5cJiMzNDspKVxuLVx0XHRcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSk7XG4mIzQzO1x0XHRcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSwgdC1cdTAwM2VobGVuKTtcbiBcdH1cbiBcbiBcdGlfZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVx1MDAzZWlfZmxhZ3MpO1xuQEAgLTEyMzMsMTIgJiM0MzsxMjM4LDYgQEAgc3RhdGljIGludCBpcGdyZV9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHBhcm1zLVx1MDAzZWlwaC5mcmFnX29mZiA9IGh0b25zKElQX0RGKTtcbiBcdH1cbiBcbi1cdGlmIChkYXRhW0lGTEFfR1JFX0NPTExFQ1RfTUVUQURBVEFdKSB7XG4tXHRcdHQtXHUwMDNlY29sbGVjdF9tZCA9IHRydWU7XG4tXHRcdGlmIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSVBHUkUpXG4tXHRcdFx0ZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTk9ORTtcbi1cdH1cbi1cbiBcdGlmIChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pIHtcbiBcdFx0aWYgKG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKVxuIFx0XHQgIFx1MDAyNlx1MDAyNiAocGFybXMtXHUwMDNlaXBoLmZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9ERikpKVxuQEAgLTEyNDYsNiAmIzQzOzEyNDUsMTMgQEAgc3RhdGljIGludCBpcGdyZV9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHQtXHUwMDNlaWdub3JlX2RmID0gISFubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSk7XG4gXHR9XG4gXG4mIzQzO1x0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAZGV2IGFuZCBAdC4gKi9cbiYjNDM7XHRpZiAoZGF0YVtJRkxBX0dSRV9DT0xMRUNUX01FVEFEQVRBXSkge1xuJiM0MztcdFx0dC1cdTAwM2Vjb2xsZWN0X21kID0gdHJ1ZTtcbiYjNDM7XHRcdGlmIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSVBHUkUpXG4mIzQzO1x0XHRcdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChkYXRhW0lGTEFfR1JFX0ZXTUFSS10pXG4gXHRcdCpmd21hcmsgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0ZXTUFSS10pO1xuIFxuQEAgLTEyNTksNDAgJiM0MzsxMjY1LDUxIEBAIHN0YXRpYyBpbnQgZXJzcGFuX25ldGxpbmtfcGFybXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdF9fdTMyICpmd21hcmspXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0dTggZXJzcGFuX3ZlciA9IHQtXHUwMDNlZXJzcGFuX3ZlcjtcbiYjNDM7XHR1MzIgaW5kZXggPSB0LVx1MDAzZWluZGV4O1xuJiM0MztcdHUxNiBod2lkID0gdC1cdTAwM2Vod2lkO1xuJiM0MztcdHU4IGRpciA9IHQtXHUwMDNlZGlyO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuIFx0aWYgKCFkYXRhKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHJldHVybiBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xuIFxuIFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pIHtcbi1cdFx0dC1cdTAwM2VlcnNwYW5fdmVyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKTtcbiYjNDM7XHRcdGVyc3Bhbl92ZXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pO1xuIFxuLVx0XHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyIFx1MDAzZSAyKVxuJiM0MztcdFx0aWYgKGVyc3Bhbl92ZXIgXHUwMDNlIDIpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyID09IDEpIHtcbiYjNDM7XHRpZiAoZXJzcGFuX3ZlciA9PSAxKSB7XG4gXHRcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pIHtcbi1cdFx0XHR0LVx1MDAzZWluZGV4ID0gbmxhX2dldF91MzIoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSU5ERVhdKTtcbi1cdFx0XHRpZiAodC1cdTAwM2VpbmRleCBcdTAwMjYgfklOREVYX01BU0spXG4mIzQzO1x0XHRcdGluZGV4ID0gbmxhX2dldF91MzIoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSU5ERVhdKTtcbiYjNDM7XHRcdFx0aWYgKGluZGV4IFx1MDAyNiB+SU5ERVhfTUFTSylcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4tXHR9IGVsc2UgaWYgKHQtXHUwMDNlZXJzcGFuX3ZlciA9PSAyKSB7XG4mIzQzO1x0fSBlbHNlIGlmIChlcnNwYW5fdmVyID09IDIpIHtcbiBcdFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pIHtcbi1cdFx0XHR0LVx1MDAzZWRpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7XG4tXHRcdFx0aWYgKHQtXHUwMDNlZGlyIFx1MDAyNiB+KERJUl9NQVNLIFx1MDAzZVx1MDAzZSBESVJfT0ZGU0VUKSlcbiYjNDM7XHRcdFx0ZGlyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9ESVJdKTtcbiYjNDM7XHRcdFx0aWYgKGRpciBcdTAwMjYgfihESVJfTUFTSyBcdTAwM2VcdTAwM2UgRElSX09GRlNFVCkpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0XHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pIHtcbi1cdFx0XHR0LVx1MDAzZWh3aWQgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfR1JFX0VSU1BBTl9IV0lEXSk7XG4tXHRcdFx0aWYgKHQtXHUwMDNlaHdpZCBcdTAwMjYgfihIV0lEX01BU0sgXHUwMDNlXHUwMDNlIEhXSURfT0ZGU0VUKSlcbiYjNDM7XHRcdFx0aHdpZCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKTtcbiYjNDM7XHRcdFx0aWYgKGh3aWQgXHUwMDI2IH4oSFdJRF9NQVNLIFx1MDAzZVx1MDAzZSBIV0lEX09GRlNFVCkpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdC8qIEFsbCBhdHRyaWJ1dGVzIGhhdmUgYmVlbiB2YWxpZGF0ZWQsIHdlIGNhbiBjaGFuZ2UgQHQuICovXG4mIzQzO1x0dC1cdTAwM2VlcnNwYW5fdmVyID0gZXJzcGFuX3ZlcjtcbiYjNDM7XHR0LVx1MDAzZWluZGV4ID0gaW5kZXg7XG4mIzQzO1x0dC1cdTAwM2Vod2lkID0gaHdpZDtcbiYjNDM7XHR0LVx1MDAzZWRpciA9IGRpcjtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTM1MSwxOCAmIzQzOzEzNjgsNDMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBncmVfdGFwX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX2ZpbGxfbWV0YWRhdGFfZHN0XHQ9IGdyZV9maWxsX21ldGFkYXRhX2RzdCxcbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBlcnNwYW5fc2V0X2hsZW4oc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsKVxuJiM0Mzt7XG4mIzQzO1x0LyogVmVyc2lvbiAwIHVzZXMgYSA0LWJ5dGUgR1JFIGhlYWRlciwgb3RoZXIgdmVyc2lvbnMgdXNlIDggYnl0ZXMuICovXG4mIzQzO1x0dHVubmVsLVx1MDAzZXR1bl9obGVuID0gdHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIgPT0gMCA/IDQgOiA4O1xuJiM0MztcbiYjNDM7XHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2V0dW5faGxlbiAmIzQzOyB0dW5uZWwtXHUwMDNlZW5jYXBfaGxlbiAmIzQzO1xuJiM0MztcdFx0ICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogQm90aCB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciBhbmQgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbVxuJiM0MzsgKiBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgYm90aCBmZWVkIHR1bm5lbC1cdTAwM2VobGVuLiBSZWNvbXB1dGUgaXQsIHRoZW4gbGV0XG4mIzQzOyAqIGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlIGxlbmd0aHMgZnJvbSBpdC5cbiYjNDM7ICpcbiYjNDM7ICogQXMgaW4gaXBncmVfbGlua191cGRhdGUoKSwgQG9sZF9obGVuIG9ubHkgdGVsbHMgd2hldGhlciB0aGUgTVRVIGJlY2FtZVxuJiM0MzsgKiBzdGFsZSBhbmQgbXVzdCBiZSBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2hcbiYjNDM7ICogcmVjb21wdXRlcyB0dW5uZWwtXHUwMDNlaGxlbiB3aXRob3V0IHRoZSBFUlNQQU4gcGFydC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGVyc3Bhbl9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXG4mIzQzO1x0XHRcdCAgICAgICBpbnQgb2xkX2hsZW4pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcbiYjNDM7XHRlcnNwYW5fc2V0X2hsZW4odHVubmVsKTtcbiYjNDM7XG4mIzQzO1x0LyogT25seSByZXNldCBhIE1UVSB0aGF0IHRoZSBoZWFkZXIgbGVuZ3RoIGp1c3QgaW52YWxpZGF0ZWQsIHNvIHRoYXRcbiYjNDM7XHQgKiBhIE1UVSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyIHN1cnZpdmVzIGFuIHVucmVsYXRlZCBjaGFuZ2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGVyc3Bhbl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4tXHRpZiAodHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIgPT0gMClcbi1cdFx0dHVubmVsLVx1MDAzZXR1bl9obGVuID0gNDsgLyogNC1ieXRlIEdSRSBoZHIuICovXG4tXHRlbHNlXG4tXHRcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IDg7IC8qIDgtYnl0ZSBHUkUgaGRyLiAqL1xuJiM0MztcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xuIFxuIFx0dHVubmVsLVx1MDAzZXBhcm1zLmlwaC5wcm90b2NvbCA9IElQUFJPVE9fR1JFO1xuLVx0dHVubmVsLVx1MDAzZWhsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gJiM0MzsgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gJiM0Mztcbi1cdFx0ICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyKTtcbiBcbiBcdGRldi1cdTAwM2VmZWF0dXJlc1x0XHR8PSBHUkVfRkVBVFVSRVM7XG4gXHRkZXYtXHUwMDNlaHdfZmVhdHVyZXNcdHw9IEdSRV9GRUFUVVJFUztcbkBAIC0xNDU5LDYgJiM0MzsxNTAxLDcgQEAgc3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XG4gXHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbiYjNDM7XHRpbnQgb2xkX2hsZW4gPSB0LVx1MDAzZWhsZW47XG4gXHRpbnQgZXJyO1xuIFxuIFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cdTAwM2VuZXQpKVxuQEAgLTE0NzAsMTggJiM0MzsxNTEzLDI0IEBAIHN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFxuIFx0ZXJyID0gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBcdTAwMjZwLCBcdTAwMjZmd21hcmspO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gbGlua191cGRhdGU7XG4gXG4gXHRlcnIgPSBpcF90dW5uZWxfY2hhbmdlbGluayhkZXYsIHRiLCBcdTAwMjZwLCBmd21hcmspO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gbGlua191cGRhdGU7XG4gXG4gXHRpcF90dW5uZWxfZmxhZ3NfY29weSh0LVx1MDAzZXBhcm1zLmlfZmxhZ3MsIHAuaV9mbGFncyk7XG4gXHRpcF90dW5uZWxfZmxhZ3NfY29weSh0LVx1MDAzZXBhcm1zLm9fZmxhZ3MsIHAub19mbGFncyk7XG4gXG4tXHRpcGdyZV9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0pO1xuJiM0MztsaW5rX3VwZGF0ZTpcbiYjNDM7XHQvKiBpcGdyZV9uZXdsaW5rX2VuY2FwX3NldHVwKCkgaGFzIHB1Ymxpc2hlZCBhIG5ldyBlbmNhcHN1bGF0aW9uIGV2ZW5cbiYjNDM7XHQgKiBpZiB0aGUgcmVzdCBvZiB0aGUgcmVxdWVzdCBmYWlsZWQsIHNvIHRoZSBsZW5ndGhzIG11c3QgYmUgcmVmcmVzaGVkXG4mIzQzO1x0ICogb24gdGhlIGVycm9yIHBhdGhzIGFzIHdlbGwuIFRoaXMgaGFzIHRvIGNvbWUgbGFzdCwgYmVjYXVzZVxuJiM0MztcdCAqIGlwZ3JlX2xpbmtfdXBkYXRlKCkgbmVlZHMgdGhlIGZsYWdzIGNvcGllZCBhYm92ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpcGdyZV9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbkBAIC0xNDkxLDYgJiM0MzsxNTQwLDcgQEAgc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xuIFx0X191MzIgZndtYXJrID0gdC1cdTAwM2Vmd21hcms7XG4mIzQzO1x0aW50IG9sZF9obGVuID0gdC1cdTAwM2VobGVuO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbkBAIC0xNTAxLDYgJiM0MzsxNTUxLDE2IEBAIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGVyciA9IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIFx1MDAyNnAsIFx1MDAyNmZ3bWFyayk7XG4mIzQzO1xuJiM0MztcdC8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24sIGFuZFxuJiM0MztcdCAqIGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKCkgYSBuZXcgRVJTUEFOIHZlcnNpb24sIGJvdGggb2Ygd2hpY2ggY2hhbmdlXG4mIzQzO1x0ICogdGhlIGhlYWRlciBsZW5ndGguIFJlZnJlc2ggdGhlIGxlbmd0aHMgYmVmb3JlIGxvb2tpbmcgYXQgQGVycjpcbiYjNDM7XHQgKiBlcnNwYW5feG1pdCgpIHNpemVzIGl0cyBwdXNoIGZyb20gdHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIsIGFuZCBib3RoIHRoaXNcbiYjNDM7XHQgKiBlcnJvciBwYXRoIGFuZCBpcF90dW5uZWxfY2hhbmdlbGluaygpIGJlbG93IGxlYXZlIHRoZSBuZXdcbiYjNDM7XHQgKiBlbmNhcHN1bGF0aW9uIGJlaGluZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnNwYW5fbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdLCBvbGRfaGxlbik7XG4mIzQzO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIGVycjtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5pbmRleCBlNmJjZjAxNDExZDBiLi42YjkzYzFmZGE0OTQ4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jXG5AQCAtMzI2LDYgJiM0MzszMjYsMjIgQEAgc3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBtdHU7XG4gfVxuIFxuJiM0MzsvKiBSZWNvbXB1dGUgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSBhbmQgZGV2LVx1MDAzZW10dSBhZnRlciB0dW5uZWwtXHUwMDNlaGxlbiBjaGFuZ2VkLlxuJiM0MzsgKlxuJiM0MzsgKiBCb3RoIGFyZSBkZXJpdmVkIGZyb20gdHVubmVsLVx1MDAzZWhsZW4sIHNvIHRoZXkgbXVzdCBiZSByZWNvbXB1dGVkIGZyb20gaXRcbiYjNDM7ICogcmF0aGVyIHRoYW4gYWRqdXN0ZWQgYnkgdGhlIGRpZmZlcmVuY2U6IGlwX3R1bm5lbF9iaW5kX2RldigpIGlzIGFsc29cbiYjNDM7ICogY2FsbGVkIGZyb20gbmRvX2luaXQoKSBhbmQgZnJvbSBpcF90dW5uZWxfdXBkYXRlKCksIGFuZCBhIGRyaXZlciBhZGRpbmdcbiYjNDM7ICogaXRzIG93biBkZWx0YSBvbiB0b3Agd291bGQgZG91YmxlIGNvdW50IGl0LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSlcbiYjNDM7e1xuJiM0MztcdGludCBtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldF9tdHUpXG4mIzQzO1x0XHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG10dSk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Rocyk7XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwYXJtcylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0RFTVVYJiMzNDssCiAgICAmIzM0O05FVF9JUF9UVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzJiMzNDssCiAgICAmIzM0O2lwZ3JlX2xpbmtfdXBkYXRlJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9saW5rX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtlcnNwYW5fc2V0X2hsZW4mIzM0OywKICAgICYjMzQ7aXBncmVfbmV0bGlua19wYXJtcyYjMzQ7LAogICAgJiMzNDtlcnNwYW5fbmV0bGlua19wYXJtcyYjMzQ7LAogICAgJiMzNDtpcGdyZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX3R1bm5lbF9jdGwmIzM0OywKICAgICYjMzQ7ZXJzcGFuX3R1bm5lbF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBhbmQgZml4ZXMgZGV2aWNlIGhlYWRlciBsZW5ndGgsIE1UVSwgYW5kIGhlYWRyb29tIHVwZGF0ZXMgaW4gdGhlIElQdjQgR1JFIGFuZCBFUlNQQU4gdHVubmVsaW5nIGRyaXZlcnMuIEl0IGludHJvZHVjZXMgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocygpIGFuZCB1cGRhdGVzIGxpbmsgY29uZmlndXJhdGlvbiBhbmQgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gaXBncmVfY2hhbmdlbGluaygpLCBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgaW9jdGwvbmV0bGluayBwYXJhbWV0ZXIgcGFyc2Vycy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBleGVyY2lzYWJsZSB2aWEgcnRubCBuZXRsaW5rIGFuZCB0dW5uZWwgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1OTA4YmQwNzQ1YzMwNGFiMTQwMjRlMzIyN2Q3NmVlMGI1NzE4ZjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxNTo0MjoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaAppbmRleCA3YzlhYWRmZThmZTM5Li5mZDAzOTZhYTUwMzk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oCkBAIC00MjksNiAmIzQzOzQyOSw3IEBAIGludCBpcF90dW5uZWxfbmV3bGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLAogCQkgICAgICBfX3UzMiBmd21hcmspOwogdm9pZCBpcF90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG5ldF9pZCk7CiYjNDM7dm9pZCBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSk7CiAKIGJvb2wgaXBfdHVubmVsX25ldGxpbmtfZW5jYXBfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLAogCQkJCSAgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmVuY2FwKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggODIzMDllZmQ0MTdlMC4uNDgwN2ZjNmQyZmQ4OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTc4OSwyMyAmIzQzOzc4OSwyOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotc3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KQomIzQzOy8qIHR1bm5lbC0mZ3Q7aGxlbiBkZXBlbmRzIG9uIHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncyBhbmQgb24gdHVubmVsLSZndDtlbmNhcF9obGVuLAomIzQzOyAqIGJvdGggb2Ygd2hpY2ggaXBncmVfY2hhbmdlbGluaygpIGNhbiBjaGFuZ2UuIFJlY29tcHV0ZSBpdCB0aGUgd2F5CiYjNDM7ICogX19ncmVfdHVubmVsX2luaXQoKSBkb2VzLCB0aGVuIGxldCBpcF90dW5uZWxfYmluZF9kZXYoKSBkZXJpdmUgdGhlIGRldmljZQomIzQzOyAqIGxlbmd0aHMgZnJvbSBpdC4KJiM0MzsgKgomIzQzOyAqIEBvbGRfaGxlbiBpcyBvbmx5IHVzZWQgdG8gdGVsbCB3aGV0aGVyIHRoZSBNVFUgYmVjYW1lIHN0YWxlLCBuZXZlciBhcyBhCiYjNDM7ICogZGlmZmVyZW5jZSB0byBhcHBseSwgc28gaXQgY2FuIG5vdCBtYWtlIHRoZSBsZW5ndGhzIGRyaWZ0LiBJdCBtdXN0IGJlCiYjNDM7ICogc2FtcGxlZCBiZWZvcmUgaXBfdHVubmVsX2VuY2FwX3NldHVwKCksIHdoaWNoIGFscmVhZHkgcHVibGlzaGVzIHRoZSBuZXcKJiM0MzsgKiB0dW5uZWwtJmd0O2hsZW4gZm9yIHVzLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlwZ3JlX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSwKJiM0MzsJCQkgICAgICBpbnQgb2xkX2hsZW4pCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgbGVuOwogCi0JbGVuID0gdHVubmVsLSZndDt0dW5faGxlbjsKIAl0dW5uZWwtJmd0O3R1bl9obGVuID0gZ3JlX2NhbGNfaGxlbih0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwotCWxlbiA9IHR1bm5lbC0mZ3Q7dHVuX2hsZW4gLSBsZW47Ci0JdHVubmVsLSZndDtobGVuID0gdHVubmVsLSZndDtobGVuICYjNDM7IGxlbjsKLQotCWlmIChkZXYtJmd0O2hlYWRlcl9vcHMpCi0JCWRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuICYjNDM7PSBsZW47Ci0JZWxzZQotCQlkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSAmIzQzOz0gbGVuOwomIzQzOwl0dW5uZWwtJmd0O2hsZW4gPSB0dW5uZWwtJmd0O3R1bl9obGVuICYjNDM7IHR1bm5lbC0mZ3Q7ZW5jYXBfaGxlbjsKIAotCWlmIChzZXRfbXR1KQotCQlXUklURV9PTkNFKGRldi0mZ3Q7bXR1LCBtYXhfdChpbnQsIGRldi0mZ3Q7bXR1IC0gbGVuLCA2OCkpOwomIzQzOwkvKiBPbmx5IHJlc2V0IGEgTVRVIHRoYXQgdGhlIGhlYWRlciBsZW5ndGgganVzdCBpbnZhbGlkYXRlZCwgc28gdGhhdAomIzQzOwkgKiBhIE1UVSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyIHN1cnZpdmVzIGFuIHVucmVsYXRlZCBjaGFuZ2UuCiYjNDM7CSAqLwomIzQzOwlpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKGRldiwgc2V0X210dSAmYW1wOyZhbXA7IHR1bm5lbC0mZ3Q7aGxlbiAhPSBvbGRfaGxlbik7CiAKIAlpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncykgfHwKIAkgICAgKHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKSAmYW1wOyZhbXA7CkBAIC04NTMsNyAmIzQzOzg1OCw3IEBAIHN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlpcF90dW5uZWxfZmxhZ3NfY29weSh0LSZndDtwYXJtcy5vX2ZsYWdzLCBwLSZndDtvX2ZsYWdzKTsKIAogCQlpZiAoc3RyY21wKGRldi0mZ3Q7cnRubF9saW5rX29wcy0mZ3Q7a2luZCwgJiMzNDtlcnNwYW4mIzM0OykpCi0JCQlpcGdyZV9saW5rX3VwZGF0ZShkZXYsIHRydWUpOwomIzQzOwkJCWlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSwgdC0mZ3Q7aGxlbik7CiAJfQogCiAJaV9mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtJmd0O2lfZmxhZ3MpOwpAQCAtMTIzMywxMiAmIzQzOzEyMzgsNiBAQCBzdGF0aWMgaW50IGlwZ3JlX25ldGxpbmtfcGFybXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJcGFybXMtJmd0O2lwaC5mcmFnX29mZiA9IGh0b25zKElQX0RGKTsKIAl9CiAKLQlpZiAoZGF0YVtJRkxBX0dSRV9DT0xMRUNUX01FVEFEQVRBXSkgewotCQl0LSZndDtjb2xsZWN0X21kID0gdHJ1ZTsKLQkJaWYgKGRldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSVBHUkUpCi0JCQlkZXYtJmd0O3R5cGUgPSBBUlBIUkRfTk9ORTsKLQl9Ci0KIAlpZiAoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKSB7CiAJCWlmIChubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSkKIAkJICAmYW1wOyZhbXA7IChwYXJtcy0mZ3Q7aXBoLmZyYWdfb2ZmICZhbXA7IGh0b25zKElQX0RGKSkpCkBAIC0xMjQ2LDYgJiM0MzsxMjQ1LDEzIEBAIHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQl0LSZndDtpZ25vcmVfZGYgPSAhIW5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKTsKIAl9CiAKJiM0MzsJLyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAZGV2IGFuZCBAdC4gKi8KJiM0MzsJaWYgKGRhdGFbSUZMQV9HUkVfQ09MTEVDVF9NRVRBREFUQV0pIHsKJiM0MzsJCXQtJmd0O2NvbGxlY3RfbWQgPSB0cnVlOwomIzQzOwkJaWYgKGRldi0mZ3Q7dHlwZSA9PSBBUlBIUkRfSVBHUkUpCiYjNDM7CQkJZGV2LSZndDt0eXBlID0gQVJQSFJEX05PTkU7CiYjNDM7CX0KJiM0MzsKIAlpZiAoZGF0YVtJRkxBX0dSRV9GV01BUktdKQogCQkqZndtYXJrID0gbmxhX2dldF91MzIoZGF0YVtJRkxBX0dSRV9GV01BUktdKTsKIApAQCAtMTI1OSw0MCAmIzQzOzEyNjUsNTEgQEAgc3RhdGljIGludCBlcnNwYW5fbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCV9fdTMyICpmd21hcmspCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CXU4IGVyc3Bhbl92ZXIgPSB0LSZndDtlcnNwYW5fdmVyOwomIzQzOwl1MzIgaW5kZXggPSB0LSZndDtpbmRleDsKJiM0MzsJdTE2IGh3aWQgPSB0LSZndDtod2lkOwomIzQzOwl1OCBkaXIgPSB0LSZndDtkaXI7CiAJaW50IGVycjsKIAotCWVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKIAlpZiAoIWRhdGEpCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7CiAKIAlpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSkgewotCQl0LSZndDtlcnNwYW5fdmVyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKTsKJiM0MzsJCWVyc3Bhbl92ZXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pOwogCi0JCWlmICh0LSZndDtlcnNwYW5fdmVyICZndDsgMikKJiM0MzsJCWlmIChlcnNwYW5fdmVyICZndDsgMikKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICh0LSZndDtlcnNwYW5fdmVyID09IDEpIHsKJiM0MzsJaWYgKGVyc3Bhbl92ZXIgPT0gMSkgewogCQlpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSU5ERVhdKSB7Ci0JCQl0LSZndDtpbmRleCA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0lOREVYXSk7Ci0JCQlpZiAodC0mZ3Q7aW5kZXggJmFtcDsgfklOREVYX01BU0spCiYjNDM7CQkJaW5kZXggPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pOwomIzQzOwkJCWlmIChpbmRleCAmYW1wOyB+SU5ERVhfTUFTSykKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCX0gZWxzZSBpZiAodC0mZ3Q7ZXJzcGFuX3ZlciA9PSAyKSB7CiYjNDM7CX0gZWxzZSBpZiAoZXJzcGFuX3ZlciA9PSAyKSB7CiAJCWlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9ESVJdKSB7Ci0JCQl0LSZndDtkaXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pOwotCQkJaWYgKHQtJmd0O2RpciAmYW1wOyB+KERJUl9NQVNLICZndDsmZ3Q7IERJUl9PRkZTRVQpKQomIzQzOwkJCWRpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7CiYjNDM7CQkJaWYgKGRpciAmYW1wOyB+KERJUl9NQVNLICZndDsmZ3Q7IERJUl9PRkZTRVQpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9IV0lEXSkgewotCQkJdC0mZ3Q7aHdpZCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKTsKLQkJCWlmICh0LSZndDtod2lkICZhbXA7IH4oSFdJRF9NQVNLICZndDsmZ3Q7IEhXSURfT0ZGU0VUKSkKJiM0MzsJCQlod2lkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pOwomIzQzOwkJCWlmIChod2lkICZhbXA7IH4oSFdJRF9NQVNLICZndDsmZ3Q7IEhXSURfT0ZGU0VUKSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAomIzQzOwllcnIgPSBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJLyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAdC4gKi8KJiM0MzsJdC0mZ3Q7ZXJzcGFuX3ZlciA9IGVyc3Bhbl92ZXI7CiYjNDM7CXQtJmd0O2luZGV4ID0gaW5kZXg7CiYjNDM7CXQtJmd0O2h3aWQgPSBod2lkOwomIzQzOwl0LSZndDtkaXIgPSBkaXI7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNTEsMTggJiM0MzsxMzY4LDQzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3JlX3RhcF9uZXRkZXZfb3BzID0gewogCS5uZG9fZmlsbF9tZXRhZGF0YV9kc3QJPSBncmVfZmlsbF9tZXRhZGF0YV9kc3QsCiB9OwogCiYjNDM7c3RhdGljIHZvaWQgZXJzcGFuX3NldF9obGVuKHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCkKJiM0Mzt7CiYjNDM7CS8qIFZlcnNpb24gMCB1c2VzIGEgNC1ieXRlIEdSRSBoZWFkZXIsIG90aGVyIHZlcnNpb25zIHVzZSA4IGJ5dGVzLiAqLwomIzQzOwl0dW5uZWwtJmd0O3R1bl9obGVuID0gdHVubmVsLSZndDtlcnNwYW5fdmVyID09IDAgPyA0IDogODsKJiM0MzsKJiM0MzsJdHVubmVsLSZndDtobGVuID0gdHVubmVsLSZndDt0dW5faGxlbiAmIzQzOyB0dW5uZWwtJmd0O2VuY2FwX2hsZW4gJiM0MzsKJiM0MzsJCSAgICAgICBlcnNwYW5faGRyX2xlbih0dW5uZWwtJmd0O2Vyc3Bhbl92ZXIpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBCb3RoIHR1bm5lbC0mZ3Q7ZXJzcGFuX3ZlciBhbmQgdHVubmVsLSZndDtlbmNhcF9obGVuIGNhbiBiZSBjaGFuZ2VkIGZyb20KJiM0MzsgKiBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgYm90aCBmZWVkIHR1bm5lbC0mZ3Q7aGxlbi4gUmVjb21wdXRlIGl0LCB0aGVuIGxldAomIzQzOyAqIGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlIGxlbmd0aHMgZnJvbSBpdC4KJiM0MzsgKgomIzQzOyAqIEFzIGluIGlwZ3JlX2xpbmtfdXBkYXRlKCksIEBvbGRfaGxlbiBvbmx5IHRlbGxzIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWUKJiM0MzsgKiBzdGFsZSBhbmQgbXVzdCBiZSBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2gKJiM0MzsgKiByZWNvbXB1dGVzIHR1bm5lbC0mZ3Q7aGxlbiB3aXRob3V0IHRoZSBFUlNQQU4gcGFydC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBlcnNwYW5fbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1LAomIzQzOwkJCSAgICAgICBpbnQgb2xkX2hsZW4pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwomIzQzOwllcnNwYW5fc2V0X2hsZW4odHVubmVsKTsKJiM0MzsKJiM0MzsJLyogT25seSByZXNldCBhIE1UVSB0aGF0IHRoZSBoZWFkZXIgbGVuZ3RoIGp1c3QgaW52YWxpZGF0ZWQsIHNvIHRoYXQKJiM0MzsJICogYSBNVFUgY29uZmlndXJlZCBieSB0aGUgdXNlciBzdXJ2aXZlcyBhbiB1bnJlbGF0ZWQgY2hhbmdlLgomIzQzOwkgKi8KJiM0MzsJaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgJmFtcDsmYW1wOyB0dW5uZWwtJmd0O2hsZW4gIT0gb2xkX2hsZW4pOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgZXJzcGFuX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICh0dW5uZWwtJmd0O2Vyc3Bhbl92ZXIgPT0gMCkKLQkJdHVubmVsLSZndDt0dW5faGxlbiA9IDQ7IC8qIDQtYnl0ZSBHUkUgaGRyLiAqLwotCWVsc2UKLQkJdHVubmVsLSZndDt0dW5faGxlbiA9IDg7IC8qIDgtYnl0ZSBHUkUgaGRyLiAqLwomIzQzOwllcnNwYW5fc2V0X2hsZW4odHVubmVsKTsKIAogCXR1bm5lbC0mZ3Q7cGFybXMuaXBoLnByb3RvY29sID0gSVBQUk9UT19HUkU7Ci0JdHVubmVsLSZndDtobGVuID0gdHVubmVsLSZndDt0dW5faGxlbiAmIzQzOyB0dW5uZWwtJmd0O2VuY2FwX2hsZW4gJiM0MzsKLQkJICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC0mZ3Q7ZXJzcGFuX3Zlcik7CiAKIAlkZXYtJmd0O2ZlYXR1cmVzCQl8PSBHUkVfRkVBVFVSRVM7CiAJZGV2LSZndDtod19mZWF0dXJlcwl8PSBHUkVfRkVBVFVSRVM7CkBAIC0xNDU5LDYgJiM0MzsxNTAxLDcgQEAgc3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sCiAJc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDsKIAlfX3UzMiBmd21hcmsgPSB0LSZndDtmd21hcms7CiYjNDM7CWludCBvbGRfaGxlbiA9IHQtJmd0O2hsZW47CiAJaW50IGVycjsKIAogCWlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtJmd0O25ldCkpCkBAIC0xNDcwLDE4ICYjNDM7MTUxMywyNCBAQCBzdGF0aWMgaW50IGlwZ3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAogCWVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgJmFtcDtwLCAmYW1wO2Z3bWFyayk7CiAJaWYgKGVyciAmbHQ7IDApCi0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGxpbmtfdXBkYXRlOwogCiAJZXJyID0gaXBfdHVubmVsX2NoYW5nZWxpbmsoZGV2LCB0YiwgJmFtcDtwLCBmd21hcmspOwogCWlmIChlcnIgJmx0OyAwKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBsaW5rX3VwZGF0ZTsKIAogCWlwX3R1bm5lbF9mbGFnc19jb3B5KHQtJmd0O3Bhcm1zLmlfZmxhZ3MsIHAuaV9mbGFncyk7CiAJaXBfdHVubmVsX2ZsYWdzX2NvcHkodC0mZ3Q7cGFybXMub19mbGFncywgcC5vX2ZsYWdzKTsKIAotCWlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSk7CiYjNDM7bGlua191cGRhdGU6CiYjNDM7CS8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24gZXZlbgomIzQzOwkgKiBpZiB0aGUgcmVzdCBvZiB0aGUgcmVxdWVzdCBmYWlsZWQsIHNvIHRoZSBsZW5ndGhzIG11c3QgYmUgcmVmcmVzaGVkCiYjNDM7CSAqIG9uIHRoZSBlcnJvciBwYXRocyBhcyB3ZWxsLiBUaGlzIGhhcyB0byBjb21lIGxhc3QsIGJlY2F1c2UKJiM0MzsJICogaXBncmVfbGlua191cGRhdGUoKSBuZWVkcyB0aGUgZmxhZ3MgY29waWVkIGFib3ZlLgomIzQzOwkgKi8KJiM0MzsJaXBncmVfbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdLCBvbGRfaGxlbik7CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLApAQCAtMTQ5MSw2ICYjNDM7MTU0MCw3IEBAIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwOwogCV9fdTMyIGZ3bWFyayA9IHQtJmd0O2Z3bWFyazsKJiM0MzsJaW50IG9sZF9obGVuID0gdC0mZ3Q7aGxlbjsKIAlpbnQgZXJyOwogCiAJaWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC0mZ3Q7bmV0KSkKQEAgLTE1MDEsNiAmIzQzOzE1NTEsMTYgQEAgc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gZXJzcGFuX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgJmFtcDtwLCAmYW1wO2Z3bWFyayk7CiYjNDM7CiYjNDM7CS8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24sIGFuZAomIzQzOwkgKiBlcnNwYW5fbmV0bGlua19wYXJtcygpIGEgbmV3IEVSU1BBTiB2ZXJzaW9uLCBib3RoIG9mIHdoaWNoIGNoYW5nZQomIzQzOwkgKiB0aGUgaGVhZGVyIGxlbmd0aC4gUmVmcmVzaCB0aGUgbGVuZ3RocyBiZWZvcmUgbG9va2luZyBhdCBAZXJyOgomIzQzOwkgKiBlcnNwYW5feG1pdCgpIHNpemVzIGl0cyBwdXNoIGZyb20gdHVubmVsLSZndDtlcnNwYW5fdmVyLCBhbmQgYm90aCB0aGlzCiYjNDM7CSAqIGVycm9yIHBhdGggYW5kIGlwX3R1bm5lbF9jaGFuZ2VsaW5rKCkgYmVsb3cgbGVhdmUgdGhlIG5ldwomIzQzOwkgKiBlbmNhcHN1bGF0aW9uIGJlaGluZC4KJiM0MzsJICovCiYjNDM7CWVyc3Bhbl9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTsKJiM0MzsKIAlpZiAoZXJyICZsdDsgMCkKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwppbmRleCBlNmJjZjAxNDExZDBiLi42YjkzYzFmZGE0OTQ4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF90dW5uZWwuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwpAQCAtMzI2LDYgJiM0MzszMjYsMjIgQEAgc3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlyZXR1cm4gbXR1OwogfQogCiYjNDM7LyogUmVjb21wdXRlIGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tIGFuZCBkZXYtJmd0O210dSBhZnRlciB0dW5uZWwtJmd0O2hsZW4gY2hhbmdlZC4KJiM0MzsgKgomIzQzOyAqIEJvdGggYXJlIGRlcml2ZWQgZnJvbSB0dW5uZWwtJmd0O2hsZW4sIHNvIHRoZXkgbXVzdCBiZSByZWNvbXB1dGVkIGZyb20gaXQKJiM0MzsgKiByYXRoZXIgdGhhbiBhZGp1c3RlZCBieSB0aGUgZGlmZmVyZW5jZTogaXBfdHVubmVsX2JpbmRfZGV2KCkgaXMgYWxzbwomIzQzOyAqIGNhbGxlZCBmcm9tIG5kb19pbml0KCkgYW5kIGZyb20gaXBfdHVubmVsX3VwZGF0ZSgpLCBhbmQgYSBkcml2ZXIgYWRkaW5nCiYjNDM7ICogaXRzIG93biBkZWx0YSBvbiB0b3Agd291bGQgZG91YmxlIGNvdW50IGl0LgomIzQzOyAqLwomIzQzO3ZvaWQgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpCiYjNDM7ewomIzQzOwlpbnQgbXR1ID0gaXBfdHVubmVsX2JpbmRfZGV2KGRldik7CiYjNDM7CiYjNDM7CWlmIChzZXRfbXR1KQomIzQzOwkJV1JJVEVfT05DRShkZXYtJmd0O210dSwgbXR1KTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Rocyk7CiYjNDM7CiBzdGF0aWMgc3RydWN0IGlwX3R1bm5lbCAqaXBfdHVubmVsX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSAgc3RydWN0IGlwX3R1bm5lbF9uZXQgKml0biwKIAkJCQkJICBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcGFybXMpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIHRoZSB0YXNrIGlzIHRvIGFzc2VzcyB0aGlzIGtlcm5lbCBwYXRjaCBzZXJpZXMsIGFuZCBteSBleHBlcnRpc2UgaW1tZWRpYXRlbHkga2lja3MgaW4uIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSVB2NCBHUkUvRVJTUEFOIHR1bm5lbHMsIHNwZWNpZmljYWxseSBtb2RpZmljYXRpb25zIHRvIGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLCBgbmV0L2lwdjQvaXBfZ3JlLmNgLCBhbmQgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYC4gVGhlIGNoYW5nZXMgaW52b2x2ZSBhIG5ldyBmdW5jdGlvbiwgYGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHNgLCBhbmQgc2lnbmlmaWNhbnQgcmVmYWN0b3Jpbmcgd2l0aGluIHRoZSBHUkUvRVJTUEFOIG5ldGxpbmsgY29uZmlndXJhdGlvbiBhbmQgTVRVL2hlYWRyb29tIGhhbmRsaW5nLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gIFdlJiMzOTtyZSBsb29raW5nIGF0IGZ1bmN0aW9ucyBsaWtlIGBpcGdyZV9jaGFuZ2VsaW5rYCwgYGVyc3Bhbl9jaGFuZ2VsaW5rYCwgYGlwZ3JlX25ldGxpbmtfcGFybXNgLCBgZXJzcGFuX25ldGxpbmtfcGFybXNgLiAgVGhlc2UgYXJlIGNydWNpYWwgcGFydHMgb2YgdGhlIGtlcm5lbC4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHJlYWNoYWJpbGl0eS4gSSBrbm93IHRoaXMgY29kZSBpcyBjb3JlIG5ldHdvcmtpbmcsIGRlYWxpbmcgd2l0aCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24sIGBSVE1fTkVXTElOS2AsIGBSVE1fU0VUTElOS2AgYW5kIGlvY3RsLCBhbGwgc3RhbmRhcmQgbWV0aG9kcyBmb3Igc2V0dGluZyB1cCBhbmQgY29udHJvbGxpbmcgbmV0d29yayB0dW5uZWxzLiBUaGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdlIHVzZSwgZXNwZWNpYWxseSBzeXprYWxsZXIsIHJvdXRpbmVseSBleGVyY2lzZXMgdGhlc2UgY29kZXBhdGhzLiBTeXprYWxsZXIgZnJlcXVlbnRseSBjcmVhdGVzIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMuCgpCYXNlZCBvbiB0aGUgY3JpdGVyaWEsIGl0JiMzOTtzIGNsZWFyIHRoaXMgcGF0Y2ggZmFsbHMgaW50byB0aGUgJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZSYjMzQ7IGNhdGVnb3J5LiBXZSBoYXZlIG1vZGlmaWNhdGlvbnMgdG8gY29yZSBuZXR3b3JraW5nIGxvZ2ljLCBhbmQgdGhlc2UgbmV0ZGV2aWNlcyBhcmUgYWNjZXNzaWJsZS4gV2Ugc2hvdWxkIGRlZmluaXRlbHkgZnV6eiB0aGlzIGFyZWEuCgpOZXh0LCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMsIHRvIGVuc3VyZSB0aGUgY29kZSBpcyBjb25maWd1cmVkIHByb3Blcmx5IHVzaW5nIGBncmVwcGVyYCB0byBmaW5kIHRoZSByZWxldmFudCBNYWtlZmlsZSBlbnRyaWVzLiBJdCYjMzk7cyBhIHF1aWNrIHNhbml0eSBjaGVjayBidXQgaW1wb3J0YW50IHRvIGF2b2lkIGJsaW5kIGFsbGV5cy4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHRoYXQgYGlwX2dyZS5vYCBhbmQgYGlwX3R1bm5lbC5vYCBhcmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9ncmV8aXBfdHVubmVsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cdCAgICAgZmliX2Zyb250ZW5kLm8gZmliX3NlbWFudGljcy5vIGZpYl90cmllLm8gZmliX25vdGlmaWVyLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlOjE2Olx0ICAgICBpbmV0X2ZyYWdtZW50Lm8gcGluZy5vIGlwX3R1bm5lbF9jb3JlLm8gZ3JlX29mZmxvYWQubyBcXFxubmV0L2lwdjQvTWFrZWZpbGUtMTctXHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXG5uZXQvaXB2NC9NYWtlZmlsZS0xOC1cbm5ldC9pcHY0L01ha2VmaWxlOjE5Om9iai0kKENPTkZJR19ORVRfSVBfVFVOTkVMKSAmIzQzOz0gaXBfdHVubmVsLm9cbm5ldC9pcHY0L01ha2VmaWxlLTIwLW9iai0kKENPTkZJR19TWVNDVEwpICYjNDM7PSBzeXNjdGxfbmV0X2lwdjQub1xuLS1cbm5ldC9pcHY0L01ha2VmaWxlPTI5PW9iai0kKENPTkZJR19ORVRfSVBHUkVfREVNVVgpICYjNDM7PSBncmUub1xubmV0L2lwdjQvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX05FVF9JUEdSRSkgJiM0Mzs9IGlwX2dyZS5vXG5uZXQvaXB2NC9NYWtlZmlsZS0zMS11ZHBfdHVubmVsLXkgOj0gdWRwX3R1bm5lbF9jb3JlLm8gdWRwX3R1bm5lbF9uaWMub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgTmV0d29yayBUdW5uZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgbmV0d29yayBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBJUEdSRSBhbmQgSVAgVHVubmVsaW5nLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gdGhlIHN0YXRlIG9mIGBDT05GSUdfTkVUX0lQR1JFYCBhbmQgYENPTkZJR19ORVRfSVBfVFVOTkVMYCB3aXRoaW4gdGhlIEtjb25maWcgc3lzdGVtLiBUaGlzIGlzIHByb2JhYmx5IGEgcHJlbGltaW5hcnkgc3RlcCB0byB1bmRlcnN0YW5kaW5nLCBvciBtb2RpZnlpbmcsIHRoZSBhdmFpbGFibGUgbmV0d29yayB0dW5uZWxpbmcgY2FwYWJpbGl0aWVzIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZWxldmFudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldCB0byBtb2R1bGUsIHNpbmNlIHRoYXQgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSBob3cgbmV0d29yayB0cmFmZmljIGNhbiBiZSBoYW5kbGVkLiBJIHByb2JhYmx5IHdhbnQgdG8gdHJhY2sgZG93biBhbnkgZGVwZW5kZW5jaWVzIGFzIHdlbGwuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCB0aGlzIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGRlYnVnZ2luZyBhIG5ldHdvcmsgaXNzdWUsIG9yIHBlcmhhcHMgY29uZmlndXJpbmcgYSBuZXcgbmV0d29yayBpbnRlcmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JUEdSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZz0xNjI9Y29uZmlnIE5FVF9JUElQXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xNzktXG5uZXQvaXB2NC9LY29uZmlnOjE4MDpjb25maWcgTkVUX0lQR1JFX0RFTVVYXG5uZXQvaXB2NC9LY29uZmlnLTE4MS1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgZGVtdWx0aXBsZXhlclwmIzM0O1xuLS1cbm5ldC9pcHY0L0tjb25maWc9MTg2PWNvbmZpZyBORVRfSVBfVFVOTkVMXG4tLVxubmV0L2lwdjQvS2NvbmZpZy0xOTEtXG5uZXQvaXB2NC9LY29uZmlnOjE5Mjpjb25maWcgTkVUX0lQR1JFXG5uZXQvaXB2NC9LY29uZmlnLTE5My1cdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgdHVubmVscyBvdmVyIElQXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZy0yMDYtXG5uZXQvaXB2NC9LY29uZmlnOjIwNzpjb25maWcgTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvS2NvbmZpZy0yMDgtXHRib29sIFwmIzM0O0lQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODcwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSBkZWx2ZSBpbnRvIHRoZSBLY29uZmlnOgoKKipEZWVwIERpdmUgaW50byBJUEdSRSBhbmQgSVAgVHVubmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBLY29uZmlnIG9wdGlvbnMgc3Vycm91bmRpbmcgYE5FVF9JUEdSRWAgYW5kIGBORVRfSVBfVFVOTkVMYC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdHVubmVsaW5nIGFuZCBlbmNhcHN1bGF0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIGludGVycGxheSBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMsIGFuZCBwb3NzaWJsZSBjb25mbGljdHMgYmV0d2VlbiB0aGVzZSB0d28uIEFyZSB0aGV5IG11dHVhbGx5IGV4Y2x1c2l2ZSwgb3IgZG9lcyBvbmUgYnVpbGQgdXBvbiB0aGUgb3RoZXI/IFdoYXQgY29uZmlndXJhdGlvbnMgcmVseSBvbiB0aGVzZT8gQXJlIHRoZXJlIGFueSBzdWJ0bGV0aWVzIGluIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgbmV0d29yayBmZWF0dXJlcz8gVGhpcyBncmFudWxhciBsZXZlbCBvZiBhbmFseXNpcyBpcyBrZXkgdG8gb3B0aW1pemluZyB0aGUgbmV0d29yayBzdGFjayBhbmQgZW5zdXJpbmcgcm9idXN0IHR1bm5lbCBzdXBwb3J0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSAmIzM0O3doeSYjMzQ7IGJlaGluZCB0aGUgZGVzaWduIGNob2ljZXMsIG5vdCBqdXN0IHRoZSAmIzM0O3doYXQmIzM0Oy4gTGV0JiMzOTtzIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxODA6XHRjb25maWcgTkVUX0lQR1JFX0RFTVVYXG4gMTgxOlx0XHR0cmlzdGF0ZSBcJiMzNDtJUDogR1JFIGRlbXVsdGlwbGV4ZXJcJiMzNDtcbiAxODI6XHRcdGhlbHBcbiAxODM6XHRcdCAgVGhpcyBpcyBoZWxwZXIgbW9kdWxlIHRvIGRlbXVsdGlwbGV4IEdSRSBwYWNrZXRzIG9uIEdSRSB2ZXJzaW9uIGZpZWxkIGNyaXRlcmlhLlxuIDE4NDpcdFx0ICBSZXF1aXJlZCBieSBpcF9ncmUgYW5kIHBwdHAgbW9kdWxlcy5cbiAxODU6XHRcbiAxODY6XHRjb25maWcgTkVUX0lQX1RVTk5FTFxuIDE4NzpcdFx0dHJpc3RhdGVcbiAxODg6XHRcdHNlbGVjdCBEU1RfQ0FDSEVcbiAxODk6XHRcdHNlbGVjdCBHUk9fQ0VMTFNcbiAxOTA6XHRcdGRlZmF1bHQgblxuIDE5MTpcdFxuIDE5MjpcdGNvbmZpZyBORVRfSVBHUkVcbiAxOTM6XHRcdHRyaXN0YXRlIFwmIzM0O0lQOiBHUkUgdHVubmVscyBvdmVyIElQXCYjMzQ7XG4gMTk0Olx0XHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxuIDE5NTpcdFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbiAxOTY6XHRcdGhlbHBcbiAxOTc6XHRcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cbiAxOTg6XHRcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxuIDE5OTpcdFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXG4gMjAwOlx0XHQgIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIGFuZCBhdCB0aGlzIHRpbWUgYWxsb3dzXG4gMjAxOlx0XHQgIGVuY2Fwc3VsYXRpbmcgb2YgSVB2NCBvciBJUHY2IG92ZXIgZXhpc3RpbmcgSVB2NCBpbmZyYXN0cnVjdHVyZS5cbiAyMDI6XHRcdCAgVGhpcyBkcml2ZXIgaXMgdXNlZnVsIGlmIHRoZSBvdGhlciBlbmRwb2ludCBpcyBhIENpc2NvIHJvdXRlcjogQ2lzY29cbiAyMDM6XHRcdCAgbGlrZXMgR1JFIG11Y2ggYmV0dGVyIHRoYW4gdGhlIG90aGVyIExpbnV4IHR1bm5lbGluZyBkcml2ZXIgKFwmIzM0O0lQXG4gMjA0Olx0XHQgIHR1bm5lbGluZ1wmIzM0OyBhYm92ZSkuIEluIGFkZGl0aW9uLCBHUkUgYWxsb3dzIG11bHRpY2FzdCByZWRpc3RyaWJ1dGlvblxuIDIwNTpcdFx0ICB0aHJvdWdoIHRoZSB0dW5uZWwuXG4gMjA2Olx0XG4gMjA3Olx0Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcbiAyMDg6XHRcdGJvb2wgXCYjMzQ7SVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFwmIzM0O1xuIDIwOTpcdFx0ZGVwZW5kcyBvbiBJUF9NVUxUSUNBU1QgXHUwMDI2XHUwMDI2IE5FVF9JUEdSRVxuIDIxMDpcdFx0aGVscFxuIDIxMTpcdFx0ICBPbmUgYXBwbGljYXRpb24gb2YgR1JFL0lQIGlzIHRvIGNvbnN0cnVjdCBhIGJyb2FkY2FzdCBXQU4gKFdpZGUgQXJlYVxuIDIxMjpcdFx0ICBOZXR3b3JrKSwgd2hpY2ggbG9va3MgbGlrZSBhIG5vcm1hbCBFdGhlcm5ldCBMQU4gKExvY2FsIEFyZWFcbiAyMTM6XHRcdCAgTmV0d29yayksIGJ1dCBjYW4gYmUgZGlzdHJpYnV0ZWQgYWxsIG92ZXIgdGhlIEludGVybmV0LiBJZiB5b3Ugd2FudFxuIDIxNDpcdFx0ICB0byBkbyB0aGF0LCBzYXkgWSBoZXJlIGFuZCB0byBcJiMzNDtJUCBtdWx0aWNhc3Qgcm91dGluZ1wmIzM0OyBiZWxvdy5cbiAyMTU6XHRcbiAyMTY6XHRjb25maWcgSVBfTVJPVVRFX0NPTU1PTlxuIDIxNzpcdFx0Ym9vbFxuIDIxODpcdFx0ZGVwZW5kcyBvbiBJUF9NUk9VVEUgfHwgSVBWNl9NUk9VVEVcbiAyMTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzI4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYENPTkZJR19ORVRfSVBHUkVgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgaXQgZGVwZW5kcyBvbiBgQ09ORklHX05FVF9JUEdSRV9ERU1VWGAgYW5kIGF1dG9tYXRpY2FsbHkgcHVsbHMgaW4gYENPTkZJR19ORVRfSVBfVFVOTkVMYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCBhbmQgbWFrZXMgc2Vuc2UgZm9yIEdSRS4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIgdGhhbiBqdXN0IHRoZSBiYXNpY3MuCgpNeSBmb2N1cyByaWdodCBub3cgaXMgRVJTUEFOIGFuZCBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgcmVsZXZhbnQgRVJTUEFOIHNldHRpbmdzIGFyZSBhY3RpdmUsIG9yIHRoYXQgRVJTUEFOIGZ1bmN0aW9uYWxpdHkgaXMgaW5oZXJlbnRseSBpbmNsdWRlZCBzb21ld2hlcmUsIGxpa2Ugd2l0aGluIGBDT05GSUdfTkVUX0lQR1JFYCBpdHNlbGYuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IEVSU1BBTiBzdXBwb3J0IGlzIGltcGxlbWVudGVkIGluIHRoaXMgY29udGV4dC4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgYW55IGxpa2VseSBjYW5kaWRhdGVzIHRoYXQgc2VlbSByZWxldmFudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfLipFUlNQQU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMDAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIEVSU1BBTiBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBzbyBFUlNQQU4mIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5IGlzIGJha2VkIGRpcmVjdGx5IGludG8gdGhlIGBuZXQvaXB2NC9pcF9ncmUuY2AgYW5kIGBpcDZfZ3JlLmNgIGZpbGVzLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdyDigJMgaXQgZ2l2ZXMgbWUgYSBjbGVhciBzdGFydGluZyBwb2ludCBmb3IgZGl2aW5nIGludG8gdGhlIGNvZGUuIE5vdywgSSBuZWVkIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIG92ZXJhbGwgc3RydWN0dXJlIG9mIHRoZSBgaXBfZ3JlYCBtb2R1bGUuIEFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0PyBJJiMzOTttIHRoaW5raW5nIGNvbmZpZ3VyYXRpb24sIGVycm9yIGhhbmRsaW5nLCBtYXliZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBwb3RlbnRpYWxseSBleHRlbnNpb25zIHRoYXQgd2VyZSBidWlsdCBpbiBvdmVyIHRpbWUuIEtub3dpbmcgdGhlIG1vZHVsZSYjMzk7cyBjb21wbGV0ZSBmb290cHJpbnQgaXMgZXNzZW50aWFsIGZvciBhIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZXhwbG9yZSB0aGF0IGZ1cnRoZXIgdG8gZ2V0IGEgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIEVSU1BBTiYjMzk7cyBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF9ncmUtb2JqcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjYzCgkJCQkJCQlvdXRwdXQ6IDYwCgkJCQkJCQl0aG91Z2h0czogNTk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBHUkUgYW5kIFR1bm5lbGluZyBNb2R1bGVzIGZvciBGb2N1c1N5bWJvbCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgdGhlIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIGFuZCB0dW5uZWxpbmcgbW9kdWxlcyBhcmUgcHV0IHRvZ2V0aGVyLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBob3cgdGhleSYjMzk7cmUgY29tcGlsZWQgYW5kIHdoYXQmIzM5O3MgY2hhbmdlZC4gVGhlIGBpcF9ncmUuY2AgY29kZSBpcyBjb21waWxlZCBpZiBgQ09ORklHX05FVF9JUEdSRWAgaXMgZW5hYmxlZCwgYW5kIGBpcF90dW5uZWwuY2AgZ2V0cyBidWlsdCB3aGVuIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAgaXMgc2V0LiAgSSBzZWUgdGhhdCBgQ09ORklHX05FVF9JUEdSRWAgZGVwZW5kcyBvbiBhbmQgc2VsZWN0cyBgQ09ORklHX05FVF9JUEdSRV9ERU1VWGAgYW5kIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAgd2hpY2ggdGVsbHMgbWUgdGhhdCBgTkVUX0lQR1JFYCBhbmQgYE5FVF9JUEdSRV9ERU1VWGAgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMuCgpOb3csIG15IG1haW4gZ29hbCBpcyB0byBpZGVudGlmeSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIGVudHJ5IHBvaW50cyB0aGF0IGNvdWxkIGJlIHJlbGV2YW50IHRvIHRoZSBGb2N1c1N5bWJvbHMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVlbiBhZGRlZCwgY2hhbmdlZCwgb3IgcmVtb3ZlZC4gSSYjMzk7dmUgZ290IGEgbGlzdCBmcm9tIHRoZSBkaWZmOgoKMS4gIGBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzYCDigJMgVGhpcyBpcyBhIG5ldywgZXhwb3J0ZWQgZnVuY3Rpb24gaW4gYGlwX3R1bm5lbC5jYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYXMgaXQgaW5kaWNhdGVzIG5ldyBleHRlcm5hbCBmdW5jdGlvbmFsaXR5LgoyLiAgYGlwZ3JlX2xpbmtfdXBkYXRlYCwgYGVyc3Bhbl9saW5rX3VwZGF0ZWAsIGBlcnNwYW5fc2V0X2hsZW5gLCAg4oCTIFRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGluIGBpcF9ncmUuY2AuCjMuICBgaXBncmVfY2hhbmdlbGlua2AsIGBlcnNwYW5fY2hhbmdlbGlua2Ag4oCTIFRoZXNlIGFyZSBzdGF0aWMsIGFuZCBjcnVjaWFsbHksIHRoZXkgYXJlIGBydG5sX2xpbmtfb3BzIC5jaGFuZ2VsaW5rYCBpbXBsZW1lbnRhdGlvbnMsIHdoaWNoIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSBvZiB0aGVpciBpbnRlZ3JhdGlvbiB3aXRoIG5ldGxpbmsuCjQuICBgaXBncmVfdHVubmVsX2N0bGAg4oCTIFRoaXMgaXMgYW5vdGhlciBzdGF0aWMgb25lLCBhIGBuZXRkZXZfb3BzIC5uZG9fc2lvY2RldnByaXZhdGUgLyAubmRvX2RvX2lvY3RsYCBmdW5jdGlvbiwgc2hvd2luZyB1cCBhcyBhIGNvbnRyb2wgcGF0aC4KNS4gIGBlcnNwYW5fdHVubmVsX2luaXRgIOKAkyBBbHNvIHN0YXRpYywgdXNlZCBhcyBlaXRoZXIgdGhlIGBydG5sX2xpbmtfb3BzIC5zZXR1cGAgb3IgYG5ldGRldl9vcHMgLm5kb19pbml0YCBmb3IgYSBuZXQgZGV2aWNlLgo2LiAgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYCwgYGlwZ3JlX25ldGxpbmtfcGFybXNgIOKAkyBUaGVzZSBhcmUgc3RhdGljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIG5ldGxpbmsgcGFyYW1ldGVyIGhhbmRsaW5nLgoKTm93IEkgbmVlZCB0byBnbyBkZWVwZXIuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBzcGVjaWZpY2FsbHkgYXQgdGhlIHZpc2liaWxpdHkgb2Ygc3ltYm9scywgbWFraW5nIHN1cmUgSSBpZGVudGlmeSB3aGF0JiMzOTtzIG5vdCBpbmxpbmVkLCBhbmQgdGhlbiBJJiMzOTtsbCBzY3J1dGluaXplIHRoZSBsaW5lcyBpbiB0aGUgY29kZSBmb3IgYGlwZ3JlX2NoYW5nZWxpbmtgLCBgZXJzcGFuX2NoYW5nZWxpbmtgLCBgaXBncmVfdHVubmVsX2N0bGAsIGFuZCB0aGUgb3RoZXJzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBiZWVuIG1vZGlmaWVkIGFuZCBob3cgdGhlc2UgY2hhbmdlcyBpbXBhY3QgdGhlIG92ZXJhbGwgR1JFL3R1bm5lbGluZyBmdW5jdGlvbmFsaXR5LCB3aGljaCBzaG91bGQgbGVhZCBtZSByaWdodCB0byB0aGUgRm9jdXNTeW1ib2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoaXBncmVfY2hhbmdlbGlua3xlcnNwYW5fY2hhbmdlbGlua3xpcGdyZV90dW5uZWxfY3RsfGVyc3Bhbl90dW5uZWxfaW5pdHxpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz03NjE9c3RhdGljIG5ldGRldl90eF90IGdyZV90YXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTc5Mi0vKiB0dW5uZWwtXHUwMDNlaGxlbiBkZXBlbmRzIG9uIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzIGFuZCBvbiB0dW5uZWwtXHUwMDNlZW5jYXBfaGxlbixcbm5ldC9pcHY0L2lwX2dyZS5jOjc5MzogKiBib3RoIG9mIHdoaWNoIGlwZ3JlX2NoYW5nZWxpbmsoKSBjYW4gY2hhbmdlLiBSZWNvbXB1dGUgaXQgdGhlIHdheVxubmV0L2lwdjQvaXBfZ3JlLmMtNzk0LSAqIF9fZ3JlX3R1bm5lbF9pbml0KCkgZG9lcywgdGhlbiBsZXQgaXBfdHVubmVsX2JpbmRfZGV2KCkgZGVyaXZlIHRoZSBkZXZpY2Vcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz04MDI9c3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTgxMi1cdCAqL1xubmV0L2lwdjQvaXBfZ3JlLmM6ODEzOlx0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTgxNC1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy04MjUtXG5uZXQvaXB2NC9pcF9ncmUuYzo4MjY6c3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5uZXQvaXB2NC9pcF9ncmUuYy04MjctXHRcdFx0ICAgIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTk4OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTAwMC1cdC5uZG9fZ2V0X2lmbGlua1x0XHQ9IGlwX3R1bm5lbF9nZXRfaWZsaW5rLFxubmV0L2lwdjQvaXBfZ3JlLmM6MTAwMTpcdC5uZG9fdHVubmVsX2N0bFx0XHQ9IGlwZ3JlX3R1bm5lbF9jdGwsXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDAyLX07XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTM3MT1zdGF0aWMgdm9pZCBlcnNwYW5fc2V0X2hsZW4oc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsKVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTEzODAtLyogQm90aCB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciBhbmQgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbVxubmV0L2lwdjQvaXBfZ3JlLmM6MTM4MTogKiBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgYm90aCBmZWVkIHR1bm5lbC1cdTAwM2VobGVuLiBSZWNvbXB1dGUgaXQsIHRoZW4gbGV0XG5uZXQvaXB2NC9pcF9ncmUuYy0xMzgyLSAqIGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlIGxlbmd0aHMgZnJvbSBpdC5cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMzg4PXN0YXRpYyB2b2lkIGVyc3Bhbl9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5Ny1cdCAqL1xubmV0L2lwdjQvaXBfZ3JlLmM6MTM5ODpcdGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoZGV2LCBzZXRfbXR1IFx1MDAyNlx1MDAyNiB0dW5uZWwtXHUwMDNlaGxlbiAhPSBvbGRfaGxlbik7XG5uZXQvaXB2NC9pcF9ncmUuYy0xMzk5LX1cbm5ldC9pcHY0L2lwX2dyZS5jLTE0MDAtXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDAxOnN0YXRpYyBpbnQgZXJzcGFuX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDAyLXtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZXJzcGFuX25ldGRldl9vcHMgPSB7XG5uZXQvaXB2NC9pcF9ncmUuYzoxNDE4Olx0Lm5kb19pbml0XHRcdD0gZXJzcGFuX3R1bm5lbF9pbml0LFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQxOS1cdC5uZG9fdW5pbml0XHRcdD0gaXBfdHVubmVsX3VuaW5pdCxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDc2PXN0YXRpYyBpbnQgZXJzcGFuX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDk2LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTQ5NzpzdGF0aWMgaW50IGlwZ3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0OTgtXHRcdFx0ICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTM1LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTUzNjpzdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTM3LVx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE3Mzg9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwZ3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTc0NS1cdC5uZXdsaW5rXHQ9IGlwZ3JlX25ld2xpbmssXG5uZXQvaXB2NC9pcF9ncmUuYzoxNzQ2Olx0LmNoYW5nZWxpbmtcdD0gaXBncmVfY2hhbmdlbGluayxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3NDctXHQuZGVsbGlua1x0PSBpcF90dW5uZWxfZGVsbGluayxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNzUzPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcGdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTc2MC1cdC5uZXdsaW5rXHQ9IGlwZ3JlX25ld2xpbmssXG5uZXQvaXB2NC9pcF9ncmUuYzoxNzYxOlx0LmNoYW5nZWxpbmtcdD0gaXBncmVfY2hhbmdlbGluayxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3NjItXHQuZGVsbGlua1x0PSBpcF90dW5uZWxfZGVsbGluayxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNzY4PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBlcnNwYW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzc1LVx0Lm5ld2xpbmtcdD0gZXJzcGFuX25ld2xpbmssXG5uZXQvaXB2NC9pcF9ncmUuYzoxNzc2Olx0LmNoYW5nZWxpbmtcdD0gZXJzcGFuX2NoYW5nZWxpbmssXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzc3LVx0LmRlbGxpbmtcdD0gaXBfdHVubmVsX2RlbGxpbmssXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmM9MjgwPXN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzM1LSAqL1xubmV0L2lwdjQvaXBfdHVubmVsLmM6MzM2OnZvaWQgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zMzcte1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM0Mi19XG5uZXQvaXB2NC9pcF90dW5uZWwuYzozNDM6RVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Rocyk7XG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zNDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTc1CgkJCQkJCQlvdXRwdXQ6IDI0MAoJCQkJCQkJdGhvdWdodHM6IDkxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBJUCBUdW5uZWwvR1JFL0VSU1BBTiBDaGFuZ2VzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBtb2RpZmllZCBhbmQgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnM6IGBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzYCwgYGlwZ3JlX2xpbmtfdXBkYXRlYCwgYGVyc3Bhbl9saW5rX3VwZGF0ZWAsIGBlcnNwYW5fc2V0X2hsZW5gLCBhbmQgdGhlIG1vZGlmaWVkIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCwgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYCwgYGlwZ3JlX2NoYW5nZWxpbmtgLCBgZXJzcGFuX2NoYW5nZWxpbmtgLCBgaXBncmVfdHVubmVsX2N0bGAsIGFuZCBgZXJzcGFuX3R1bm5lbF9pbml0YC4gVGhlc2UgYXJlIGFsbCBjbGVhcmx5IGZvY3VzZWQgb24gSVAgdHVubmVsaW5nLCBzcGVjaWZpY2FsbHkgR1JFIGFuZCBFUlNQQU4gbGluayBtYW5hZ2VtZW50LCBpbmNsdWRpbmcgTVRVIGFuZCBoZWFkcm9vbSBjYWxjdWxhdGlvbnMuIE5vbmUgb2YgdGhlc2UgYXJlIGNvcmUsIHViaXF1aXRvdXMgbmV0d29ya2luZyBmdW5jdGlvbnMuCgpOZXh0LCBJIHZlcmlmaWVkIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnM6IGBORVRfSVBHUkVgLCBgTkVUX0lQR1JFX0RFTVVYYCwgYW5kIGBORVRfSVBfVFVOTkVMYC4gVGhlIEtjb25maWcgY29uZmlybXMgdGhhdCBgTkVUX0lQR1JFYCBkZXBlbmRzIG9uIGFuZCBzZWxlY3RzIGBORVRfSVBHUkVfREVNVVhgLCBhbmQgYE5FVF9JUEdSRWAgc2VsZWN0cyBgTkVUX0lQX1RVTk5FTGAuIFRoZXJlZm9yZSwgZXhwbGljaXRseSBzcGVjaWZ5aW5nIGFsbCB0aHJlZSBpcyBhY2N1cmF0ZS4KClRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zIEkgbGlzdGVkIGVhcmxpZXIsIHRob3NlIGRlZGljYXRlZCB0byBHUkUvRVJTUEFOLgoKTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb246IGlzIHRoaXMgd29ydGggZnV6emluZz8gQWJzb2x1dGVseS4gVGhlc2UgY2hhbmdlcyB0b3VjaCBvbiBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIElQIHR1bm5lbGluZyDigJMgdGhlIHZlcnkgY29yZSBvZiB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGJlaGF2aW9yLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGhlYWRlciBsZW5ndGggY2FsY3VsYXRpb25zLCBkZXZpY2UgaGVhZHJvb20sIE1UVSB1cGRhdGVzIHRyaWdnZXJlZCBieSBuZXRsaW5rIChSVE1fTkVXTElOSywgUlRNX1NFVExJTkspIGFuZCBpb2N0bCAoU0lPQ0NIR1RVTk5FTCwgZXRjLikgY29uZmlndXJhdGlvbnMsIGFsbCBjcml0aWNhbCB0byBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eS4gSSBzZWUgY2hhbmdlcyBpbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGlwZ3JlX2NoYW5nZWxpbmtgIGFuZCBgZXJzcGFuX2NoYW5nZWxpbmtgIHJlZ2FyZGluZyBsZW5ndGggdXBkYXRlcyBldmVuIGR1cmluZyBlcnJvciBwYXRocy4gSSBzZWUgY2hhbmdlcyBpbiB2YWxpZGF0aW9uIG9yZGVyIGluIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgYW5kIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc2AgZnVydGhlciBhbXBsaWZpZXMgdGhlIG5lZWQgZm9yIHRob3JvdWdoIGZ1enppbmcuIFRoZXNlIGFyZSBhbGwgZXhwb3NlZCB2aWEgbmV0bGluayBhbmQgaW9jdGwgaW50ZXJmYWNlcywgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhpcyBpcyBhIGNsZWFyIGNhc2UgZm9yIHZ1bG5lcmFiaWxpdHkgYW5hbHlzaXMuIEV2ZXJ5dGhpbmcgaXMgc29saWQuIEkmIzM5O20gcmVhZHkgdG8gbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OywKICAgICYjMzQ7TkVUX0lQX1RVTk5FTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMmIzM0OywKICAgICYjMzQ7aXBncmVfbGlua191cGRhdGUmIzM0OywKICAgICYjMzQ7ZXJzcGFuX2xpbmtfdXBkYXRlJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9zZXRfaGxlbiYjMzQ7LAogICAgJiMzNDtpcGdyZV9uZXRsaW5rX3Bhcm1zJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9uZXRsaW5rX3Bhcm1zJiMzNDssCiAgICAmIzM0O2lwZ3JlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7ZXJzcGFuX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7aXBncmVfdHVubmVsX2N0bCYjMzQ7LAogICAgJiMzNDtlcnNwYW5fdHVubmVsX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGFuZCBmaXhlcyBkZXZpY2UgaGVhZGVyIGxlbmd0aCwgTVRVLCBhbmQgaGVhZHJvb20gdXBkYXRlcyBpbiB0aGUgSVB2NCBHUkUgYW5kIEVSU1BBTiB0dW5uZWxpbmcgZHJpdmVycy4gSXQgaW50cm9kdWNlcyBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKCkgYW5kIHVwZGF0ZXMgbGluayBjb25maWd1cmF0aW9uIGFuZCBlcnJvci1oYW5kbGluZyBwYXRocyBpbiBpcGdyZV9jaGFuZ2VsaW5rKCksIGVyc3Bhbl9jaGFuZ2VsaW5rKCksIGFuZCBpb2N0bC9uZXRsaW5rIHBhcmFtZXRlciBwYXJzZXJzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JraW5nIGxvZ2ljIGV4ZXJjaXNhYmxlIHZpYSBydG5sIG5ldGxpbmsgYW5kIHR1bm5lbCBpb2N0bHMgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0RFTVVYJiMzNDssCiAgICAmIzM0O05FVF9JUF9UVU5ORUwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzJiMzNDssCiAgICAmIzM0O2lwZ3JlX2xpbmtfdXBkYXRlJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9saW5rX3VwZGF0ZSYjMzQ7LAogICAgJiMzNDtlcnNwYW5fc2V0X2hsZW4mIzM0OywKICAgICYjMzQ7aXBncmVfbmV0bGlua19wYXJtcyYjMzQ7LAogICAgJiMzNDtlcnNwYW5fbmV0bGlua19wYXJtcyYjMzQ7LAogICAgJiMzNDtpcGdyZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2lwZ3JlX3R1bm5lbF9jdGwmIzM0OywKICAgICYjMzQ7ZXJzcGFuX3R1bm5lbF9pbml0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBhbmQgZml4ZXMgZGV2aWNlIGhlYWRlciBsZW5ndGgsIE1UVSwgYW5kIGhlYWRyb29tIHVwZGF0ZXMgaW4gdGhlIElQdjQgR1JFIGFuZCBFUlNQQU4gdHVubmVsaW5nIGRyaXZlcnMuIEl0IGludHJvZHVjZXMgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocygpIGFuZCB1cGRhdGVzIGxpbmsgY29uZmlndXJhdGlvbiBhbmQgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gaXBncmVfY2hhbmdlbGluaygpLCBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgaW9jdGwvbmV0bGluayBwYXJhbWV0ZXIgcGFyc2Vycy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBleGVyY2lzYWJsZSB2aWEgcnRubCBuZXRsaW5rIGFuZCB0dW5uZWwgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkanVzdHMgaGVhZGVyIGxlbmd0aCwgaGVhZHJvb20sIGFuZCBNVFUgY2FsY3VsYXRpb24gbG9naWMgZm9yIElQIEdSRSBhbmQgRVJTUEFOIHR1bm5lbCBkZXZpY2VzIChpbnRyb2R1Y2luZyBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzLCB1cGRhdGluZyBpcGdyZV9saW5rX3VwZGF0ZSBhbmQgZXJzcGFuX2xpbmtfdXBkYXRlLCBhbmQgZGVmZXJyaW5nIHR1bm5lbCBzdGF0ZSB1cGRhdGVzIHVudGlsIG5ldGxpbmsgdmFsaWRhdGlvbiBjb21wbGV0ZXMpLiBcblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCAoc3VjaCBhcyBvbGRfaGxlbiwgZXJzcGFuX3ZlciwgaW5kZXgsIGh3aWQsIGRpciwgYW5kIG10dSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIG9yIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBoZWFkcm9vbSBvciBNVFUgY2FsY3VsYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIGJ1ZmZlciBib3VuZGFyeS9vdmVyZmxvdyBvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gb3IgbmV0d29yayBzdGFjayBhc3NlcnRpb25zIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjU5MDhiZDA3NDVjMzA0YWIxNDAyNGUzMjI3ZDc2ZWUwYjU3MThmMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDE1OjQyOjEwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oCmluZGV4IDdjOWFhZGZlOGZlMzkuLmZkMDM5NmFhNTAzOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgKQEAgLTQyOSw2ICYjNDM7NDI5LDcgQEAgaW50IGlwX3R1bm5lbF9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICAgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAsCiAJCSAgICAgIF9fdTMyIGZ3bWFyayk7CiB2b2lkIGlwX3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbmV0X2lkKTsKJiM0Mzt2b2lkIGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KTsKIAogYm9vbCBpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sCiAJCQkJICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZW5jYXApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCA4MjMwOWVmZDQxN2UwLi40ODA3ZmM2ZDJmZDg4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtNzg5LDIzICYjNDM7Nzg5LDI4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBncmVfdGFwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCi1zdGF0aWMgdm9pZCBpcGdyZV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpCiYjNDM7LyogdHVubmVsLSZndDtobGVuIGRlcGVuZHMgb24gdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzIGFuZCBvbiB0dW5uZWwtJmd0O2VuY2FwX2hsZW4sCiYjNDM7ICogYm90aCBvZiB3aGljaCBpcGdyZV9jaGFuZ2VsaW5rKCkgY2FuIGNoYW5nZS4gUmVjb21wdXRlIGl0IHRoZSB3YXkKJiM0MzsgKiBfX2dyZV90dW5uZWxfaW5pdCgpIGRvZXMsIHRoZW4gbGV0IGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlCiYjNDM7ICogbGVuZ3RocyBmcm9tIGl0LgomIzQzOyAqCiYjNDM7ICogQG9sZF9obGVuIGlzIG9ubHkgdXNlZCB0byB0ZWxsIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWUgc3RhbGUsIG5ldmVyIGFzIGEKJiM0MzsgKiBkaWZmZXJlbmNlIHRvIGFwcGx5LCBzbyBpdCBjYW4gbm90IG1ha2UgdGhlIGxlbmd0aHMgZHJpZnQuIEl0IG11c3QgYmUKJiM0MzsgKiBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2ggYWxyZWFkeSBwdWJsaXNoZXMgdGhlIG5ldwomIzQzOyAqIHR1bm5lbC0mZ3Q7aGxlbiBmb3IgdXMuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1LAomIzQzOwkJCSAgICAgIGludCBvbGRfaGxlbikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBsZW47CiAKLQlsZW4gPSB0dW5uZWwtJmd0O3R1bl9obGVuOwogCXR1bm5lbC0mZ3Q7dHVuX2hsZW4gPSBncmVfY2FsY19obGVuKHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncyk7Ci0JbGVuID0gdHVubmVsLSZndDt0dW5faGxlbiAtIGxlbjsKLQl0dW5uZWwtJmd0O2hsZW4gPSB0dW5uZWwtJmd0O2hsZW4gJiM0MzsgbGVuOwotCi0JaWYgKGRldi0mZ3Q7aGVhZGVyX29wcykKLQkJZGV2LSZndDtoYXJkX2hlYWRlcl9sZW4gJiM0Mzs9IGxlbjsKLQllbHNlCi0JCWRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tICYjNDM7PSBsZW47CiYjNDM7CXR1bm5lbC0mZ3Q7aGxlbiA9IHR1bm5lbC0mZ3Q7dHVuX2hsZW4gJiM0MzsgdHVubmVsLSZndDtlbmNhcF9obGVuOwogCi0JaWYgKHNldF9tdHUpCi0JCVdSSVRFX09OQ0UoZGV2LSZndDttdHUsIG1heF90KGludCwgZGV2LSZndDttdHUgLSBsZW4sIDY4KSk7CiYjNDM7CS8qIE9ubHkgcmVzZXQgYSBNVFUgdGhhdCB0aGUgaGVhZGVyIGxlbmd0aCBqdXN0IGludmFsaWRhdGVkLCBzbyB0aGF0CiYjNDM7CSAqIGEgTVRVIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIgc3Vydml2ZXMgYW4gdW5yZWxhdGVkIGNoYW5nZS4KJiM0MzsJICovCiYjNDM7CWlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoZGV2LCBzZXRfbXR1ICZhbXA7JmFtcDsgdHVubmVsLSZndDtobGVuICE9IG9sZF9obGVuKTsKIAogCWlmICh0ZXN0X2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKSB8fAogCSAgICAodGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpICZhbXA7JmFtcDsKQEAgLTg1Myw3ICYjNDM7ODU4LDcgQEAgc3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCWlwX3R1bm5lbF9mbGFnc19jb3B5KHQtJmd0O3Bhcm1zLm9fZmxhZ3MsIHAtJmd0O29fZmxhZ3MpOwogCiAJCWlmIChzdHJjbXAoZGV2LSZndDtydG5sX2xpbmtfb3BzLSZndDtraW5kLCAmIzM0O2Vyc3BhbiYjMzQ7KSkKLQkJCWlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSk7CiYjNDM7CQkJaXBncmVfbGlua191cGRhdGUoZGV2LCB0cnVlLCB0LSZndDtobGVuKTsKIAl9CiAKIAlpX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC0mZ3Q7aV9mbGFncyk7CkBAIC0xMjMzLDEyICYjNDM7MTIzOCw2IEBAIHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlwYXJtcy0mZ3Q7aXBoLmZyYWdfb2ZmID0gaHRvbnMoSVBfREYpOwogCX0KIAotCWlmIChkYXRhW0lGTEFfR1JFX0NPTExFQ1RfTUVUQURBVEFdKSB7Ci0JCXQtJmd0O2NvbGxlY3RfbWQgPSB0cnVlOwotCQlpZiAoZGV2LSZndDt0eXBlID09IEFSUEhSRF9JUEdSRSkKLQkJCWRldi0mZ3Q7dHlwZSA9IEFSUEhSRF9OT05FOwotCX0KLQogCWlmIChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pIHsKIAkJaWYgKG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKQogCQkgICZhbXA7JmFtcDsgKHBhcm1zLSZndDtpcGguZnJhZ19vZmYgJmFtcDsgaHRvbnMoSVBfREYpKSkKQEAgLTEyNDYsNiAmIzQzOzEyNDUsMTMgQEAgc3RhdGljIGludCBpcGdyZV9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXQtJmd0O2lnbm9yZV9kZiA9ICEhbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pOwogCX0KIAomIzQzOwkvKiBBbGwgYXR0cmlidXRlcyBoYXZlIGJlZW4gdmFsaWRhdGVkLCB3ZSBjYW4gY2hhbmdlIEBkZXYgYW5kIEB0LiAqLwomIzQzOwlpZiAoZGF0YVtJRkxBX0dSRV9DT0xMRUNUX01FVEFEQVRBXSkgewomIzQzOwkJdC0mZ3Q7Y29sbGVjdF9tZCA9IHRydWU7CiYjNDM7CQlpZiAoZGV2LSZndDt0eXBlID09IEFSUEhSRF9JUEdSRSkKJiM0MzsJCQlkZXYtJmd0O3R5cGUgPSBBUlBIUkRfTk9ORTsKJiM0MzsJfQomIzQzOwogCWlmIChkYXRhW0lGTEFfR1JFX0ZXTUFSS10pCiAJCSpmd21hcmsgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0ZXTUFSS10pOwogCkBAIC0xMjU5LDQwICYjNDM7MTI2NSw1MSBAQCBzdGF0aWMgaW50IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJX191MzIgKmZ3bWFyaykKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJdTggZXJzcGFuX3ZlciA9IHQtJmd0O2Vyc3Bhbl92ZXI7CiYjNDM7CXUzMiBpbmRleCA9IHQtJmd0O2luZGV4OwomIzQzOwl1MTYgaHdpZCA9IHQtJmd0O2h3aWQ7CiYjNDM7CXU4IGRpciA9IHQtJmd0O2RpcjsKIAlpbnQgZXJyOwogCi0JZXJyID0gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBwYXJtcywgZndtYXJrKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwogCWlmICghZGF0YSkKLQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBwYXJtcywgZndtYXJrKTsKIAogCWlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKSB7Ci0JCXQtJmd0O2Vyc3Bhbl92ZXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pOwomIzQzOwkJZXJzcGFuX3ZlciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSk7CiAKLQkJaWYgKHQtJmd0O2Vyc3Bhbl92ZXIgJmd0OyAyKQomIzQzOwkJaWYgKGVyc3Bhbl92ZXIgJmd0OyAyKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKHQtJmd0O2Vyc3Bhbl92ZXIgPT0gMSkgewomIzQzOwlpZiAoZXJzcGFuX3ZlciA9PSAxKSB7CiAJCWlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pIHsKLQkJCXQtJmd0O2luZGV4ID0gbmxhX2dldF91MzIoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSU5ERVhdKTsKLQkJCWlmICh0LSZndDtpbmRleCAmYW1wOyB+SU5ERVhfTUFTSykKJiM0MzsJCQlpbmRleCA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0lOREVYXSk7CiYjNDM7CQkJaWYgKGluZGV4ICZhbXA7IH5JTkRFWF9NQVNLKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JfSBlbHNlIGlmICh0LSZndDtlcnNwYW5fdmVyID09IDIpIHsKJiM0MzsJfSBlbHNlIGlmIChlcnNwYW5fdmVyID09IDIpIHsKIAkJaWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pIHsKLQkJCXQtJmd0O2RpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7Ci0JCQlpZiAodC0mZ3Q7ZGlyICZhbXA7IH4oRElSX01BU0sgJmd0OyZndDsgRElSX09GRlNFVCkpCiYjNDM7CQkJZGlyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9ESVJdKTsKJiM0MzsJCQlpZiAoZGlyICZhbXA7IH4oRElSX01BU0sgJmd0OyZndDsgRElSX09GRlNFVCkpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKSB7Ci0JCQl0LSZndDtod2lkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pOwotCQkJaWYgKHQtJmd0O2h3aWQgJmFtcDsgfihIV0lEX01BU0sgJmd0OyZndDsgSFdJRF9PRkZTRVQpKQomIzQzOwkJCWh3aWQgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfR1JFX0VSU1BBTl9IV0lEXSk7CiYjNDM7CQkJaWYgKGh3aWQgJmFtcDsgfihIV0lEX01BU0sgJmd0OyZndDsgSFdJRF9PRkZTRVQpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCiYjNDM7CWVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwkvKiBBbGwgYXR0cmlidXRlcyBoYXZlIGJlZW4gdmFsaWRhdGVkLCB3ZSBjYW4gY2hhbmdlIEB0LiAqLwomIzQzOwl0LSZndDtlcnNwYW5fdmVyID0gZXJzcGFuX3ZlcjsKJiM0MzsJdC0mZ3Q7aW5kZXggPSBpbmRleDsKJiM0MzsJdC0mZ3Q7aHdpZCA9IGh3aWQ7CiYjNDM7CXQtJmd0O2RpciA9IGRpcjsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM1MSwxOCAmIzQzOzEzNjgsNDMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBncmVfdGFwX25ldGRldl9vcHMgPSB7CiAJLm5kb19maWxsX21ldGFkYXRhX2RzdAk9IGdyZV9maWxsX21ldGFkYXRhX2RzdCwKIH07CiAKJiM0MztzdGF0aWMgdm9pZCBlcnNwYW5fc2V0X2hsZW4oc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsKQomIzQzO3sKJiM0MzsJLyogVmVyc2lvbiAwIHVzZXMgYSA0LWJ5dGUgR1JFIGhlYWRlciwgb3RoZXIgdmVyc2lvbnMgdXNlIDggYnl0ZXMuICovCiYjNDM7CXR1bm5lbC0mZ3Q7dHVuX2hsZW4gPSB0dW5uZWwtJmd0O2Vyc3Bhbl92ZXIgPT0gMCA/IDQgOiA4OwomIzQzOwomIzQzOwl0dW5uZWwtJmd0O2hsZW4gPSB0dW5uZWwtJmd0O3R1bl9obGVuICYjNDM7IHR1bm5lbC0mZ3Q7ZW5jYXBfaGxlbiAmIzQzOwomIzQzOwkJICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC0mZ3Q7ZXJzcGFuX3Zlcik7CiYjNDM7fQomIzQzOwomIzQzOy8qIEJvdGggdHVubmVsLSZndDtlcnNwYW5fdmVyIGFuZCB0dW5uZWwtJmd0O2VuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbQomIzQzOyAqIGVyc3Bhbl9jaGFuZ2VsaW5rKCksIGFuZCBib3RoIGZlZWQgdHVubmVsLSZndDtobGVuLiBSZWNvbXB1dGUgaXQsIHRoZW4gbGV0CiYjNDM7ICogaXBfdHVubmVsX2JpbmRfZGV2KCkgZGVyaXZlIHRoZSBkZXZpY2UgbGVuZ3RocyBmcm9tIGl0LgomIzQzOyAqCiYjNDM7ICogQXMgaW4gaXBncmVfbGlua191cGRhdGUoKSwgQG9sZF9obGVuIG9ubHkgdGVsbHMgd2hldGhlciB0aGUgTVRVIGJlY2FtZQomIzQzOyAqIHN0YWxlIGFuZCBtdXN0IGJlIHNhbXBsZWQgYmVmb3JlIGlwX3R1bm5lbF9lbmNhcF9zZXR1cCgpLCB3aGljaAomIzQzOyAqIHJlY29tcHV0ZXMgdHVubmVsLSZndDtobGVuIHdpdGhvdXQgdGhlIEVSU1BBTiBwYXJ0LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGVyc3Bhbl9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsCiYjNDM7CQkJICAgICAgIGludCBvbGRfaGxlbikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpOwomIzQzOwomIzQzOwkvKiBPbmx5IHJlc2V0IGEgTVRVIHRoYXQgdGhlIGhlYWRlciBsZW5ndGgganVzdCBpbnZhbGlkYXRlZCwgc28gdGhhdAomIzQzOwkgKiBhIE1UVSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyIHN1cnZpdmVzIGFuIHVucmVsYXRlZCBjaGFuZ2UuCiYjNDM7CSAqLwomIzQzOwlpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKGRldiwgc2V0X210dSAmYW1wOyZhbXA7IHR1bm5lbC0mZ3Q7aGxlbiAhPSBvbGRfaGxlbik7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBlcnNwYW5fdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKHR1bm5lbC0mZ3Q7ZXJzcGFuX3ZlciA9PSAwKQotCQl0dW5uZWwtJmd0O3R1bl9obGVuID0gNDsgLyogNC1ieXRlIEdSRSBoZHIuICovCi0JZWxzZQotCQl0dW5uZWwtJmd0O3R1bl9obGVuID0gODsgLyogOC1ieXRlIEdSRSBoZHIuICovCiYjNDM7CWVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpOwogCiAJdHVubmVsLSZndDtwYXJtcy5pcGgucHJvdG9jb2wgPSBJUFBST1RPX0dSRTsKLQl0dW5uZWwtJmd0O2hsZW4gPSB0dW5uZWwtJmd0O3R1bl9obGVuICYjNDM7IHR1bm5lbC0mZ3Q7ZW5jYXBfaGxlbiAmIzQzOwotCQkgICAgICAgZXJzcGFuX2hkcl9sZW4odHVubmVsLSZndDtlcnNwYW5fdmVyKTsKIAogCWRldi0mZ3Q7ZmVhdHVyZXMJCXw9IEdSRV9GRUFUVVJFUzsKIAlkZXYtJmd0O2h3X2ZlYXR1cmVzCXw9IEdSRV9GRUFUVVJFUzsKQEAgLTE0NTksNiAmIzQzOzE1MDEsNyBAQCBzdGF0aWMgaW50IGlwZ3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSwKIAlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwOwogCV9fdTMyIGZ3bWFyayA9IHQtJmd0O2Z3bWFyazsKJiM0MzsJaW50IG9sZF9obGVuID0gdC0mZ3Q7aGxlbjsKIAlpbnQgZXJyOwogCiAJaWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC0mZ3Q7bmV0KSkKQEAgLTE0NzAsMTggJiM0MzsxNTEzLDI0IEBAIHN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCiAJZXJyID0gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCAmYW1wO3AsICZhbXA7ZndtYXJrKTsKIAlpZiAoZXJyICZsdDsgMCkKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gbGlua191cGRhdGU7CiAKIAllcnIgPSBpcF90dW5uZWxfY2hhbmdlbGluayhkZXYsIHRiLCAmYW1wO3AsIGZ3bWFyayk7CiAJaWYgKGVyciAmbHQ7IDApCi0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGxpbmtfdXBkYXRlOwogCiAJaXBfdHVubmVsX2ZsYWdzX2NvcHkodC0mZ3Q7cGFybXMuaV9mbGFncywgcC5pX2ZsYWdzKTsKIAlpcF90dW5uZWxfZmxhZ3NfY29weSh0LSZndDtwYXJtcy5vX2ZsYWdzLCBwLm9fZmxhZ3MpOwogCi0JaXBncmVfbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdKTsKJiM0MztsaW5rX3VwZGF0ZToKJiM0MzsJLyogaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cCgpIGhhcyBwdWJsaXNoZWQgYSBuZXcgZW5jYXBzdWxhdGlvbiBldmVuCiYjNDM7CSAqIGlmIHRoZSByZXN0IG9mIHRoZSByZXF1ZXN0IGZhaWxlZCwgc28gdGhlIGxlbmd0aHMgbXVzdCBiZSByZWZyZXNoZWQKJiM0MzsJICogb24gdGhlIGVycm9yIHBhdGhzIGFzIHdlbGwuIFRoaXMgaGFzIHRvIGNvbWUgbGFzdCwgYmVjYXVzZQomIzQzOwkgKiBpcGdyZV9saW5rX3VwZGF0ZSgpIG5lZWRzIHRoZSBmbGFncyBjb3BpZWQgYWJvdmUuCiYjNDM7CSAqLwomIzQzOwlpcGdyZV9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sCkBAIC0xNDkxLDYgJiM0MzsxNTQwLDcgQEAgc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCXN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7CiAJX191MzIgZndtYXJrID0gdC0mZ3Q7ZndtYXJrOwomIzQzOwlpbnQgb2xkX2hsZW4gPSB0LSZndDtobGVuOwogCWludCBlcnI7CiAKIAlpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LSZndDtuZXQpKQpAQCAtMTUwMSw2ICYjNDM7MTU1MSwxNiBAQCBzdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sCiAJCXJldHVybiBlcnI7CiAKIAllcnIgPSBlcnNwYW5fbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCAmYW1wO3AsICZhbXA7ZndtYXJrKTsKJiM0MzsKJiM0MzsJLyogaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cCgpIGhhcyBwdWJsaXNoZWQgYSBuZXcgZW5jYXBzdWxhdGlvbiwgYW5kCiYjNDM7CSAqIGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKCkgYSBuZXcgRVJTUEFOIHZlcnNpb24sIGJvdGggb2Ygd2hpY2ggY2hhbmdlCiYjNDM7CSAqIHRoZSBoZWFkZXIgbGVuZ3RoLiBSZWZyZXNoIHRoZSBsZW5ndGhzIGJlZm9yZSBsb29raW5nIGF0IEBlcnI6CiYjNDM7CSAqIGVyc3Bhbl94bWl0KCkgc2l6ZXMgaXRzIHB1c2ggZnJvbSB0dW5uZWwtJmd0O2Vyc3Bhbl92ZXIsIGFuZCBib3RoIHRoaXMKJiM0MzsJICogZXJyb3IgcGF0aCBhbmQgaXBfdHVubmVsX2NoYW5nZWxpbmsoKSBiZWxvdyBsZWF2ZSB0aGUgbmV3CiYjNDM7CSAqIGVuY2Fwc3VsYXRpb24gYmVoaW5kLgomIzQzOwkgKi8KJiM0MzsJZXJzcGFuX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSwgb2xkX2hsZW4pOwomIzQzOwogCWlmIChlcnIgJmx0OyAwKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF90dW5uZWwuYyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jCmluZGV4IGU2YmNmMDE0MTFkMGIuLjZiOTNjMWZkYTQ5NDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY0L2lwX3R1bm5lbC5jCkBAIC0zMjYsNiAmIzQzOzMyNiwyMiBAQCBzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXJldHVybiBtdHU7CiB9CiAKJiM0MzsvKiBSZWNvbXB1dGUgZGV2LSZndDtuZWVkZWRfaGVhZHJvb20gYW5kIGRldi0mZ3Q7bXR1IGFmdGVyIHR1bm5lbC0mZ3Q7aGxlbiBjaGFuZ2VkLgomIzQzOyAqCiYjNDM7ICogQm90aCBhcmUgZGVyaXZlZCBmcm9tIHR1bm5lbC0mZ3Q7aGxlbiwgc28gdGhleSBtdXN0IGJlIHJlY29tcHV0ZWQgZnJvbSBpdAomIzQzOyAqIHJhdGhlciB0aGFuIGFkanVzdGVkIGJ5IHRoZSBkaWZmZXJlbmNlOiBpcF90dW5uZWxfYmluZF9kZXYoKSBpcyBhbHNvCiYjNDM7ICogY2FsbGVkIGZyb20gbmRvX2luaXQoKSBhbmQgZnJvbSBpcF90dW5uZWxfdXBkYXRlKCksIGFuZCBhIGRyaXZlciBhZGRpbmcKJiM0MzsgKiBpdHMgb3duIGRlbHRhIG9uIHRvcCB3b3VsZCBkb3VibGUgY291bnQgaXQuCiYjNDM7ICovCiYjNDM7dm9pZCBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSkKJiM0Mzt7CiYjNDM7CWludCBtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHNldF9tdHUpCiYjNDM7CQlXUklURV9PTkNFKGRldi0mZ3Q7bXR1LCBtdHUpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKTsKJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkJICBzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuLAogCQkJCQkgIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwYXJtcykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNDUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrcyBpbiB0aGlzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgZmlndXJlIG91dCBpZiBpdCYjMzk7cyBnb2luZyB0byBjYXVzZSB1cyBoZWFkYWNoZXMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMsIGFuZCB3aGV0aGVyIHdlIG5lZWQgdG8gZmlyZSB1cCBLTVNBTiBmb3IgYSBkZWVwIGRpdmUuIFRoZSBwYXRjaCBpdHNlbGYgaXMgbGFiZWxlZCBhcyAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldywmIzM0OyB3aGljaCB1c3VhbGx5IG1lYW5zIGl0IHdhcyBmbGFnZ2VkIGJ5IHN5emthbGxlci4KClRoZSBmaWxlcyBtb2RpZmllZCBhcmU6IGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLCBgbmV0L2lwdjQvaXBfZ3JlLmNgLCBhbmQgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYC4gT2theSwgdGhyZWUgZmlsZXMuIExldCYjMzk7cyBzdGFydCBieSBtZXRob2RpY2FsbHkgcmVhZGluZyB0aGUgY2hhbmdlcy4KCkxvb2tpbmcgYXQgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYCwgdGhlcmUmIzM5O3MgYSBmdW5jdGlvbiBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpYC4gSXQgY2FsbHMgYGlwX3R1bm5lbF9iaW5kX2RldihkZXYpYCBhbmQgc2V0cyBgZGV2LSZndDttdHVgIGlmIGBzZXRfbXR1YCBpcyB0cnVlLiBIbW0sIHRoYXQgYGlwX3R1bm5lbF9iaW5kX2RldmAgY2FsbCBsb29rcyBpbXBvcnRhbnQuIExldCYjMzk7cyBqdW1wIG92ZXIgYW5kIGluc3BlY3QgYGlwX3R1bm5lbF9iaW5kX2RldihkZXYpYCBpbiB0aGUgc2FtZSBmaWxlIHRvIHNlZSB3aGF0IGl0JiMzOTtzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX3R1bm5lbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMDA6XHRcdFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KHR1bm5lbC1cdTAwM2VuZXQsIFx1MDAyNmZsNCk7XG4gMzAxOlx0XG4gMzAyOlx0XHRcdGlmICghSVNfRVJSKHJ0KSkge1xuIDMwMzpcdFx0XHRcdHRkZXYgPSBydC1cdTAwM2Vkc3QuZGV2O1xuIDMwNDpcdFx0XHRcdGlwX3J0X3B1dChydCk7XG4gMzA1Olx0XHRcdH1cbiAzMDY6XHRcdFx0aWYgKGRldi1cdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUilcbiAzMDc6XHRcdFx0XHRkZXYtXHUwMDNlZmxhZ3MgfD0gSUZGX1BPSU5UT1BPSU5UO1xuIDMwODpcdFxuIDMwOTpcdFx0XHRkc3RfY2FjaGVfcmVzZXQoXHUwMDI2dHVubmVsLVx1MDAzZWRzdF9jYWNoZSk7XG4gMzEwOlx0XHR9XG4gMzExOlx0XG4gMzEyOlx0XHRpZiAoIXRkZXYgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VwYXJtcy5saW5rKVxuIDMxMzpcdFx0XHR0ZGV2ID0gX19kZXZfZ2V0X2J5X2luZGV4KHR1bm5lbC1cdTAwM2VuZXQsIHR1bm5lbC1cdTAwM2VwYXJtcy5saW5rKTtcbiAzMTQ6XHRcbiAzMTU6XHRcdGlmICh0ZGV2KSB7XG4gMzE2Olx0XHRcdGhsZW4gPSB0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOyB0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbTtcbiAzMTc6XHRcdFx0bXR1ID0gbWluKHRkZXYtXHUwMDNlbXR1LCBJUF9NQVhfTVRVKTtcbiAzMTg6XHRcdH1cbiAzMTk6XHRcbiAzMjA6XHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSBpcF90dW5uZWxfbGltaXRfaGVhZHJvb20odF9obGVuICYjNDM7IGhsZW4pO1xuIDMyMTpcdFx0bXR1IC09IHRfaGxlbiAmIzQzOyAoZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA6IDApO1xuIDMyMjpcdFxuIDMyMzpcdFx0aWYgKG10dSBcdTAwM2MgSVBWNF9NSU5fTVRVKVxuIDMyNDpcdFx0XHRtdHUgPSBJUFY0X01JTl9NVFU7XG4gMzI1Olx0XG4gMzI2Olx0XHRyZXR1cm4gbXR1O1xuIDMyNzpcdH1cbiAzMjg6XHRcbiAzMjk6XHQvKiBSZWNvbXB1dGUgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSBhbmQgZGV2LVx1MDAzZW10dSBhZnRlciB0dW5uZWwtXHUwMDNlaGxlbiBjaGFuZ2VkLlxuIDMzMDpcdCAqXG4gMzMxOlx0ICogQm90aCBhcmUgZGVyaXZlZCBmcm9tIHR1bm5lbC1cdTAwM2VobGVuLCBzbyB0aGV5IG11c3QgYmUgcmVjb21wdXRlZCBmcm9tIGl0XG4gMzMyOlx0ICogcmF0aGVyIHRoYW4gYWRqdXN0ZWQgYnkgdGhlIGRpZmZlcmVuY2U6IGlwX3R1bm5lbF9iaW5kX2RldigpIGlzIGFsc29cbiAzMzM6XHQgKiBjYWxsZWQgZnJvbSBuZG9faW5pdCgpIGFuZCBmcm9tIGlwX3R1bm5lbF91cGRhdGUoKSwgYW5kIGEgZHJpdmVyIGFkZGluZ1xuIDMzNDpcdCAqIGl0cyBvd24gZGVsdGEgb24gdG9wIHdvdWxkIGRvdWJsZSBjb3VudCBpdC5cbiAzMzU6XHQgKi9cbiAzMzY6XHR2b2lkIGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KVxuIDMzNzpcdHtcbiAzMzg6XHRcdGludCBtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcbiAzMzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE5OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwX3R1bm5lbF9iaW5kX2RldmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgbGluZXMgMjcwLTMwMC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgcGFydGljdWxhciBjaHVuayBvZiB0aGUgY29kZS4gTGV0IG1lIHBhcnNlIHRoaXMgc2VjdGlvbiBjYXJlZnVsbHksIGZvY3VzaW5nIG9uIHRoZSBpbnRlcmFjdGlvbnMgYW5kIHRoZSBkYXRhIGZsb3cuIEhvcGVmdWxseSwgdGhpcyBzZWN0aW9uIGlzbiYjMzk7dCB0b28gb2J0dXNlLiBJIHN1c3BlY3QgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHRoZSBhY3R1YWwgYmluZGluZyBsb2dpYywgcHJvYmFibHkgaW5jb3Jwb3JhdGluZyBzb21lIGRldmljZS1zcGVjaWZpYyBhc3BlY3RzLCBvciBwZXJoYXBzIHNvbWUgc2VjdXJpdHkgY2hlY2tzLiBUaW1lIHRvIGZvY3VzIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyB0aGlzIHNlY3Rpb24gcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF90dW5uZWwuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjcwOlx0XHRcdGdvdG8gZmFpbGVkX2ZyZWU7XG4gMjcxOlx0XG4gMjcyOlx0XHRyZXR1cm4gZGV2O1xuIDI3MzpcdFxuIDI3NDpcdGZhaWxlZF9mcmVlOlxuIDI3NTpcdFx0ZnJlZV9uZXRkZXYoZGV2KTtcbiAyNzY6XHRmYWlsZWQ6XG4gMjc3Olx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIDI3ODpcdH1cbiAyNzk6XHRcbiAyODA6XHRzdGF0aWMgaW50IGlwX3R1bm5lbF9iaW5kX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDI4MTpcdHtcbiAyODI6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICp0ZGV2ID0gTlVMTDtcbiAyODM6XHRcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gMjg0Olx0XHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcbiAyODU6XHRcdGludCBobGVuID0gTExfTUFYX0hFQURFUjtcbiAyODY6XHRcdGludCBtdHUgPSBFVEhfREFUQV9MRU47XG4gMjg3Olx0XHRpbnQgdF9obGVuID0gdHVubmVsLVx1MDAzZWhsZW4gJiM0Mzsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XG4gMjg4Olx0XG4gMjg5Olx0XHRpcGggPSBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoO1xuIDI5MDpcdFxuIDI5MTpcdFx0LyogR3Vlc3Mgb3V0cHV0IGRldmljZSB0byBjaG9vc2UgcmVhc29uYWJsZSBtdHUgYW5kIG5lZWRlZF9oZWFkcm9vbSAqL1xuIDI5MjpcdFx0aWYgKGlwaC1cdTAwM2VkYWRkcikge1xuIDI5MzpcdFx0XHRzdHJ1Y3QgZmxvd2k0IGZsNDtcbiAyOTQ6XHRcdFx0c3RydWN0IHJ0YWJsZSAqcnQ7XG4gMjk1Olx0XG4gMjk2Olx0XHRcdGlwX3R1bm5lbF9pbml0X2Zsb3coXHUwMDI2Zmw0LCBpcGgtXHUwMDNlcHJvdG9jb2wsIGlwaC1cdTAwM2VkYWRkcixcbiAyOTc6XHRcdFx0XHRcdCAgICBpcGgtXHUwMDNlc2FkZHIsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2tleSxcbiAyOTg6XHRcdFx0XHRcdCAgICBpcGgtXHUwMDNldG9zIFx1MDAyNiBJTkVUX0RTQ1BfTUFTSywgdHVubmVsLVx1MDAzZW5ldCxcbiAyOTk6XHRcdFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlcGFybXMubGluaywgdHVubmVsLVx1MDAzZWZ3bWFyaywgMCwgMCk7XG4gMzAwOlx0XHRcdHJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleSh0dW5uZWwtXHUwMDNlbmV0LCBcdTAwMjZmbDQpO1xuIDMwMTpcdFxuIDMwMjpcdFx0XHRpZiAoIUlTX0VSUihydCkpIHtcbiAzMDM6XHRcdFx0XHR0ZGV2ID0gcnQtXHUwMDNlZHN0LmRldjtcbiAzMDQ6XHRcdFx0XHRpcF9ydF9wdXQocnQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3OTEwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSYjMzk7bSBmb2N1c2luZyBpbiBvbiB0aGUgY2hhbmdlcyB3aXRoaW4gYG5ldC9pcHY0L2lwX2dyZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIG1vZGlmaWVkLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gZ28gbGluZS1ieS1saW5lLCBjb21wYXJpbmcgdGhlIGRpZmYgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBnZXQgdGhlIGZ1bGwgY29udGV4dC4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmVhZCB0aHJvdWdoIHRoZSBjaGFuZ2VzIGFuZCBpbnRlcnByZXQgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODQwOlx0XHRpZiAoY21kID09IFNJT0NBRERUVU5ORUwgfHwgY21kID09IFNJT0NDSEdUVU5ORUwpIHtcbiA4NDE6XHRcdFx0aWYgKHAtXHUwMDNlaXBoLnZlcnNpb24gIT0gNCB8fCBwLVx1MDAzZWlwaC5wcm90b2NvbCAhPSBJUFBST1RPX0dSRSB8fFxuIDg0MjpcdFx0XHQgICAgcC1cdTAwM2VpcGguaWhsICE9IDUgfHwgKHAtXHUwMDNlaXBoLmZyYWdfb2ZmIFx1MDAyNiBodG9ucyh+SVBfREYpKSB8fFxuIDg0MzpcdFx0XHQgICAgKChpX2ZsYWdzIHwgb19mbGFncykgXHUwMDI2IChHUkVfVkVSU0lPTiB8IEdSRV9ST1VUSU5HKSkpXG4gODQ0Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gODQ1Olx0XHR9XG4gODQ2Olx0XG4gODQ3Olx0XHRncmVfZmxhZ3NfdG9fdG5sX2ZsYWdzKHAtXHUwMDNlaV9mbGFncywgaV9mbGFncyk7XG4gODQ4Olx0XHRncmVfZmxhZ3NfdG9fdG5sX2ZsYWdzKHAtXHUwMDNlb19mbGFncywgb19mbGFncyk7XG4gODQ5Olx0XG4gODUwOlx0XHRlcnIgPSBpcF90dW5uZWxfY3RsKGRldiwgcCwgY21kKTtcbiA4NTE6XHRcdGlmIChlcnIpXG4gODUyOlx0XHRcdHJldHVybiBlcnI7XG4gODUzOlx0XG4gODU0Olx0XHRpZiAoY21kID09IFNJT0NDSEdUVU5ORUwpIHtcbiA4NTU6XHRcdFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4gODU2Olx0XG4gODU3Olx0XHRcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMuaV9mbGFncywgcC1cdTAwM2VpX2ZsYWdzKTtcbiA4NTg6XHRcdFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLVx1MDAzZW9fZmxhZ3MpO1xuIDg1OTpcdFxuIDg2MDpcdFx0XHRpZiAoc3RyY21wKGRldi1cdTAwM2VydG5sX2xpbmtfb3BzLVx1MDAzZWtpbmQsIFwmIzM0O2Vyc3BhblwmIzM0OykpXG4gODYxOlx0XHRcdFx0aXBncmVfbGlua191cGRhdGUoZGV2LCB0cnVlLCB0LVx1MDAzZWhsZW4pO1xuIDg2MjpcdFx0fVxuIDg2MzpcdFxuIDg2NDpcdFx0aV9mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlaV9mbGFncyk7XG4gODY1Olx0XHRpcF90dW5uZWxfZmxhZ3NfZnJvbV9iZTE2KHAtXHUwMDNlaV9mbGFncywgaV9mbGFncyk7XG4gODY2Olx0XHRvX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cdTAwM2VvX2ZsYWdzKTtcbiA4Njc6XHRcdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYocC1cdTAwM2VvX2ZsYWdzLCBvX2ZsYWdzKTtcbiA4Njg6XHRcbiA4Njk6XHRcdHJldHVybiAwO1xuIDg3MDpcdH1cbiA4NzE6XHRcbiA4NzI6XHQvKiBOaWNlIHRveS4gVW5mb3J0dW5hdGVseSwgdXNlbGVzcyBpbiByZWFsIGxpZmUgOi0pXG4gODczOlx0ICAgSXQgYWxsb3dzIHRvIGNvbnN0cnVjdCB2aXJ0dWFsIG11bHRpcHJvdG9jb2wgYnJvYWRjYXN0IFwmIzM0O0xBTlwmIzM0O1xuIDg3NDpcdCAgIG92ZXIgdGhlIEludGVybmV0LCBwcm92aWRlZCBtdWx0aWNhc3Qgcm91dGluZyBpcyB0dW5lZC5cbiA4NzU6XHRcbiA4NzY6XHRcbiA4Nzc6XHQgICBJIGhhdmUgbm8gaWRlYSB3YXMgdGhpcyBiaWN5Y2xlIGludmVudGVkIGJlZm9yZSBtZSxcbiA4Nzg6XHQgICBzbyB0aGF0IEkgaGFkIHRvIHNldCBBUlBIUkRfSVBHUkUgdG8gYSByYW5kb20gdmFsdWUuXG4gODc5Olx0ICAgSSBoYXZlIGFuIGltcHJlc3Npb24sIHRoYXQgQ2lzY28gY291bGQgbWFrZSBzb21ldGhpbmcgc2ltaWxhcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODgxMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE5ldGxpbmsgUGFyYW1ldGVyIFN0cnVjdHVyZXMgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhZ2Fpbi4gQmFzZWQgb24gdGhlIGlzc3VlIHJlcG9ydCwgSSBuZWVkIHRvIGZvY3VzIG9uIHBvdGVudGlhbCBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBJUEdSRSBhbmQgRVJTUEFOIG5ldGxpbmsgcGFyYW1ldGVycy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBhcm91bmQgbGluZXMgMTIyMCB0byAxMzIwLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBleGFtaW5lIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCBhbmQgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBkYXRhIGNvcnJ1cHRpb24sIGluY29ycmVjdCB0eXBlIGhhbmRsaW5nLCBvciBwb3NzaWJsZSBidWZmZXIgb3ZlcmZsb3dzIHdoZW4gdGhlc2Ugc3RydWN0dXJlcyBhcmUgYmVpbmcgcG9wdWxhdGVkIG9yIGFjY2Vzc2VkIHRocm91Z2ggdGhlIG5ldGxpbmsgaW50ZXJmYWNlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHdheSB0aGUgZGF0YSBpcyBiZWluZyB2YWxpZGF0ZWQgYW5kIHdoZXRoZXIgcHJvcGVyIGVycm9yIGNoZWNraW5nIGlzIGltcGxlbWVudGVkLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSByb290IG9mIHRoZSBwcm9ibGVtIGxpZXMuIEkmIzM5O2xsIGxpa2VseSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgbmV0bGluayBzb2NrZXQgYWxsIHRoZSB3YXkgdGhyb3VnaCB0byB3aGVyZSB0aGVzZSBwYXJhbWV0ZXJzIGFyZSB1c2VkIGluIHRoZSB0dW5uZWwgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjMwOlx0XHRcdHBhcm1zLVx1MDAzZWlwaC50dGwgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfVFRMXSk7XG4xMjMxOlx0XG4xMjMyOlx0XHRpZiAoZGF0YVtJRkxBX0dSRV9UT1NdKVxuMTIzMzpcdFx0XHRwYXJtcy1cdTAwM2VpcGgudG9zID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX1RPU10pO1xuMTIzNDpcdFxuMTIzNTpcdFx0aWYgKCFkYXRhW0lGTEFfR1JFX1BNVFVESVNDXSB8fCBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfUE1UVURJU0NdKSkge1xuMTIzNjpcdFx0XHRpZiAodC1cdTAwM2VpZ25vcmVfZGYpXG4xMjM3Olx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjM4Olx0XHRcdHBhcm1zLVx1MDAzZWlwaC5mcmFnX29mZiA9IGh0b25zKElQX0RGKTtcbjEyMzk6XHRcdH1cbjEyNDA6XHRcbjEyNDE6XHRcdGlmIChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pIHtcbjEyNDI6XHRcdFx0aWYgKG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKVxuMTI0MzpcdFx0XHQgIFx1MDAyNlx1MDAyNiAocGFybXMtXHUwMDNlaXBoLmZyYWdfb2ZmIFx1MDAyNiBodG9ucyhJUF9ERikpKVxuMTI0NDpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI0NTpcdFx0XHR0LVx1MDAzZWlnbm9yZV9kZiA9ICEhbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pO1xuMTI0NjpcdFx0fVxuMTI0NzpcdFxuMTI0ODpcdFx0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAZGV2IGFuZCBAdC4gKi9cbjEyNDk6XHRcdGlmIChkYXRhW0lGTEFfR1JFX0NPTExFQ1RfTUVUQURBVEFdKSB7XG4xMjUwOlx0XHRcdHQtXHUwMDNlY29sbGVjdF9tZCA9IHRydWU7XG4xMjUxOlx0XHRcdGlmIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSVBHUkUpXG4xMjUyOlx0XHRcdFx0ZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTk9ORTtcbjEyNTM6XHRcdH1cbjEyNTQ6XHRcbjEyNTU6XHRcdGlmIChkYXRhW0lGTEFfR1JFX0ZXTUFSS10pXG4xMjU2Olx0XHRcdCpmd21hcmsgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0ZXTUFSS10pO1xuMTI1NzpcdFxuMTI1ODpcdFx0cmV0dXJuIDA7XG4xMjU5Olx0fVxuMTI2MDpcdFxuMTI2MTpcdHN0YXRpYyBpbnQgZXJzcGFuX25ldGxpbmtfcGFybXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbjEyNjI6XHRcdFx0XHRcdHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbjEyNjM6XHRcdFx0XHRcdHN0cnVjdCBubGF0dHIgKnRiW10sXG4xMjY0Olx0XHRcdFx0XHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcGFybXMsXG4xMjY1Olx0XHRcdFx0XHRfX3UzMiAqZndtYXJrKVxuMTI2NjpcdHtcbjEyNjc6XHRcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuMTI2ODpcdFx0dTggZXJzcGFuX3ZlciA9IHQtXHUwMDNlZXJzcGFuX3ZlcjtcbjEyNjk6XHRcdHUzMiBpbmRleCA9IHQtXHUwMDNlaW5kZXg7XG4xMjcwOlx0XHR1MTYgaHdpZCA9IHQtXHUwMDNlaHdpZDtcbjEyNzE6XHRcdHU4IGRpciA9IHQtXHUwMDNlZGlyO1xuMTI3MjpcdFx0aW50IGVycjtcbjEyNzM6XHRcbjEyNzQ6XHRcdGlmICghZGF0YSlcbjEyNzU6XHRcdFx0cmV0dXJuIGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4xMjc2Olx0XG4xMjc3Olx0XHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSkge1xuMTI3ODpcdFx0XHRlcnNwYW5fdmVyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKTtcbjEyNzk6XHRcbjEyODA6XHRcdFx0aWYgKGVyc3Bhbl92ZXIgXHUwMDNlIDIpXG4xMjgxOlx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMjgyOlx0XHR9XG4xMjgzOlx0XG4xMjg0Olx0XHRpZiAoZXJzcGFuX3ZlciA9PSAxKSB7XG4xMjg1Olx0XHRcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pIHtcbjEyODY6XHRcdFx0XHRpbmRleCA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0lOREVYXSk7XG4xMjg3Olx0XHRcdFx0aWYgKGluZGV4IFx1MDAyNiB+SU5ERVhfTUFTSylcbjEyODg6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTI4OTpcdFx0XHR9XG4xMjkwOlx0XHR9IGVsc2UgaWYgKGVyc3Bhbl92ZXIgPT0gMikge1xuMTI5MTpcdFx0XHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSkge1xuMTI5MjpcdFx0XHRcdGRpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7XG4xMjkzOlx0XHRcdFx0aWYgKGRpciBcdTAwMjYgfihESVJfTUFTSyBcdTAwM2VcdTAwM2UgRElSX09GRlNFVCkpXG4xMjk0Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEyOTU6XHRcdFx0fVxuMTI5NjpcdFx0XHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pIHtcbjEyOTc6XHRcdFx0XHRod2lkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pO1xuMTI5ODpcdFx0XHRcdGlmIChod2lkIFx1MDAyNiB+KEhXSURfTUFTSyBcdTAwM2VcdTAwM2UgSFdJRF9PRkZTRVQpKVxuMTI5OTpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xMzAwOlx0XHRcdH1cbjEzMDE6XHRcdH1cbjEzMDI6XHRcbjEzMDM6XHRcdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4xMzA0Olx0XHRpZiAoZXJyKVxuMTMwNTpcdFx0XHRyZXR1cm4gZXJyO1xuMTMwNjpcdFxuMTMwNzpcdFx0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAdC4gKi9cbjEzMDg6XHRcdHQtXHUwMDNlZXJzcGFuX3ZlciA9IGVyc3Bhbl92ZXI7XG4xMzA5Olx0XHR0LVx1MDAzZWluZGV4ID0gaW5kZXg7XG4xMzEwOlx0XHR0LVx1MDAzZWh3aWQgPSBod2lkO1xuMTMxMTpcdFx0dC1cdTAwM2VkaXIgPSBkaXI7XG4xMzEyOlx0XG4xMzEzOlx0XHRyZXR1cm4gMDtcbjEzMTQ6XHR9XG4xMzE1Olx0XG4xMzE2Olx0LyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBFTkNBUCBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50IGluIHRoZSBubCBtc2cgKi9cbjEzMTc6XHRzdGF0aWMgYm9vbCBpcGdyZV9uZXRsaW5rX2VuY2FwX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbjEzMTg6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmlwZW5jYXApXG4xMzE5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGlwX2dyZS5jOiBlcnNwYW5fY2hhbmdlbGluayBhbmQgaXBncmVfY2hhbmdlbGluayBGdW5jdGlvbmFsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXJvdW5kIHRob3NlIGBlcnNwYW5fY2hhbmdlbGlua2AgYW5kIGBpcGdyZV9jaGFuZ2VsaW5rYCBmdW5jdGlvbnMgaW4gYGlwX2dyZS5jYC4gTGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgYmxvY2ssIHJvdWdobHkgZnJvbSBsaW5lIDE0NTAgdG8gMTU3MC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgaGFuZGxpbmcgbGluayBjaGFuZ2Vz4oCUcHJvYmFibHkgZGVhbGluZyB3aXRoIHVwZGF0ZXMgdG8gdGhlIEdSRS9FUlNQQU4gdHVubmVsIGNvbmZpZ3VyYXRpb25zIG9yIHN0YXRlIHRyYW5zaXRpb25zIGFmdGVyIGFuIGludGVyZmFjZSBnb2VzIHVwIG9yIGRvd24uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgc3lzdGVtIGFkYXB0cyB0byBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIHBoeXNpY2FsIGxpbmssIHBhcnRpY3VsYXJseSBob3cgaXQgYWZmZWN0cyB0aGUgZXN0YWJsaXNoZWQgdHVubmVscy4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQsIHRoZSBjYWxscyB0byBsb3dlci1sZXZlbCBuZXR3b3JraW5nIGZ1bmN0aW9ucywgYW5kIGFueSBlcnJvciBoYW5kbGluZyBvciByZXRyeSBtZWNoYW5pc21zIGltcGxlbWVudGVkLiBJJiMzOTttIGFudGljaXBhdGluZyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcm91dGluZyB0YWJsZSBhcyB3ZWxsLCB0byBzZWUgaG93IHRoZXNlIGxpbmsgY2hhbmdlcyBhZmZlY3QgZm9yd2FyZGluZyBiZWhhdmlvci4gSXQmIzM5O3MgYWxzbyBwb3NzaWJsZSB0aGVyZSYjMzk7cyBzb21lIGludGVyYWN0aW9uIHdpdGggbmV0d29yayBuYW1lc3BhY2VzLCBpZiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbnRhaW5lcml6ZWQgZW52aXJvbm1lbnRzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCYjMzk7cyBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0OTA6XHRcdGVyciA9IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIFx1MDAyNnAsIFx1MDAyNmZ3bWFyayk7XG4xNDkxOlx0XHRpZiAoZXJyKVxuMTQ5MjpcdFx0XHRyZXR1cm4gZXJyO1xuMTQ5MzpcdFx0cmV0dXJuIGlwX3R1bm5lbF9uZXdsaW5rKHBhcmFtcy1cdTAwM2VsaW5rX25ldCA/IDogZGV2X25ldChkZXYpLCBkZXYsIHRiLCBcdTAwMjZwLFxuMTQ5NDpcdFx0XHRcdFx0IGZ3bWFyayk7XG4xNDk1Olx0fVxuMTQ5NjpcdFxuMTQ5NzpcdHN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuMTQ5ODpcdFx0XHRcdCAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXG4xNDk5Olx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbjE1MDA6XHR7XG4xNTAxOlx0XHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbjE1MDI6XHRcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XG4xNTAzOlx0XHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbjE1MDQ6XHRcdGludCBvbGRfaGxlbiA9IHQtXHUwMDNlaGxlbjtcbjE1MDU6XHRcdGludCBlcnI7XG4xNTA2Olx0XG4xNTA3Olx0XHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG4xNTA4Olx0XHRcdHJldHVybiAtRVBFUk07XG4xNTA5Olx0XG4xNTEwOlx0XHRlcnIgPSBpcGdyZV9uZXdsaW5rX2VuY2FwX3NldHVwKGRldiwgZGF0YSk7XG4xNTExOlx0XHRpZiAoZXJyKVxuMTUxMjpcdFx0XHRyZXR1cm4gZXJyO1xuMTUxMzpcdFxuMTUxNDpcdFx0ZXJyID0gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBcdTAwMjZwLCBcdTAwMjZmd21hcmspO1xuMTUxNTpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjE1MTY6XHRcdFx0Z290byBsaW5rX3VwZGF0ZTtcbjE1MTc6XHRcbjE1MTg6XHRcdGVyciA9IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKGRldiwgdGIsIFx1MDAyNnAsIGZ3bWFyayk7XG4xNTE5Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTUyMDpcdFx0XHRnb3RvIGxpbmtfdXBkYXRlO1xuMTUyMTpcdFxuMTUyMjpcdFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5pX2ZsYWdzLCBwLmlfZmxhZ3MpO1xuMTUyMzpcdFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLm9fZmxhZ3MpO1xuMTUyNDpcdFxuMTUyNTpcdGxpbmtfdXBkYXRlOlxuMTUyNjpcdFx0LyogaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cCgpIGhhcyBwdWJsaXNoZWQgYSBuZXcgZW5jYXBzdWxhdGlvbiBldmVuXG4xNTI3Olx0XHQgKiBpZiB0aGUgcmVzdCBvZiB0aGUgcmVxdWVzdCBmYWlsZWQsIHNvIHRoZSBsZW5ndGhzIG11c3QgYmUgcmVmcmVzaGVkXG4xNTI4Olx0XHQgKiBvbiB0aGUgZXJyb3IgcGF0aHMgYXMgd2VsbC4gVGhpcyBoYXMgdG8gY29tZSBsYXN0LCBiZWNhdXNlXG4xNTI5Olx0XHQgKiBpcGdyZV9saW5rX3VwZGF0ZSgpIG5lZWRzIHRoZSBmbGFncyBjb3BpZWQgYWJvdmUuXG4xNTMwOlx0XHQgKi9cbjE1MzE6XHRcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSwgb2xkX2hsZW4pO1xuMTUzMjpcdFxuMTUzMzpcdFx0cmV0dXJuIGVycjtcbjE1MzQ6XHR9XG4xNTM1Olx0XG4xNTM2Olx0c3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuMTUzNzpcdFx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuMTUzODpcdFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuMTUzOTpcdHtcbjE1NDA6XHRcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuMTU0MTpcdFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcbjE1NDI6XHRcdF9fdTMyIGZ3bWFyayA9IHQtXHUwMDNlZndtYXJrO1xuMTU0MzpcdFx0aW50IG9sZF9obGVuID0gdC1cdTAwM2VobGVuO1xuMTU0NDpcdFx0aW50IGVycjtcbjE1NDU6XHRcbjE1NDY6XHRcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbjE1NDc6XHRcdFx0cmV0dXJuIC1FUEVSTTtcbjE1NDg6XHRcbjE1NDk6XHRcdGVyciA9IGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoZGV2LCBkYXRhKTtcbjE1NTA6XHRcdGlmIChlcnIpXG4xNTUxOlx0XHRcdHJldHVybiBlcnI7XG4xNTUyOlx0XG4xNTUzOlx0XHRlcnIgPSBlcnNwYW5fbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBcdTAwMjZwLCBcdTAwMjZmd21hcmspO1xuMTU1NDpcdFxuMTU1NTpcdFx0LyogaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cCgpIGhhcyBwdWJsaXNoZWQgYSBuZXcgZW5jYXBzdWxhdGlvbiwgYW5kXG4xNTU2Olx0XHQgKiBlcnNwYW5fbmV0bGlua19wYXJtcygpIGEgbmV3IEVSU1BBTiB2ZXJzaW9uLCBib3RoIG9mIHdoaWNoIGNoYW5nZVxuMTU1NzpcdFx0ICogdGhlIGhlYWRlciBsZW5ndGguIFJlZnJlc2ggdGhlIGxlbmd0aHMgYmVmb3JlIGxvb2tpbmcgYXQgQGVycjpcbjE1NTg6XHRcdCAqIGVyc3Bhbl94bWl0KCkgc2l6ZXMgaXRzIHB1c2ggZnJvbSB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciwgYW5kIGJvdGggdGhpc1xuMTU1OTpcdFx0ICogZXJyb3IgcGF0aCBhbmQgaXBfdHVubmVsX2NoYW5nZWxpbmsoKSBiZWxvdyBsZWF2ZSB0aGUgbmV3XG4xNTYwOlx0XHQgKiBlbmNhcHN1bGF0aW9uIGJlaGluZC5cbjE1NjE6XHRcdCAqL1xuMTU2MjpcdFx0ZXJzcGFuX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSwgb2xkX2hsZW4pO1xuMTU2MzpcdFxuMTU2NDpcdFx0aWYgKGVyciBcdTAwM2MgMClcbjE1NjU6XHRcdFx0cmV0dXJuIGVycjtcbjE1NjY6XHRcbjE1Njc6XHRcdGVyciA9IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKGRldiwgdGIsIFx1MDAyNnAsIGZ3bWFyayk7XG4xNTY4Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMTU2OTpcdFx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjIyNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgVHVubmVsaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgYWx3YXlzLCB3aGF0JiMzOTtzIHRoZSBjb3JlIGlzc3VlIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZz8gSXQgc2VlbXMgbGlrZSByZXBlYXRlZCBjYWxscyB0byBgaXBncmVfY2hhbmdlbGlua2AgYW5kIGBlcnNwYW5fY2hhbmdlbGlua2AsIG9yIGNoYW5nZXMgaW4gZW5jYXBzdWxhdGlvbiwgd2VyZSBsZWFkaW5nIHRvIGluY29uc2lzdGVuY2llcyBpbiBgdHVubmVsLSZndDtobGVuYCwgYW5kIHRoZSBkZXZpY2UmIzM5O3MgaGVhZHJvb20gYW5kIE1UVSB3ZXJlIGJlY29taW5nIG1pc2FsaWduZWQuIFRoaXMgcmVzdWx0ZWQgaW4gbGVuZ3RoIGRyaWZ0LCBhbmQgdGhlIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgZnVuY3Rpb24gd2FzIG11dGF0aW5nIHR1bm5lbCBwYXJhbWV0ZXJzICpiZWZvcmUqIHRoZXkgd2VyZSB2YWxpZGF0ZWQsIHdoaWNoIHdvdWxkIGxlYXZlIHRoZSB0dW5uZWwgc3RydWN0dXJlIGluY29uc2lzdGVudCBpZiB2YWxpZGF0aW9uIGZhaWxlZC4gSW1wb3J0YW50bHksIGBlcnNwYW5fbGlua191cGRhdGVgIHdhc24mIzM5O3QgZXZlbiBwcmVzZW50IHByZXZpb3VzbHksIHdoaWNoIHNlZW1zIGxpa2UgYSBzaWduaWZpY2FudCBvdmVyc2lnaHQuIFRoZSBjb21tZW50IGluIGBpcGdyZV9saW5rX3VwZGF0ZWAgcmVpbmZvcmNlcyB0aGF0IGB0dW5uZWwtJmd0O2hsZW5gIGlzIGRlcGVuZGVudCBvbiBmbGFncyB0aGF0IGNhbiBjaGFuZ2UsIHNvIHdlICpuZWVkKiB0byByZWNvbXB1dGUgaXQgYW5kIGRlcml2ZSBkZXZpY2UgbGVuZ3RocyBmcm9tIHRoZXJlLiBXZSBhcmVuJiMzOTt0IGp1c3QgYWRqdXN0aW5nIGJ5IGEgZGVsdGEsIHNvIHRyYWNraW5nIGFuIGBvbGRfaGxlbmAgdmFsdWUgaXNuJiMzOTt0IHN1ZmZpY2llbnQuCgpOb3csIGFzIGFuIGV4cGVydCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgc2FmZXR5LiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUsIHNvIEkgbmVlZCB0byBjaGVjayBhZ2FpbnN0IHRoZSBmb3VyIGNyaXRlcmlhOgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlOioqIEFyZSB3ZSBpbnRyb2R1Y2luZyBuZXcgb3IgbW9kaWZ5aW5nIHN0cnVjdHVyZXMgdGhhdCBhcmUgc2VudCB0byB1c2VyIHNwYWNlPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHBvdGVudGlhbCBhdmVudWVzIHdoZXJlIGtlcm5lbCBkYXRhIGxlYWtzIG91dCwgYW5kIHRoaXMgaXMgd2hlcmUgSSBzdGFydCB0byBkcmlsbCBkb3duLgogICAgKiAgIE5vIGJyYW5kLW5ldyBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLiBUaGF0JiMzOTtzIGEgZ29vZCBmaXJzdCBjaGVjay4KICAgICogICBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IHJldmlldyB0aGUgZXhpc3RpbmcgbmV0bGluayByZXBseSBwYXRoczogYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCwgYW5kIGBncmVfdGFwX2ZpbGxfaW5mb2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgYW55IGZpZWxkcyBpbiBgbmV0ZGV2YCBvciBgaXBfdHVubmVsYCBhcmUgcmVhZCBhbmQgc2VudCB0byB1c2Vyc3BhY2UsIG9yIHRoYXQgYXJlIGJlaW5nIG1vZGlmaWVkIGJ5IG91ciBjaGFuZ2VzLiBBcmUgd2Ugd3JpdGluZyB2YWx1ZXMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgdW5pbml0aWFsaXplZCwgb3IgYXJlIHdlIGNoYW5naW5nIGxvZ2ljIGFuZCBwb3RlbnRpYWxseSBsZWFraW5nIGV4aXN0aW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PwoKSSBuZWVkIHRvIGNvbmZpcm0gYWxsIHRoZSBwYXRocyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gbG9vayB3aXRoaW4gdGhvc2UgbmV0bGluayBmaWxsIGZ1bmN0aW9ucyB0byBzZWUgd2hlcmUgdGhlIGRhdGEgZnJvbSB0dW5uZWwgc3RydWN0dXJlcyBnZXRzIGNvcGllZCBpbnRvIHRoZSBza2IgYXR0cmlidXRlcy4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgZWFjaCBmaWVsZCB0aG9yb3VnaGx5LiBUaGlzIGlzIHdoZXJlIHRoZSBkZXZpbCBpcyBpbiB0aGUgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXJzcGFuX2ZpbGxfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jPTE2MjU9c3RhdGljIGludCBpcGdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjc1LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTY3NjpzdGF0aWMgaW50IGVyc3Bhbl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY0L2lwX2dyZS5jLTE2Nzcte1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE3Njg9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGVyc3Bhbl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE3NzgtXHQuZ2V0X3NpemVcdD0gaXBncmVfZ2V0X3NpemUsXG5uZXQvaXB2NC9pcF9ncmUuYzoxNzc5Olx0LmZpbGxfaW5mb1x0PSBlcnNwYW5fZmlsbF9pbmZvLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTc4MC1cdC5nZXRfbGlua19uZXRcdD0gaXBfdHVubmVsX2dldF9saW5rX25ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2NjgKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlIHNuaXBwZXQ6CgoqKkRpdmluZyBpbnRvIGBlcnNwYW5fZmlsbF9pbmZvYCoqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgZXJzcGFuX2ZpbGxfaW5mb2AuIFNpbmNlIEkmIzM5O20gd29ya2luZyBvbiB0aGlzLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc3BlY2lmaWMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGRhdGEgaXQmIzM5O3MgZGVzaWduZWQgdG8gcG9wdWxhdGUgYW5kIHRoZSBvdmVyYWxsIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJdCBsaWtlbHkgZGVhbHMgd2l0aCBzb21lIGZvcm0gb2YgRVJTUEFOIChFbmNhcHN1bGF0ZWQgUmVtb3RlIFNQQU4pIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBleGFtaW5lIHRoZSBjb2RlIGNsb3NlbHkgdG8gZ3Jhc3AgaXRzIGlucHV0cywgb3V0cHV0cywgYW5kIGFueSBpbnRlcm5hbCBsb2dpYy4gS25vd2luZyBob3cgdGhpcyBmdW5jdGlvbiBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoZSBFUlNQQU4gaW1wbGVtZW50YXRpb24gaXMgY3JpdGljYWwgZm9yIG1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjc1Olx0XG4xNjc2Olx0c3RhdGljIGludCBlcnNwYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xNjc3Olx0e1xuMTY3ODpcdFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4xNjc5Olx0XG4xNjgwOlx0XHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyIFx1MDAzYz0gMikge1xuMTY4MTpcdFx0XHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR1JFX0VSU1BBTl9WRVIsIHQtXHUwMDNlZXJzcGFuX3ZlcikpXG4xNjgyOlx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNjgzOlx0XG4xNjg0Olx0XHRcdGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgPT0gMSkge1xuMTY4NTpcdFx0XHRcdGlmIChubGFfcHV0X3UzMihza2IsIElGTEFfR1JFX0VSU1BBTl9JTkRFWCwgdC1cdTAwM2VpbmRleCkpXG4xNjg2Olx0XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjE2ODc6XHRcdFx0fSBlbHNlIGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgPT0gMikge1xuMTY4ODpcdFx0XHRcdGlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HUkVfRVJTUEFOX0RJUiwgdC1cdTAwM2VkaXIpKVxuMTY4OTpcdFx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4xNjkwOlx0XHRcdFx0aWYgKG5sYV9wdXRfdTE2KHNrYiwgSUZMQV9HUkVfRVJTUEFOX0hXSUQsIHQtXHUwMDNlaHdpZCkpXG4xNjkxOlx0XHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbjE2OTI6XHRcdFx0fVxuMTY5MzpcdFx0fVxuMTY5NDpcdFxuMTY5NTpcdFx0cmV0dXJuIGlwZ3JlX2ZpbGxfaW5mbyhza2IsIGRldik7XG4xNjk2Olx0XG4xNjk3Olx0bmxhX3B1dF9mYWlsdXJlOlxuMTY5ODpcdFx0cmV0dXJuIC1FTVNHU0laRTtcbjE2OTk6XHR9XG4xNzAwOlx0XG4xNzAxOlx0c3RhdGljIHZvaWQgZXJzcGFuX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4xNzAyOlx0e1xuMTcwMzpcdFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4xNzA0Olx0XG4xNzA1Olx0XHRldGhlcl9zZXR1cChkZXYpO1xuMTcwNjpcdFx0ZGV2LVx1MDAzZW1heF9tdHUgPSAwO1xuMTcwNzpcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZlcnNwYW5fbmV0ZGV2X29wcztcbjE3MDg6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIFx1MDAyNj0gfklGRl9UWF9TS0JfU0hBUklORztcbjE3MDk6XHRcdGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ5MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBWYXJpYWJsZSBJc3N1ZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyB3aXRoaW4gdGhpcyBuZXR3b3JrIGRldmljZSBjb2RlLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byB0aGUgRVJTUEFOIGFuZCBHUkUgdHVubmVscy4KCkZpcnN0LCB3aXRoaW4gdGhlIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgZnVuY3Rpb24sIEkgc2VlIHRoYXQgYGVyc3Bhbl92ZXJgLCBgaW5kZXhgLCBgaHdpZGAsIGFuZCBgZGlyYCBhcmUgbG9jYWwgdmFyaWFibGVzLiBUaGV5IGFyZSBkaXJlY3RseSBpbml0aWFsaXplZCBmcm9tIGZpZWxkcyBvZiB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdCBgdGAuIEFuZCwgY3J1Y2lhbGx5LCB0aGlzIHN0cnVjdCBgdGAgaXMgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlJiMzOTtzIG5vIHdheSB0aGVzZSB2YXJpYWJsZXMgYXJlIHVuaW5pdGlhbGl6ZWQgYXQgdGhlIHBvaW50IG9mIHRoZWlyIGRlY2xhcmF0aW9uLiBJdCYjMzk7cyBhIHRleHRib29rIGluaXRpYWxpemF0aW9uIHBhdHRlcm4uCgpOb3csIGZvciBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdmFyaWFibGVzLCBhcmUgd2UgbG9va2luZyBhdCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gSSBzZWUgYG9sZF9obGVuYCBiZWluZyB1c2VkIGluIGBpcGdyZV9saW5rX3VwZGF0ZWAsIGFuZCB0aGF0IGl0IG9yaWdpbmF0ZXMgZnJvbSBgaXBncmVfY2hhbmdlbGlua2Agb3IgYGlwZ3JlX3R1bm5lbF9jdGxgLiBCb3RoIGBpcGdyZV9jaGFuZ2VsaW5rYCBhbmQgYGVyc3Bhbl9jaGFuZ2VsaW5rYCBpbml0aWFsaXplIHRoZSBgb2xkX2hsZW5gIHZhcmlhYmxlIGZyb20gYHQtJmd0O2hsZW5gLCB3aGljaCBtZWFucyB3ZSBhcmUgc2FmZS4KClJlZ2FyZGluZyBhbGxvY2F0aW9ucyBhbmQgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWRkZWQuIFRoYXQmIzM5O3MgZ29vZDsgaXQgc2ltcGxpZmllcyB0aGluZ3MuCgpCdXQgdGhpcyBicmluZ3MgdXMgdG8gdGhlIHBvdGVudGlhbGx5IHRyaWNreSBwYXJ0OiBib3VuZHMgY2hlY2tzIGFuZCBhY2Nlc3MgdG8gZXhpc3RpbmcgYnVmZmVycy4gSGVyZSwgSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBmb3IgdnVsbmVyYWJpbGl0aWVzIHdoZXJlIGNoYW5nZXMgdG8gTVRVLCBoZWFkZXIgbGVuZ3RoIChgaGxlbmApLCBldGMuIGNvdWxkIGxlYWQgdG8gb3V0LW9mLWJvdW5kcyByZWFkcyBkdWUgdG8gaW1wcm9wZXIgY2FsY3VsYXRpb25zIG9yIGNoZWNrcy4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgc3VyZS4gVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIQoKSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBgdHVubmVsLSZndDtobGVuYCwgYHR1bm5lbC0mZ3Q7dHVuX2hsZW5gLCBgZGV2LSZndDtuZWVkZWRfaGVhZHJvb21gLCBgZGV2LSZndDtoYXJkX2hlYWRlcl9sZW5gLCBhbmQgYGRldi0mZ3Q7bXR1YCBhcmUgYWxsIHVzZWQgdG9nZXRoZXIsIGVzcGVjaWFsbHkgZHVyaW5nIHRyYW5zbWlzc2lvbiBvciBwcm9jZXNzaW5nLiBUaGlzIGlzIGEgY3JpdGljYWwgYXJlYTsgYSBzdWJ0bGUgb2ZmLWJ5LW9uZSBlcnJvciBvciBpbmNvcnJlY3QgY2FsY3VsYXRpb24gaGVyZSBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBvciBldmVuIGdhcmJhZ2UgZGF0YS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgb2YgYHR1bm5lbC0mZ3Q7aGxlbmAgYW5kIGB0dW5uZWwtJmd0O3R1bl9obGVuYCBkdXJpbmcgdGhlIHRyYW5zbWlzc2lvbiBwcm9jZXNzIGFuZCBzZWUgaWYgYW55IGFzc3VtcHRpb25zIG9yIGNhbGN1bGF0aW9ucyBhcmUgcmlza3kuIFRoaXMgd2FycmFudHMgYSBtb3JlIGRldGFpbGVkIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R1bl9obGVufGhsZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz00NzY9c3RhdGljIHZvaWQgX19ncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTQ4Mi1cdC8qIFB1c2ggR1JFIGhlYWRlci4gKi9cbm5ldC9pcHY0L2lwX2dyZS5jOjQ4MzpcdGdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWwtXHUwMDNldHVuX2hsZW4sXG5uZXQvaXB2NC9pcF9ncmUuYy00ODQtXHRcdFx0IGZsYWdzLCBwcm90bywgdHVubmVsLVx1MDAzZXBhcm1zLm9fa2V5LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTQ5Nj1zdGF0aWMgdm9pZCBncmVfZmJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTUwMi1cdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfa2V5ICprZXk7XG5uZXQvaXB2NC9pcF9ncmUuYzo1MDM6XHRpbnQgdHVubmVsX2hsZW47XG5uZXQvaXB2NC9pcF9ncmUuYy01MDQtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNTEwLVx0a2V5ID0gXHUwMDI2dHVuX2luZm8tXHUwMDNla2V5O1xubmV0L2lwdjQvaXBfZ3JlLmM6NTExOlx0dHVubmVsX2hsZW4gPSBncmVfY2FsY19obGVuKGtleS1cdTAwM2V0dW5fZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtNTEyLVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTUyNS1cbm5ldC9pcHY0L2lwX2dyZS5jOjUyNjpcdGdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWxfaGxlbiwgZmxhZ3MsIHByb3RvLFxubmV0L2lwdjQvaXBfZ3JlLmMtNTI3LVx0XHRcdCB0dW5uZWxfaWRfdG9fa2V5MzIodHVuX2luZm8tXHUwMDNla2V5LnR1bl9pZCksXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNTMwLVxubmV0L2lwdjQvaXBfZ3JlLmM6NTMxOlx0aXBfbWRfdHVubmVsX3htaXQoc2tiLCBkZXYsIElQUFJPVE9fR1JFLCB0dW5uZWxfaGxlbik7XG5uZXQvaXB2NC9pcF9ncmUuYy01MzItXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9NTQwPXN0YXRpYyB2b2lkIGVyc3Bhbl9mYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNTQ4LVx0X19iZTE2IHByb3RvO1xubmV0L2lwdjQvaXBfZ3JlLmM6NTQ5Olx0aW50IHR1bm5lbF9obGVuO1xubmV0L2lwdjQvaXBfZ3JlLmMtNTUwLVx0aW50IHZlcnNpb247XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNTY2LVx0dmVyc2lvbiA9IG1kLVx1MDAzZXZlcnNpb247XG5uZXQvaXB2NC9pcF9ncmUuYzo1Njc6XHR0dW5uZWxfaGxlbiA9IDggJiM0MzsgZXJzcGFuX2hkcl9sZW4odmVyc2lvbik7XG5uZXQvaXB2NC9pcF9ncmUuYy01NjgtXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNjE1LVxubmV0L2lwdjQvaXBfZ3JlLmM6NjE2Olx0aXBfbWRfdHVubmVsX3htaXQoc2tiLCBkZXYsIElQUFJPVE9fR1JFLCB0dW5uZWxfaGxlbik7XG5uZXQvaXB2NC9pcF9ncmUuYy02MTctXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9NjQ5PXN0YXRpYyBuZXRkZXZfdHhfdCBpcGdyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNjY0LVx0aWYgKGRldi1cdTAwM2VoZWFkZXJfb3BzKSB7XG5uZXQvaXB2NC9pcF9ncmUuYzo2NjU6XHRcdGludCBwdWxsX2xlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xubmV0L2lwdjQvaXBfZ3JlLmMtNjY2LVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTc2MT1zdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNzkxLVxubmV0L2lwdjQvaXBfZ3JlLmM6NzkyOi8qIHR1bm5lbC1cdTAwM2VobGVuIGRlcGVuZHMgb24gdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MgYW5kIG9uIHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuLFxubmV0L2lwdjQvaXBfZ3JlLmMtNzkzLSAqIGJvdGggb2Ygd2hpY2ggaXBncmVfY2hhbmdlbGluaygpIGNhbiBjaGFuZ2UuIFJlY29tcHV0ZSBpdCB0aGUgd2F5XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNzk2LSAqXG5uZXQvaXB2NC9pcF9ncmUuYzo3OTc6ICogQG9sZF9obGVuIGlzIG9ubHkgdXNlZCB0byB0ZWxsIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWUgc3RhbGUsIG5ldmVyIGFzIGFcbm5ldC9pcHY0L2lwX2dyZS5jLTc5OC0gKiBkaWZmZXJlbmNlIHRvIGFwcGx5LCBzbyBpdCBjYW4gbm90IG1ha2UgdGhlIGxlbmd0aHMgZHJpZnQuIEl0IG11c3QgYmVcbm5ldC9pcHY0L2lwX2dyZS5jLTc5OS0gKiBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2ggYWxyZWFkeSBwdWJsaXNoZXMgdGhlIG5ld1xubmV0L2lwdjQvaXBfZ3JlLmM6ODAwOiAqIHR1bm5lbC1cdTAwM2VobGVuIGZvciB1cy5cbm5ldC9pcHY0L2lwX2dyZS5jLTgwMS0gKi9cbm5ldC9pcHY0L2lwX2dyZS5jPTgwMj1zdGF0aWMgdm9pZCBpcGdyZV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXG5uZXQvaXB2NC9pcF9ncmUuYzo4MDM6XHRcdFx0ICAgICAgaW50IG9sZF9obGVuKVxubmV0L2lwdjQvaXBfZ3JlLmMtODA0LXtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy04MDYtXG5uZXQvaXB2NC9pcF9ncmUuYzo4MDc6XHR0dW5uZWwtXHUwMDNldHVuX2hsZW4gPSBncmVfY2FsY19obGVuKHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjgwODpcdHR1bm5lbC1cdTAwM2VobGVuID0gdHVubmVsLVx1MDAzZXR1bl9obGVuICYjNDM7IHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuO1xubmV0L2lwdjQvaXBfZ3JlLmMtODA5LVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTgxMi1cdCAqL1xubmV0L2lwdjQvaXBfZ3JlLmM6ODEzOlx0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTgxNC1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz04MjY9c3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtODYwLVx0XHRpZiAoc3RyY21wKGRldi1cdTAwM2VydG5sX2xpbmtfb3BzLVx1MDAzZWtpbmQsIFwmIzM0O2Vyc3BhblwmIzM0OykpXG5uZXQvaXB2NC9pcF9ncmUuYzo4NjE6XHRcdFx0aXBncmVfbGlua191cGRhdGUoZGV2LCB0cnVlLCB0LVx1MDAzZWhsZW4pO1xubmV0L2lwdjQvaXBfZ3JlLmMtODYyLVx0fVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTg5OT1zdGF0aWMgaW50IGlwZ3JlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTkwNy1cbm5ldC9pcHY0L2lwX2dyZS5jOjkwODpcdG5lZWRlZCA9IHQtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2YoKmlwaCk7XG5uZXQvaXB2NC9pcF9ncmUuYy05MDktXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXHUwMDNjIG5lZWRlZCBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy05MjYtXHRpZiAoaXBoLVx1MDAzZWRhZGRyKVxubmV0L2lwdjQvaXBfZ3JlLmM6OTI3Olx0XHRyZXR1cm4gdC1cdTAwM2VobGVuICYjNDM7IHNpemVvZigqaXBoKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTkyOC1cbm5ldC9pcHY0L2lwX2dyZS5jOjkyOTpcdHJldHVybiAtKHQtXHUwMDNlaGxlbiAmIzQzOyBzaXplb2YoKmlwaCkpO1xubmV0L2lwdjQvaXBfZ3JlLmMtOTMwLX1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDE2PXN0YXRpYyB2b2lkIF9fZ3JlX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTAyMC1cdHR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG5uZXQvaXB2NC9pcF9ncmUuYzoxMDIxOlx0dHVubmVsLVx1MDAzZXR1bl9obGVuID0gZ3JlX2NhbGNfaGxlbih0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYy0xMDIyLVx0dHVubmVsLVx1MDAzZXBhcm1zLmlwaC5wcm90b2NvbCA9IElQUFJPVE9fR1JFO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTAyMy1cbm5ldC9pcHY0L2lwX2dyZS5jOjEwMjQ6XHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2V0dW5faGxlbiAmIzQzOyB0dW5uZWwtXHUwMDNlZW5jYXBfaGxlbjtcbm5ldC9pcHY0L2lwX2dyZS5jOjEwMjU6XHRkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gdHVubmVsLVx1MDAzZWhsZW4gJiM0Mzsgc2l6ZW9mKHR1bm5lbC1cdTAwM2VwYXJtcy5pcGgpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTAyNi1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDQ1PXN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDY1LVx0XHRcdGRldi1cdTAwM2VoZWFkZXJfb3BzID0gXHUwMDI2aXBncmVfaGVhZGVyX29wcztcbm5ldC9pcHY0L2lwX2dyZS5jOjEwNjY6XHRcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IHNpemVvZigqaXBoKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNjctXHRcdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IDA7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTA3MS1cdFx0ZGV2LVx1MDAzZWhlYWRlcl9vcHMgPSBcdTAwMjZpcGdyZV9oZWFkZXJfb3BzO1xubmV0L2lwdjQvaXBfZ3JlLmM6MTA3MjpcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiA9IHR1bm5lbC1cdTAwM2VobGVuICYjNDM7IHNpemVvZigqaXBoKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNzMtXHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPSAwO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEzNTk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBncmVfdGFwX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3MC1cbm5ldC9pcHY0L2lwX2dyZS5jOjEzNzE6c3RhdGljIHZvaWQgZXJzcGFuX3NldF9obGVuKHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbClcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzIte1xubmV0L2lwdjQvaXBfZ3JlLmMtMTM3My1cdC8qIFZlcnNpb24gMCB1c2VzIGEgNC1ieXRlIEdSRSBoZWFkZXIsIG90aGVyIHZlcnNpb25zIHVzZSA4IGJ5dGVzLiAqL1xubmV0L2lwdjQvaXBfZ3JlLmM6MTM3NDpcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDAgPyA0IDogODtcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzUtXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzc2Olx0dHVubmVsLVx1MDAzZWhsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gJiM0MzsgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gJiM0Mztcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzctXHRcdCAgICAgICBlcnNwYW5faGRyX2xlbih0dW5uZWwtXHUwMDNlZXJzcGFuX3Zlcik7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3OS1cbm5ldC9pcHY0L2lwX2dyZS5jOjEzODA6LyogQm90aCB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciBhbmQgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbVxubmV0L2lwdjQvaXBfZ3JlLmM6MTM4MTogKiBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgYm90aCBmZWVkIHR1bm5lbC1cdTAwM2VobGVuLiBSZWNvbXB1dGUgaXQsIHRoZW4gbGV0XG5uZXQvaXB2NC9pcF9ncmUuYy0xMzgyLSAqIGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlIGxlbmd0aHMgZnJvbSBpdC5cbm5ldC9pcHY0L2lwX2dyZS5jLTEzODMtICpcbm5ldC9pcHY0L2lwX2dyZS5jOjEzODQ6ICogQXMgaW4gaXBncmVfbGlua191cGRhdGUoKSwgQG9sZF9obGVuIG9ubHkgdGVsbHMgd2hldGhlciB0aGUgTVRVIGJlY2FtZVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM4NS0gKiBzdGFsZSBhbmQgbXVzdCBiZSBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2hcbm5ldC9pcHY0L2lwX2dyZS5jOjEzODY6ICogcmVjb21wdXRlcyB0dW5uZWwtXHUwMDNlaGxlbiB3aXRob3V0IHRoZSBFUlNQQU4gcGFydC5cbm5ldC9pcHY0L2lwX2dyZS5jLTEzODctICovXG5uZXQvaXB2NC9pcF9ncmUuYz0xMzg4PXN0YXRpYyB2b2lkIGVyc3Bhbl9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzg5Olx0XHRcdCAgICAgICBpbnQgb2xkX2hsZW4pXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzkwLXtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzkyLVxubmV0L2lwdjQvaXBfZ3JlLmM6MTM5MzpcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTM5NC1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzk3LVx0ICovXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzk4Olx0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTktfVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE0MDE9c3RhdGljIGludCBlcnNwYW5fdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDA0LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTQwNTpcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTQwNi1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDk3PXN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE1MDMtXHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbm5ldC9pcHY0L2lwX2dyZS5jOjE1MDQ6XHRpbnQgb2xkX2hsZW4gPSB0LVx1MDAzZWhsZW47XG5uZXQvaXB2NC9pcF9ncmUuYy0xNTA1LVx0aW50IGVycjtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTMwLVx0ICovXG5uZXQvaXB2NC9pcF9ncmUuYzoxNTMxOlx0aXBncmVfbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdLCBvbGRfaGxlbik7XG5uZXQvaXB2NC9pcF9ncmUuYy0xNTMyLVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE1MzY9c3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE1NDItXHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbm5ldC9pcHY0L2lwX2dyZS5jOjE1NDM6XHRpbnQgb2xkX2hsZW4gPSB0LVx1MDAzZWhsZW47XG5uZXQvaXB2NC9pcF9ncmUuYy0xNTQ0LVx0aW50IGVycjtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTYxLVx0ICovXG5uZXQvaXB2NC9pcF9ncmUuYzoxNTYyOlx0ZXJzcGFuX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSwgb2xkX2hsZW4pO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTU2My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5NjAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgYGVyc3Bhbl94bWl0YCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBlcnNwYW5feG1pdGAgZnVuY3Rpb24gaGFuZGxlcyBgdHVubmVsLSZndDtlcnNwYW5fdmVyYC4gVGhpcyBpcyBrZXkuIFRoZSBgZXJzcGFuX3ZlcmAgZmllbGQgbGlrZWx5IGRpY3RhdGVzIHRoZSBzcGVjaWZpYyBFUlNQQU4gdmVyc2lvbiBiZWluZyB1c2VkLCBhbmQgdGhhdCYjMzk7cyBnb2luZyB0byBpbmZsdWVuY2UgZXZlcnl0aGluZyBmcm9tIGhlYWRlciBjb25zdHJ1Y3Rpb24gdG8gaG93IHRoZSBwYWNrZXQgaXMgdWx0aW1hdGVseSB0cmFuc21pdHRlZC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgdmFyaWFibGUgd2l0aGluIHRoZSBmdW5jdGlvbi4gSXMgaXQgdXNlZCBpbiBjb25kaXRpb25hbCBsb2dpYz8gRG9lcyBpdCBkaXJlY3RseSBpbmZsdWVuY2UgYW55IGNhbGN1bGF0aW9ucz8gSXMgdGhlcmUgYSBsb29rdXAgdGFibGUgb3IgYSBzd2l0Y2ggc3RhdGVtZW50IHRoYXQgbWFrZXMgZGVjaXNpb25zIGJhc2VkIG9uIHRoaXMgZmllbGQ/IElzIGl0IHNpbXBseSBwYXNzZWQgYWxvbmcgYXMgYSBwYXJhbWV0ZXI/IFdoZXJlIGFuZCBob3cgaXQmIzM5O3MgdXNlZCBpcyB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGZ1bGx5LCBiZWNhdXNlIHRoZSBFUlNQQU4gdmVyc2lvbiBjb21wbGV0ZWx5IGFmZmVjdHMgdGhlIGZyYW1lJiMzOTtzIGZvcm1hdC4gSWYgSSBjYW4gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiB1dGlsaXplcyBgdHVubmVsLSZndDtlcnNwYW5fdmVyYCwgSSYjMzk7bGwgYmUgYWJsZSB0byBncmFzcCB0aGUgY29yZSBsb2dpYyBiZWhpbmQgdGhlIHZlcnNpb25pbmcgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Vyc3Bhbl94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9NjQ5PXN0YXRpYyBuZXRkZXZfdHhfdCBpcGdyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNzAyLVxubmV0L2lwdjQvaXBfZ3JlLmM6NzAzOnN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjQvaXBfZ3JlLmMtNzA0LVx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE0MTc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBlcnNwYW5fbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNDE5LVx0Lm5kb191bmluaXRcdFx0PSBpcF90dW5uZWxfdW5pbml0LFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQyMDpcdC5uZG9fc3RhcnRfeG1pdFx0XHQ9IGVyc3Bhbl94bWl0LFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQyMS1cdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IGV0aF9tYWNfYWRkcixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNTM2PXN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTU3LVx0ICogdGhlIGhlYWRlciBsZW5ndGguIFJlZnJlc2ggdGhlIGxlbmd0aHMgYmVmb3JlIGxvb2tpbmcgYXQgQGVycjpcbm5ldC9pcHY0L2lwX2dyZS5jOjE1NTg6XHQgKiBlcnNwYW5feG1pdCgpIHNpemVzIGl0cyBwdXNoIGZyb20gdHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIsIGFuZCBib3RoIHRoaXNcbm5ldC9pcHY0L2lwX2dyZS5jLTE1NTktXHQgKiBlcnJvciBwYXRoIGFuZCBpcF90dW5uZWxfY2hhbmdlbGluaygpIGJlbG93IGxlYXZlIHRoZSBuZXdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk2MzUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG9uIGxpbmVzIDcwMCB0aHJvdWdoIDc2MCBvZiBgZXJzcGFuX3htaXRgLgoKKipBbmFseXppbmcgdGhlIGBlcnNwYW5feG1pdGAgQ29kZSBTZWdtZW50KioKCkFscmlnaHQsIGxpbmVzIDcwMC03NjAuLi4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIGxpa2VseSBoYW5kbGVzIHNvbWUgY29yZSBhc3BlY3RzIG9mIEVSU1BBTiB0cmFuc21pc3Npb24g4oCTIHByb2JhYmx5IGRhdGEgZm9ybWF0dGluZywgY2hlY2tzdW0gY2FsY3VsYXRpb25zLCBvciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JrIGludGVyZmFjZS4gS25vd2luZyBob3cgdGhpcyBtb2R1bGUgd29ya3MgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBFUlNQQU4gaXNzdWVzLiBJIHdhbnQgdG8gbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLCBWTEFOIGhhbmRsaW5nLCBvciB0aGUgYWN0dWFsIHF1ZXVpbmcgb2YgdGhlIHBhY2tldHMuIEkmIzM5O20gc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIHN1YnRsZSBkZXRhaWxzIOKAkyBwb3RlbnRpYWwgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gcGFja2V0IHNpemluZywgaW5jb3JyZWN0IGNoZWNrc3VtIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gZHJvcHBlZCBwYWNrZXRzLCBvciBhbnkgdW51c3VhbCBjb250cm9sIGZsb3cgcGF0aHMgdGhhdCBkZXZpYXRlIGZyb20gdGhlIHN0YW5kYXJkIEVSU1BBTiBwcm9jZWR1cmVzLiBJJiMzOTtsbCBiZSBzZWFyY2hpbmcgZm9yIGFueSBvcHRpbWl6YXRpb24gc3RyYXRlZ2llcyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBzeXN0ZW0gaW4gdGVybXMgb2YgbGF0ZW5jeSBvciB0aHJvdWdocHV0LiBJZiB0aGVyZSBhcmUgYW55IGNvbmRpdGlvbmFsIHN0YXRlbWVudHMsIGVzcGVjaWFsbHkgbmVzdGVkIG9uZXMsIEkgd2FudCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIGVhY2ggYnJhbmNoIHdpbGwgYmUgdGFrZW4uIEVzc2VudGlhbGx5LCBJJiMzOTttIHBlZWxpbmcgYmFjayB0aGUgbGF5ZXJzIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIEVSU1BBTiBpbXBsZW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTt2ZSBnb3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiA3MDE6XHR9XG4gNzAyOlx0XG4gNzAzOlx0c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gNzA0Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gNzA1Olx0e1xuIDcwNjpcdFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiA3MDc6XHRcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcbiA3MDg6XHRcdGJvb2wgdHJ1bmNhdGUgPSBmYWxzZTtcbiA3MDk6XHRcdF9fYmUxNiBwcm90bztcbiA3MTA6XHRcbiA3MTE6XHRcdGlmICghcHNrYl9pbmV0X21heV9wdWxsKHNrYikpXG4gNzEyOlx0XHRcdGdvdG8gZnJlZV9za2I7XG4gNzEzOlx0XG4gNzE0Olx0XHRpZiAodHVubmVsLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiA3MTU6XHRcdFx0ZXJzcGFuX2ZiX3htaXQoc2tiLCBkZXYpO1xuIDcxNjpcdFx0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIDcxNzpcdFx0fVxuIDcxODpcdFxuIDcxOTpcdFx0aWYgKGdyZV9oYW5kbGVfb2ZmbG9hZHMoc2tiLCBmYWxzZSkpXG4gNzIwOlx0XHRcdGdvdG8gZnJlZV9za2I7XG4gNzIxOlx0XG4gNzIyOlx0XHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpXG4gNzIzOlx0XHRcdGdvdG8gZnJlZV9za2I7XG4gNzI0Olx0XG4gNzI1Olx0XHRpZiAoc2tiLVx1MDAzZWxlbiBcdTAwM2UgZGV2LVx1MDAzZW10dSAmIzQzOyBkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSB7XG4gNzI2Olx0XHRcdGlmIChwc2tiX3RyaW0oc2tiLCBkZXYtXHUwMDNlbXR1ICYjNDM7IGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4pKVxuIDcyNzpcdFx0XHRcdGdvdG8gZnJlZV9za2I7XG4gNzI4Olx0XHRcdHRydW5jYXRlID0gdHJ1ZTtcbiA3Mjk6XHRcdH1cbiA3MzA6XHRcbiA3MzE6XHRcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4gNzMyOlx0XG4gNzMzOlx0XHQvKiBQdXNoIEVSU1BBTiBoZWFkZXIgKi9cbiA3MzQ6XHRcdGlmICh0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciA9PSAwKSB7XG4gNzM1Olx0XHRcdHByb3RvID0gaHRvbnMoRVRIX1BfRVJTUEFOKTtcbiA3MzY6XHRcdFx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIGZsYWdzKTtcbiA3Mzc6XHRcdH0gZWxzZSBpZiAodHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIgPT0gMSkge1xuIDczODpcdFx0XHRlcnNwYW5fYnVpbGRfaGVhZGVyKHNrYiwgbnRvaGwodHVubmVsLVx1MDAzZXBhcm1zLm9fa2V5KSxcbiA3Mzk6XHRcdFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlaW5kZXgsXG4gNzQwOlx0XHRcdFx0XHQgICAgdHJ1bmNhdGUsIHRydWUpO1xuIDc0MTpcdFx0XHRwcm90byA9IGh0b25zKEVUSF9QX0VSU1BBTik7XG4gNzQyOlx0XHR9IGVsc2UgaWYgKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDIpIHtcbiA3NDM6XHRcdFx0ZXJzcGFuX2J1aWxkX2hlYWRlcl92Mihza2IsIG50b2hsKHR1bm5lbC1cdTAwM2VwYXJtcy5vX2tleSksXG4gNzQ0Olx0XHRcdFx0XHQgICAgICAgdHVubmVsLVx1MDAzZWRpciwgdHVubmVsLVx1MDAzZWh3aWQsXG4gNzQ1Olx0XHRcdFx0XHQgICAgICAgdHJ1bmNhdGUsIHRydWUpO1xuIDc0NjpcdFx0XHRwcm90byA9IGh0b25zKEVUSF9QX0VSU1BBTjIpO1xuIDc0NzpcdFx0fSBlbHNlIHtcbiA3NDg6XHRcdFx0Z290byBmcmVlX3NrYjtcbiA3NDk6XHRcdH1cbiA3NTA6XHRcbiA3NTE6XHRcdF9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCBmbGFncyk7XG4gNzUyOlx0XHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoLCBwcm90bywgZmxhZ3MpO1xuIDc1MzpcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiA3NTQ6XHRcbiA3NTU6XHRmcmVlX3NrYjpcbiA3NTY6XHRcdGtmcmVlX3NrYihza2IpO1xuIDc1NzpcdFx0REVWX1NUQVRTX0lOQyhkZXYsIHR4X2Ryb3BwZWQpO1xuIDc1ODpcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiA3NTk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDE1OjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwODg4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTM4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBFUlNQQU4gYW5kIElQR1JFIFR1bm5lbGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgZXJzcGFuX3htaXRgIHBhdGggYmVjYXVzZSB0aGF0JiMzOTtzIHdoZXJlIHRoaW5ncyBjYW4gZ2V0IGhhaXJ5IHF1aWNrbHkuICBgc2tiX2Nvd19oZWFkYCBpcyB0aGUgZmlyc3QgcGxhY2UgdG8gbG9vay4gSSYjMzk7bSB0aGlua2luZywgaWYgdGhlIGluaXRpYWwgaGVhZHJvb20gaXMgd3JvbmcsIGVpdGhlciB0b28gc21hbGwgb3IgdGhlIE1UVSBjYWxjdWxhdGlvbiBkdXJpbmcgdGhlIGBwc2tiX3RyaW1gIGlzIGluYWNjdXJhdGUsIHRoYXTigJlzIGdvaW5nIHRvIG1hbmlmZXN0IGFzIGEgY3Jhc2guIFRoZSBrZXJuZWwmIzM5O3MgZ29pbmcgdG8gdGVsbCBtZSBwcmV0dHkgZmFzdCB3aGVuIEkgaGF2ZSBhIHByb2JsZW0sIGVpdGhlciB3aXRoIGEgcGFuaWMgZnJvbSB0aGUgYHNrYl9wdXNoYCwgb3IgdGhlIEtBU0FOL0JVR19PTiB3aWxsIGNhdGNoIGl0LiAgU28gaXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGF0dGVtcHRpbmcgdG8gY29ycmVjdCB0aGUgYGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tYCBhbmQgTVRVIGNhbGN1bGF0aW9ucywgcGFydGljdWxhcmx5IGluIHJlc3BvbnNlIHRvIGNoYW5nZXMgaW4gbGluayBwYXJhbWV0ZXJzIGFuZCB0aGUgRVJTUEFOIHZlcnNpb24vaGVhZGVyIGxlbmd0aC4KClRoZSBgaXBncmVfdHVubmVsX2N0bGAgY2hhbmdlIGlzIGludGVyZXN0aW5nLiBUaGV5IGFyZSBtb3ZpbmcgdG8gdXNlIHRoZSBgaGxlbmAgd2l0aCB0aGUgYGlwZ3JlX2xpbmtfdXBkYXRlYC4gSSBuZWVkIHRvIHRyYWNrIHdoZXJlIHRoYXQmIzM5O3MgYmVpbmcgdXNlZC4gVGhlIHVwZGF0ZSBmdW5jdGlvbiBpcyB3aGF0IG1vZGlmaWVzIHRoZSB0dW5uZWxlZCBkZXZpY2UsIHNldHRpbmcgdGhlIGB0dW5uZWwtJmd0O3R1bl9obGVuYC4gVGhleSBhcmUgdGhlbiBzZXR0aW5nIGB0dW5uZWwtJmd0O2hsZW5gIGJhc2VkIG9uIGB0dW5uZWwtJmd0O3R1bl9obGVuYCBhbmQgYHR1bm5lbC0mZ3Q7ZW5jYXBfaGxlbmAuICBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc2Agc2VlbXMgbGlrZSB0aGUga2V5IGZ1bmN0aW9uIG5vdywgYXMgdGhhdCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCB0byByZXNldCBNVFUgd2hlbiB0aGUgaGVhZGVyIGxlbmd0aCBpcyBpbnZhbGlkYXRlZC4gIEkgbmVlZCB0byBjaGVjayBob3cgTVRVIGlzIHNldC4gQWgsIGBpcF90dW5uZWxfYmluZF9kZXYoZGV2KWAgcmVjYWxjdWxhdGVzIGBkZXYtJmd0O25lZWRlZF9oZWFkcm9vbWAgYW5kIHJldHVybnMgdGhlIE1UVS4gU28gdGhhdCYjMzk7cyB0aGUgTVRVIHNvdXJjZS4KCkxvb2tpbmcgZGVlcGVyIGludG8gYGlwZ3JlX25ldGxpbmtfcGFybXNgLCB0aGV5IG1vdmVkIHRoZSBtZXRhZGF0YSBoYW5kbGluZyBsb2dpYy4gIEl0IHNlZW1zIHRvIGNoYW5nZSB0aGUgdHlwZSBvZiBhIGRldmljZSwgaWYgbWV0YWRhdGEgY29sbGVjdGlvbiBpcyBlbmFibGVkLiBHb29kLiAgSSYjMzk7bSBnbGFkIHRoZXkgYXJlIG1vdmluZyBpdCBhcm91bmQgYmFzZWQgb24gdmFsaWRhdGlvbiBvZiB0aGUgb3RoZXIgYXR0cmlidXRlcy4KCkluIHRoZSBgZXJzcGFuX25ldGxpbmtfcGFybXNgLCBzdG9yaW5nIHRoZSB2YWx1ZXMgbG9jYWxseSBiZWZvcmUgc2V0dGluZyB0aGVtIHRvIHRoZSB0dW5uZWwmIzM5O3MgdmFyaWFibGVzIGlzIHNtYXJ0LCBhbmQgY2FsbGluZyBgaXBncmVfbmV0bGlua19wYXJtc2AgZW5zdXJlcyBjb25zaXN0ZW5jeS4gVGhlIGNhbGwgdG8gYGVyc3Bhbl9saW5rX3VwZGF0ZWAgYWxzbyBzdWdnZXN0cyBhIGNvbXBsZXRlIHN0YXRlIHVwZGF0ZS4KCk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzbuKAmXQgaW50cm9kdWNpbmcgYSBzZWN1cml0eSBpc3N1ZSBieSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ2hlY2tpbmcgZm9yIGl0LCB0aGUgcmVhZHM6IGBlcnNwYW5fdmVyYCwgYGluZGV4YCwgYGh3aWRgLCBhbmQgYGRpcmAgYXJlIGFsbCBpbml0aWFsaXplZCAqZnJvbSogdGhlIHR1bm5lbCBkYXRhIHN0cnVjdHVyZSwgc28gdGhhdCYjMzk7cyBnb29kLiBJbiBgaXBncmVfY2hhbmdlbGlua2AgYW5kIGBlcnNwYW5fY2hhbmdlbGlua2AsIGBvbGRfaGxlbmAgYW5kIGBtdHVgIGFyZSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIHZhbHVlcyBvciByZXR1cm5lZCBmcm9tIHRoZSBiaW5kIGZ1bmN0aW9uLiBOb3RoaW5nIGlzIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UgZGlyZWN0bHkuIEkgZG9uJiMzOTt0IHNlZSBhbnkgYGNvcHlfdG9fdXNlcmAgb3IgbmV0bGluayB3cml0ZSBjYWxscyBiZWluZyBpbnRyb2R1Y2VkLCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpGaW5hbGx5LCBJIGNoZWNrZWQgZm9yIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLiBTcGVjaWZpY2FsbHksIHRoZSBgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcGAgdXNlZCBpbiBgaXBncmVfY2hhbmdlbGlua2AgYW5kIGBlcnNwYW5fY2hhbmdlbGlua2AuIEkmIzM5O20gdmVyaWZ5aW5nIHRoZSBpbml0aWFsaXphdGlvbiBmbG93LCBhbmQgSSBzZWUgdGhhdCBgcGAgd2FzIHRoZXJlIGJlZm9yZSwgYW5kIHRoZW4gdGhlIG5ldGxpbmsgcGFybXMgYXJlIHNldCBiYXNlZCBvbiBuZXRsaW5rIGF0dHJpYnV0ZXMuIEFsbCB0aGUgcGFyYW1ldGVycyBhcmUgc2V0IGNvcnJlY3RseSB0byBgcGAuIE92ZXJhbGwsIHRoaXMgcGF0Y2ggYXBwZWFycyB0byBiZSBhIHRhcmdldGVkIGZpeCBhbmQgdXBkYXRlIHRvIE1UVSBhbmQgaGVhZHJvb20gY2FsY3VsYXRpb24sIHdoaWxlIG1pbmltaXppbmcgdGhlIHJpc2sgb2YgaW50cm9kdWNpbmcgbmV3IG1lbW9yeS1zYWZldHkgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjAwOlx0XG4xMjAxOlx0XHRwYXJtcy1cdTAwM2VpcGgucHJvdG9jb2wgPSBJUFBST1RPX0dSRTtcbjEyMDI6XHRcbjEyMDM6XHRcdGlmICghZGF0YSlcbjEyMDQ6XHRcdFx0cmV0dXJuIDA7XG4xMjA1Olx0XG4xMjA2Olx0XHRpZiAoZGF0YVtJRkxBX0dSRV9MSU5LXSlcbjEyMDc6XHRcdFx0cGFybXMtXHUwMDNlbGluayA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfTElOS10pO1xuMTIwODpcdFxuMTIwOTpcdFx0aWYgKGRhdGFbSUZMQV9HUkVfSUZMQUdTXSlcbjEyMTA6XHRcdFx0Z3JlX2ZsYWdzX3RvX3RubF9mbGFncyhwYXJtcy1cdTAwM2VpX2ZsYWdzLFxuMTIxMTpcdFx0XHRcdFx0ICAgICAgIG5sYV9nZXRfYmUxNihkYXRhW0lGTEFfR1JFX0lGTEFHU10pKTtcbjEyMTI6XHRcbjEyMTM6XHRcdGlmIChkYXRhW0lGTEFfR1JFX09GTEFHU10pXG4xMjE0Olx0XHRcdGdyZV9mbGFnc190b190bmxfZmxhZ3MocGFybXMtXHUwMDNlb19mbGFncyxcbjEyMTU6XHRcdFx0XHRcdCAgICAgICBubGFfZ2V0X2JlMTYoZGF0YVtJRkxBX0dSRV9PRkxBR1NdKSk7XG4xMjE2Olx0XG4xMjE3Olx0XHRpZiAoZGF0YVtJRkxBX0dSRV9JS0VZXSlcbjEyMTg6XHRcdFx0cGFybXMtXHUwMDNlaV9rZXkgPSBubGFfZ2V0X2JlMzIoZGF0YVtJRkxBX0dSRV9JS0VZXSk7XG4xMjE5Olx0XG4xMjIwOlx0XHRpZiAoZGF0YVtJRkxBX0dSRV9PS0VZXSlcbjEyMjE6XHRcdFx0cGFybXMtXHUwMDNlb19rZXkgPSBubGFfZ2V0X2JlMzIoZGF0YVtJRkxBX0dSRV9PS0VZXSk7XG4xMjIyOlx0XG4xMjIzOlx0XHRpZiAoZGF0YVtJRkxBX0dSRV9MT0NBTF0pXG4xMjI0Olx0XHRcdHBhcm1zLVx1MDAzZWlwaC5zYWRkciA9IG5sYV9nZXRfaW5fYWRkcihkYXRhW0lGTEFfR1JFX0xPQ0FMXSk7XG4xMjI1Olx0XG4xMjI2Olx0XHRpZiAoZGF0YVtJRkxBX0dSRV9SRU1PVEVdKVxuMTIyNzpcdFx0XHRwYXJtcy1cdTAwM2VpcGguZGFkZHIgPSBubGFfZ2V0X2luX2FkZHIoZGF0YVtJRkxBX0dSRV9SRU1PVEVdKTtcbjEyMjg6XHRcbjEyMjk6XHRcdGlmIChkYXRhW0lGTEFfR1JFX1RUTF0pXG4xMjMwOlx0XHRcdHBhcm1zLVx1MDAzZWlwaC50dGwgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfVFRMXSk7XG4xMjMxOlx0XG4xMjMyOlx0XHRpZiAoZGF0YVtJRkxBX0dSRV9UT1NdKVxuMTIzMzpcdFx0XHRwYXJtcy1cdTAwM2VpcGgudG9zID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX1RPU10pO1xuMTIzNDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzcwMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYGlwZ3JlX25ldGxpbmtfcGFybXNgIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gZm9jdXNpbmcgaW4gb24gbGluZXMgMTE4MCB0aHJvdWdoIDEyMDUuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYGlwZ3JlX25ldGxpbmtfcGFybXNgIGluaXRpYWxpemVzIHRoZSBgcGFybXNgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBwb3B1bGF0aW5nIHRoYXQgc3RydWN0LiBJJiMzOTttIGFzc3VtaW5nLCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZSwgdGhhdCB0aGlzIGxpa2VseSBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggcGFyYW1ldGVycyBwYXNzZWQgdGhyb3VnaCBOZXRsaW5rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YSBmbG93IGZyb20gdGhlIE5ldGxpbmsgbWVzc2FnZSBpbnRvIHRoZSBgcGFybXNgIHN0cnVjdHVyZS4gSXMgdGhlcmUgdmFsaWRhdGlvbj8gRGVmYXVsdCB2YWx1ZXM/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoZXJlJiMzOTtsbCBiZSBhIHN3aXRjaCBzdGF0ZW1lbnQgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gTmV0bGluayBhdHRyaWJ1dGVzIHRvIGZpbGwgdGhlIG1lbWJlcnMgb2YgdGhlIGBwYXJtc2Agc3RydWN0dXJlLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhleSBhcmUgaGFuZGxpbmcgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYXMgd2VsbC4gTXkgZXhwZXJ0aXNlIGlzIE5ldGxpbmssIHNvIEkgZXhwZWN0IGEgc3RhbmRhcmQgcGF0dGVybiBvZiBhdHRyaWJ1dGUgcGFyc2luZywgcG90ZW50aWFsIG1lbW9yeSBhbGxvY2F0aW9uLCB2YWxpZGF0aW9uLCBhbmQgZXJyb3IgaGFuZGxpbmcgdG8gYmUgaW4gcGxheS4gSSBhbSBpbnRlcmVzdGVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9wdGltaXphdGlvbnMgYXMgd2VsbC4gSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZywgYmVjYXVzZSBpdCYjMzk7cyBpbiB0aGUgaW5pdGlhbGl6YXRpb24sIHRoaXMgcHJvYmFibHkgYWxzbyBjb3ZlcnMgc29tZSBzYW5pdHkgY2hlY2tzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwX2dyZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTgwOlx0XHRpZiAoZGF0YVtJRkxBX0dSRV9JS0VZXSBcdTAwMjZcdTAwMjZcbjExODE6XHRcdCAgICAobnRvaGwobmxhX2dldF9iZTMyKGRhdGFbSUZMQV9HUkVfSUtFWV0pKSBcdTAwMjYgfklEX01BU0spKVxuMTE4MjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjExODM6XHRcbjExODQ6XHRcdGlmIChkYXRhW0lGTEFfR1JFX09LRVldIFx1MDAyNlx1MDAyNlxuMTE4NTpcdFx0ICAgIChudG9obChubGFfZ2V0X2JlMzIoZGF0YVtJRkxBX0dSRV9PS0VZXSkpIFx1MDAyNiB+SURfTUFTSykpXG4xMTg2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTE4NzpcdFxuMTE4ODpcdFx0cmV0dXJuIDA7XG4xMTg5Olx0fVxuMTE5MDpcdFxuMTE5MTpcdHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuMTE5MjpcdFx0XHRcdFx0c3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuMTE5MzpcdFx0XHRcdFx0c3RydWN0IG5sYXR0ciAqdGJbXSxcbjExOTQ6XHRcdFx0XHRcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwYXJtcyxcbjExOTU6XHRcdFx0XHRcdF9fdTMyICpmd21hcmspXG4xMTk2Olx0e1xuMTE5NzpcdFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4xMTk4Olx0XG4xMTk5Olx0XHRtZW1zZXQocGFybXMsIDAsIHNpemVvZigqcGFybXMpKTtcbjEyMDA6XHRcbjEyMDE6XHRcdHBhcm1zLVx1MDAzZWlwaC5wcm90b2NvbCA9IElQUFJPVE9fR1JFO1xuMTIwMjpcdFxuMTIwMzpcdFx0aWYgKCFkYXRhKVxuMTIwNDpcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTU6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ0MzkKCQkJCQkJCW91dHB1dDogMjEyCgkJCQkJCQl0aG91Z2h0czogMTQyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiB3YXMgY2VudGVyZWQgYXJvdW5kIHdoZXRoZXIgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG9yIGV4YWNlcmJhdGVzIHJpc2tzIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCwgYGlwZ3JlX2NoYW5nZWxpbmtgLCBhbmQgYGVyc3Bhbl9jaGFuZ2VsaW5rYCBhbmQgdGhlaXIgaW50ZXJhY3Rpb25zLgoKRmlyc3QsIEkgc2VlIHRoYXQgYG1lbXNldChwYXJtcywgMCwgc2l6ZW9mKCpwYXJtcykpO2AgaXMgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYGlwZ3JlX25ldGxpbmtfcGFybXNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBub3RpY2UgdGhlIGBpcGdyZV9jaGFuZ2VsaW5rYCBjaGFuZ2VzLiBUaGUgaW1wb3J0YW50IHBvaW50IGhlcmUgaXMgdGhhdCBldmVuIGlmIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCBvciBgaXBfdHVubmVsX2NoYW5nZWxpbmtgIHJldHVybiBhbiBlcnJvciwgdGhlIGNvZGUgbm93ICpqdW1wcyogdG8gYSBgbGlua191cGRhdGVgIGxhYmVsLCBlbnN1cmluZyBgaXBncmVfbGlua191cGRhdGVgIGlzIGNhbGxlZCBpbiBhbGwgY2FzZXMuIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzLCBldmVuIG9uIGVycm9yLCBgaXBncmVfbGlua191cGRhdGVgIGFjY2Vzc2VzIG1lbWJlcnMgb2YgYW4gYWxyZWFkeSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkIGBzdHJ1Y3QgaXBfdHVubmVsYCAoYHRgKS4gVGhlIGtleSBpcyB0aGF0IGBwLmlfZmxhZ3NgIGFuZCBgcC5vX2ZsYWdzYCBhcmVuJiMzOTt0IGNvcGllZCB0byBgdC0mZ3Q7cGFybXNgIG9uIGVycm9yLCBidXQgdGhlIGNvZGUgc3RpbGwgdXNlcyB0aGVtLCBzbyB0aGVyZSYjMzk7cyBhbiBpc3N1ZSB0aGVyZSEgVGhlIGNvZGUgdGhlbiB1cGRhdGVzIGhlYWRlciBsZW5ndGhzIGJhc2VkIG9uIHZhbHVlcyBpbiAqdGhhdCogYHN0cnVjdCBpcF90dW5uZWxgIChgdGApLiBUaGlzIGlzIGNvbnNpc3RlbnQgYW5kIGRvZXNuJiMzOTt0IGFwcGVhciB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKTG9va2luZyBhdCB0aGUgYGVyc3Bhbl9jaGFuZ2VsaW5rYCBmdW5jdGlvbiwgdGhlcmUmIzM5O3MgYSBzaW1pbGFyIHBhdHRlcm4uIEV2ZW4gaWYgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYCByZXR1cm5zIGFuIGVycm9yLCB0aGUgY29kZSBwcm9jZWVkcyB0byBjYWxsIGBlcnNwYW5fbGlua191cGRhdGVgLiBIZXJlLCBpbXBvcnRhbnRseSwgYGVyc3Bhbl92ZXJgIGlzbiYjMzk7dCB1cGRhdGVkIGlmIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgcmV0dXJucyBhbiBlcnJvci4gVGhlIGBlcnNwYW5fbGlua191cGRhdGVgIGZ1bmN0aW9uIGFjY2Vzc2VzIGB0dW5uZWwtJmd0O2Vyc3Bhbl92ZXJgIGFuZCBgdHVubmVsLSZndDtlbmNhcF9obGVuYCwgd2hpY2ggYXJlIGZpZWxkcyBvZiBgdGAuIElmIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgZmFpbHMsIHRoZSBgZXJzcGFuX3ZlcmAgcmV0YWlucyBpdHMgcHJpb3IgdmFsdWUuIEl0IGxvb2tzIGxpa2UgYHR1bm5lbC0mZ3Q7ZW5jYXBfaGxlbmAgKm1pZ2h0KiBoYXZlIGJlZW4gdXBkYXRlZCBieSBgaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cGAuIFRoYXTigJlzIGFuIGltcG9ydGFudCBjb25zaWRlcmF0aW9uLCB0aGF0IHRob3NlIHdlcmUgcG90ZW50aWFsbHkgcHJldmlvdXNseSBpbml0aWFsaXplZCBhbmQgdXBkYXRlZCEgVGhlbiBpdCBwcm9jZWVkcyB0byBjYWxsIGBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKC4uLilgLiBBZ2FpbiwgdGhpcyBsb29rcyBzYWZlLCBmb2N1c2luZyBvbiBgdGAsIGFuIGFscmVhZHkgYWxsb2NhdGVkIHN0cnVjdHVyZSwgZXZlbiBvbiBlcnJvciBwYXRocy4gTm8gZGF0YSBzZWVtcyB0byBiZSB1bmluaXRpYWxpemVkIGluIHRoZSBkZXNjcmliZWQgZmxvdy4KCk5vdywgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgYWxsIGFzcGVjdHMgdG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgbmVlZCB0byBleHBsaWNpdGx5IHZlcmlmeSB0aGUgZm9sbG93aW5nOgoKKiAgICoqU3RhY2sgVmFyaWFibGVzKio6IEFyZSB0aGVyZSBhbnkgc3RhY2sgdmFyaWFibGVzIGRlY2xhcmVkIGJ1dCAqbm90KiBpbml0aWFsaXplZCBiZWZvcmUgdXNlPyBJIHNlZSBsb2NhbCB2YXJpYWJsZXMgbGlrZSBgb2xkX2hsZW5gLCBgZXJzcGFuX3ZlcmAsIGBpbmRleGAsIGBod2lkYCwgYGRpcmAsIGBtdHVgLiBJIGNhbiBzZWUgdGhhdCBhbGwgdGhlc2UgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdoZW4gdGhleSBhcmUgZGVjbGFyZWQgb3IgYXNzaWduZWQgZnJvbSBvdGhlciBzb3VyY2VzLCBzbyBJIGRvbiYjMzk7dCBzZWUgYW4gaXNzdWUgdGhlcmUuCiogICAqKkhlYXAgQWxsb2NhdGlvbnMqKjogQXJlIGFueSBuZXcgaGVhcCBhbGxvY2F0aW9ucyBiZWluZyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkPyBObywgSSBkb24mIzM5O3Qgc2VlIGFueSBjaGFuZ2VzIHRvIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBpbiB0aGlzIHBhdGNoLgoqICAgKipVc2Vyc3BhY2UgRXhwb3N1cmUqKjogSXMgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZXMgc2VudD8gTm8sIEkgZG9uJiMzOTt0IHNlZSBhbnkgY2FsbHMgdG8gYGNvcHlfdG9fdXNlcmAgb3IgYW55IG5ldyBhdHRyaWJ1dGVzIGJlaW5nIGFkZGVkLCBzbyB0aGVyZSBzaG91bGQgbm90IGJlIGFuIGlzc3VlLgoqICAgKipVbmluaXRpYWxpemVkIERhdGEgQnJhbmNoaW5nKio6IElzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGJyYW5jaGVzIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIEkgZG9uJiMzOTt0IHNlZSBhbnkgc3VjaCBicmFuY2hpbmcgcGF0dGVybnMuCiogICAqKkJ1ZmZlciBBY2Nlc3MgUmlza3MqKjogQXJlIHRoZXJlIGFueSBidWZmZXIgYWNjZXNzZXMgKGUuZy4sIHdpdGhpbiBhbiBgc2tiYCkgdGhhdCBjb3VsZCBsZWFkIHRvIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgTVRVIGFuZCBoZWFkcm9vbSBhcmUgYmVpbmcgcmVjYWxjdWxhdGVkLiBUaGUgcG90ZW50aWFsIHJpc2tzIGhlcmUgYXJlIGVpdGhlciBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBidWZmZXIgb3ZlcmZsb3csIHdoaWNoIGlzIGhhbmRsZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgYXNzZXJ0aW9ucywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKQmFzZWQgb24gdGhpcyBjb21wcmVoZW5zaXZlIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgdGhlIHBhdGNoIGRvZXMgKm5vdCogaW50cm9kdWNlIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB2dWxuZXJhYmlsaXRpZXMuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZhY3QgdGhhdCBhbnkgcG90ZW50aWFsIGVycm9ycyBhcmUgbm93IGhhbmRsZWQgYnkgdXBkYXRpbmcgcmVsZXZhbnQgYXR0cmlidXRlcyBhbmQgZ29pbmcgdG8gYGxpbmtfdXBkYXRlYCwgYW5kIHRoYXQgdGhlc2UgdmFsdWVzIGFyZSBhbGwgaW5pdGlhbGl6ZWQgb3IgZXhwbGljaXRseSBjaGVja2VkIGJlZm9yZSB1c2UuIEkgYWxzbyBsb29rZWQgYXQgYWxsIGFzcGVjdHMgdG8gZW5zdXJlIHRoYXQgSSB3YXMgYmVpbmcgdGhvcm91Z2ggYW5kIHN5c3RlbWF0aWMgYWJvdXQgdGhpcy4gVGh1cywgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLgoKVGhlcmVmb3JlOgoKYGBgCk5lZWRzS01TQU4gPSBmYWxzZS4KS01TQU5SZWFzb25pbmc6ClRoZSBwYXRjaCB1cGRhdGVzIGhlYWRlciBsZW5ndGgsIGhlYWRyb29tLCBhbmQgTVRVIHJlY2FsY3VsYXRpb24gbG9naWMgZm9yIElQIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMgKGBpcGdyZV9saW5rX3VwZGF0ZWAsIGBlcnNwYW5fbGlua191cGRhdGVgLCBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc2ApLCBhbmQgZGVmZXJzIGNvbW1pdHRpbmcKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxNTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGp1c3RzIGhlYWRlciBsZW5ndGgsIGhlYWRyb29tLCBhbmQgTVRVIGNhbGN1bGF0aW9uIGxvZ2ljIGZvciBJUCBHUkUgYW5kIEVSU1BBTiB0dW5uZWwgZGV2aWNlcyAoaW50cm9kdWNpbmcgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocywgdXBkYXRpbmcgaXBncmVfbGlua191cGRhdGUgYW5kIGVyc3Bhbl9saW5rX3VwZGF0ZSwgYW5kIGRlZmVycmluZyB0dW5uZWwgc3RhdGUgdXBkYXRlcyB1bnRpbCBuZXRsaW5rIHZhbGlkYXRpb24gY29tcGxldGVzKS4gXG5cbkFsbCBsb2NhbCB2YXJpYWJsZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggKHN1Y2ggYXMgb2xkX2hsZW4sIGVyc3Bhbl92ZXIsIGluZGV4LCBod2lkLCBkaXIsIGFuZCBtdHUpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gZXhpc3Rpbmcgc3RydWN0IGZpZWxkcyBvciBmdW5jdGlvbiByZXR1cm4gdmFsdWVzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBoZWFwL3N0YWNrIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IG9yIHBhZGRpbmcgdG8gdXNlcnNwYWNlLCBhbmQgZG9lcyBub3QgYnJhbmNoIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBBbnkgcG90ZW50aWFsIGJ1Z3MgcmVsYXRlZCB0byBpbmNvcnJlY3QgaGVhZHJvb20gb3IgTVRVIGNhbGN1bGF0aW9ucyB3b3VsZCBtYW5pZmVzdCBhcyBidWZmZXIgYm91bmRhcnkvb3ZlcmZsb3cgb3IgcGFja2V0IHRyYW5zbWlzc2lvbiBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IEtBU0FOIG9yIG5ldHdvcmsgc3RhY2sgYXNzZXJ0aW9ucyByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IGp1c3RpZmllZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkanVzdHMgaGVhZGVyIGxlbmd0aCwgaGVhZHJvb20sIGFuZCBNVFUgY2FsY3VsYXRpb24gbG9naWMgZm9yIElQIEdSRSBhbmQgRVJTUEFOIHR1bm5lbCBkZXZpY2VzIChpbnRyb2R1Y2luZyBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzLCB1cGRhdGluZyBpcGdyZV9saW5rX3VwZGF0ZSBhbmQgZXJzcGFuX2xpbmtfdXBkYXRlLCBhbmQgZGVmZXJyaW5nIHR1bm5lbCBzdGF0ZSB1cGRhdGVzIHVudGlsIG5ldGxpbmsgdmFsaWRhdGlvbiBjb21wbGV0ZXMpLiBcblxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCAoc3VjaCBhcyBvbGRfaGxlbiwgZXJzcGFuX3ZlciwgaW5kZXgsIGh3aWQsIGRpciwgYW5kIG10dSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIG9yIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBoZWFkcm9vbSBvciBNVFUgY2FsY3VsYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIGJ1ZmZlciBib3VuZGFyeS9vdmVyZmxvdyBvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gb3IgbmV0d29yayBzdGFjayBhc3NlcnRpb25zIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0MjoxMC44ODkxNTUzNDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDc2MTAwNzg1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIixcbiAgICBcIk5FVF9JUF9UVU5ORUxcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzXCIsXG4gICAgXCJpcGdyZV9saW5rX3VwZGF0ZVwiLFxuICAgIFwiZXJzcGFuX2xpbmtfdXBkYXRlXCIsXG4gICAgXCJlcnNwYW5fc2V0X2hsZW5cIixcbiAgICBcImlwZ3JlX25ldGxpbmtfcGFybXNcIixcbiAgICBcImVyc3Bhbl9uZXRsaW5rX3Bhcm1zXCIsXG4gICAgXCJpcGdyZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJlcnNwYW5fY2hhbmdlbGlua1wiLFxuICAgIFwiaXBncmVfdHVubmVsX2N0bFwiLFxuICAgIFwiZXJzcGFuX3R1bm5lbF9pbml0XCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIGhlYWRlciBsZW5ndGgsIGhlYWRyb29tLCBhbmQgTVRVIGNhbGN1bGF0aW9uIGxvZ2ljIGZvciBJUCBHUkUgYW5kIEVSU1BBTiB0dW5uZWwgZGV2aWNlcyAoaW50cm9kdWNpbmcgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocywgdXBkYXRpbmcgaXBncmVfbGlua191cGRhdGUgYW5kIGVyc3Bhbl9saW5rX3VwZGF0ZSwgYW5kIGRlZmVycmluZyB0dW5uZWwgc3RhdGUgdXBkYXRlcyB1bnRpbCBuZXRsaW5rIHZhbGlkYXRpb24gY29tcGxldGVzKS4gXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCAoc3VjaCBhcyBvbGRfaGxlbiwgZXJzcGFuX3ZlciwgaW5kZXgsIGh3aWQsIGRpciwgYW5kIG10dSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIG9yIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBoZWFkcm9vbSBvciBNVFUgY2FsY3VsYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIGJ1ZmZlciBib3VuZGFyeS9vdmVyZmxvdyBvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gb3IgbmV0d29yayBzdGFjayBhc3NlcnRpb25zIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBhbmQgZml4ZXMgZGV2aWNlIGhlYWRlciBsZW5ndGgsIE1UVSwgYW5kIGhlYWRyb29tIHVwZGF0ZXMgaW4gdGhlIElQdjQgR1JFIGFuZCBFUlNQQU4gdHVubmVsaW5nIGRyaXZlcnMuIEl0IGludHJvZHVjZXMgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocygpIGFuZCB1cGRhdGVzIGxpbmsgY29uZmlndXJhdGlvbiBhbmQgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gaXBncmVfY2hhbmdlbGluaygpLCBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgaW9jdGwvbmV0bGluayBwYXJhbWV0ZXIgcGFyc2Vycy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBleGVyY2lzYWJsZSB2aWEgcnRubCBuZXRsaW5rIGFuZCB0dW5uZWwgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDI6MTAuODg5MTYyMDA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzM1MzAzODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyNTkwOGJkMDc0NWMzMDRhYjE0MDI0ZTMyMjdkNzZlZTBiNTcxOGYzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgU2VwIDEyIDE1OjQyOjEwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxcbmluZGV4IDdjOWFhZGZlOGZlMzkuLmZkMDM5NmFhNTAzOTUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXFxuKysrIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXFxuQEAgLTQyOSw2ICs0MjksNyBAQCBpbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHQgICAgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCxcXG4gXFx0XFx0ICAgICAgX191MzIgZndtYXJrKTtcXG4gdm9pZCBpcF90dW5uZWxfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG5ldF9pZCk7XFxuK3ZvaWQgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpO1xcbiBcXG4gYm9vbCBpcF90dW5uZWxfbmV0bGlua19lbmNhcF9wYXJtcyhzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmVuY2FwKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuY1xcbmluZGV4IDgyMzA5ZWZkNDE3ZTAuLjQ4MDdmYzZkMmZkODggMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmNcXG4rKysgYi9uZXQvaXB2NC9pcF9ncmUuY1xcbkBAIC03ODksMjMgKzc4OSwyOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIGlwZ3JlX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSlcXG4rLyogdHVubmVsLVxcdTAwM2VobGVuIGRlcGVuZHMgb24gdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzIGFuZCBvbiB0dW5uZWwtXFx1MDAzZWVuY2FwX2hsZW4sXFxuKyAqIGJvdGggb2Ygd2hpY2ggaXBncmVfY2hhbmdlbGluaygpIGNhbiBjaGFuZ2UuIFJlY29tcHV0ZSBpdCB0aGUgd2F5XFxuKyAqIF9fZ3JlX3R1bm5lbF9pbml0KCkgZG9lcywgdGhlbiBsZXQgaXBfdHVubmVsX2JpbmRfZGV2KCkgZGVyaXZlIHRoZSBkZXZpY2VcXG4rICogbGVuZ3RocyBmcm9tIGl0LlxcbisgKlxcbisgKiBAb2xkX2hsZW4gaXMgb25seSB1c2VkIHRvIHRlbGwgd2hldGhlciB0aGUgTVRVIGJlY2FtZSBzdGFsZSwgbmV2ZXIgYXMgYVxcbisgKiBkaWZmZXJlbmNlIHRvIGFwcGx5LCBzbyBpdCBjYW4gbm90IG1ha2UgdGhlIGxlbmd0aHMgZHJpZnQuIEl0IG11c3QgYmVcXG4rICogc2FtcGxlZCBiZWZvcmUgaXBfdHVubmVsX2VuY2FwX3NldHVwKCksIHdoaWNoIGFscmVhZHkgcHVibGlzaGVzIHRoZSBuZXdcXG4rICogdHVubmVsLVxcdTAwM2VobGVuIGZvciB1cy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlwZ3JlX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSxcXG4rXFx0XFx0XFx0ICAgICAgaW50IG9sZF9obGVuKVxcbiB7XFxuIFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuLVxcdGludCBsZW47XFxuIFxcbi1cXHRsZW4gPSB0dW5uZWwtXFx1MDAzZXR1bl9obGVuO1xcbiBcXHR0dW5uZWwtXFx1MDAzZXR1bl9obGVuID0gZ3JlX2NhbGNfaGxlbih0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbi1cXHRsZW4gPSB0dW5uZWwtXFx1MDAzZXR1bl9obGVuIC0gbGVuO1xcbi1cXHR0dW5uZWwtXFx1MDAzZWhsZW4gPSB0dW5uZWwtXFx1MDAzZWhsZW4gKyBsZW47XFxuLVxcbi1cXHRpZiAoZGV2LVxcdTAwM2VoZWFkZXJfb3BzKVxcbi1cXHRcXHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbiArPSBsZW47XFxuLVxcdGVsc2VcXG4tXFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gKz0gbGVuO1xcbitcXHR0dW5uZWwtXFx1MDAzZWhsZW4gPSB0dW5uZWwtXFx1MDAzZXR1bl9obGVuICsgdHVubmVsLVxcdTAwM2VlbmNhcF9obGVuO1xcbiBcXG4tXFx0aWYgKHNldF9tdHUpXFxuLVxcdFxcdFdSSVRFX09OQ0UoZGV2LVxcdTAwM2VtdHUsIG1heF90KGludCwgZGV2LVxcdTAwM2VtdHUgLSBsZW4sIDY4KSk7XFxuK1xcdC8qIE9ubHkgcmVzZXQgYSBNVFUgdGhhdCB0aGUgaGVhZGVyIGxlbmd0aCBqdXN0IGludmFsaWRhdGVkLCBzbyB0aGF0XFxuK1xcdCAqIGEgTVRVIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIgc3Vydml2ZXMgYW4gdW5yZWxhdGVkIGNoYW5nZS5cXG4rXFx0ICovXFxuK1xcdGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoZGV2LCBzZXRfbXR1IFxcdTAwMjZcXHUwMDI2IHR1bm5lbC1cXHUwMDNlaGxlbiAhPSBvbGRfaGxlbik7XFxuIFxcbiBcXHRpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFncykgfHxcXG4gXFx0ICAgICh0ZXN0X2JpdChJUF9UVU5ORUxfQ1NVTV9CSVQsIHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFncykgXFx1MDAyNlxcdTAwMjZcXG5AQCAtODUzLDcgKzg1OCw3IEBAIHN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRpcF90dW5uZWxfZmxhZ3NfY29weSh0LVxcdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLVxcdTAwM2VvX2ZsYWdzKTtcXG4gXFxuIFxcdFxcdGlmIChzdHJjbXAoZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzLVxcdTAwM2VraW5kLCBcXFwiZXJzcGFuXFxcIikpXFxuLVxcdFxcdFxcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSk7XFxuK1xcdFxcdFxcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSwgdC1cXHUwMDNlaGxlbik7XFxuIFxcdH1cXG4gXFxuIFxcdGlfZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVxcdTAwM2VpX2ZsYWdzKTtcXG5AQCAtMTIzMywxMiArMTIzOCw2IEBAIHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRwYXJtcy1cXHUwMDNlaXBoLmZyYWdfb2ZmID0gaHRvbnMoSVBfREYpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoZGF0YVtJRkxBX0dSRV9DT0xMRUNUX01FVEFEQVRBXSkge1xcbi1cXHRcXHR0LVxcdTAwM2Vjb2xsZWN0X21kID0gdHJ1ZTtcXG4tXFx0XFx0aWYgKGRldi1cXHUwMDNldHlwZSA9PSBBUlBIUkRfSVBHUkUpXFxuLVxcdFxcdFxcdGRldi1cXHUwMDNldHlwZSA9IEFSUEhSRF9OT05FO1xcbi1cXHR9XFxuLVxcbiBcXHRpZiAoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKSB7XFxuIFxcdFxcdGlmIChubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSlcXG4gXFx0XFx0ICBcXHUwMDI2XFx1MDAyNiAocGFybXMtXFx1MDAzZWlwaC5mcmFnX29mZiBcXHUwMDI2IGh0b25zKElQX0RGKSkpXFxuQEAgLTEyNDYsNiArMTI0NSwxMyBAQCBzdGF0aWMgaW50IGlwZ3JlX25ldGxpbmtfcGFybXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0dC1cXHUwMDNlaWdub3JlX2RmID0gISFubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSk7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIEFsbCBhdHRyaWJ1dGVzIGhhdmUgYmVlbiB2YWxpZGF0ZWQsIHdlIGNhbiBjaGFuZ2UgQGRldiBhbmQgQHQuICovXFxuK1xcdGlmIChkYXRhW0lGTEFfR1JFX0NPTExFQ1RfTUVUQURBVEFdKSB7XFxuK1xcdFxcdHQtXFx1MDAzZWNvbGxlY3RfbWQgPSB0cnVlO1xcbitcXHRcXHRpZiAoZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9JUEdSRSlcXG4rXFx0XFx0XFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChkYXRhW0lGTEFfR1JFX0ZXTUFSS10pXFxuIFxcdFxcdCpmd21hcmsgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0ZXTUFSS10pO1xcbiBcXG5AQCAtMTI1OSw0MCArMTI2NSw1MSBAQCBzdGF0aWMgaW50IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdF9fdTMyICpmd21hcmspXFxuIHtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcdHU4IGVyc3Bhbl92ZXIgPSB0LVxcdTAwM2VlcnNwYW5fdmVyO1xcbitcXHR1MzIgaW5kZXggPSB0LVxcdTAwM2VpbmRleDtcXG4rXFx0dTE2IGh3aWQgPSB0LVxcdTAwM2Vod2lkO1xcbitcXHR1OCBkaXIgPSB0LVxcdTAwM2VkaXI7XFxuIFxcdGludCBlcnI7XFxuIFxcbi1cXHRlcnIgPSBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRpZiAoIWRhdGEpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBwYXJtcywgZndtYXJrKTtcXG4gXFxuIFxcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKSB7XFxuLVxcdFxcdHQtXFx1MDAzZWVyc3Bhbl92ZXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pO1xcbitcXHRcXHRlcnNwYW5fdmVyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKTtcXG4gXFxuLVxcdFxcdGlmICh0LVxcdTAwM2VlcnNwYW5fdmVyIFxcdTAwM2UgMilcXG4rXFx0XFx0aWYgKGVyc3Bhbl92ZXIgXFx1MDAzZSAyKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHQtXFx1MDAzZWVyc3Bhbl92ZXIgPT0gMSkge1xcbitcXHRpZiAoZXJzcGFuX3ZlciA9PSAxKSB7XFxuIFxcdFxcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pIHtcXG4tXFx0XFx0XFx0dC1cXHUwMDNlaW5kZXggPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pO1xcbi1cXHRcXHRcXHRpZiAodC1cXHUwMDNlaW5kZXggXFx1MDAyNiB+SU5ERVhfTUFTSylcXG4rXFx0XFx0XFx0aW5kZXggPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pO1xcbitcXHRcXHRcXHRpZiAoaW5kZXggXFx1MDAyNiB+SU5ERVhfTUFTSylcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4tXFx0fSBlbHNlIGlmICh0LVxcdTAwM2VlcnNwYW5fdmVyID09IDIpIHtcXG4rXFx0fSBlbHNlIGlmIChlcnNwYW5fdmVyID09IDIpIHtcXG4gXFx0XFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pIHtcXG4tXFx0XFx0XFx0dC1cXHUwMDNlZGlyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9ESVJdKTtcXG4tXFx0XFx0XFx0aWYgKHQtXFx1MDAzZWRpciBcXHUwMDI2IH4oRElSX01BU0sgXFx1MDAzZVxcdTAwM2UgRElSX09GRlNFVCkpXFxuK1xcdFxcdFxcdGRpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7XFxuK1xcdFxcdFxcdGlmIChkaXIgXFx1MDAyNiB+KERJUl9NQVNLIFxcdTAwM2VcXHUwMDNlIERJUl9PRkZTRVQpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pIHtcXG4tXFx0XFx0XFx0dC1cXHUwMDNlaHdpZCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKTtcXG4tXFx0XFx0XFx0aWYgKHQtXFx1MDAzZWh3aWQgXFx1MDAyNiB+KEhXSURfTUFTSyBcXHUwMDNlXFx1MDAzZSBIV0lEX09GRlNFVCkpXFxuK1xcdFxcdFxcdGh3aWQgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfR1JFX0VSU1BBTl9IV0lEXSk7XFxuK1xcdFxcdFxcdGlmIChod2lkIFxcdTAwMjYgfihIV0lEX01BU0sgXFx1MDAzZVxcdTAwM2UgSFdJRF9PRkZTRVQpKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbitcXHRlcnIgPSBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAdC4gKi9cXG4rXFx0dC1cXHUwMDNlZXJzcGFuX3ZlciA9IGVyc3Bhbl92ZXI7XFxuK1xcdHQtXFx1MDAzZWluZGV4ID0gaW5kZXg7XFxuK1xcdHQtXFx1MDAzZWh3aWQgPSBod2lkO1xcbitcXHR0LVxcdTAwM2VkaXIgPSBkaXI7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTM1MSwxOCArMTM2OCw0MyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19maWxsX21ldGFkYXRhX2RzdFxcdD0gZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0LFxcbiB9O1xcbiBcXG4rc3RhdGljIHZvaWQgZXJzcGFuX3NldF9obGVuKHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbClcXG4re1xcbitcXHQvKiBWZXJzaW9uIDAgdXNlcyBhIDQtYnl0ZSBHUkUgaGVhZGVyLCBvdGhlciB2ZXJzaW9ucyB1c2UgOCBieXRlcy4gKi9cXG4rXFx0dHVubmVsLVxcdTAwM2V0dW5faGxlbiA9IHR1bm5lbC1cXHUwMDNlZXJzcGFuX3ZlciA9PSAwID8gNCA6IDg7XFxuK1xcbitcXHR0dW5uZWwtXFx1MDAzZWhsZW4gPSB0dW5uZWwtXFx1MDAzZXR1bl9obGVuICsgdHVubmVsLVxcdTAwM2VlbmNhcF9obGVuICtcXG4rXFx0XFx0ICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC1cXHUwMDNlZXJzcGFuX3Zlcik7XFxuK31cXG4rXFxuKy8qIEJvdGggdHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyIGFuZCB0dW5uZWwtXFx1MDAzZWVuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbVxcbisgKiBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgYm90aCBmZWVkIHR1bm5lbC1cXHUwMDNlaGxlbi4gUmVjb21wdXRlIGl0LCB0aGVuIGxldFxcbisgKiBpcF90dW5uZWxfYmluZF9kZXYoKSBkZXJpdmUgdGhlIGRldmljZSBsZW5ndGhzIGZyb20gaXQuXFxuKyAqXFxuKyAqIEFzIGluIGlwZ3JlX2xpbmtfdXBkYXRlKCksIEBvbGRfaGxlbiBvbmx5IHRlbGxzIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWVcXG4rICogc3RhbGUgYW5kIG11c3QgYmUgc2FtcGxlZCBiZWZvcmUgaXBfdHVubmVsX2VuY2FwX3NldHVwKCksIHdoaWNoXFxuKyAqIHJlY29tcHV0ZXMgdHVubmVsLVxcdTAwM2VobGVuIHdpdGhvdXQgdGhlIEVSU1BBTiBwYXJ0LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZXJzcGFuX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSxcXG4rXFx0XFx0XFx0ICAgICAgIGludCBvbGRfaGxlbilcXG4re1xcbitcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXG4rXFx0ZXJzcGFuX3NldF9obGVuKHR1bm5lbCk7XFxuK1xcbitcXHQvKiBPbmx5IHJlc2V0IGEgTVRVIHRoYXQgdGhlIGhlYWRlciBsZW5ndGgganVzdCBpbnZhbGlkYXRlZCwgc28gdGhhdFxcbitcXHQgKiBhIE1UVSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyIHN1cnZpdmVzIGFuIHVucmVsYXRlZCBjaGFuZ2UuXFxuK1xcdCAqL1xcbitcXHRpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKGRldiwgc2V0X210dSBcXHUwMDI2XFx1MDAyNiB0dW5uZWwtXFx1MDAzZWhsZW4gIT0gb2xkX2hsZW4pO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGVyc3Bhbl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcbi1cXHRpZiAodHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyID09IDApXFxuLVxcdFxcdHR1bm5lbC1cXHUwMDNldHVuX2hsZW4gPSA0OyAvKiA0LWJ5dGUgR1JFIGhkci4gKi9cXG4tXFx0ZWxzZVxcbi1cXHRcXHR0dW5uZWwtXFx1MDAzZXR1bl9obGVuID0gODsgLyogOC1ieXRlIEdSRSBoZHIuICovXFxuK1xcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xcbiBcXG4gXFx0dHVubmVsLVxcdTAwM2VwYXJtcy5pcGgucHJvdG9jb2wgPSBJUFBST1RPX0dSRTtcXG4tXFx0dHVubmVsLVxcdTAwM2VobGVuID0gdHVubmVsLVxcdTAwM2V0dW5faGxlbiArIHR1bm5lbC1cXHUwMDNlZW5jYXBfaGxlbiArXFxuLVxcdFxcdCAgICAgICBlcnNwYW5faGRyX2xlbih0dW5uZWwtXFx1MDAzZWVyc3Bhbl92ZXIpO1xcbiBcXG4gXFx0ZGV2LVxcdTAwM2VmZWF0dXJlc1xcdFxcdHw9IEdSRV9GRUFUVVJFUztcXG4gXFx0ZGV2LVxcdTAwM2Vod19mZWF0dXJlc1xcdHw9IEdSRV9GRUFUVVJFUztcXG5AQCAtMTQ1OSw2ICsxNTAxLDcgQEAgc3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuIFxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwO1xcbiBcXHRfX3UzMiBmd21hcmsgPSB0LVxcdTAwM2Vmd21hcms7XFxuK1xcdGludCBvbGRfaGxlbiA9IHQtXFx1MDAzZWhsZW47XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVxcdTAwM2VuZXQpKVxcbkBAIC0xNDcwLDE4ICsxNTEzLDI0IEBAIHN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbiBcXG4gXFx0ZXJyID0gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBcXHUwMDI2cCwgXFx1MDAyNmZ3bWFyayk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIGxpbmtfdXBkYXRlO1xcbiBcXG4gXFx0ZXJyID0gaXBfdHVubmVsX2NoYW5nZWxpbmsoZGV2LCB0YiwgXFx1MDAyNnAsIGZ3bWFyayk7XFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIGxpbmtfdXBkYXRlO1xcbiBcXG4gXFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cXHUwMDNlcGFybXMuaV9mbGFncywgcC5pX2ZsYWdzKTtcXG4gXFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cXHUwMDNlcGFybXMub19mbGFncywgcC5vX2ZsYWdzKTtcXG4gXFxuLVxcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSk7XFxuK2xpbmtfdXBkYXRlOlxcbitcXHQvKiBpcGdyZV9uZXdsaW5rX2VuY2FwX3NldHVwKCkgaGFzIHB1Ymxpc2hlZCBhIG5ldyBlbmNhcHN1bGF0aW9uIGV2ZW5cXG4rXFx0ICogaWYgdGhlIHJlc3Qgb2YgdGhlIHJlcXVlc3QgZmFpbGVkLCBzbyB0aGUgbGVuZ3RocyBtdXN0IGJlIHJlZnJlc2hlZFxcbitcXHQgKiBvbiB0aGUgZXJyb3IgcGF0aHMgYXMgd2VsbC4gVGhpcyBoYXMgdG8gY29tZSBsYXN0LCBiZWNhdXNlXFxuK1xcdCAqIGlwZ3JlX2xpbmtfdXBkYXRlKCkgbmVlZHMgdGhlIGZsYWdzIGNvcGllZCBhYm92ZS5cXG4rXFx0ICovXFxuK1xcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSwgb2xkX2hsZW4pO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG5AQCAtMTQ5MSw2ICsxNTQwLDcgQEAgc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbiBcXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcXG4gXFx0X191MzIgZndtYXJrID0gdC1cXHUwMDNlZndtYXJrO1xcbitcXHRpbnQgb2xkX2hsZW4gPSB0LVxcdTAwM2VobGVuO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG5AQCAtMTUwMSw2ICsxNTUxLDE2IEBAIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdGVyciA9IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIFxcdTAwMjZwLCBcXHUwMDI2ZndtYXJrKTtcXG4rXFxuK1xcdC8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24sIGFuZFxcbitcXHQgKiBlcnNwYW5fbmV0bGlua19wYXJtcygpIGEgbmV3IEVSU1BBTiB2ZXJzaW9uLCBib3RoIG9mIHdoaWNoIGNoYW5nZVxcbitcXHQgKiB0aGUgaGVhZGVyIGxlbmd0aC4gUmVmcmVzaCB0aGUgbGVuZ3RocyBiZWZvcmUgbG9va2luZyBhdCBAZXJyOlxcbitcXHQgKiBlcnNwYW5feG1pdCgpIHNpemVzIGl0cyBwdXNoIGZyb20gdHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyLCBhbmQgYm90aCB0aGlzXFxuK1xcdCAqIGVycm9yIHBhdGggYW5kIGlwX3R1bm5lbF9jaGFuZ2VsaW5rKCkgYmVsb3cgbGVhdmUgdGhlIG5ld1xcbitcXHQgKiBlbmNhcHN1bGF0aW9uIGJlaGluZC5cXG4rXFx0ICovXFxuK1xcdGVyc3Bhbl9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcXG4rXFxuIFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbmluZGV4IGU2YmNmMDE0MTFkMGIuLjZiOTNjMWZkYTQ5NDggMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaXBfdHVubmVsLmNcXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xcbkBAIC0zMjYsNiArMzI2LDIyIEBAIHN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdHJldHVybiBtdHU7XFxuIH1cXG4gXFxuKy8qIFJlY29tcHV0ZSBkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSBhbmQgZGV2LVxcdTAwM2VtdHUgYWZ0ZXIgdHVubmVsLVxcdTAwM2VobGVuIGNoYW5nZWQuXFxuKyAqXFxuKyAqIEJvdGggYXJlIGRlcml2ZWQgZnJvbSB0dW5uZWwtXFx1MDAzZWhsZW4sIHNvIHRoZXkgbXVzdCBiZSByZWNvbXB1dGVkIGZyb20gaXRcXG4rICogcmF0aGVyIHRoYW4gYWRqdXN0ZWQgYnkgdGhlIGRpZmZlcmVuY2U6IGlwX3R1bm5lbF9iaW5kX2RldigpIGlzIGFsc29cXG4rICogY2FsbGVkIGZyb20gbmRvX2luaXQoKSBhbmQgZnJvbSBpcF90dW5uZWxfdXBkYXRlKCksIGFuZCBhIGRyaXZlciBhZGRpbmdcXG4rICogaXRzIG93biBkZWx0YSBvbiB0b3Agd291bGQgZG91YmxlIGNvdW50IGl0LlxcbisgKi9cXG4rdm9pZCBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSlcXG4re1xcbitcXHRpbnQgbXR1ID0gaXBfdHVubmVsX2JpbmRfZGV2KGRldik7XFxuK1xcbitcXHRpZiAoc2V0X210dSlcXG4rXFx0XFx0V1JJVEVfT05DRShkZXYtXFx1MDAzZW10dSwgbXR1KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKTtcXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuLFxcbiBcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwYXJtcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDI6MTEuMjYzMzg4NDdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU4MDM2NDUzMzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiTkVUX0lQR1JFX0RFTVVYXCIsXG4gICAgXCJORVRfSVBfVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc1wiLFxuICAgIFwiaXBncmVfbGlua191cGRhdGVcIixcbiAgICBcImVyc3Bhbl9saW5rX3VwZGF0ZVwiLFxuICAgIFwiZXJzcGFuX3NldF9obGVuXCIsXG4gICAgXCJpcGdyZV9uZXRsaW5rX3Bhcm1zXCIsXG4gICAgXCJlcnNwYW5fbmV0bGlua19wYXJtc1wiLFxuICAgIFwiaXBncmVfY2hhbmdlbGlua1wiLFxuICAgIFwiZXJzcGFuX2NoYW5nZWxpbmtcIixcbiAgICBcImlwZ3JlX3R1bm5lbF9jdGxcIixcbiAgICBcImVyc3Bhbl90dW5uZWxfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBhbmQgZml4ZXMgZGV2aWNlIGhlYWRlciBsZW5ndGgsIE1UVSwgYW5kIGhlYWRyb29tIHVwZGF0ZXMgaW4gdGhlIElQdjQgR1JFIGFuZCBFUlNQQU4gdHVubmVsaW5nIGRyaXZlcnMuIEl0IGludHJvZHVjZXMgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocygpIGFuZCB1cGRhdGVzIGxpbmsgY29uZmlndXJhdGlvbiBhbmQgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gaXBncmVfY2hhbmdlbGluaygpLCBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgaW9jdGwvbmV0bGluayBwYXJhbWV0ZXIgcGFyc2Vycy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBleGVyY2lzYWJsZSB2aWEgcnRubCBuZXRsaW5rIGFuZCB0dW5uZWwgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNTkwOGJkMDc0NWMzMDRhYjE0MDI0ZTMyMjdkNzZlZTBiNTcxOGYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTU6NDI6MTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmggYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbmluZGV4IDdjOWFhZGZlOGZlMzkuLmZkMDM5NmFhNTAzOTUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmhcbisrKyBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuQEAgLTQyOSw2ICs0MjksNyBAQCBpbnQgaXBfdHVubmVsX25ld2xpbmsoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCxcbiBcdFx0ICAgICAgX191MzIgZndtYXJrKTtcbiB2b2lkIGlwX3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbmV0X2lkKTtcbit2b2lkIGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KTtcbiBcbiBib29sIGlwX3R1bm5lbF9uZXRsaW5rX2VuY2FwX3Bhcm1zKHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbiBcdFx0XHRcdCAgIHN0cnVjdCBpcF90dW5uZWxfZW5jYXAgKmVuY2FwKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jXG5pbmRleCA4MjMwOWVmZDQxN2UwLi40ODA3ZmM2ZDJmZDg4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmNcbisrKyBiL25ldC9pcHY0L2lwX2dyZS5jXG5AQCAtNzg5LDIzICs3ODksMjggQEAgc3RhdGljIG5ldGRldl90eF90IGdyZV90YXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG4gXG4tc3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KVxuKy8qIHR1bm5lbC1cdTAwM2VobGVuIGRlcGVuZHMgb24gdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MgYW5kIG9uIHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuLFxuKyAqIGJvdGggb2Ygd2hpY2ggaXBncmVfY2hhbmdlbGluaygpIGNhbiBjaGFuZ2UuIFJlY29tcHV0ZSBpdCB0aGUgd2F5XG4rICogX19ncmVfdHVubmVsX2luaXQoKSBkb2VzLCB0aGVuIGxldCBpcF90dW5uZWxfYmluZF9kZXYoKSBkZXJpdmUgdGhlIGRldmljZVxuKyAqIGxlbmd0aHMgZnJvbSBpdC5cbisgKlxuKyAqIEBvbGRfaGxlbiBpcyBvbmx5IHVzZWQgdG8gdGVsbCB3aGV0aGVyIHRoZSBNVFUgYmVjYW1lIHN0YWxlLCBuZXZlciBhcyBhXG4rICogZGlmZmVyZW5jZSB0byBhcHBseSwgc28gaXQgY2FuIG5vdCBtYWtlIHRoZSBsZW5ndGhzIGRyaWZ0LiBJdCBtdXN0IGJlXG4rICogc2FtcGxlZCBiZWZvcmUgaXBfdHVubmVsX2VuY2FwX3NldHVwKCksIHdoaWNoIGFscmVhZHkgcHVibGlzaGVzIHRoZSBuZXdcbisgKiB0dW5uZWwtXHUwMDNlaGxlbiBmb3IgdXMuXG4rICovXG4rc3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1LFxuK1x0XHRcdCAgICAgIGludCBvbGRfaGxlbilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0aW50IGxlbjtcbiBcbi1cdGxlbiA9IHR1bm5lbC1cdTAwM2V0dW5faGxlbjtcbiBcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IGdyZV9jYWxjX2hsZW4odHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuLVx0bGVuID0gdHVubmVsLVx1MDAzZXR1bl9obGVuIC0gbGVuO1xuLVx0dHVubmVsLVx1MDAzZWhsZW4gPSB0dW5uZWwtXHUwMDNlaGxlbiArIGxlbjtcbi1cbi1cdGlmIChkZXYtXHUwMDNlaGVhZGVyX29wcylcbi1cdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiArPSBsZW47XG4tXHRlbHNlXG4tXHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gKz0gbGVuO1xuK1x0dHVubmVsLVx1MDAzZWhsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gKyB0dW5uZWwtXHUwMDNlZW5jYXBfaGxlbjtcbiBcbi1cdGlmIChzZXRfbXR1KVxuLVx0XHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG1heF90KGludCwgZGV2LVx1MDAzZW10dSAtIGxlbiwgNjgpKTtcbitcdC8qIE9ubHkgcmVzZXQgYSBNVFUgdGhhdCB0aGUgaGVhZGVyIGxlbmd0aCBqdXN0IGludmFsaWRhdGVkLCBzbyB0aGF0XG4rXHQgKiBhIE1UVSBjb25maWd1cmVkIGJ5IHRoZSB1c2VyIHN1cnZpdmVzIGFuIHVucmVsYXRlZCBjaGFuZ2UuXG4rXHQgKi9cbitcdGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoZGV2LCBzZXRfbXR1IFx1MDAyNlx1MDAyNiB0dW5uZWwtXHUwMDNlaGxlbiAhPSBvbGRfaGxlbik7XG4gXG4gXHRpZiAodGVzdF9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKSB8fFxuIFx0ICAgICh0ZXN0X2JpdChJUF9UVU5ORUxfQ1NVTV9CSVQsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKSBcdTAwMjZcdTAwMjZcbkBAIC04NTMsNyArODU4LDcgQEAgc3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMub19mbGFncywgcC1cdTAwM2VvX2ZsYWdzKTtcbiBcbiBcdFx0aWYgKHN0cmNtcChkZXYtXHUwMDNlcnRubF9saW5rX29wcy1cdTAwM2VraW5kLCBcImVyc3BhblwiKSlcbi1cdFx0XHRpcGdyZV9saW5rX3VwZGF0ZShkZXYsIHRydWUpO1xuK1x0XHRcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSwgdC1cdTAwM2VobGVuKTtcbiBcdH1cbiBcbiBcdGlfZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVx1MDAzZWlfZmxhZ3MpO1xuQEAgLTEyMzMsMTIgKzEyMzgsNiBAQCBzdGF0aWMgaW50IGlwZ3JlX25ldGxpbmtfcGFybXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0cGFybXMtXHUwMDNlaXBoLmZyYWdfb2ZmID0gaHRvbnMoSVBfREYpO1xuIFx0fVxuIFxuLVx0aWYgKGRhdGFbSUZMQV9HUkVfQ09MTEVDVF9NRVRBREFUQV0pIHtcbi1cdFx0dC1cdTAwM2Vjb2xsZWN0X21kID0gdHJ1ZTtcbi1cdFx0aWYgKGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JUEdSRSlcbi1cdFx0XHRkZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9OT05FO1xuLVx0fVxuLVxuIFx0aWYgKGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSkge1xuIFx0XHRpZiAobmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pXG4gXHRcdCAgXHUwMDI2XHUwMDI2IChwYXJtcy1cdTAwM2VpcGguZnJhZ19vZmYgXHUwMDI2IGh0b25zKElQX0RGKSkpXG5AQCAtMTI0Niw2ICsxMjQ1LDEzIEBAIHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHR0LVx1MDAzZWlnbm9yZV9kZiA9ICEhbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pO1xuIFx0fVxuIFxuK1x0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAZGV2IGFuZCBAdC4gKi9cbitcdGlmIChkYXRhW0lGTEFfR1JFX0NPTExFQ1RfTUVUQURBVEFdKSB7XG4rXHRcdHQtXHUwMDNlY29sbGVjdF9tZCA9IHRydWU7XG4rXHRcdGlmIChkZXYtXHUwMDNldHlwZSA9PSBBUlBIUkRfSVBHUkUpXG4rXHRcdFx0ZGV2LVx1MDAzZXR5cGUgPSBBUlBIUkRfTk9ORTtcbitcdH1cbitcbiBcdGlmIChkYXRhW0lGTEFfR1JFX0ZXTUFSS10pXG4gXHRcdCpmd21hcmsgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0ZXTUFSS10pO1xuIFxuQEAgLTEyNTksNDAgKzEyNjUsNTEgQEAgc3RhdGljIGludCBlcnNwYW5fbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0X191MzIgKmZ3bWFyaylcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdHU4IGVyc3Bhbl92ZXIgPSB0LVx1MDAzZWVyc3Bhbl92ZXI7XG4rXHR1MzIgaW5kZXggPSB0LVx1MDAzZWluZGV4O1xuK1x0dTE2IGh3aWQgPSB0LVx1MDAzZWh3aWQ7XG4rXHR1OCBkaXIgPSB0LVx1MDAzZWRpcjtcbiBcdGludCBlcnI7XG4gXG4tXHRlcnIgPSBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xuLVx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiBcdGlmICghZGF0YSlcbi1cdFx0cmV0dXJuIDA7XG4rXHRcdHJldHVybiBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xuIFxuIFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pIHtcbi1cdFx0dC1cdTAwM2VlcnNwYW5fdmVyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKTtcbitcdFx0ZXJzcGFuX3ZlciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSk7XG4gXG4tXHRcdGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgXHUwMDNlIDIpXG4rXHRcdGlmIChlcnNwYW5fdmVyIFx1MDAzZSAyKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0aWYgKHQtXHUwMDNlZXJzcGFuX3ZlciA9PSAxKSB7XG4rXHRpZiAoZXJzcGFuX3ZlciA9PSAxKSB7XG4gXHRcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pIHtcbi1cdFx0XHR0LVx1MDAzZWluZGV4ID0gbmxhX2dldF91MzIoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSU5ERVhdKTtcbi1cdFx0XHRpZiAodC1cdTAwM2VpbmRleCBcdTAwMjYgfklOREVYX01BU0spXG4rXHRcdFx0aW5kZXggPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pO1xuK1x0XHRcdGlmIChpbmRleCBcdTAwMjYgfklOREVYX01BU0spXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuLVx0fSBlbHNlIGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgPT0gMikge1xuK1x0fSBlbHNlIGlmIChlcnNwYW5fdmVyID09IDIpIHtcbiBcdFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pIHtcbi1cdFx0XHR0LVx1MDAzZWRpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7XG4tXHRcdFx0aWYgKHQtXHUwMDNlZGlyIFx1MDAyNiB+KERJUl9NQVNLIFx1MDAzZVx1MDAzZSBESVJfT0ZGU0VUKSlcbitcdFx0XHRkaXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pO1xuK1x0XHRcdGlmIChkaXIgXHUwMDI2IH4oRElSX01BU0sgXHUwMDNlXHUwMDNlIERJUl9PRkZTRVQpKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKSB7XG4tXHRcdFx0dC1cdTAwM2Vod2lkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pO1xuLVx0XHRcdGlmICh0LVx1MDAzZWh3aWQgXHUwMDI2IH4oSFdJRF9NQVNLIFx1MDAzZVx1MDAzZSBIV0lEX09GRlNFVCkpXG4rXHRcdFx0aHdpZCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKTtcbitcdFx0XHRpZiAoaHdpZCBcdTAwMjYgfihIV0lEX01BU0sgXHUwMDNlXHUwMDNlIEhXSURfT0ZGU0VUKSlcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHR9XG4gXG4rXHRlcnIgPSBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIGVycjtcbitcbitcdC8qIEFsbCBhdHRyaWJ1dGVzIGhhdmUgYmVlbiB2YWxpZGF0ZWQsIHdlIGNhbiBjaGFuZ2UgQHQuICovXG4rXHR0LVx1MDAzZWVyc3Bhbl92ZXIgPSBlcnNwYW5fdmVyO1xuK1x0dC1cdTAwM2VpbmRleCA9IGluZGV4O1xuK1x0dC1cdTAwM2Vod2lkID0gaHdpZDtcbitcdHQtXHUwMDNlZGlyID0gZGlyO1xuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTEzNTEsMTggKzEzNjgsNDMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBncmVfdGFwX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX2ZpbGxfbWV0YWRhdGFfZHN0XHQ9IGdyZV9maWxsX21ldGFkYXRhX2RzdCxcbiB9O1xuIFxuK3N0YXRpYyB2b2lkIGVyc3Bhbl9zZXRfaGxlbihzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwpXG4re1xuK1x0LyogVmVyc2lvbiAwIHVzZXMgYSA0LWJ5dGUgR1JFIGhlYWRlciwgb3RoZXIgdmVyc2lvbnMgdXNlIDggYnl0ZXMuICovXG4rXHR0dW5uZWwtXHUwMDNldHVuX2hsZW4gPSB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciA9PSAwID8gNCA6IDg7XG4rXG4rXHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2V0dW5faGxlbiArIHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuICtcbitcdFx0ICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyKTtcbit9XG4rXG4rLyogQm90aCB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciBhbmQgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbVxuKyAqIGVyc3Bhbl9jaGFuZ2VsaW5rKCksIGFuZCBib3RoIGZlZWQgdHVubmVsLVx1MDAzZWhsZW4uIFJlY29tcHV0ZSBpdCwgdGhlbiBsZXRcbisgKiBpcF90dW5uZWxfYmluZF9kZXYoKSBkZXJpdmUgdGhlIGRldmljZSBsZW5ndGhzIGZyb20gaXQuXG4rICpcbisgKiBBcyBpbiBpcGdyZV9saW5rX3VwZGF0ZSgpLCBAb2xkX2hsZW4gb25seSB0ZWxscyB3aGV0aGVyIHRoZSBNVFUgYmVjYW1lXG4rICogc3RhbGUgYW5kIG11c3QgYmUgc2FtcGxlZCBiZWZvcmUgaXBfdHVubmVsX2VuY2FwX3NldHVwKCksIHdoaWNoXG4rICogcmVjb21wdXRlcyB0dW5uZWwtXHUwMDNlaGxlbiB3aXRob3V0IHRoZSBFUlNQQU4gcGFydC5cbisgKi9cbitzdGF0aWMgdm9pZCBlcnNwYW5fbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1LFxuK1x0XHRcdCAgICAgICBpbnQgb2xkX2hsZW4pXG4re1xuK1x0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xuK1xuK1x0LyogT25seSByZXNldCBhIE1UVSB0aGF0IHRoZSBoZWFkZXIgbGVuZ3RoIGp1c3QgaW52YWxpZGF0ZWQsIHNvIHRoYXRcbitcdCAqIGEgTVRVIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIgc3Vydml2ZXMgYW4gdW5yZWxhdGVkIGNoYW5nZS5cbitcdCAqL1xuK1x0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbit9XG4rXG4gc3RhdGljIGludCBlcnNwYW5fdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0aWYgKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDApXG4tXHRcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IDQ7IC8qIDQtYnl0ZSBHUkUgaGRyLiAqL1xuLVx0ZWxzZVxuLVx0XHR0dW5uZWwtXHUwMDNldHVuX2hsZW4gPSA4OyAvKiA4LWJ5dGUgR1JFIGhkci4gKi9cbitcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xuIFxuIFx0dHVubmVsLVx1MDAzZXBhcm1zLmlwaC5wcm90b2NvbCA9IElQUFJPVE9fR1JFO1xuLVx0dHVubmVsLVx1MDAzZWhsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gKyB0dW5uZWwtXHUwMDNlZW5jYXBfaGxlbiArXG4tXHRcdCAgICAgICBlcnNwYW5faGRyX2xlbih0dW5uZWwtXHUwMDNlZXJzcGFuX3Zlcik7XG4gXG4gXHRkZXYtXHUwMDNlZmVhdHVyZXNcdFx0fD0gR1JFX0ZFQVRVUkVTO1xuIFx0ZGV2LVx1MDAzZWh3X2ZlYXR1cmVzXHR8PSBHUkVfRkVBVFVSRVM7XG5AQCAtMTQ1OSw2ICsxNTAxLDcgQEAgc3RhdGljIGludCBpcGdyZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XG4gXHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbitcdGludCBvbGRfaGxlbiA9IHQtXHUwMDNlaGxlbjtcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG5AQCAtMTQ3MCwxOCArMTUxMywyNCBAQCBzdGF0aWMgaW50IGlwZ3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcbiBcdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgXHUwMDI2cCwgXHUwMDI2ZndtYXJrKTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gbGlua191cGRhdGU7XG4gXG4gXHRlcnIgPSBpcF90dW5uZWxfY2hhbmdlbGluayhkZXYsIHRiLCBcdTAwMjZwLCBmd21hcmspO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBsaW5rX3VwZGF0ZTtcbiBcbiBcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMuaV9mbGFncywgcC5pX2ZsYWdzKTtcbiBcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXHUwMDNlcGFybXMub19mbGFncywgcC5vX2ZsYWdzKTtcbiBcbi1cdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgIXRiW0lGTEFfTVRVXSk7XG4rbGlua191cGRhdGU6XG4rXHQvKiBpcGdyZV9uZXdsaW5rX2VuY2FwX3NldHVwKCkgaGFzIHB1Ymxpc2hlZCBhIG5ldyBlbmNhcHN1bGF0aW9uIGV2ZW5cbitcdCAqIGlmIHRoZSByZXN0IG9mIHRoZSByZXF1ZXN0IGZhaWxlZCwgc28gdGhlIGxlbmd0aHMgbXVzdCBiZSByZWZyZXNoZWRcbitcdCAqIG9uIHRoZSBlcnJvciBwYXRocyBhcyB3ZWxsLiBUaGlzIGhhcyB0byBjb21lIGxhc3QsIGJlY2F1c2VcbitcdCAqIGlwZ3JlX2xpbmtfdXBkYXRlKCkgbmVlZHMgdGhlIGZsYWdzIGNvcGllZCBhYm92ZS5cbitcdCAqL1xuK1x0aXBncmVfbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdLCBvbGRfaGxlbik7XG4gXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbkBAIC0xNDkxLDYgKzE1NDAsNyBAQCBzdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XG4gXHRfX3UzMiBmd21hcmsgPSB0LVx1MDAzZWZ3bWFyaztcbitcdGludCBvbGRfaGxlbiA9IHQtXHUwMDNlaGxlbjtcbiBcdGludCBlcnI7XG4gXG4gXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVx1MDAzZW5ldCkpXG5AQCAtMTUwMSw2ICsxNTUxLDE2IEBAIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdGVyciA9IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIFx1MDAyNnAsIFx1MDAyNmZ3bWFyayk7XG4rXG4rXHQvKiBpcGdyZV9uZXdsaW5rX2VuY2FwX3NldHVwKCkgaGFzIHB1Ymxpc2hlZCBhIG5ldyBlbmNhcHN1bGF0aW9uLCBhbmRcbitcdCAqIGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKCkgYSBuZXcgRVJTUEFOIHZlcnNpb24sIGJvdGggb2Ygd2hpY2ggY2hhbmdlXG4rXHQgKiB0aGUgaGVhZGVyIGxlbmd0aC4gUmVmcmVzaCB0aGUgbGVuZ3RocyBiZWZvcmUgbG9va2luZyBhdCBAZXJyOlxuK1x0ICogZXJzcGFuX3htaXQoKSBzaXplcyBpdHMgcHVzaCBmcm9tIHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyLCBhbmQgYm90aCB0aGlzXG4rXHQgKiBlcnJvciBwYXRoIGFuZCBpcF90dW5uZWxfY2hhbmdlbGluaygpIGJlbG93IGxlYXZlIHRoZSBuZXdcbitcdCAqIGVuY2Fwc3VsYXRpb24gYmVoaW5kLlxuK1x0ICovXG4rXHRlcnNwYW5fbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdLCBvbGRfaGxlbik7XG4rXG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3R1bm5lbC5jIGIvbmV0L2lwdjQvaXBfdHVubmVsLmNcbmluZGV4IGU2YmNmMDE0MTFkMGIuLjZiOTNjMWZkYTQ5NDggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF90dW5uZWwuY1xuKysrIGIvbmV0L2lwdjQvaXBfdHVubmVsLmNcbkBAIC0zMjYsNiArMzI2LDIyIEBAIHN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gbXR1O1xuIH1cbiBcbisvKiBSZWNvbXB1dGUgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSBhbmQgZGV2LVx1MDAzZW10dSBhZnRlciB0dW5uZWwtXHUwMDNlaGxlbiBjaGFuZ2VkLlxuKyAqXG4rICogQm90aCBhcmUgZGVyaXZlZCBmcm9tIHR1bm5lbC1cdTAwM2VobGVuLCBzbyB0aGV5IG11c3QgYmUgcmVjb21wdXRlZCBmcm9tIGl0XG4rICogcmF0aGVyIHRoYW4gYWRqdXN0ZWQgYnkgdGhlIGRpZmZlcmVuY2U6IGlwX3R1bm5lbF9iaW5kX2RldigpIGlzIGFsc29cbisgKiBjYWxsZWQgZnJvbSBuZG9faW5pdCgpIGFuZCBmcm9tIGlwX3R1bm5lbF91cGRhdGUoKSwgYW5kIGEgZHJpdmVyIGFkZGluZ1xuKyAqIGl0cyBvd24gZGVsdGEgb24gdG9wIHdvdWxkIGRvdWJsZSBjb3VudCBpdC5cbisgKi9cbit2b2lkIGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1KVxuK3tcbitcdGludCBtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcbitcbitcdGlmIChzZXRfbXR1KVxuK1x0XHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG10dSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMpO1xuK1xuIHN0YXRpYyBzdHJ1Y3QgaXBfdHVubmVsICppcF90dW5uZWxfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0XHRcdFx0ICBzdHJ1Y3QgaXBfdHVubmVsX25ldCAqaXRuLFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwYXJtcylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQyOjExLjI2MzM5MDcxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTczNDIyNTg0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gdGhlIHRhc2sgaXMgdG8gYXNzZXNzIHRoaXMga2VybmVsIHBhdGNoIHNlcmllcywgYW5kIG15IGV4cGVydGlzZSBpbW1lZGlhdGVseSBraWNrcyBpbi4gSSBzZWUgd2UncmUgZGVhbGluZyB3aXRoIElQdjQgR1JFL0VSU1BBTiB0dW5uZWxzLCBzcGVjaWZpY2FsbHkgbW9kaWZpY2F0aW9ucyB0byBgaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oYCwgYG5ldC9pcHY0L2lwX2dyZS5jYCwgYW5kIGBuZXQvaXB2NC9pcF90dW5uZWwuY2AuIFRoZSBjaGFuZ2VzIGludm9sdmUgYSBuZXcgZnVuY3Rpb24sIGBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzYCwgYW5kIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIHdpdGhpbiB0aGUgR1JFL0VSU1BBTiBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIE1UVS9oZWFkcm9vbSBoYW5kbGluZy5cblxuRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZS4gIFdlJ3JlIGxvb2tpbmcgYXQgZnVuY3Rpb25zIGxpa2UgYGlwZ3JlX2NoYW5nZWxpbmtgLCBgZXJzcGFuX2NoYW5nZWxpbmtgLCBgaXBncmVfbmV0bGlua19wYXJtc2AsIGBlcnNwYW5fbmV0bGlua19wYXJtc2AuICBUaGVzZSBhcmUgY3J1Y2lhbCBwYXJ0cyBvZiB0aGUga2VybmVsLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHJlYWNoYWJpbGl0eS4gSSBrbm93IHRoaXMgY29kZSBpcyBjb3JlIG5ldHdvcmtpbmcsIGRlYWxpbmcgd2l0aCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24sIGBSVE1fTkVXTElOS2AsIGBSVE1fU0VUTElOS2AgYW5kIGlvY3RsLCBhbGwgc3RhbmRhcmQgbWV0aG9kcyBmb3Igc2V0dGluZyB1cCBhbmQgY29udHJvbGxpbmcgbmV0d29yayB0dW5uZWxzLiBUaGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdlIHVzZSwgZXNwZWNpYWxseSBzeXprYWxsZXIsIHJvdXRpbmVseSBleGVyY2lzZXMgdGhlc2UgY29kZXBhdGhzLiBTeXprYWxsZXIgZnJlcXVlbnRseSBjcmVhdGVzIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMuXG5cbkJhc2VkIG9uIHRoZSBjcml0ZXJpYSwgaXQncyBjbGVhciB0aGlzIHBhdGNoIGZhbGxzIGludG8gdGhlIFwiV29ydGhGdXp6aW5nPXRydWVcIiBjYXRlZ29yeS4gV2UgaGF2ZSBtb2RpZmljYXRpb25zIHRvIGNvcmUgbmV0d29ya2luZyBsb2dpYywgYW5kIHRoZXNlIG5ldGRldmljZXMgYXJlIGFjY2Vzc2libGUuIFdlIHNob3VsZCBkZWZpbml0ZWx5IGZ1enogdGhpcyBhcmVhLlxuXG5OZXh0LCBJJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucywgdG8gZW5zdXJlIHRoZSBjb2RlIGlzIGNvbmZpZ3VyZWQgcHJvcGVybHkgdXNpbmcgYGdyZXBwZXJgIHRvIGZpbmQgdGhlIHJlbGV2YW50IE1ha2VmaWxlIGVudHJpZXMuIEl0J3MgYSBxdWljayBzYW5pdHkgY2hlY2sgYnV0IGltcG9ydGFudCB0byBhdm9pZCBibGluZCBhbGxleXMuIEknbGwgbmVlZCB0byBrbm93IHRoYXQgYGlwX2dyZS5vYCBhbmQgYGlwX3R1bm5lbC5vYCBhcmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgzMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQyOjI4LjYwNTY1MjY0NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzM1NzY1MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfZ3JlfGlwX3R1bm5lbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNjpcXHQgICAgIGluZXRfZnJhZ21lbnQubyBwaW5nLm8gaXBfdHVubmVsX2NvcmUubyBncmVfb2ZmbG9hZC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNy1cXHQgICAgIG1ldHJpY3MubyBuZXRsaW5rLm8gbmV4dGhvcC5vIHVkcF90dW5uZWxfc3R1Yi5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMTgtXFxubmV0L2lwdjQvTWFrZWZpbGU6MTk6b2JqLSQoQ09ORklHX05FVF9JUF9UVU5ORUwpICs9IGlwX3R1bm5lbC5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMjAtb2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9pcHY0Lm9cXG4tLVxcbm5ldC9pcHY0L01ha2VmaWxlPTI5PW9iai0kKENPTkZJR19ORVRfSVBHUkVfREVNVVgpICs9IGdyZS5vXFxubmV0L2lwdjQvTWFrZWZpbGU6MzA6b2JqLSQoQ09ORklHX05FVF9JUEdSRSkgKz0gaXBfZ3JlLm9cXG5uZXQvaXB2NC9NYWtlZmlsZS0zMS11ZHBfdHVubmVsLXkgOj0gdWRwX3R1bm5lbF9jb3JlLm8gdWRwX3R1bm5lbF9uaWMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0MjoyOC44NzkyMzU3MTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzE4NzU3OTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTmV0d29yayBUdW5uZWwgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgSVBHUkUgYW5kIElQIFR1bm5lbGluZy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNjZXJ0YWluIHRoZSBzdGF0ZSBvZiBgQ09ORklHX05FVF9JUEdSRWAgYW5kIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAgd2l0aGluIHRoZSBLY29uZmlnIHN5c3RlbS4gVGhpcyBpcyBwcm9iYWJseSBhIHByZWxpbWluYXJ5IHN0ZXAgdG8gdW5kZXJzdGFuZGluZywgb3IgbW9kaWZ5aW5nLCB0aGUgYXZhaWxhYmxlIG5ldHdvcmsgdHVubmVsaW5nIGNhcGFiaWxpdGllcyBvZiB0aGUgc3lzdGVtLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZWxldmFudCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgZGlzYWJsZWQsIG9yIHNldCB0byBtb2R1bGUsIHNpbmNlIHRoYXQgd2lsbCBoZWF2aWx5IGluZmx1ZW5jZSBob3cgbmV0d29yayB0cmFmZmljIGNhbiBiZSBoYW5kbGVkLiBJIHByb2JhYmx5IHdhbnQgdG8gdHJhY2sgZG93biBhbnkgZGVwZW5kZW5jaWVzIGFzIHdlbGwuIEknbSBwcm9iYWJseSBsb29raW5nIGF0IHRoaXMgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgZGVidWdnaW5nIGEgbmV0d29yayBpc3N1ZSwgb3IgcGVyaGFwcyBjb25maWd1cmluZyBhIG5ldyBuZXR3b3JrIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQwOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQyOjMxLjE5Nzk5NTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY1MDM5MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9JUEdSRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L0tjb25maWc9MTYyPWNvbmZpZyBORVRfSVBJUFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xNzktXFxubmV0L2lwdjQvS2NvbmZpZzoxODA6Y29uZmlnIE5FVF9JUEdSRV9ERU1VWFxcbm5ldC9pcHY0L0tjb25maWctMTgxLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIGRlbXVsdGlwbGV4ZXJcXFwiXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnPTE4Nj1jb25maWcgTkVUX0lQX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0xOTEtXFxubmV0L2lwdjQvS2NvbmZpZzoxOTI6Y29uZmlnIE5FVF9JUEdSRVxcbm5ldC9pcHY0L0tjb25maWctMTkzLVxcdHRyaXN0YXRlIFxcXCJJUDogR1JFIHR1bm5lbHMgb3ZlciBJUFxcXCJcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMjA2LVxcbm5ldC9pcHY0L0tjb25maWc6MjA3OmNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiSVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDI6MzEuMjQ0NTA2NzI3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzI2NTgxNTY1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEkgZGVsdmUgaW50byB0aGUgS2NvbmZpZzpcblxuKipEZWVwIERpdmUgaW50byBJUEdSRSBhbmQgSVAgVHVubmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIGZvY3VzaW5nIG9uIHRoZSBLY29uZmlnIG9wdGlvbnMgc3Vycm91bmRpbmcgYE5FVF9JUEdSRWAgYW5kIGBORVRfSVBfVFVOTkVMYC4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBmb3IgdHVubmVsaW5nIGFuZCBlbmNhcHN1bGF0aW9uLCBzbyB1bmRlcnN0YW5kaW5nIHRoZWlyIGludGVycGxheSBpcyBjcnVjaWFsLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLCBpbXBsaWNhdGlvbnMsIGFuZCBwb3NzaWJsZSBjb25mbGljdHMgYmV0d2VlbiB0aGVzZSB0d28uIEFyZSB0aGV5IG11dHVhbGx5IGV4Y2x1c2l2ZSwgb3IgZG9lcyBvbmUgYnVpbGQgdXBvbiB0aGUgb3RoZXI/IFdoYXQgY29uZmlndXJhdGlvbnMgcmVseSBvbiB0aGVzZT8gQXJlIHRoZXJlIGFueSBzdWJ0bGV0aWVzIGluIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgbmV0d29yayBmZWF0dXJlcz8gVGhpcyBncmFudWxhciBsZXZlbCBvZiBhbmFseXNpcyBpcyBrZXkgdG8gb3B0aW1pemluZyB0aGUgbmV0d29yayBzdGFjayBhbmQgZW5zdXJpbmcgcm9idXN0IHR1bm5lbCBzdXBwb3J0LiBJJ20gbG9va2luZyBmb3IgdGhlIFwid2h5XCIgYmVoaW5kIHRoZSBkZXNpZ24gY2hvaWNlcywgbm90IGp1c3QgdGhlIFwid2hhdFwiLiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODcwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDI6MzQuNTEwMzI0MjhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjY3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRjb25maWcgTkVUX0lQR1JFX0RFTVVYXFxuIDE4MTpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEdSRSBkZW11bHRpcGxleGVyXFxcIlxcbiAxODI6XFx0XFx0aGVscFxcbiAxODM6XFx0XFx0ICBUaGlzIGlzIGhlbHBlciBtb2R1bGUgdG8gZGVtdWx0aXBsZXggR1JFIHBhY2tldHMgb24gR1JFIHZlcnNpb24gZmllbGQgY3JpdGVyaWEuXFxuIDE4NDpcXHRcXHQgIFJlcXVpcmVkIGJ5IGlwX2dyZSBhbmQgcHB0cCBtb2R1bGVzLlxcbiAxODU6XFx0XFxuIDE4NjpcXHRjb25maWcgTkVUX0lQX1RVTk5FTFxcbiAxODc6XFx0XFx0dHJpc3RhdGVcXG4gMTg4OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gMTg5OlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gMTkwOlxcdFxcdGRlZmF1bHQgblxcbiAxOTE6XFx0XFxuIDE5MjpcXHRjb25maWcgTkVUX0lQR1JFXFxuIDE5MzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcXFwiXFxuIDE5NDpcXHRcXHRkZXBlbmRzIG9uIE5FVF9JUEdSRV9ERU1VWFxcbiAxOTU6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMTk2OlxcdFxcdGhlbHBcXG4gMTk3OlxcdFxcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cXG4gMTk4OlxcdFxcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxcbiAxOTk6XFx0XFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXFxuIDIwMDpcXHRcXHQgIEdSRSAoR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24pIGFuZCBhdCB0aGlzIHRpbWUgYWxsb3dzXFxuIDIwMTpcXHRcXHQgIGVuY2Fwc3VsYXRpbmcgb2YgSVB2NCBvciBJUHY2IG92ZXIgZXhpc3RpbmcgSVB2NCBpbmZyYXN0cnVjdHVyZS5cXG4gMjAyOlxcdFxcdCAgVGhpcyBkcml2ZXIgaXMgdXNlZnVsIGlmIHRoZSBvdGhlciBlbmRwb2ludCBpcyBhIENpc2NvIHJvdXRlcjogQ2lzY29cXG4gMjAzOlxcdFxcdCAgbGlrZXMgR1JFIG11Y2ggYmV0dGVyIHRoYW4gdGhlIG90aGVyIExpbnV4IHR1bm5lbGluZyBkcml2ZXIgKFxcXCJJUFxcbiAyMDQ6XFx0XFx0ICB0dW5uZWxpbmdcXFwiIGFib3ZlKS4gSW4gYWRkaXRpb24sIEdSRSBhbGxvd3MgbXVsdGljYXN0IHJlZGlzdHJpYnV0aW9uXFxuIDIwNTpcXHRcXHQgIHRocm91Z2ggdGhlIHR1bm5lbC5cXG4gMjA2OlxcdFxcbiAyMDc6XFx0Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG4gMjA4OlxcdFxcdGJvb2wgXFxcIklQOiBicm9hZGNhc3QgR1JFIG92ZXIgSVBcXFwiXFxuIDIwOTpcXHRcXHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVCBcXHUwMDI2XFx1MDAyNiBORVRfSVBHUkVcXG4gMjEwOlxcdFxcdGhlbHBcXG4gMjExOlxcdFxcdCAgT25lIGFwcGxpY2F0aW9uIG9mIEdSRS9JUCBpcyB0byBjb25zdHJ1Y3QgYSBicm9hZGNhc3QgV0FOIChXaWRlIEFyZWFcXG4gMjEyOlxcdFxcdCAgTmV0d29yayksIHdoaWNoIGxvb2tzIGxpa2UgYSBub3JtYWwgRXRoZXJuZXQgTEFOIChMb2NhbCBBcmVhXFxuIDIxMzpcXHRcXHQgIE5ldHdvcmspLCBidXQgY2FuIGJlIGRpc3RyaWJ1dGVkIGFsbCBvdmVyIHRoZSBJbnRlcm5ldC4gSWYgeW91IHdhbnRcXG4gMjE0OlxcdFxcdCAgdG8gZG8gdGhhdCwgc2F5IFkgaGVyZSBhbmQgdG8gXFxcIklQIG11bHRpY2FzdCByb3V0aW5nXFxcIiBiZWxvdy5cXG4gMjE1OlxcdFxcbiAyMTY6XFx0Y29uZmlnIElQX01ST1VURV9DT01NT05cXG4gMjE3OlxcdFxcdGJvb2xcXG4gMjE4OlxcdFxcdGRlcGVuZHMgb24gSVBfTVJPVVRFIHx8IElQVjZfTVJPVVRFXFxuIDIxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDI6MzQuNTEwNDE4N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE4MTQ4MzUyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBFeHBsb3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfTkVUX0lQR1JFYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIGl0IGRlcGVuZHMgb24gYENPTkZJR19ORVRfSVBHUkVfREVNVVhgIGFuZCBhdXRvbWF0aWNhbGx5IHB1bGxzIGluIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAuIFRoYXQncyBzdGFuZGFyZCBhbmQgbWFrZXMgc2Vuc2UgZm9yIEdSRS4gQnV0IEkgbmVlZCB0byBnbyBkZWVwZXIgdGhhbiBqdXN0IHRoZSBiYXNpY3MuXG5cbk15IGZvY3VzIHJpZ2h0IG5vdyBpcyBFUlNQQU4gYW5kIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSByZWxldmFudCBFUlNQQU4gc2V0dGluZ3MgYXJlIGFjdGl2ZSwgb3IgdGhhdCBFUlNQQU4gZnVuY3Rpb25hbGl0eSBpcyBpbmhlcmVudGx5IGluY2x1ZGVkIHNvbWV3aGVyZSwgbGlrZSB3aXRoaW4gYENPTkZJR19ORVRfSVBHUkVgIGl0c2VsZi4gSSBuZWVkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgRVJTUEFOIHN1cHBvcnQgaXMgaW1wbGVtZW50ZWQgaW4gdGhpcyBjb250ZXh0LiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGFueSBsaWtlbHkgY2FuZGlkYXRlcyB0aGF0IHNlZW0gcmVsZXZhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MjgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQyOjM2LjMyNTI1NjIwM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njk2NzI1NDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR18uKkVSU1BBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0MjozNi4zOTQ5Mzg4MzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTgzNjczODAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIHRoZSBFUlNQQU4gSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBzbyBFUlNQQU4ncyBjb3JlIGZ1bmN0aW9uYWxpdHkgaXMgYmFrZWQgZGlyZWN0bHkgaW50byB0aGUgYG5ldC9pcHY0L2lwX2dyZS5jYCBhbmQgYGlwNl9ncmUuY2AgZmlsZXMuIFRoYXQncyBnb29kIHRvIGtub3cg4oCTIGl0IGdpdmVzIG1lIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQgZm9yIGRpdmluZyBpbnRvIHRoZSBjb2RlLiBOb3csIEkgbmVlZCB0byBnZXQgYSBiZXR0ZXIgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBvZiB0aGUgYGlwX2dyZWAgbW9kdWxlLiBBcmUgdGhlcmUgYW55IG90aGVyIHJlbGV2YW50IGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdD8gSSdtIHRoaW5raW5nIGNvbmZpZ3VyYXRpb24sIGVycm9yIGhhbmRsaW5nLCBtYXliZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBwb3RlbnRpYWxseSBleHRlbnNpb25zIHRoYXQgd2VyZSBidWlsdCBpbiBvdmVyIHRpbWUuIEtub3dpbmcgdGhlIG1vZHVsZSdzIGNvbXBsZXRlIGZvb3RwcmludCBpcyBlc3NlbnRpYWwgZm9yIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZy4gSSdsbCBuZWVkIHRvIGV4cGxvcmUgdGhhdCBmdXJ0aGVyIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBFUlNQQU4ncyBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwMDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0Mjo0Ni4yMzE2NzkwMDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMDc5ODc5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcF9ncmUtb2Jqc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQyOjQ2LjI4MTc2OTEyMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjU0NjYyNjEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgR1JFIGFuZCBUdW5uZWxpbmcgTW9kdWxlcyBmb3IgRm9jdXNTeW1ib2wgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgYW5kIHR1bm5lbGluZyBtb2R1bGVzIGFyZSBwdXQgdG9nZXRoZXIsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGV5J3JlIGNvbXBpbGVkIGFuZCB3aGF0J3MgY2hhbmdlZC4gVGhlIGBpcF9ncmUuY2AgY29kZSBpcyBjb21waWxlZCBpZiBgQ09ORklHX05FVF9JUEdSRWAgaXMgZW5hYmxlZCwgYW5kIGBpcF90dW5uZWwuY2AgZ2V0cyBidWlsdCB3aGVuIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAgaXMgc2V0LiAgSSBzZWUgdGhhdCBgQ09ORklHX05FVF9JUEdSRWAgZGVwZW5kcyBvbiBhbmQgc2VsZWN0cyBgQ09ORklHX05FVF9JUEdSRV9ERU1VWGAgYW5kIGBDT05GSUdfTkVUX0lQX1RVTk5FTGAgd2hpY2ggdGVsbHMgbWUgdGhhdCBgTkVUX0lQR1JFYCBhbmQgYE5FVF9JUEdSRV9ERU1VWGAgYXJlIHRoZSBrZXkgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgbXkgbWFpbiBnb2FsIGlzIHRvIGlkZW50aWZ5IG1vZGlmaWVkIGZ1bmN0aW9ucyBhbmQgZW50cnkgcG9pbnRzIHRoYXQgY291bGQgYmUgcmVsZXZhbnQgdG8gdGhlIEZvY3VzU3ltYm9scy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlZW4gYWRkZWQsIGNoYW5nZWQsIG9yIHJlbW92ZWQuIEkndmUgZ290IGEgbGlzdCBmcm9tIHRoZSBkaWZmOlxuXG4xLiAgYGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHNgIOKAkyBUaGlzIGlzIGEgbmV3LCBleHBvcnRlZCBmdW5jdGlvbiBpbiBgaXBfdHVubmVsLmNgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBhcyBpdCBpbmRpY2F0ZXMgbmV3IGV4dGVybmFsIGZ1bmN0aW9uYWxpdHkuXG4yLiAgYGlwZ3JlX2xpbmtfdXBkYXRlYCwgYGVyc3Bhbl9saW5rX3VwZGF0ZWAsIGBlcnNwYW5fc2V0X2hsZW5gLCAg4oCTIFRoZXNlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGluIGBpcF9ncmUuY2AuXG4zLiAgYGlwZ3JlX2NoYW5nZWxpbmtgLCBgZXJzcGFuX2NoYW5nZWxpbmtgIOKAkyBUaGVzZSBhcmUgc3RhdGljLCBhbmQgY3J1Y2lhbGx5LCB0aGV5IGFyZSBgcnRubF9saW5rX29wcyAuY2hhbmdlbGlua2AgaW1wbGVtZW50YXRpb25zLCB3aGljaCBhcmUgaW1wb3J0YW50IGJlY2F1c2Ugb2YgdGhlaXIgaW50ZWdyYXRpb24gd2l0aCBuZXRsaW5rLlxuNC4gIGBpcGdyZV90dW5uZWxfY3RsYCDigJMgVGhpcyBpcyBhbm90aGVyIHN0YXRpYyBvbmUsIGEgYG5ldGRldl9vcHMgLm5kb19zaW9jZGV2cHJpdmF0ZSAvIC5uZG9fZG9faW9jdGxgIGZ1bmN0aW9uLCBzaG93aW5nIHVwIGFzIGEgY29udHJvbCBwYXRoLlxuNS4gIGBlcnNwYW5fdHVubmVsX2luaXRgIOKAkyBBbHNvIHN0YXRpYywgdXNlZCBhcyBlaXRoZXIgdGhlIGBydG5sX2xpbmtfb3BzIC5zZXR1cGAgb3IgYG5ldGRldl9vcHMgLm5kb19pbml0YCBmb3IgYSBuZXQgZGV2aWNlLlxuNi4gIGBlcnNwYW5fbmV0bGlua19wYXJtc2AsIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCDigJMgVGhlc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBuZXRsaW5rIHBhcmFtZXRlciBoYW5kbGluZy5cblxuTm93IEkgbmVlZCB0byBnbyBkZWVwZXIuIEknbSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBhdCB0aGUgdmlzaWJpbGl0eSBvZiBzeW1ib2xzLCBtYWtpbmcgc3VyZSBJIGlkZW50aWZ5IHdoYXQncyBub3QgaW5saW5lZCwgYW5kIHRoZW4gSSdsbCBzY3J1dGluaXplIHRoZSBsaW5lcyBpbiB0aGUgY29kZSBmb3IgYGlwZ3JlX2NoYW5nZWxpbmtgLCBgZXJzcGFuX2NoYW5nZWxpbmtgLCBgaXBncmVfdHVubmVsX2N0bGAsIGFuZCB0aGUgb3RoZXJzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGJlZW4gbW9kaWZpZWQgYW5kIGhvdyB0aGVzZSBjaGFuZ2VzIGltcGFjdCB0aGUgb3ZlcmFsbCBHUkUvdHVubmVsaW5nIGZ1bmN0aW9uYWxpdHksIHdoaWNoIHNob3VsZCBsZWFkIG1lIHJpZ2h0IHRvIHRoZSBGb2N1c1N5bWJvbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjYzLCJPdXRwdXRUb2tlbnMiOjYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQzOjAyLjgyODM5NzYwNloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAxMDUxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKGlwZ3JlX2NoYW5nZWxpbmt8ZXJzcGFuX2NoYW5nZWxpbmt8aXBncmVfdHVubmVsX2N0bHxlcnNwYW5fdHVubmVsX2luaXR8aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocylcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTc2MT1zdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy03OTItLyogdHVubmVsLVxcdTAwM2VobGVuIGRlcGVuZHMgb24gdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzIGFuZCBvbiB0dW5uZWwtXFx1MDAzZWVuY2FwX2hsZW4sXFxubmV0L2lwdjQvaXBfZ3JlLmM6NzkzOiAqIGJvdGggb2Ygd2hpY2ggaXBncmVfY2hhbmdlbGluaygpIGNhbiBjaGFuZ2UuIFJlY29tcHV0ZSBpdCB0aGUgd2F5XFxubmV0L2lwdjQvaXBfZ3JlLmMtNzk0LSAqIF9fZ3JlX3R1bm5lbF9pbml0KCkgZG9lcywgdGhlbiBsZXQgaXBfdHVubmVsX2JpbmRfZGV2KCkgZGVyaXZlIHRoZSBkZXZpY2VcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTgwMj1zdGF0aWMgdm9pZCBpcGdyZV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy04MTItXFx0ICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6ODEzOlxcdGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoZGV2LCBzZXRfbXR1IFxcdTAwMjZcXHUwMDI2IHR1bm5lbC1cXHUwMDNlaGxlbiAhPSBvbGRfaGxlbik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtODE0LVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtODI1LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjgyNjpzdGF0aWMgaW50IGlwZ3JlX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2NC9pcF9ncmUuYy04MjctXFx0XFx0XFx0ICAgIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9OTg5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBncmVfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwMDAtXFx0Lm5kb19nZXRfaWZsaW5rXFx0XFx0PSBpcF90dW5uZWxfZ2V0X2lmbGluayxcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDAxOlxcdC5uZG9fdHVubmVsX2N0bFxcdFxcdD0gaXBncmVfdHVubmVsX2N0bCxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDAyLX07XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMzcxPXN0YXRpYyB2b2lkIGVyc3Bhbl9zZXRfaGxlbihzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzgwLS8qIEJvdGggdHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyIGFuZCB0dW5uZWwtXFx1MDAzZWVuY2FwX2hsZW4gY2FuIGJlIGNoYW5nZWQgZnJvbVxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzODE6ICogZXJzcGFuX2NoYW5nZWxpbmsoKSwgYW5kIGJvdGggZmVlZCB0dW5uZWwtXFx1MDAzZWhsZW4uIFJlY29tcHV0ZSBpdCwgdGhlbiBsZXRcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzgyLSAqIGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlIGxlbmd0aHMgZnJvbSBpdC5cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEzODg9c3RhdGljIHZvaWQgZXJzcGFuX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTctXFx0ICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM5ODpcXHRpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKGRldiwgc2V0X210dSBcXHUwMDI2XFx1MDAyNiB0dW5uZWwtXFx1MDAzZWhsZW4gIT0gb2xkX2hsZW4pO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTktfVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MDAtXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTQwMTpzdGF0aWMgaW50IGVyc3Bhbl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MDIte1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xcbm5ldC9pcHY0L2lwX2dyZS5jOjE0MTg6XFx0Lm5kb19pbml0XFx0XFx0PSBlcnNwYW5fdHVubmVsX2luaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQxOS1cXHQubmRvX3VuaW5pdFxcdFxcdD0gaXBfdHVubmVsX3VuaW5pdCxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE0NzY9c3RhdGljIGludCBlcnNwYW5fbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQ5Ni1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDk3OnN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE0OTgtXFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE1MzUtXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTUzNjpzdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTUzNy1cXHRcXHRcXHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE3Mzg9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwZ3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzQ1LVxcdC5uZXdsaW5rXFx0PSBpcGdyZV9uZXdsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3NDY6XFx0LmNoYW5nZWxpbmtcXHQ9IGlwZ3JlX2NoYW5nZWxpbmssXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTc0Ny1cXHQuZGVsbGlua1xcdD0gaXBfdHVubmVsX2RlbGxpbmssXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNzUzPXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcGdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzYwLVxcdC5uZXdsaW5rXFx0PSBpcGdyZV9uZXdsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3NjE6XFx0LmNoYW5nZWxpbmtcXHQ9IGlwZ3JlX2NoYW5nZWxpbmssXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTc2Mi1cXHQuZGVsbGlua1xcdD0gaXBfdHVubmVsX2RlbGxpbmssXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNzY4PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBlcnNwYW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3NzUtXFx0Lm5ld2xpbmtcXHQ9IGVyc3Bhbl9uZXdsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3NzY6XFx0LmNoYW5nZWxpbmtcXHQ9IGVyc3Bhbl9jaGFuZ2VsaW5rLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3NzctXFx0LmRlbGxpbmtcXHQ9IGlwX3R1bm5lbF9kZWxsaW5rLFxcbi0tXFxubmV0L2lwdjQvaXBfdHVubmVsLmM9MjgwPXN0YXRpYyBpbnQgaXBfdHVubmVsX2JpbmRfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zMzUtICovXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MzM2OnZvaWQgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpXFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzM3LXtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM0Mi19XFxubmV0L2lwdjQvaXBfdHVubmVsLmM6MzQzOkVYUE9SVF9TWU1CT0xfR1BMKGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMpO1xcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM0NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6MDIuODg4NTA5OTQ2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYzMzMzOTY3MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgSVAgVHVubmVsL0dSRS9FUlNQQU4gQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkndmUgaWRlbnRpZmllZCB0aGUgbW9kaWZpZWQgYW5kIG5ld2x5IGludHJvZHVjZWQgZnVuY3Rpb25zOiBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc2AsIGBpcGdyZV9saW5rX3VwZGF0ZWAsIGBlcnNwYW5fbGlua191cGRhdGVgLCBgZXJzcGFuX3NldF9obGVuYCwgYW5kIHRoZSBtb2RpZmllZCBgaXBncmVfbmV0bGlua19wYXJtc2AsIGBlcnNwYW5fbmV0bGlua19wYXJtc2AsIGBpcGdyZV9jaGFuZ2VsaW5rYCwgYGVyc3Bhbl9jaGFuZ2VsaW5rYCwgYGlwZ3JlX3R1bm5lbF9jdGxgLCBhbmQgYGVyc3Bhbl90dW5uZWxfaW5pdGAuIFRoZXNlIGFyZSBhbGwgY2xlYXJseSBmb2N1c2VkIG9uIElQIHR1bm5lbGluZywgc3BlY2lmaWNhbGx5IEdSRSBhbmQgRVJTUEFOIGxpbmsgbWFuYWdlbWVudCwgaW5jbHVkaW5nIE1UVSBhbmQgaGVhZHJvb20gY2FsY3VsYXRpb25zLiBOb25lIG9mIHRoZXNlIGFyZSBjb3JlLCB1YmlxdWl0b3VzIG5ldHdvcmtpbmcgZnVuY3Rpb25zLlxuXG5OZXh0LCBJIHZlcmlmaWVkIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnM6IGBORVRfSVBHUkVgLCBgTkVUX0lQR1JFX0RFTVVYYCwgYW5kIGBORVRfSVBfVFVOTkVMYC4gVGhlIEtjb25maWcgY29uZmlybXMgdGhhdCBgTkVUX0lQR1JFYCBkZXBlbmRzIG9uIGFuZCBzZWxlY3RzIGBORVRfSVBHUkVfREVNVVhgLCBhbmQgYE5FVF9JUEdSRWAgc2VsZWN0cyBgTkVUX0lQX1RVTk5FTGAuIFRoZXJlZm9yZSwgZXhwbGljaXRseSBzcGVjaWZ5aW5nIGFsbCB0aHJlZSBpcyBhY2N1cmF0ZS5cblxuVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSBsaXN0ZWQgZWFybGllciwgdGhvc2UgZGVkaWNhdGVkIHRvIEdSRS9FUlNQQU4uXG5cbk5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IEFic29sdXRlbHkuIFRoZXNlIGNoYW5nZXMgdG91Y2ggb24gZnVuZGFtZW50YWwgYXNwZWN0cyBvZiBJUCB0dW5uZWxpbmcg4oCTIHRoZSB2ZXJ5IGNvcmUgb2YgdmlydHVhbCBuZXR3b3JrIGRldmljZSBiZWhhdmlvci4gV2UncmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGhlYWRlciBsZW5ndGggY2FsY3VsYXRpb25zLCBkZXZpY2UgaGVhZHJvb20sIE1UVSB1cGRhdGVzIHRyaWdnZXJlZCBieSBuZXRsaW5rIChSVE1fTkVXTElOSywgUlRNX1NFVExJTkspIGFuZCBpb2N0bCAoU0lPQ0NIR1RVTk5FTCwgZXRjLikgY29uZmlndXJhdGlvbnMsIGFsbCBjcml0aWNhbCB0byBuZXR3b3JrIHBlcmZvcm1hbmNlIGFuZCByZWxpYWJpbGl0eS4gSSBzZWUgY2hhbmdlcyBpbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gYGlwZ3JlX2NoYW5nZWxpbmtgIGFuZCBgZXJzcGFuX2NoYW5nZWxpbmtgIHJlZ2FyZGluZyBsZW5ndGggdXBkYXRlcyBldmVuIGR1cmluZyBlcnJvciBwYXRocy4gSSBzZWUgY2hhbmdlcyBpbiB2YWxpZGF0aW9uIG9yZGVyIGluIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgYW5kIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYC4gVGhlIGludHJvZHVjdGlvbiBvZiBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc2AgZnVydGhlciBhbXBsaWZpZXMgdGhlIG5lZWQgZm9yIHRob3JvdWdoIGZ1enppbmcuIFRoZXNlIGFyZSBhbGwgZXhwb3NlZCB2aWEgbmV0bGluayBhbmQgaW9jdGwgaW50ZXJmYWNlcywgbWFraW5nIHRoZW0gcHJpbWUgdGFyZ2V0cyBmb3IgZnV6emluZy4gVGhpcyBpcyBhIGNsZWFyIGNhc2UgZm9yIHZ1bG5lcmFiaWxpdHkgYW5hbHlzaXMuIEV2ZXJ5dGhpbmcgaXMgc29saWQuIEknbSByZWFkeSB0byBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE3NSwiT3V0cHV0VG9rZW5zIjoyNDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6MDkuMjIxOTA5MjM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5Mjg4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiTkVUX0lQR1JFX0RFTVVYXCIsXG4gICAgXCJORVRfSVBfVFVOTkVMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Roc1wiLFxuICAgIFwiaXBncmVfbGlua191cGRhdGVcIixcbiAgICBcImVyc3Bhbl9saW5rX3VwZGF0ZVwiLFxuICAgIFwiZXJzcGFuX3NldF9obGVuXCIsXG4gICAgXCJpcGdyZV9uZXRsaW5rX3Bhcm1zXCIsXG4gICAgXCJlcnNwYW5fbmV0bGlua19wYXJtc1wiLFxuICAgIFwiaXBncmVfY2hhbmdlbGlua1wiLFxuICAgIFwiZXJzcGFuX2NoYW5nZWxpbmtcIixcbiAgICBcImlwZ3JlX3R1bm5lbF9jdGxcIixcbiAgICBcImVyc3Bhbl90dW5uZWxfaW5pdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBhbmQgZml4ZXMgZGV2aWNlIGhlYWRlciBsZW5ndGgsIE1UVSwgYW5kIGhlYWRyb29tIHVwZGF0ZXMgaW4gdGhlIElQdjQgR1JFIGFuZCBFUlNQQU4gdHVubmVsaW5nIGRyaXZlcnMuIEl0IGludHJvZHVjZXMgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocygpIGFuZCB1cGRhdGVzIGxpbmsgY29uZmlndXJhdGlvbiBhbmQgZXJyb3ItaGFuZGxpbmcgcGF0aHMgaW4gaXBncmVfY2hhbmdlbGluaygpLCBlcnNwYW5fY2hhbmdlbGluaygpLCBhbmQgaW9jdGwvbmV0bGluayBwYXJhbWV0ZXIgcGFyc2Vycy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29ya2luZyBsb2dpYyBleGVyY2lzYWJsZSB2aWEgcnRubCBuZXRsaW5rIGFuZCB0dW5uZWwgaW9jdGxzIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIk5FVF9JUEdSRV9ERU1VWFwiLFxuICAgIFwiTkVUX0lQX1RVTk5FTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHNcIixcbiAgICBcImlwZ3JlX2xpbmtfdXBkYXRlXCIsXG4gICAgXCJlcnNwYW5fbGlua191cGRhdGVcIixcbiAgICBcImVyc3Bhbl9zZXRfaGxlblwiLFxuICAgIFwiaXBncmVfbmV0bGlua19wYXJtc1wiLFxuICAgIFwiZXJzcGFuX25ldGxpbmtfcGFybXNcIixcbiAgICBcImlwZ3JlX2NoYW5nZWxpbmtcIixcbiAgICBcImVyc3Bhbl9jaGFuZ2VsaW5rXCIsXG4gICAgXCJpcGdyZV90dW5uZWxfY3RsXCIsXG4gICAgXCJlcnNwYW5fdHVubmVsX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgYW5kIGZpeGVzIGRldmljZSBoZWFkZXIgbGVuZ3RoLCBNVFUsIGFuZCBoZWFkcm9vbSB1cGRhdGVzIGluIHRoZSBJUHY0IEdSRSBhbmQgRVJTUEFOIHR1bm5lbGluZyBkcml2ZXJzLiBJdCBpbnRyb2R1Y2VzIGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoKSBhbmQgdXBkYXRlcyBsaW5rIGNvbmZpZ3VyYXRpb24gYW5kIGVycm9yLWhhbmRsaW5nIHBhdGhzIGluIGlwZ3JlX2NoYW5nZWxpbmsoKSwgZXJzcGFuX2NoYW5nZWxpbmsoKSwgYW5kIGlvY3RsL25ldGxpbmsgcGFyYW1ldGVyIHBhcnNlcnMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmtpbmcgbG9naWMgZXhlcmNpc2FibGUgdmlhIHJ0bmwgbmV0bGluayBhbmQgdHVubmVsIGlvY3RscyBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQzOjA5LjI5OTg0NTQ0NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5MTk5Mzc4NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6MDkuMzAwMjYxODk0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjQ5MTk4OTU4NTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIGhlYWRlciBsZW5ndGgsIGhlYWRyb29tLCBhbmQgTVRVIGNhbGN1bGF0aW9uIGxvZ2ljIGZvciBJUCBHUkUgYW5kIEVSU1BBTiB0dW5uZWwgZGV2aWNlcyAoaW50cm9kdWNpbmcgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocywgdXBkYXRpbmcgaXBncmVfbGlua191cGRhdGUgYW5kIGVyc3Bhbl9saW5rX3VwZGF0ZSwgYW5kIGRlZmVycmluZyB0dW5uZWwgc3RhdGUgdXBkYXRlcyB1bnRpbCBuZXRsaW5rIHZhbGlkYXRpb24gY29tcGxldGVzKS4gXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCAoc3VjaCBhcyBvbGRfaGxlbiwgZXJzcGFuX3ZlciwgaW5kZXgsIGh3aWQsIGRpciwgYW5kIG10dSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIG9yIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBoZWFkcm9vbSBvciBNVFUgY2FsY3VsYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIGJ1ZmZlciBib3VuZGFyeS9vdmVyZmxvdyBvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gb3IgbmV0d29yayBzdGFjayBhc3NlcnRpb25zIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI1OTA4YmQwNzQ1YzMwNGFiMTQwMjRlMzIyN2Q3NmVlMGI1NzE4ZjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxNTo0MjoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaCBiL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuaW5kZXggN2M5YWFkZmU4ZmUzOS4uZmQwMzk2YWE1MDM5NSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaFxuKysrIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oXG5AQCAtNDI5LDYgKzQyOSw3IEBAIGludCBpcF90dW5uZWxfbmV3bGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLFxuIFx0XHQgICAgICBfX3UzMiBmd21hcmspO1xuIHZvaWQgaXBfdHVubmVsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBuZXRfaWQpO1xuK3ZvaWQgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpO1xuIFxuIGJvb2wgaXBfdHVubmVsX25ldGxpbmtfZW5jYXBfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuIFx0XHRcdFx0ICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqZW5jYXApO1xuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmNcbmluZGV4IDgyMzA5ZWZkNDE3ZTAuLjQ4MDdmYzZkMmZkODggMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9ncmUuY1xuKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmNcbkBAIC03ODksMjMgKzc4OSwyOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBpcGdyZV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpXG4rLyogdHVubmVsLVx1MDAzZWhsZW4gZGVwZW5kcyBvbiB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyBhbmQgb24gdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4sXG4rICogYm90aCBvZiB3aGljaCBpcGdyZV9jaGFuZ2VsaW5rKCkgY2FuIGNoYW5nZS4gUmVjb21wdXRlIGl0IHRoZSB3YXlcbisgKiBfX2dyZV90dW5uZWxfaW5pdCgpIGRvZXMsIHRoZW4gbGV0IGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlXG4rICogbGVuZ3RocyBmcm9tIGl0LlxuKyAqXG4rICogQG9sZF9obGVuIGlzIG9ubHkgdXNlZCB0byB0ZWxsIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWUgc3RhbGUsIG5ldmVyIGFzIGFcbisgKiBkaWZmZXJlbmNlIHRvIGFwcGx5LCBzbyBpdCBjYW4gbm90IG1ha2UgdGhlIGxlbmd0aHMgZHJpZnQuIEl0IG11c3QgYmVcbisgKiBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2ggYWxyZWFkeSBwdWJsaXNoZXMgdGhlIG5ld1xuKyAqIHR1bm5lbC1cdTAwM2VobGVuIGZvciB1cy5cbisgKi9cbitzdGF0aWMgdm9pZCBpcGdyZV9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXG4rXHRcdFx0ICAgICAgaW50IG9sZF9obGVuKVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRpbnQgbGVuO1xuIFxuLVx0bGVuID0gdHVubmVsLVx1MDAzZXR1bl9obGVuO1xuIFx0dHVubmVsLVx1MDAzZXR1bl9obGVuID0gZ3JlX2NhbGNfaGxlbih0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4tXHRsZW4gPSB0dW5uZWwtXHUwMDNldHVuX2hsZW4gLSBsZW47XG4tXHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2VobGVuICsgbGVuO1xuLVxuLVx0aWYgKGRldi1cdTAwM2VoZWFkZXJfb3BzKVxuLVx0XHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuICs9IGxlbjtcbi1cdGVsc2Vcbi1cdFx0ZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSArPSBsZW47XG4rXHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2V0dW5faGxlbiArIHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuO1xuIFxuLVx0aWYgKHNldF9tdHUpXG4tXHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbWF4X3QoaW50LCBkZXYtXHUwMDNlbXR1IC0gbGVuLCA2OCkpO1xuK1x0LyogT25seSByZXNldCBhIE1UVSB0aGF0IHRoZSBoZWFkZXIgbGVuZ3RoIGp1c3QgaW52YWxpZGF0ZWQsIHNvIHRoYXRcbitcdCAqIGEgTVRVIGNvbmZpZ3VyZWQgYnkgdGhlIHVzZXIgc3Vydml2ZXMgYW4gdW5yZWxhdGVkIGNoYW5nZS5cbitcdCAqL1xuK1x0aXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhkZXYsIHNldF9tdHUgXHUwMDI2XHUwMDI2IHR1bm5lbC1cdTAwM2VobGVuICE9IG9sZF9obGVuKTtcbiBcbiBcdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpIHx8XG4gXHQgICAgKHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpIFx1MDAyNlx1MDAyNlxuQEAgLTg1Myw3ICs4NTgsNyBAQCBzdGF0aWMgaW50IGlwZ3JlX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLVx1MDAzZW9fZmxhZ3MpO1xuIFxuIFx0XHRpZiAoc3RyY21wKGRldi1cdTAwM2VydG5sX2xpbmtfb3BzLVx1MDAzZWtpbmQsIFwiZXJzcGFuXCIpKVxuLVx0XHRcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSk7XG4rXHRcdFx0aXBncmVfbGlua191cGRhdGUoZGV2LCB0cnVlLCB0LVx1MDAzZWhsZW4pO1xuIFx0fVxuIFxuIFx0aV9mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlaV9mbGFncyk7XG5AQCAtMTIzMywxMiArMTIzOCw2IEBAIHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRwYXJtcy1cdTAwM2VpcGguZnJhZ19vZmYgPSBodG9ucyhJUF9ERik7XG4gXHR9XG4gXG4tXHRpZiAoZGF0YVtJRkxBX0dSRV9DT0xMRUNUX01FVEFEQVRBXSkge1xuLVx0XHR0LVx1MDAzZWNvbGxlY3RfbWQgPSB0cnVlO1xuLVx0XHRpZiAoZGV2LVx1MDAzZXR5cGUgPT0gQVJQSFJEX0lQR1JFKVxuLVx0XHRcdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XG4tXHR9XG4tXG4gXHRpZiAoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKSB7XG4gXHRcdGlmIChubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSlcbiBcdFx0ICBcdTAwMjZcdTAwMjYgKHBhcm1zLVx1MDAzZWlwaC5mcmFnX29mZiBcdTAwMjYgaHRvbnMoSVBfREYpKSlcbkBAIC0xMjQ2LDYgKzEyNDUsMTMgQEAgc3RhdGljIGludCBpcGdyZV9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdHQtXHUwMDNlaWdub3JlX2RmID0gISFubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSk7XG4gXHR9XG4gXG4rXHQvKiBBbGwgYXR0cmlidXRlcyBoYXZlIGJlZW4gdmFsaWRhdGVkLCB3ZSBjYW4gY2hhbmdlIEBkZXYgYW5kIEB0LiAqL1xuK1x0aWYgKGRhdGFbSUZMQV9HUkVfQ09MTEVDVF9NRVRBREFUQV0pIHtcbitcdFx0dC1cdTAwM2Vjb2xsZWN0X21kID0gdHJ1ZTtcbitcdFx0aWYgKGRldi1cdTAwM2V0eXBlID09IEFSUEhSRF9JUEdSRSlcbitcdFx0XHRkZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9OT05FO1xuK1x0fVxuK1xuIFx0aWYgKGRhdGFbSUZMQV9HUkVfRldNQVJLXSlcbiBcdFx0KmZ3bWFyayA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRldNQVJLXSk7XG4gXG5AQCAtMTI1OSw0MCArMTI2NSw1MSBAQCBzdGF0aWMgaW50IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHRfX3UzMiAqZndtYXJrKVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0dTggZXJzcGFuX3ZlciA9IHQtXHUwMDNlZXJzcGFuX3ZlcjtcbitcdHUzMiBpbmRleCA9IHQtXHUwMDNlaW5kZXg7XG4rXHR1MTYgaHdpZCA9IHQtXHUwMDNlaHdpZDtcbitcdHU4IGRpciA9IHQtXHUwMDNlZGlyO1xuIFx0aW50IGVycjtcbiBcbi1cdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuIFx0aWYgKCFkYXRhKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4gXG4gXHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSkge1xuLVx0XHR0LVx1MDAzZWVyc3Bhbl92ZXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX1ZFUl0pO1xuK1x0XHRlcnNwYW5fdmVyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9WRVJdKTtcbiBcbi1cdFx0aWYgKHQtXHUwMDNlZXJzcGFuX3ZlciBcdTAwM2UgMilcbitcdFx0aWYgKGVyc3Bhbl92ZXIgXHUwMDNlIDIpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyID09IDEpIHtcbitcdGlmIChlcnNwYW5fdmVyID09IDEpIHtcbiBcdFx0aWYgKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0lOREVYXSkge1xuLVx0XHRcdHQtXHUwMDNlaW5kZXggPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfR1JFX0VSU1BBTl9JTkRFWF0pO1xuLVx0XHRcdGlmICh0LVx1MDAzZWluZGV4IFx1MDAyNiB+SU5ERVhfTUFTSylcbitcdFx0XHRpbmRleCA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0lOREVYXSk7XG4rXHRcdFx0aWYgKGluZGV4IFx1MDAyNiB+SU5ERVhfTUFTSylcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4tXHR9IGVsc2UgaWYgKHQtXHUwMDNlZXJzcGFuX3ZlciA9PSAyKSB7XG4rXHR9IGVsc2UgaWYgKGVyc3Bhbl92ZXIgPT0gMikge1xuIFx0XHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSkge1xuLVx0XHRcdHQtXHUwMDNlZGlyID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0VSU1BBTl9ESVJdKTtcbi1cdFx0XHRpZiAodC1cdTAwM2VkaXIgXHUwMDI2IH4oRElSX01BU0sgXHUwMDNlXHUwMDNlIERJUl9PRkZTRVQpKVxuK1x0XHRcdGRpciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fRElSXSk7XG4rXHRcdFx0aWYgKGRpciBcdTAwMjYgfihESVJfTUFTSyBcdTAwM2VcdTAwM2UgRElSX09GRlNFVCkpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0XHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pIHtcbi1cdFx0XHR0LVx1MDAzZWh3aWQgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfR1JFX0VSU1BBTl9IV0lEXSk7XG4tXHRcdFx0aWYgKHQtXHUwMDNlaHdpZCBcdTAwMjYgfihIV0lEX01BU0sgXHUwMDNlXHUwMDNlIEhXSURfT0ZGU0VUKSlcbitcdFx0XHRod2lkID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSFdJRF0pO1xuK1x0XHRcdGlmIChod2lkIFx1MDAyNiB+KEhXSURfTUFTSyBcdTAwM2VcdTAwM2UgSFdJRF9PRkZTRVQpKVxuIFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiBcdH1cbiBcbitcdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAdC4gKi9cbitcdHQtXHUwMDNlZXJzcGFuX3ZlciA9IGVyc3Bhbl92ZXI7XG4rXHR0LVx1MDAzZWluZGV4ID0gaW5kZXg7XG4rXHR0LVx1MDAzZWh3aWQgPSBod2lkO1xuK1x0dC1cdTAwM2VkaXIgPSBkaXI7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTM1MSwxOCArMTM2OCw0MyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fZmlsbF9tZXRhZGF0YV9kc3RcdD0gZ3JlX2ZpbGxfbWV0YWRhdGFfZHN0LFxuIH07XG4gXG4rc3RhdGljIHZvaWQgZXJzcGFuX3NldF9obGVuKHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbClcbit7XG4rXHQvKiBWZXJzaW9uIDAgdXNlcyBhIDQtYnl0ZSBHUkUgaGVhZGVyLCBvdGhlciB2ZXJzaW9ucyB1c2UgOCBieXRlcy4gKi9cbitcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDAgPyA0IDogODtcbitcbitcdHR1bm5lbC1cdTAwM2VobGVuID0gdHVubmVsLVx1MDAzZXR1bl9obGVuICsgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW4gK1xuK1x0XHQgICAgICAgZXJzcGFuX2hkcl9sZW4odHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIpO1xuK31cbitcbisvKiBCb3RoIHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyIGFuZCB0dW5uZWwtXHUwMDNlZW5jYXBfaGxlbiBjYW4gYmUgY2hhbmdlZCBmcm9tXG4rICogZXJzcGFuX2NoYW5nZWxpbmsoKSwgYW5kIGJvdGggZmVlZCB0dW5uZWwtXHUwMDNlaGxlbi4gUmVjb21wdXRlIGl0LCB0aGVuIGxldFxuKyAqIGlwX3R1bm5lbF9iaW5kX2RldigpIGRlcml2ZSB0aGUgZGV2aWNlIGxlbmd0aHMgZnJvbSBpdC5cbisgKlxuKyAqIEFzIGluIGlwZ3JlX2xpbmtfdXBkYXRlKCksIEBvbGRfaGxlbiBvbmx5IHRlbGxzIHdoZXRoZXIgdGhlIE1UVSBiZWNhbWVcbisgKiBzdGFsZSBhbmQgbXVzdCBiZSBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2hcbisgKiByZWNvbXB1dGVzIHR1bm5lbC1cdTAwM2VobGVuIHdpdGhvdXQgdGhlIEVSU1BBTiBwYXJ0LlxuKyAqL1xuK3N0YXRpYyB2b2lkIGVyc3Bhbl9saW5rX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUsXG4rXHRcdFx0ICAgICAgIGludCBvbGRfaGxlbilcbit7XG4rXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1xuK1x0ZXJzcGFuX3NldF9obGVuKHR1bm5lbCk7XG4rXG4rXHQvKiBPbmx5IHJlc2V0IGEgTVRVIHRoYXQgdGhlIGhlYWRlciBsZW5ndGgganVzdCBpbnZhbGlkYXRlZCwgc28gdGhhdFxuK1x0ICogYSBNVFUgY29uZmlndXJlZCBieSB0aGUgdXNlciBzdXJ2aXZlcyBhbiB1bnJlbGF0ZWQgY2hhbmdlLlxuK1x0ICovXG4rXHRpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKGRldiwgc2V0X210dSBcdTAwMjZcdTAwMjYgdHVubmVsLVx1MDAzZWhsZW4gIT0gb2xkX2hsZW4pO1xuK31cbitcbiBzdGF0aWMgaW50IGVyc3Bhbl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4tXHRpZiAodHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIgPT0gMClcbi1cdFx0dHVubmVsLVx1MDAzZXR1bl9obGVuID0gNDsgLyogNC1ieXRlIEdSRSBoZHIuICovXG4tXHRlbHNlXG4tXHRcdHR1bm5lbC1cdTAwM2V0dW5faGxlbiA9IDg7IC8qIDgtYnl0ZSBHUkUgaGRyLiAqL1xuK1x0ZXJzcGFuX3NldF9obGVuKHR1bm5lbCk7XG4gXG4gXHR0dW5uZWwtXHUwMDNlcGFybXMuaXBoLnByb3RvY29sID0gSVBQUk9UT19HUkU7XG4tXHR0dW5uZWwtXHUwMDNlaGxlbiA9IHR1bm5lbC1cdTAwM2V0dW5faGxlbiArIHR1bm5lbC1cdTAwM2VlbmNhcF9obGVuICtcbi1cdFx0ICAgICAgIGVyc3Bhbl9oZHJfbGVuKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyKTtcbiBcbiBcdGRldi1cdTAwM2VmZWF0dXJlc1x0XHR8PSBHUkVfRkVBVFVSRVM7XG4gXHRkZXYtXHUwMDNlaHdfZmVhdHVyZXNcdHw9IEdSRV9GRUFUVVJFUztcbkBAIC0xNDU5LDYgKzE1MDEsNyBAQCBzdGF0aWMgaW50IGlwZ3JlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcbiBcdF9fdTMyIGZ3bWFyayA9IHQtXHUwMDNlZndtYXJrO1xuK1x0aW50IG9sZF9obGVuID0gdC1cdTAwM2VobGVuO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbkBAIC0xNDcwLDE4ICsxNTEzLDI0IEBAIHN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFxuIFx0ZXJyID0gaXBncmVfbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBcdTAwMjZwLCBcdTAwMjZmd21hcmspO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBsaW5rX3VwZGF0ZTtcbiBcbiBcdGVyciA9IGlwX3R1bm5lbF9jaGFuZ2VsaW5rKGRldiwgdGIsIFx1MDAyNnAsIGZ3bWFyayk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGxpbmtfdXBkYXRlO1xuIFxuIFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5pX2ZsYWdzLCBwLmlfZmxhZ3MpO1xuIFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLm9fZmxhZ3MpO1xuIFxuLVx0aXBncmVfbGlua191cGRhdGUoZGV2LCAhdGJbSUZMQV9NVFVdKTtcbitsaW5rX3VwZGF0ZTpcbitcdC8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24gZXZlblxuK1x0ICogaWYgdGhlIHJlc3Qgb2YgdGhlIHJlcXVlc3QgZmFpbGVkLCBzbyB0aGUgbGVuZ3RocyBtdXN0IGJlIHJlZnJlc2hlZFxuK1x0ICogb24gdGhlIGVycm9yIHBhdGhzIGFzIHdlbGwuIFRoaXMgaGFzIHRvIGNvbWUgbGFzdCwgYmVjYXVzZVxuK1x0ICogaXBncmVfbGlua191cGRhdGUoKSBuZWVkcyB0aGUgZmxhZ3MgY29waWVkIGFib3ZlLlxuK1x0ICovXG4rXHRpcGdyZV9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuQEAgLTE0OTEsNiArMTU0MCw3IEBAIHN0YXRpYyBpbnQgZXJzcGFuX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcbiBcdF9fdTMyIGZ3bWFyayA9IHQtXHUwMDNlZndtYXJrO1xuK1x0aW50IG9sZF9obGVuID0gdC1cdTAwM2VobGVuO1xuIFx0aW50IGVycjtcbiBcbiBcdGlmICghcnRubF9kZXZfbGlua19uZXRfY2FwYWJsZShkZXYsIHQtXHUwMDNlbmV0KSlcbkBAIC0xNTAxLDYgKzE1NTEsMTYgQEAgc3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0ZXJyID0gZXJzcGFuX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgXHUwMDI2cCwgXHUwMDI2ZndtYXJrKTtcbitcbitcdC8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24sIGFuZFxuK1x0ICogZXJzcGFuX25ldGxpbmtfcGFybXMoKSBhIG5ldyBFUlNQQU4gdmVyc2lvbiwgYm90aCBvZiB3aGljaCBjaGFuZ2VcbitcdCAqIHRoZSBoZWFkZXIgbGVuZ3RoLiBSZWZyZXNoIHRoZSBsZW5ndGhzIGJlZm9yZSBsb29raW5nIGF0IEBlcnI6XG4rXHQgKiBlcnNwYW5feG1pdCgpIHNpemVzIGl0cyBwdXNoIGZyb20gdHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIsIGFuZCBib3RoIHRoaXNcbitcdCAqIGVycm9yIHBhdGggYW5kIGlwX3R1bm5lbF9jaGFuZ2VsaW5rKCkgYmVsb3cgbGVhdmUgdGhlIG5ld1xuK1x0ICogZW5jYXBzdWxhdGlvbiBiZWhpbmQuXG4rXHQgKi9cbitcdGVyc3Bhbl9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcbitcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdHJldHVybiBlcnI7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuaW5kZXggZTZiY2YwMTQxMWQwYi4uNmI5M2MxZmRhNDk0OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX3R1bm5lbC5jXG4rKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuY1xuQEAgLTMyNiw2ICszMjYsMjIgQEAgc3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiBtdHU7XG4gfVxuIFxuKy8qIFJlY29tcHV0ZSBkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tIGFuZCBkZXYtXHUwMDNlbXR1IGFmdGVyIHR1bm5lbC1cdTAwM2VobGVuIGNoYW5nZWQuXG4rICpcbisgKiBCb3RoIGFyZSBkZXJpdmVkIGZyb20gdHVubmVsLVx1MDAzZWhsZW4sIHNvIHRoZXkgbXVzdCBiZSByZWNvbXB1dGVkIGZyb20gaXRcbisgKiByYXRoZXIgdGhhbiBhZGp1c3RlZCBieSB0aGUgZGlmZmVyZW5jZTogaXBfdHVubmVsX2JpbmRfZGV2KCkgaXMgYWxzb1xuKyAqIGNhbGxlZCBmcm9tIG5kb19pbml0KCkgYW5kIGZyb20gaXBfdHVubmVsX3VwZGF0ZSgpLCBhbmQgYSBkcml2ZXIgYWRkaW5nXG4rICogaXRzIG93biBkZWx0YSBvbiB0b3Agd291bGQgZG91YmxlIGNvdW50IGl0LlxuKyAqL1xuK3ZvaWQgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpXG4re1xuK1x0aW50IG10dSA9IGlwX3R1bm5lbF9iaW5kX2RldihkZXYpO1xuK1xuK1x0aWYgKHNldF9tdHUpXG4rXHRcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbXR1KTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3Rocyk7XG4rXG4gc3RhdGljIHN0cnVjdCBpcF90dW5uZWwgKmlwX3R1bm5lbF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBpcF90dW5uZWxfbmV0ICppdG4sXG4gXHRcdFx0XHRcdCAgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnBhcm1zKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6MDkuMzAwMjYyOTE0WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MTAzOTM3MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBQb3RlbnRpYWwgVW5pbml0aWFsaXplZCBNZW1vcnkgUmlza3MgaW4gdGhpcyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGlmIGl0J3MgZ29pbmcgdG8gY2F1c2UgdXMgaGVhZGFjaGVzIHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmVzLCBhbmQgd2hldGhlciB3ZSBuZWVkIHRvIGZpcmUgdXAgS01TQU4gZm9yIGEgZGVlcCBkaXZlLiBUaGUgcGF0Y2ggaXRzZWxmIGlzIGxhYmVsZWQgYXMgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcsXCIgd2hpY2ggdXN1YWxseSBtZWFucyBpdCB3YXMgZmxhZ2dlZCBieSBzeXprYWxsZXIuXG5cblRoZSBmaWxlcyBtb2RpZmllZCBhcmU6IGBpbmNsdWRlL25ldC9pcF90dW5uZWxzLmhgLCBgbmV0L2lwdjQvaXBfZ3JlLmNgLCBhbmQgYG5ldC9pcHY0L2lwX3R1bm5lbC5jYC4gT2theSwgdGhyZWUgZmlsZXMuIExldCdzIHN0YXJ0IGJ5IG1ldGhvZGljYWxseSByZWFkaW5nIHRoZSBjaGFuZ2VzLlxuXG5Mb29raW5nIGF0IGBuZXQvaXB2NC9pcF90dW5uZWwuY2AsIHRoZXJlJ3MgYSBmdW5jdGlvbiBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHNldF9tdHUpYC4gSXQgY2FsbHMgYGlwX3R1bm5lbF9iaW5kX2RldihkZXYpYCBhbmQgc2V0cyBgZGV2LVx1MDAzZW10dWAgaWYgYHNldF9tdHVgIGlzIHRydWUuIEhtbSwgdGhhdCBgaXBfdHVubmVsX2JpbmRfZGV2YCBjYWxsIGxvb2tzIGltcG9ydGFudC4gTGV0J3MganVtcCBvdmVyIGFuZCBpbnNwZWN0IGBpcF90dW5uZWxfYmluZF9kZXYoZGV2KWAgaW4gdGhlIHNhbWUgZmlsZSB0byBzZWUgd2hhdCBpdCdzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDQ1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6MjMuNDA0MjAzNjgzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1ODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L2lwX3R1bm5lbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRcXHRcXHRydCA9IGlwX3JvdXRlX291dHB1dF9rZXkodHVubmVsLVxcdTAwM2VuZXQsIFxcdTAwMjZmbDQpO1xcbiAzMDE6XFx0XFxuIDMwMjpcXHRcXHRcXHRpZiAoIUlTX0VSUihydCkpIHtcXG4gMzAzOlxcdFxcdFxcdFxcdHRkZXYgPSBydC1cXHUwMDNlZHN0LmRldjtcXG4gMzA0OlxcdFxcdFxcdFxcdGlwX3J0X3B1dChydCk7XFxuIDMwNTpcXHRcXHRcXHR9XFxuIDMwNjpcXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2V0eXBlICE9IEFSUEhSRF9FVEhFUilcXG4gMzA3OlxcdFxcdFxcdFxcdGRldi1cXHUwMDNlZmxhZ3MgfD0gSUZGX1BPSU5UT1BPSU5UO1xcbiAzMDg6XFx0XFxuIDMwOTpcXHRcXHRcXHRkc3RfY2FjaGVfcmVzZXQoXFx1MDAyNnR1bm5lbC1cXHUwMDNlZHN0X2NhY2hlKTtcXG4gMzEwOlxcdFxcdH1cXG4gMzExOlxcdFxcbiAzMTI6XFx0XFx0aWYgKCF0ZGV2IFxcdTAwMjZcXHUwMDI2IHR1bm5lbC1cXHUwMDNlcGFybXMubGluaylcXG4gMzEzOlxcdFxcdFxcdHRkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgodHVubmVsLVxcdTAwM2VuZXQsIHR1bm5lbC1cXHUwMDNlcGFybXMubGluayk7XFxuIDMxNDpcXHRcXG4gMzE1OlxcdFxcdGlmICh0ZGV2KSB7XFxuIDMxNjpcXHRcXHRcXHRobGVuID0gdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuICsgdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tO1xcbiAzMTc6XFx0XFx0XFx0bXR1ID0gbWluKHRkZXYtXFx1MDAzZW10dSwgSVBfTUFYX01UVSk7XFxuIDMxODpcXHRcXHR9XFxuIDMxOTpcXHRcXG4gMzIwOlxcdFxcdGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID0gaXBfdHVubmVsX2xpbWl0X2hlYWRyb29tKHRfaGxlbiArIGhsZW4pO1xcbiAzMjE6XFx0XFx0bXR1IC09IHRfaGxlbiArIChkZXYtXFx1MDAzZXR5cGUgPT0gQVJQSFJEX0VUSEVSID8gZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gOiAwKTtcXG4gMzIyOlxcdFxcbiAzMjM6XFx0XFx0aWYgKG10dSBcXHUwMDNjIElQVjRfTUlOX01UVSlcXG4gMzI0OlxcdFxcdFxcdG10dSA9IElQVjRfTUlOX01UVTtcXG4gMzI1OlxcdFxcbiAzMjY6XFx0XFx0cmV0dXJuIG10dTtcXG4gMzI3OlxcdH1cXG4gMzI4OlxcdFxcbiAzMjk6XFx0LyogUmVjb21wdXRlIGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tIGFuZCBkZXYtXFx1MDAzZW10dSBhZnRlciB0dW5uZWwtXFx1MDAzZWhsZW4gY2hhbmdlZC5cXG4gMzMwOlxcdCAqXFxuIDMzMTpcXHQgKiBCb3RoIGFyZSBkZXJpdmVkIGZyb20gdHVubmVsLVxcdTAwM2VobGVuLCBzbyB0aGV5IG11c3QgYmUgcmVjb21wdXRlZCBmcm9tIGl0XFxuIDMzMjpcXHQgKiByYXRoZXIgdGhhbiBhZGp1c3RlZCBieSB0aGUgZGlmZmVyZW5jZTogaXBfdHVubmVsX2JpbmRfZGV2KCkgaXMgYWxzb1xcbiAzMzM6XFx0ICogY2FsbGVkIGZyb20gbmRvX2luaXQoKSBhbmQgZnJvbSBpcF90dW5uZWxfdXBkYXRlKCksIGFuZCBhIGRyaXZlciBhZGRpbmdcXG4gMzM0OlxcdCAqIGl0cyBvd24gZGVsdGEgb24gdG9wIHdvdWxkIGRvdWJsZSBjb3VudCBpdC5cXG4gMzM1OlxcdCAqL1xcbiAzMzY6XFx0dm9pZCBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSlcXG4gMzM3OlxcdHtcXG4gMzM4OlxcdFxcdGludCBtdHUgPSBpcF90dW5uZWxfYmluZF9kZXYoZGV2KTtcXG4gMzM5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0MzoyMy40MDQzMDEzNjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjU3MDgwMTY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGlwX3R1bm5lbF9iaW5kX2RldmAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgbGluZXMgMjcwLTMwMC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBwYXJ0aWN1bGFyIGNodW5rIG9mIHRoZSBjb2RlLiBMZXQgbWUgcGFyc2UgdGhpcyBzZWN0aW9uIGNhcmVmdWxseSwgZm9jdXNpbmcgb24gdGhlIGludGVyYWN0aW9ucyBhbmQgdGhlIGRhdGEgZmxvdy4gSG9wZWZ1bGx5LCB0aGlzIHNlY3Rpb24gaXNuJ3QgdG9vIG9idHVzZS4gSSBzdXNwZWN0IGl0J3MgZGVhbGluZyB3aXRoIHRoZSBhY3R1YWwgYmluZGluZyBsb2dpYywgcHJvYmFibHkgaW5jb3Jwb3JhdGluZyBzb21lIGRldmljZS1zcGVjaWZpYyBhc3BlY3RzLCBvciBwZXJoYXBzIHNvbWUgc2VjdXJpdHkgY2hlY2tzLiBUaW1lIHRvIGZvY3VzIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyB0aGlzIHNlY3Rpb24gcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzE5OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6MjUuOTc1MTA2NDQ3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF90dW5uZWwuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0XFx0XFx0Z290byBmYWlsZWRfZnJlZTtcXG4gMjcxOlxcdFxcbiAyNzI6XFx0XFx0cmV0dXJuIGRldjtcXG4gMjczOlxcdFxcbiAyNzQ6XFx0ZmFpbGVkX2ZyZWU6XFxuIDI3NTpcXHRcXHRmcmVlX25ldGRldihkZXYpO1xcbiAyNzY6XFx0ZmFpbGVkOlxcbiAyNzc6XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gMjc4OlxcdH1cXG4gMjc5OlxcdFxcbiAyODA6XFx0c3RhdGljIGludCBpcF90dW5uZWxfYmluZF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gMjgxOlxcdHtcXG4gMjgyOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICp0ZGV2ID0gTlVMTDtcXG4gMjgzOlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuIDI4NDpcXHRcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDtcXG4gMjg1OlxcdFxcdGludCBobGVuID0gTExfTUFYX0hFQURFUjtcXG4gMjg2OlxcdFxcdGludCBtdHUgPSBFVEhfREFUQV9MRU47XFxuIDI4NzpcXHRcXHRpbnQgdF9obGVuID0gdHVubmVsLVxcdTAwM2VobGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcik7XFxuIDI4ODpcXHRcXG4gMjg5OlxcdFxcdGlwaCA9IFxcdTAwMjZ0dW5uZWwtXFx1MDAzZXBhcm1zLmlwaDtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0LyogR3Vlc3Mgb3V0cHV0IGRldmljZSB0byBjaG9vc2UgcmVhc29uYWJsZSBtdHUgYW5kIG5lZWRlZF9oZWFkcm9vbSAqL1xcbiAyOTI6XFx0XFx0aWYgKGlwaC1cXHUwMDNlZGFkZHIpIHtcXG4gMjkzOlxcdFxcdFxcdHN0cnVjdCBmbG93aTQgZmw0O1xcbiAyOTQ6XFx0XFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQ7XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdFxcdGlwX3R1bm5lbF9pbml0X2Zsb3coXFx1MDAyNmZsNCwgaXBoLVxcdTAwM2Vwcm90b2NvbCwgaXBoLVxcdTAwM2VkYWRkcixcXG4gMjk3OlxcdFxcdFxcdFxcdFxcdCAgICBpcGgtXFx1MDAzZXNhZGRyLCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fa2V5LFxcbiAyOTg6XFx0XFx0XFx0XFx0XFx0ICAgIGlwaC1cXHUwMDNldG9zIFxcdTAwMjYgSU5FVF9EU0NQX01BU0ssIHR1bm5lbC1cXHUwMDNlbmV0LFxcbiAyOTk6XFx0XFx0XFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlcGFybXMubGluaywgdHVubmVsLVxcdTAwM2Vmd21hcmssIDAsIDApO1xcbiAzMDA6XFx0XFx0XFx0cnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KHR1bm5lbC1cXHUwMDNlbmV0LCBcXHUwMDI2Zmw0KTtcXG4gMzAxOlxcdFxcbiAzMDI6XFx0XFx0XFx0aWYgKCFJU19FUlIocnQpKSB7XFxuIDMwMzpcXHRcXHRcXHRcXHR0ZGV2ID0gcnQtXFx1MDAzZWRzdC5kZXY7XFxuIDMwNDpcXHRcXHRcXHRcXHRpcF9ydF9wdXQocnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0MzoyNS45NzUyMTExNjdaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg0NTY2NTA1MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZm9jdXNpbmcgaW4gb24gdGhlIGNoYW5nZXMgd2l0aGluIGBuZXQvaXB2NC9pcF9ncmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWVuIG1vZGlmaWVkLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQgaXMgdG8gZ28gbGluZS1ieS1saW5lLCBjb21wYXJpbmcgdGhlIGRpZmYgd2l0aCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBnZXQgdGhlIGZ1bGwgY29udGV4dC4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSByZWFkIHRocm91Z2ggdGhlIGNoYW5nZXMgYW5kIGludGVycHJldCB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTEwLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0Mzo0NC40MzE4NjQxMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA4MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODQwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODQwOlxcdFxcdGlmIChjbWQgPT0gU0lPQ0FERFRVTk5FTCB8fCBjbWQgPT0gU0lPQ0NIR1RVTk5FTCkge1xcbiA4NDE6XFx0XFx0XFx0aWYgKHAtXFx1MDAzZWlwaC52ZXJzaW9uICE9IDQgfHwgcC1cXHUwMDNlaXBoLnByb3RvY29sICE9IElQUFJPVE9fR1JFIHx8XFxuIDg0MjpcXHRcXHRcXHQgICAgcC1cXHUwMDNlaXBoLmlobCAhPSA1IHx8IChwLVxcdTAwM2VpcGguZnJhZ19vZmYgXFx1MDAyNiBodG9ucyh+SVBfREYpKSB8fFxcbiA4NDM6XFx0XFx0XFx0ICAgICgoaV9mbGFncyB8IG9fZmxhZ3MpIFxcdTAwMjYgKEdSRV9WRVJTSU9OIHwgR1JFX1JPVVRJTkcpKSlcXG4gODQ0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiA4NDU6XFx0XFx0fVxcbiA4NDY6XFx0XFxuIDg0NzpcXHRcXHRncmVfZmxhZ3NfdG9fdG5sX2ZsYWdzKHAtXFx1MDAzZWlfZmxhZ3MsIGlfZmxhZ3MpO1xcbiA4NDg6XFx0XFx0Z3JlX2ZsYWdzX3RvX3RubF9mbGFncyhwLVxcdTAwM2VvX2ZsYWdzLCBvX2ZsYWdzKTtcXG4gODQ5OlxcdFxcbiA4NTA6XFx0XFx0ZXJyID0gaXBfdHVubmVsX2N0bChkZXYsIHAsIGNtZCk7XFxuIDg1MTpcXHRcXHRpZiAoZXJyKVxcbiA4NTI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gODUzOlxcdFxcbiA4NTQ6XFx0XFx0aWYgKGNtZCA9PSBTSU9DQ0hHVFVOTkVMKSB7XFxuIDg1NTpcXHRcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gODU2OlxcdFxcbiA4NTc6XFx0XFx0XFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkodC1cXHUwMDNlcGFybXMuaV9mbGFncywgcC1cXHUwMDNlaV9mbGFncyk7XFxuIDg1ODpcXHRcXHRcXHRpcF90dW5uZWxfZmxhZ3NfY29weSh0LVxcdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLVxcdTAwM2VvX2ZsYWdzKTtcXG4gODU5OlxcdFxcbiA4NjA6XFx0XFx0XFx0aWYgKHN0cmNtcChkZXYtXFx1MDAzZXJ0bmxfbGlua19vcHMtXFx1MDAzZWtpbmQsIFxcXCJlcnNwYW5cXFwiKSlcXG4gODYxOlxcdFxcdFxcdFxcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSwgdC1cXHUwMDNlaGxlbik7XFxuIDg2MjpcXHRcXHR9XFxuIDg2MzpcXHRcXG4gODY0OlxcdFxcdGlfZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVxcdTAwM2VpX2ZsYWdzKTtcXG4gODY1OlxcdFxcdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYocC1cXHUwMDNlaV9mbGFncywgaV9mbGFncyk7XFxuIDg2NjpcXHRcXHRvX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cXHUwMDNlb19mbGFncyk7XFxuIDg2NzpcXHRcXHRpcF90dW5uZWxfZmxhZ3NfZnJvbV9iZTE2KHAtXFx1MDAzZW9fZmxhZ3MsIG9fZmxhZ3MpO1xcbiA4Njg6XFx0XFxuIDg2OTpcXHRcXHRyZXR1cm4gMDtcXG4gODcwOlxcdH1cXG4gODcxOlxcdFxcbiA4NzI6XFx0LyogTmljZSB0b3kuIFVuZm9ydHVuYXRlbHksIHVzZWxlc3MgaW4gcmVhbCBsaWZlIDotKVxcbiA4NzM6XFx0ICAgSXQgYWxsb3dzIHRvIGNvbnN0cnVjdCB2aXJ0dWFsIG11bHRpcHJvdG9jb2wgYnJvYWRjYXN0IFxcXCJMQU5cXFwiXFxuIDg3NDpcXHQgICBvdmVyIHRoZSBJbnRlcm5ldCwgcHJvdmlkZWQgbXVsdGljYXN0IHJvdXRpbmcgaXMgdHVuZWQuXFxuIDg3NTpcXHRcXG4gODc2OlxcdFxcbiA4Nzc6XFx0ICAgSSBoYXZlIG5vIGlkZWEgd2FzIHRoaXMgYmljeWNsZSBpbnZlbnRlZCBiZWZvcmUgbWUsXFxuIDg3ODpcXHQgICBzbyB0aGF0IEkgaGFkIHRvIHNldCBBUlBIUkRfSVBHUkUgdG8gYSByYW5kb20gdmFsdWUuXFxuIDg3OTpcXHQgICBJIGhhdmUgYW4gaW1wcmVzc2lvbiwgdGhhdCBDaXNjbyBjb3VsZCBtYWtlIHNvbWV0aGluZyBzaW1pbGFyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0Mzo0NC40MzIwMzY1NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTk2MzQ4NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBOZXRsaW5rIFBhcmFtZXRlciBTdHJ1Y3R1cmVzIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwgY29kZSBhZ2Fpbi4gQmFzZWQgb24gdGhlIGlzc3VlIHJlcG9ydCwgSSBuZWVkIHRvIGZvY3VzIG9uIHBvdGVudGlhbCBwcm9ibGVtcyByZWxhdGVkIHRvIHRoZSBoYW5kbGluZyBvZiBJUEdSRSBhbmQgRVJTUEFOIG5ldGxpbmsgcGFyYW1ldGVycy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBjaGVjayBhcm91bmQgbGluZXMgMTIyMCB0byAxMzIwLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBleGFtaW5lIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCBhbmQgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYC4gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGRhdGEgY29ycnVwdGlvbiwgaW5jb3JyZWN0IHR5cGUgaGFuZGxpbmcsIG9yIHBvc3NpYmxlIGJ1ZmZlciBvdmVyZmxvd3Mgd2hlbiB0aGVzZSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBwb3B1bGF0ZWQgb3IgYWNjZXNzZWQgdGhyb3VnaCB0aGUgbmV0bGluayBpbnRlcmZhY2UuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB3YXkgdGhlIGRhdGEgaXMgYmVpbmcgdmFsaWRhdGVkIGFuZCB3aGV0aGVyIHByb3BlciBlcnJvciBjaGVja2luZyBpcyBpbXBsZW1lbnRlZC4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbSBsaWVzLiBJJ2xsIGxpa2VseSBuZWVkIHRvIHRyYWNlIHRoZSBkYXRhIGZsb3cgZnJvbSB0aGUgbmV0bGluayBzb2NrZXQgYWxsIHRoZSB3YXkgdGhyb3VnaCB0byB3aGVyZSB0aGVzZSBwYXJhbWV0ZXJzIGFyZSB1c2VkIGluIHRoZSB0dW5uZWwgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MTEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQzOjQ2LjYyODM4NzY3MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTA3MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIzMCxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTIzMDpcXHRcXHRcXHRwYXJtcy1cXHUwMDNlaXBoLnR0bCA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9UVExdKTtcXG4xMjMxOlxcdFxcbjEyMzI6XFx0XFx0aWYgKGRhdGFbSUZMQV9HUkVfVE9TXSlcXG4xMjMzOlxcdFxcdFxcdHBhcm1zLVxcdTAwM2VpcGgudG9zID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX1RPU10pO1xcbjEyMzQ6XFx0XFxuMTIzNTpcXHRcXHRpZiAoIWRhdGFbSUZMQV9HUkVfUE1UVURJU0NdIHx8IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9QTVRVRElTQ10pKSB7XFxuMTIzNjpcXHRcXHRcXHRpZiAodC1cXHUwMDNlaWdub3JlX2RmKVxcbjEyMzc6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTIzODpcXHRcXHRcXHRwYXJtcy1cXHUwMDNlaXBoLmZyYWdfb2ZmID0gaHRvbnMoSVBfREYpO1xcbjEyMzk6XFx0XFx0fVxcbjEyNDA6XFx0XFxuMTI0MTpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9JR05PUkVfREZdKSB7XFxuMTI0MjpcXHRcXHRcXHRpZiAobmxhX2dldF91OChkYXRhW0lGTEFfR1JFX0lHTk9SRV9ERl0pXFxuMTI0MzpcXHRcXHRcXHQgIFxcdTAwMjZcXHUwMDI2IChwYXJtcy1cXHUwMDNlaXBoLmZyYWdfb2ZmIFxcdTAwMjYgaHRvbnMoSVBfREYpKSlcXG4xMjQ0OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyNDU6XFx0XFx0XFx0dC1cXHUwMDNlaWdub3JlX2RmID0gISFubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfSUdOT1JFX0RGXSk7XFxuMTI0NjpcXHRcXHR9XFxuMTI0NzpcXHRcXG4xMjQ4OlxcdFxcdC8qIEFsbCBhdHRyaWJ1dGVzIGhhdmUgYmVlbiB2YWxpZGF0ZWQsIHdlIGNhbiBjaGFuZ2UgQGRldiBhbmQgQHQuICovXFxuMTI0OTpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9DT0xMRUNUX01FVEFEQVRBXSkge1xcbjEyNTA6XFx0XFx0XFx0dC1cXHUwMDNlY29sbGVjdF9tZCA9IHRydWU7XFxuMTI1MTpcXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2V0eXBlID09IEFSUEhSRF9JUEdSRSlcXG4xMjUyOlxcdFxcdFxcdFxcdGRldi1cXHUwMDNldHlwZSA9IEFSUEhSRF9OT05FO1xcbjEyNTM6XFx0XFx0fVxcbjEyNTQ6XFx0XFxuMTI1NTpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9GV01BUktdKVxcbjEyNTY6XFx0XFx0XFx0KmZ3bWFyayA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRldNQVJLXSk7XFxuMTI1NzpcXHRcXG4xMjU4OlxcdFxcdHJldHVybiAwO1xcbjEyNTk6XFx0fVxcbjEyNjA6XFx0XFxuMTI2MTpcXHRzdGF0aWMgaW50IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuMTI2MjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuMTI2MzpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbjEyNjQ6XFx0XFx0XFx0XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnBhcm1zLFxcbjEyNjU6XFx0XFx0XFx0XFx0XFx0X191MzIgKmZ3bWFyaylcXG4xMjY2OlxcdHtcXG4xMjY3OlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjEyNjg6XFx0XFx0dTggZXJzcGFuX3ZlciA9IHQtXFx1MDAzZWVyc3Bhbl92ZXI7XFxuMTI2OTpcXHRcXHR1MzIgaW5kZXggPSB0LVxcdTAwM2VpbmRleDtcXG4xMjcwOlxcdFxcdHUxNiBod2lkID0gdC1cXHUwMDNlaHdpZDtcXG4xMjcxOlxcdFxcdHU4IGRpciA9IHQtXFx1MDAzZWRpcjtcXG4xMjcyOlxcdFxcdGludCBlcnI7XFxuMTI3MzpcXHRcXG4xMjc0OlxcdFxcdGlmICghZGF0YSlcXG4xMjc1OlxcdFxcdFxcdHJldHVybiBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIHBhcm1zLCBmd21hcmspO1xcbjEyNzY6XFx0XFxuMTI3NzpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSkge1xcbjEyNzg6XFx0XFx0XFx0ZXJzcGFuX3ZlciA9IG5sYV9nZXRfdTgoZGF0YVtJRkxBX0dSRV9FUlNQQU5fVkVSXSk7XFxuMTI3OTpcXHRcXG4xMjgwOlxcdFxcdFxcdGlmIChlcnNwYW5fdmVyIFxcdTAwM2UgMilcXG4xMjgxOlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyODI6XFx0XFx0fVxcbjEyODM6XFx0XFxuMTI4NDpcXHRcXHRpZiAoZXJzcGFuX3ZlciA9PSAxKSB7XFxuMTI4NTpcXHRcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9FUlNQQU5fSU5ERVhdKSB7XFxuMTI4NjpcXHRcXHRcXHRcXHRpbmRleCA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfRVJTUEFOX0lOREVYXSk7XFxuMTI4NzpcXHRcXHRcXHRcXHRpZiAoaW5kZXggXFx1MDAyNiB+SU5ERVhfTUFTSylcXG4xMjg4OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjEyODk6XFx0XFx0XFx0fVxcbjEyOTA6XFx0XFx0fSBlbHNlIGlmIChlcnNwYW5fdmVyID09IDIpIHtcXG4xMjkxOlxcdFxcdFxcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9ESVJdKSB7XFxuMTI5MjpcXHRcXHRcXHRcXHRkaXIgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0RJUl0pO1xcbjEyOTM6XFx0XFx0XFx0XFx0aWYgKGRpciBcXHUwMDI2IH4oRElSX01BU0sgXFx1MDAzZVxcdTAwM2UgRElSX09GRlNFVCkpXFxuMTI5NDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMjk1OlxcdFxcdFxcdH1cXG4xMjk2OlxcdFxcdFxcdGlmIChkYXRhW0lGTEFfR1JFX0VSU1BBTl9IV0lEXSkge1xcbjEyOTc6XFx0XFx0XFx0XFx0aHdpZCA9IG5sYV9nZXRfdTE2KGRhdGFbSUZMQV9HUkVfRVJTUEFOX0hXSURdKTtcXG4xMjk4OlxcdFxcdFxcdFxcdGlmIChod2lkIFxcdTAwMjYgfihIV0lEX01BU0sgXFx1MDAzZVxcdTAwM2UgSFdJRF9PRkZTRVQpKVxcbjEyOTk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTMwMDpcXHRcXHRcXHR9XFxuMTMwMTpcXHRcXHR9XFxuMTMwMjpcXHRcXG4xMzAzOlxcdFxcdGVyciA9IGlwZ3JlX25ldGxpbmtfcGFybXMoZGV2LCBkYXRhLCB0YiwgcGFybXMsIGZ3bWFyayk7XFxuMTMwNDpcXHRcXHRpZiAoZXJyKVxcbjEzMDU6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xMzA2OlxcdFxcbjEzMDc6XFx0XFx0LyogQWxsIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIHZhbGlkYXRlZCwgd2UgY2FuIGNoYW5nZSBAdC4gKi9cXG4xMzA4OlxcdFxcdHQtXFx1MDAzZWVyc3Bhbl92ZXIgPSBlcnNwYW5fdmVyO1xcbjEzMDk6XFx0XFx0dC1cXHUwMDNlaW5kZXggPSBpbmRleDtcXG4xMzEwOlxcdFxcdHQtXFx1MDAzZWh3aWQgPSBod2lkO1xcbjEzMTE6XFx0XFx0dC1cXHUwMDNlZGlyID0gZGlyO1xcbjEzMTI6XFx0XFxuMTMxMzpcXHRcXHRyZXR1cm4gMDtcXG4xMzE0OlxcdH1cXG4xMzE1OlxcdFxcbjEzMTY6XFx0LyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiBFTkNBUCBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50IGluIHRoZSBubCBtc2cgKi9cXG4xMzE3OlxcdHN0YXRpYyBib29sIGlwZ3JlX25ldGxpbmtfZW5jYXBfcGFybXMoc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbjEzMTg6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGlwX3R1bm5lbF9lbmNhcCAqaXBlbmNhcClcXG4xMzE5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6NDYuNjI4NTQwNDgzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIyNTYwMTg4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIGlwX2dyZS5jOiBlcnNwYW5fY2hhbmdlbGluayBhbmQgaXBncmVfY2hhbmdlbGluayBGdW5jdGlvbmFsaXR5KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgaGFwcGVuaW5nIGFyb3VuZCB0aG9zZSBgZXJzcGFuX2NoYW5nZWxpbmtgIGFuZCBgaXBncmVfY2hhbmdlbGlua2AgZnVuY3Rpb25zIGluIGBpcF9ncmUuY2AuIExldCdzIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IGNvZGUgYmxvY2ssIHJvdWdobHkgZnJvbSBsaW5lIDE0NTAgdG8gMTU3MC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgaGFuZGxpbmcgbGluayBjaGFuZ2Vz4oCUcHJvYmFibHkgZGVhbGluZyB3aXRoIHVwZGF0ZXMgdG8gdGhlIEdSRS9FUlNQQU4gdHVubmVsIGNvbmZpZ3VyYXRpb25zIG9yIHN0YXRlIHRyYW5zaXRpb25zIGFmdGVyIGFuIGludGVyZmFjZSBnb2VzIHVwIG9yIGRvd24uIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBzeXN0ZW0gYWRhcHRzIHRvIGNoYW5nZXMgaW4gdGhlIHVuZGVybHlpbmcgcGh5c2ljYWwgbGluaywgcGFydGljdWxhcmx5IGhvdyBpdCBhZmZlY3RzIHRoZSBlc3RhYmxpc2hlZCB0dW5uZWxzLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0aGUgY2FsbHMgdG8gbG93ZXItbGV2ZWwgbmV0d29ya2luZyBmdW5jdGlvbnMsIGFuZCBhbnkgZXJyb3IgaGFuZGxpbmcgb3IgcmV0cnkgbWVjaGFuaXNtcyBpbXBsZW1lbnRlZC4gSSdtIGFudGljaXBhdGluZyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcm91dGluZyB0YWJsZSBhcyB3ZWxsLCB0byBzZWUgaG93IHRoZXNlIGxpbmsgY2hhbmdlcyBhZmZlY3QgZm9yd2FyZGluZyBiZWhhdmlvci4gSXQncyBhbHNvIHBvc3NpYmxlIHRoZXJlJ3Mgc29tZSBpbnRlcmFjdGlvbiB3aXRoIG5ldHdvcmsgbmFtZXNwYWNlcywgaWYgd2UncmUgZGVhbGluZyB3aXRoIGNvbnRhaW5lcml6ZWQgZW52aXJvbm1lbnRzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQzOjQ4Ljg4NDU2NTgzM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTgzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQ5MCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQ5MDpcXHRcXHRlcnIgPSBlcnNwYW5fbmV0bGlua19wYXJtcyhkZXYsIGRhdGEsIHRiLCBcXHUwMDI2cCwgXFx1MDAyNmZ3bWFyayk7XFxuMTQ5MTpcXHRcXHRpZiAoZXJyKVxcbjE0OTI6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4xNDkzOlxcdFxcdHJldHVybiBpcF90dW5uZWxfbmV3bGluayhwYXJhbXMtXFx1MDAzZWxpbmtfbmV0ID8gOiBkZXZfbmV0KGRldiksIGRldiwgdGIsIFxcdTAwMjZwLFxcbjE0OTQ6XFx0XFx0XFx0XFx0XFx0IGZ3bWFyayk7XFxuMTQ5NTpcXHR9XFxuMTQ5NjpcXHRcXG4xNDk3OlxcdHN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbjE0OTg6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4xNDk5OlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuMTUwMDpcXHR7XFxuMTUwMTpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xNTAyOlxcdFxcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuIHA7XFxuMTUwMzpcXHRcXHRfX3UzMiBmd21hcmsgPSB0LVxcdTAwM2Vmd21hcms7XFxuMTUwNDpcXHRcXHRpbnQgb2xkX2hsZW4gPSB0LVxcdTAwM2VobGVuO1xcbjE1MDU6XFx0XFx0aW50IGVycjtcXG4xNTA2OlxcdFxcbjE1MDc6XFx0XFx0aWYgKCFydG5sX2Rldl9saW5rX25ldF9jYXBhYmxlKGRldiwgdC1cXHUwMDNlbmV0KSlcXG4xNTA4OlxcdFxcdFxcdHJldHVybiAtRVBFUk07XFxuMTUwOTpcXHRcXG4xNTEwOlxcdFxcdGVyciA9IGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoZGV2LCBkYXRhKTtcXG4xNTExOlxcdFxcdGlmIChlcnIpXFxuMTUxMjpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1MTM6XFx0XFxuMTUxNDpcXHRcXHRlcnIgPSBpcGdyZV9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIFxcdTAwMjZwLCBcXHUwMDI2ZndtYXJrKTtcXG4xNTE1OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjE1MTY6XFx0XFx0XFx0Z290byBsaW5rX3VwZGF0ZTtcXG4xNTE3OlxcdFxcbjE1MTg6XFx0XFx0ZXJyID0gaXBfdHVubmVsX2NoYW5nZWxpbmsoZGV2LCB0YiwgXFx1MDAyNnAsIGZ3bWFyayk7XFxuMTUxOTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4xNTIwOlxcdFxcdFxcdGdvdG8gbGlua191cGRhdGU7XFxuMTUyMTpcXHRcXG4xNTIyOlxcdFxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KHQtXFx1MDAzZXBhcm1zLmlfZmxhZ3MsIHAuaV9mbGFncyk7XFxuMTUyMzpcXHRcXHRpcF90dW5uZWxfZmxhZ3NfY29weSh0LVxcdTAwM2VwYXJtcy5vX2ZsYWdzLCBwLm9fZmxhZ3MpO1xcbjE1MjQ6XFx0XFxuMTUyNTpcXHRsaW5rX3VwZGF0ZTpcXG4xNTI2OlxcdFxcdC8qIGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXAoKSBoYXMgcHVibGlzaGVkIGEgbmV3IGVuY2Fwc3VsYXRpb24gZXZlblxcbjE1Mjc6XFx0XFx0ICogaWYgdGhlIHJlc3Qgb2YgdGhlIHJlcXVlc3QgZmFpbGVkLCBzbyB0aGUgbGVuZ3RocyBtdXN0IGJlIHJlZnJlc2hlZFxcbjE1Mjg6XFx0XFx0ICogb24gdGhlIGVycm9yIHBhdGhzIGFzIHdlbGwuIFRoaXMgaGFzIHRvIGNvbWUgbGFzdCwgYmVjYXVzZVxcbjE1Mjk6XFx0XFx0ICogaXBncmVfbGlua191cGRhdGUoKSBuZWVkcyB0aGUgZmxhZ3MgY29waWVkIGFib3ZlLlxcbjE1MzA6XFx0XFx0ICovXFxuMTUzMTpcXHRcXHRpcGdyZV9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcXG4xNTMyOlxcdFxcbjE1MzM6XFx0XFx0cmV0dXJuIGVycjtcXG4xNTM0OlxcdH1cXG4xNTM1OlxcdFxcbjE1MzY6XFx0c3RhdGljIGludCBlcnNwYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbjE1Mzc6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuMTUzODpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4xNTM5OlxcdHtcXG4xNTQwOlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjE1NDE6XFx0XFx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gcDtcXG4xNTQyOlxcdFxcdF9fdTMyIGZ3bWFyayA9IHQtXFx1MDAzZWZ3bWFyaztcXG4xNTQzOlxcdFxcdGludCBvbGRfaGxlbiA9IHQtXFx1MDAzZWhsZW47XFxuMTU0NDpcXHRcXHRpbnQgZXJyO1xcbjE1NDU6XFx0XFxuMTU0NjpcXHRcXHRpZiAoIXJ0bmxfZGV2X2xpbmtfbmV0X2NhcGFibGUoZGV2LCB0LVxcdTAwM2VuZXQpKVxcbjE1NDc6XFx0XFx0XFx0cmV0dXJuIC1FUEVSTTtcXG4xNTQ4OlxcdFxcbjE1NDk6XFx0XFx0ZXJyID0gaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cChkZXYsIGRhdGEpO1xcbjE1NTA6XFx0XFx0aWYgKGVycilcXG4xNTUxOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuMTU1MjpcXHRcXG4xNTUzOlxcdFxcdGVyciA9IGVyc3Bhbl9uZXRsaW5rX3Bhcm1zKGRldiwgZGF0YSwgdGIsIFxcdTAwMjZwLCBcXHUwMDI2ZndtYXJrKTtcXG4xNTU0OlxcdFxcbjE1NTU6XFx0XFx0LyogaXBncmVfbmV3bGlua19lbmNhcF9zZXR1cCgpIGhhcyBwdWJsaXNoZWQgYSBuZXcgZW5jYXBzdWxhdGlvbiwgYW5kXFxuMTU1NjpcXHRcXHQgKiBlcnNwYW5fbmV0bGlua19wYXJtcygpIGEgbmV3IEVSU1BBTiB2ZXJzaW9uLCBib3RoIG9mIHdoaWNoIGNoYW5nZVxcbjE1NTc6XFx0XFx0ICogdGhlIGhlYWRlciBsZW5ndGguIFJlZnJlc2ggdGhlIGxlbmd0aHMgYmVmb3JlIGxvb2tpbmcgYXQgQGVycjpcXG4xNTU4OlxcdFxcdCAqIGVyc3Bhbl94bWl0KCkgc2l6ZXMgaXRzIHB1c2ggZnJvbSB0dW5uZWwtXFx1MDAzZWVyc3Bhbl92ZXIsIGFuZCBib3RoIHRoaXNcXG4xNTU5OlxcdFxcdCAqIGVycm9yIHBhdGggYW5kIGlwX3R1bm5lbF9jaGFuZ2VsaW5rKCkgYmVsb3cgbGVhdmUgdGhlIG5ld1xcbjE1NjA6XFx0XFx0ICogZW5jYXBzdWxhdGlvbiBiZWhpbmQuXFxuMTU2MTpcXHRcXHQgKi9cXG4xNTYyOlxcdFxcdGVyc3Bhbl9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcXG4xNTYzOlxcdFxcbjE1NjQ6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuMTU2NTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjE1NjY6XFx0XFxuMTU2NzpcXHRcXHRlcnIgPSBpcF90dW5uZWxfY2hhbmdlbGluayhkZXYsIHRiLCBcXHUwMDI2cCwgZndtYXJrKTtcXG4xNTY4OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjE1Njk6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6NDguODg0NzI2MDczWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgyMjg1Nzc3MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFR1bm5lbGluZyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBhbHdheXMsIHdoYXQncyB0aGUgY29yZSBpc3N1ZSB0aGlzIHBhdGNoIGlzIGFkZHJlc3Npbmc/IEl0IHNlZW1zIGxpa2UgcmVwZWF0ZWQgY2FsbHMgdG8gYGlwZ3JlX2NoYW5nZWxpbmtgIGFuZCBgZXJzcGFuX2NoYW5nZWxpbmtgLCBvciBjaGFuZ2VzIGluIGVuY2Fwc3VsYXRpb24sIHdlcmUgbGVhZGluZyB0byBpbmNvbnNpc3RlbmNpZXMgaW4gYHR1bm5lbC1cdTAwM2VobGVuYCwgYW5kIHRoZSBkZXZpY2UncyBoZWFkcm9vbSBhbmQgTVRVIHdlcmUgYmVjb21pbmcgbWlzYWxpZ25lZC4gVGhpcyByZXN1bHRlZCBpbiBsZW5ndGggZHJpZnQsIGFuZCB0aGUgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYCBmdW5jdGlvbiB3YXMgbXV0YXRpbmcgdHVubmVsIHBhcmFtZXRlcnMgKmJlZm9yZSogdGhleSB3ZXJlIHZhbGlkYXRlZCwgd2hpY2ggd291bGQgbGVhdmUgdGhlIHR1bm5lbCBzdHJ1Y3R1cmUgaW5jb25zaXN0ZW50IGlmIHZhbGlkYXRpb24gZmFpbGVkLiBJbXBvcnRhbnRseSwgYGVyc3Bhbl9saW5rX3VwZGF0ZWAgd2Fzbid0IGV2ZW4gcHJlc2VudCBwcmV2aW91c2x5LCB3aGljaCBzZWVtcyBsaWtlIGEgc2lnbmlmaWNhbnQgb3ZlcnNpZ2h0LiBUaGUgY29tbWVudCBpbiBgaXBncmVfbGlua191cGRhdGVgIHJlaW5mb3JjZXMgdGhhdCBgdHVubmVsLVx1MDAzZWhsZW5gIGlzIGRlcGVuZGVudCBvbiBmbGFncyB0aGF0IGNhbiBjaGFuZ2UsIHNvIHdlICpuZWVkKiB0byByZWNvbXB1dGUgaXQgYW5kIGRlcml2ZSBkZXZpY2UgbGVuZ3RocyBmcm9tIHRoZXJlLiBXZSBhcmVuJ3QganVzdCBhZGp1c3RpbmcgYnkgYSBkZWx0YSwgc28gdHJhY2tpbmcgYW4gYG9sZF9obGVuYCB2YWx1ZSBpc24ndCBzdWZmaWNpZW50LlxuXG5Ob3csIGFzIGFuIGV4cGVydCwgSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBzYWZldHkuIE15IHByaW1hcnkgY29uY2VybiBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZSwgc28gSSBuZWVkIHRvIGNoZWNrIGFnYWluc3QgdGhlIGZvdXIgY3JpdGVyaWE6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZToqKiBBcmUgd2UgaW50cm9kdWNpbmcgbmV3IG9yIG1vZGlmeWluZyBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBwb3RlbnRpYWwgYXZlbnVlcyB3aGVyZSBrZXJuZWwgZGF0YSBsZWFrcyBvdXQsIGFuZCB0aGlzIGlzIHdoZXJlIEkgc3RhcnQgdG8gZHJpbGwgZG93bi5cbiAgICAqICAgTm8gYnJhbmQtbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UuIFRoYXQncyBhIGdvb2QgZmlyc3QgY2hlY2suXG4gICAgKiAgIEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgcmV2aWV3IHRoZSBleGlzdGluZyBuZXRsaW5rIHJlcGx5IHBhdGhzOiBgaXBncmVfZmlsbF9pbmZvYCwgYGVyc3Bhbl9maWxsX2luZm9gLCBhbmQgYGdyZV90YXBfZmlsbF9pbmZvYC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgZmllbGRzIGluIGBuZXRkZXZgIG9yIGBpcF90dW5uZWxgIGFyZSByZWFkIGFuZCBzZW50IHRvIHVzZXJzcGFjZSwgb3IgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQgYnkgb3VyIGNoYW5nZXMuIEFyZSB3ZSB3cml0aW5nIHZhbHVlcyB0aGF0IHdlcmUgcHJldmlvdXNseSB1bmluaXRpYWxpemVkLCBvciBhcmUgd2UgY2hhbmdpbmcgbG9naWMgYW5kIHBvdGVudGlhbGx5IGxlYWtpbmcgZXhpc3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/XG5cbkkgbmVlZCB0byBjb25maXJtIGFsbCB0aGUgcGF0aHMgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcy4gSSdtIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdG8gbG9vayB3aXRoaW4gdGhvc2UgbmV0bGluayBmaWxsIGZ1bmN0aW9ucyB0byBzZWUgd2hlcmUgdGhlIGRhdGEgZnJvbSB0dW5uZWwgc3RydWN0dXJlcyBnZXRzIGNvcGllZCBpbnRvIHRoZSBza2IgYXR0cmlidXRlcy4gSSdsbCBuZWVkIHRvIHZlcmlmeSBlYWNoIGZpZWxkIHRob3JvdWdobHkuIFRoaXMgaXMgd2hlcmUgdGhlIGRldmlsIGlzIGluIHRoZSBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjIyNywiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQzOjU3LjExMzMwNjg2NloiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU3NDcwOTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyc3Bhbl9maWxsX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9MTYyNT1zdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTY3NS1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNjc2OnN0YXRpYyBpbnQgZXJzcGFuX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE2Nzcte1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTc2OD1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZXJzcGFuX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzc4LVxcdC5nZXRfc2l6ZVxcdD0gaXBncmVfZ2V0X3NpemUsXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTc3OTpcXHQuZmlsbF9pbmZvXFx0PSBlcnNwYW5fZmlsbF9pbmZvLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3ODAtXFx0LmdldF9saW5rX25ldFxcdD0gaXBfdHVubmVsX2dldF9saW5rX25ldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6NTcuNDcwNzgyODAxWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE2NzA3OTY0MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhhdCBjb2RlIHNuaXBwZXQ6XG5cbioqRGl2aW5nIGludG8gYGVyc3Bhbl9maWxsX2luZm9gKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyB0YWtlIGEgbG9vayBhdCBgZXJzcGFuX2ZpbGxfaW5mb2AuIFNpbmNlIEknbSB3b3JraW5nIG9uIHRoaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzcGVjaWZpYyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBkYXRhIGl0J3MgZGVzaWduZWQgdG8gcG9wdWxhdGUgYW5kIHRoZSBvdmVyYWxsIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJdCBsaWtlbHkgZGVhbHMgd2l0aCBzb21lIGZvcm0gb2YgRVJTUEFOIChFbmNhcHN1bGF0ZWQgUmVtb3RlIFNQQU4pIGluZm9ybWF0aW9uLiBJJ2xsIGV4YW1pbmUgdGhlIGNvZGUgY2xvc2VseSB0byBncmFzcCBpdHMgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYW55IGludGVybmFsIGxvZ2ljLiBLbm93aW5nIGhvdyB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIEVSU1BBTiBpbXBsZW1lbnRhdGlvbiBpcyBjcml0aWNhbCBmb3IgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjY4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDM6NTkuMTQxNTgxNDUxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjc1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjc1OlxcdFxcbjE2NzY6XFx0c3RhdGljIGludCBlcnNwYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuMTY3NzpcXHR7XFxuMTY3ODpcXHRcXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xNjc5OlxcdFxcbjE2ODA6XFx0XFx0aWYgKHQtXFx1MDAzZWVyc3Bhbl92ZXIgXFx1MDAzYz0gMikge1xcbjE2ODE6XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dSRV9FUlNQQU5fVkVSLCB0LVxcdTAwM2VlcnNwYW5fdmVyKSlcXG4xNjgyOlxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE2ODM6XFx0XFxuMTY4NDpcXHRcXHRcXHRpZiAodC1cXHUwMDNlZXJzcGFuX3ZlciA9PSAxKSB7XFxuMTY4NTpcXHRcXHRcXHRcXHRpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX0dSRV9FUlNQQU5fSU5ERVgsIHQtXFx1MDAzZWluZGV4KSlcXG4xNjg2OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE2ODc6XFx0XFx0XFx0fSBlbHNlIGlmICh0LVxcdTAwM2VlcnNwYW5fdmVyID09IDIpIHtcXG4xNjg4OlxcdFxcdFxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HUkVfRVJTUEFOX0RJUiwgdC1cXHUwMDNlZGlyKSlcXG4xNjg5OlxcdFxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbjE2OTA6XFx0XFx0XFx0XFx0aWYgKG5sYV9wdXRfdTE2KHNrYiwgSUZMQV9HUkVfRVJTUEFOX0hXSUQsIHQtXFx1MDAzZWh3aWQpKVxcbjE2OTE6XFx0XFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuMTY5MjpcXHRcXHRcXHR9XFxuMTY5MzpcXHRcXHR9XFxuMTY5NDpcXHRcXG4xNjk1OlxcdFxcdHJldHVybiBpcGdyZV9maWxsX2luZm8oc2tiLCBkZXYpO1xcbjE2OTY6XFx0XFxuMTY5NzpcXHRubGFfcHV0X2ZhaWx1cmU6XFxuMTY5ODpcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbjE2OTk6XFx0fVxcbjE3MDA6XFx0XFxuMTcwMTpcXHRzdGF0aWMgdm9pZCBlcnNwYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4xNzAyOlxcdHtcXG4xNzAzOlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbjE3MDQ6XFx0XFxuMTcwNTpcXHRcXHRldGhlcl9zZXR1cChkZXYpO1xcbjE3MDY6XFx0XFx0ZGV2LVxcdTAwM2VtYXhfbXR1ID0gMDtcXG4xNzA3OlxcdFxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZlcnNwYW5fbmV0ZGV2X29wcztcXG4xNzA4OlxcdFxcdGRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2PSB+SUZGX1RYX1NLQl9TSEFSSU5HO1xcbjE3MDk6XFx0XFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0Mzo1OS4xNDE3NDQyODFaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTMxNzM0NDg2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgVmFyaWFibGUgSXNzdWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJ20gZm9jdXNpbmcgb24gdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgd2l0aGluIHRoaXMgbmV0d29yayBkZXZpY2UgY29kZSwgcGFydGljdWxhcmx5IHJlbGF0ZWQgdG8gdGhlIEVSU1BBTiBhbmQgR1JFIHR1bm5lbHMuXG5cbkZpcnN0LCB3aXRoaW4gdGhlIGBlcnNwYW5fbmV0bGlua19wYXJtc2AgZnVuY3Rpb24sIEkgc2VlIHRoYXQgYGVyc3Bhbl92ZXJgLCBgaW5kZXhgLCBgaHdpZGAsIGFuZCBgZGlyYCBhcmUgbG9jYWwgdmFyaWFibGVzLiBUaGV5IGFyZSBkaXJlY3RseSBpbml0aWFsaXplZCBmcm9tIGZpZWxkcyBvZiB0aGUgYG5ldF9kZXZpY2VgIHN0cnVjdCBgdGAuIEFuZCwgY3J1Y2lhbGx5LCB0aGlzIHN0cnVjdCBgdGAgaXMgYWxsb2NhdGVkIGFuZCB6ZXJvLWluaXRpYWxpemVkLiBUaGVyZWZvcmUsIHRoZXJlJ3Mgbm8gd2F5IHRoZXNlIHZhcmlhYmxlcyBhcmUgdW5pbml0aWFsaXplZCBhdCB0aGUgcG9pbnQgb2YgdGhlaXIgZGVjbGFyYXRpb24uIEl0J3MgYSB0ZXh0Ym9vayBpbml0aWFsaXphdGlvbiBwYXR0ZXJuLlxuXG5Ob3csIGZvciBhbnkgY29uZGl0aW9uYWwgbG9naWMsIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gdmFyaWFibGVzLCBhcmUgd2UgbG9va2luZyBhdCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gSSBzZWUgYG9sZF9obGVuYCBiZWluZyB1c2VkIGluIGBpcGdyZV9saW5rX3VwZGF0ZWAsIGFuZCB0aGF0IGl0IG9yaWdpbmF0ZXMgZnJvbSBgaXBncmVfY2hhbmdlbGlua2Agb3IgYGlwZ3JlX3R1bm5lbF9jdGxgLiBCb3RoIGBpcGdyZV9jaGFuZ2VsaW5rYCBhbmQgYGVyc3Bhbl9jaGFuZ2VsaW5rYCBpbml0aWFsaXplIHRoZSBgb2xkX2hsZW5gIHZhcmlhYmxlIGZyb20gYHQtXHUwMDNlaGxlbmAsIHdoaWNoIG1lYW5zIHdlIGFyZSBzYWZlLlxuXG5SZWdhcmRpbmcgYWxsb2NhdGlvbnMgYW5kIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBuZXcgYWxsb2NhdGlvbnMgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgYWRkZWQuIFRoYXQncyBnb29kOyBpdCBzaW1wbGlmaWVzIHRoaW5ncy5cblxuQnV0IHRoaXMgYnJpbmdzIHVzIHRvIHRoZSBwb3RlbnRpYWxseSB0cmlja3kgcGFydDogYm91bmRzIGNoZWNrcyBhbmQgYWNjZXNzIHRvIGV4aXN0aW5nIGJ1ZmZlcnMuIEhlcmUsIEkgbmVlZCB0byBsb29rIGNsb3NlbHkgZm9yIHZ1bG5lcmFiaWxpdGllcyB3aGVyZSBjaGFuZ2VzIHRvIE1UVSwgaGVhZGVyIGxlbmd0aCAoYGhsZW5gKSwgZXRjLiBjb3VsZCBsZWFkIHRvIG91dC1vZi1ib3VuZHMgcmVhZHMgZHVlIHRvIGltcHJvcGVyIGNhbGN1bGF0aW9ucyBvciBjaGVja3MuIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHN1cmUuIFRoaXMgaXMgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyFcblxuSSBuZWVkIHRvIGZvY3VzIG9uIGhvdyBgdHVubmVsLVx1MDAzZWhsZW5gLCBgdHVubmVsLVx1MDAzZXR1bl9obGVuYCwgYGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb21gLCBgZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbmAsIGFuZCBgZGV2LVx1MDAzZW10dWAgYXJlIGFsbCB1c2VkIHRvZ2V0aGVyLCBlc3BlY2lhbGx5IGR1cmluZyB0cmFuc21pc3Npb24gb3IgcHJvY2Vzc2luZy4gVGhpcyBpcyBhIGNyaXRpY2FsIGFyZWE7IGEgc3VidGxlIG9mZi1ieS1vbmUgZXJyb3Igb3IgaW5jb3JyZWN0IGNhbGN1bGF0aW9uIGhlcmUgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgb3IgZXZlbiBnYXJiYWdlIGRhdGEuIEkgbmVlZCB0byB0cmFjZSB0aGUgZGF0YSBmbG93IG9mIGB0dW5uZWwtXHUwMDNlaGxlbmAgYW5kIGB0dW5uZWwtXHUwMDNldHVuX2hsZW5gIGR1cmluZyB0aGUgdHJhbnNtaXNzaW9uIHByb2Nlc3MgYW5kIHNlZSBpZiBhbnkgYXNzdW1wdGlvbnMgb3IgY2FsY3VsYXRpb25zIGFyZSByaXNreS4gVGhpcyB3YXJyYW50cyBhIG1vcmUgZGV0YWlsZWQgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0OTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0NDoxMi4zMTUxOTUxODRaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwMzM2MzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR1bl9obGVufGhsZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9NDc2PXN0YXRpYyB2b2lkIF9fZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ4Mi1cXHQvKiBQdXNoIEdSRSBoZWFkZXIuICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6NDgzOlxcdGdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWwtXFx1MDAzZXR1bl9obGVuLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ4NC1cXHRcXHRcXHQgZmxhZ3MsIHByb3RvLCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fa2V5LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9NDk2PXN0YXRpYyB2b2lkIGdyZV9mYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy01MDItXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9rZXkgKmtleTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo1MDM6XFx0aW50IHR1bm5lbF9obGVuO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTUwNC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTUxMC1cXHRrZXkgPSBcXHUwMDI2dHVuX2luZm8tXFx1MDAzZWtleTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo1MTE6XFx0dHVubmVsX2hsZW4gPSBncmVfY2FsY19obGVuKGtleS1cXHUwMDNldHVuX2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy01MTItXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy01MjUtXFxubmV0L2lwdjQvaXBfZ3JlLmM6NTI2OlxcdGdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWxfaGxlbiwgZmxhZ3MsIHByb3RvLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTUyNy1cXHRcXHRcXHQgdHVubmVsX2lkX3RvX2tleTMyKHR1bl9pbmZvLVxcdTAwM2VrZXkudHVuX2lkKSxcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTUzMC1cXG5uZXQvaXB2NC9pcF9ncmUuYzo1MzE6XFx0aXBfbWRfdHVubmVsX3htaXQoc2tiLCBkZXYsIElQUFJPVE9fR1JFLCB0dW5uZWxfaGxlbik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNTMyLVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9NTQwPXN0YXRpYyB2b2lkIGVyc3Bhbl9mYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy01NDgtXFx0X19iZTE2IHByb3RvO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjU0OTpcXHRpbnQgdHVubmVsX2hsZW47XFxubmV0L2lwdjQvaXBfZ3JlLmMtNTUwLVxcdGludCB2ZXJzaW9uO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNTY2LVxcdHZlcnNpb24gPSBtZC1cXHUwMDNldmVyc2lvbjtcXG5uZXQvaXB2NC9pcF9ncmUuYzo1Njc6XFx0dHVubmVsX2hsZW4gPSA4ICsgZXJzcGFuX2hkcl9sZW4odmVyc2lvbik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtNTY4LVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNjE1LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjYxNjpcXHRpcF9tZF90dW5uZWxfeG1pdChza2IsIGRldiwgSVBQUk9UT19HUkUsIHR1bm5lbF9obGVuKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy02MTctXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz02NDk9c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTY2NC1cXHRpZiAoZGV2LVxcdTAwM2VoZWFkZXJfb3BzKSB7XFxubmV0L2lwdjQvaXBfZ3JlLmM6NjY1OlxcdFxcdGludCBwdWxsX2xlbiA9IHR1bm5lbC1cXHUwMDNlaGxlbiArIHNpemVvZihzdHJ1Y3QgaXBoZHIpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTY2Ni1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTc2MT1zdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy03OTEtXFxubmV0L2lwdjQvaXBfZ3JlLmM6NzkyOi8qIHR1bm5lbC1cXHUwMDNlaGxlbiBkZXBlbmRzIG9uIHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFncyBhbmQgb24gdHVubmVsLVxcdTAwM2VlbmNhcF9obGVuLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTc5My0gKiBib3RoIG9mIHdoaWNoIGlwZ3JlX2NoYW5nZWxpbmsoKSBjYW4gY2hhbmdlLiBSZWNvbXB1dGUgaXQgdGhlIHdheVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtNzk2LSAqXFxubmV0L2lwdjQvaXBfZ3JlLmM6Nzk3OiAqIEBvbGRfaGxlbiBpcyBvbmx5IHVzZWQgdG8gdGVsbCB3aGV0aGVyIHRoZSBNVFUgYmVjYW1lIHN0YWxlLCBuZXZlciBhcyBhXFxubmV0L2lwdjQvaXBfZ3JlLmMtNzk4LSAqIGRpZmZlcmVuY2UgdG8gYXBwbHksIHNvIGl0IGNhbiBub3QgbWFrZSB0aGUgbGVuZ3RocyBkcmlmdC4gSXQgbXVzdCBiZVxcbm5ldC9pcHY0L2lwX2dyZS5jLTc5OS0gKiBzYW1wbGVkIGJlZm9yZSBpcF90dW5uZWxfZW5jYXBfc2V0dXAoKSwgd2hpY2ggYWxyZWFkeSBwdWJsaXNoZXMgdGhlIG5ld1xcbm5ldC9pcHY0L2lwX2dyZS5jOjgwMDogKiB0dW5uZWwtXFx1MDAzZWhsZW4gZm9yIHVzLlxcbm5ldC9pcHY0L2lwX2dyZS5jLTgwMS0gKi9cXG5uZXQvaXB2NC9pcF9ncmUuYz04MDI9c3RhdGljIHZvaWQgaXBncmVfbGlua191cGRhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBzZXRfbXR1LFxcbm5ldC9pcHY0L2lwX2dyZS5jOjgwMzpcXHRcXHRcXHQgICAgICBpbnQgb2xkX2hsZW4pXFxubmV0L2lwdjQvaXBfZ3JlLmMtODA0LXtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTgwNi1cXG5uZXQvaXB2NC9pcF9ncmUuYzo4MDc6XFx0dHVubmVsLVxcdTAwM2V0dW5faGxlbiA9IGdyZV9jYWxjX2hsZW4odHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYzo4MDg6XFx0dHVubmVsLVxcdTAwM2VobGVuID0gdHVubmVsLVxcdTAwM2V0dW5faGxlbiArIHR1bm5lbC1cXHUwMDNlZW5jYXBfaGxlbjtcXG5uZXQvaXB2NC9pcF9ncmUuYy04MDktXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy04MTItXFx0ICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6ODEzOlxcdGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHMoZGV2LCBzZXRfbXR1IFxcdTAwMjZcXHUwMDI2IHR1bm5lbC1cXHUwMDNlaGxlbiAhPSBvbGRfaGxlbik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtODE0LVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9ODI2PXN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtODYwLVxcdFxcdGlmIChzdHJjbXAoZGV2LVxcdTAwM2VydG5sX2xpbmtfb3BzLVxcdTAwM2VraW5kLCBcXFwiZXJzcGFuXFxcIikpXFxubmV0L2lwdjQvaXBfZ3JlLmM6ODYxOlxcdFxcdFxcdGlwZ3JlX2xpbmtfdXBkYXRlKGRldiwgdHJ1ZSwgdC1cXHUwMDNlaGxlbik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtODYyLVxcdH1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTg5OT1zdGF0aWMgaW50IGlwZ3JlX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtOTA3LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjkwODpcXHRuZWVkZWQgPSB0LVxcdTAwM2VobGVuICsgc2l6ZW9mKCppcGgpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTkwOS1cXHRpZiAoc2tiX2hlYWRyb29tKHNrYikgXFx1MDAzYyBuZWVkZWQgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTkyNi1cXHRpZiAoaXBoLVxcdTAwM2VkYWRkcilcXG5uZXQvaXB2NC9pcF9ncmUuYzo5Mjc6XFx0XFx0cmV0dXJuIHQtXFx1MDAzZWhsZW4gKyBzaXplb2YoKmlwaCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtOTI4LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjkyOTpcXHRyZXR1cm4gLSh0LVxcdTAwM2VobGVuICsgc2l6ZW9mKCppcGgpKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy05MzAtfVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTAxNj1zdGF0aWMgdm9pZCBfX2dyZV90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAyMC1cXHR0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEwMjE6XFx0dHVubmVsLVxcdTAwM2V0dW5faGxlbiA9IGdyZV9jYWxjX2hsZW4odHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDIyLVxcdHR1bm5lbC1cXHUwMDNlcGFybXMuaXBoLnByb3RvY29sID0gSVBQUk9UT19HUkU7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAyMy1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDI0OlxcdHR1bm5lbC1cXHUwMDNlaGxlbiA9IHR1bm5lbC1cXHUwMDNldHVuX2hsZW4gKyB0dW5uZWwtXFx1MDAzZWVuY2FwX2hsZW47XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTAyNTpcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSA9IHR1bm5lbC1cXHUwMDNlaGxlbiArIHNpemVvZih0dW5uZWwtXFx1MDAzZXBhcm1zLmlwaCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTAyNi1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTEwNDU9c3RhdGljIGludCBpcGdyZV90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA2NS1cXHRcXHRcXHRkZXYtXFx1MDAzZWhlYWRlcl9vcHMgPSBcXHUwMDI2aXBncmVfaGVhZGVyX29wcztcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDY2OlxcdFxcdFxcdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gdHVubmVsLVxcdTAwM2VobGVuICsgc2l6ZW9mKCppcGgpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNjctXFx0XFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSAwO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA3MS1cXHRcXHRkZXYtXFx1MDAzZWhlYWRlcl9vcHMgPSBcXHUwMDI2aXBncmVfaGVhZGVyX29wcztcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMDcyOlxcdFxcdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gdHVubmVsLVxcdTAwM2VobGVuICsgc2l6ZW9mKCppcGgpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNzMtXFx0XFx0ZGV2LVxcdTAwM2VuZWVkZWRfaGVhZHJvb20gPSAwO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTM1OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzAtXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM3MTpzdGF0aWMgdm9pZCBlcnNwYW5fc2V0X2hsZW4oc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsKVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzIte1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzMtXFx0LyogVmVyc2lvbiAwIHVzZXMgYSA0LWJ5dGUgR1JFIGhlYWRlciwgb3RoZXIgdmVyc2lvbnMgdXNlIDggYnl0ZXMuICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM3NDpcXHR0dW5uZWwtXFx1MDAzZXR1bl9obGVuID0gdHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyID09IDAgPyA0IDogODtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzc1LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNzY6XFx0dHVubmVsLVxcdTAwM2VobGVuID0gdHVubmVsLVxcdTAwM2V0dW5faGxlbiArIHR1bm5lbC1cXHUwMDNlZW5jYXBfaGxlbiArXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3Ny1cXHRcXHQgICAgICAgZXJzcGFuX2hkcl9sZW4odHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyKTtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzktXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM4MDovKiBCb3RoIHR1bm5lbC1cXHUwMDNlZXJzcGFuX3ZlciBhbmQgdHVubmVsLVxcdTAwM2VlbmNhcF9obGVuIGNhbiBiZSBjaGFuZ2VkIGZyb21cXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzgxOiAqIGVyc3Bhbl9jaGFuZ2VsaW5rKCksIGFuZCBib3RoIGZlZWQgdHVubmVsLVxcdTAwM2VobGVuLiBSZWNvbXB1dGUgaXQsIHRoZW4gbGV0XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM4Mi0gKiBpcF90dW5uZWxfYmluZF9kZXYoKSBkZXJpdmUgdGhlIGRldmljZSBsZW5ndGhzIGZyb20gaXQuXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM4My0gKlxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzODQ6ICogQXMgaW4gaXBncmVfbGlua191cGRhdGUoKSwgQG9sZF9obGVuIG9ubHkgdGVsbHMgd2hldGhlciB0aGUgTVRVIGJlY2FtZVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzODUtICogc3RhbGUgYW5kIG11c3QgYmUgc2FtcGxlZCBiZWZvcmUgaXBfdHVubmVsX2VuY2FwX3NldHVwKCksIHdoaWNoXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM4NjogKiByZWNvbXB1dGVzIHR1bm5lbC1cXHUwMDNlaGxlbiB3aXRob3V0IHRoZSBFUlNQQU4gcGFydC5cXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzg3LSAqL1xcbm5ldC9pcHY0L2lwX2dyZS5jPTEzODg9c3RhdGljIHZvaWQgZXJzcGFuX2xpbmtfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgc2V0X210dSxcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzg5OlxcdFxcdFxcdCAgICAgICBpbnQgb2xkX2hsZW4pXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5MC17XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzkyLVxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzOTM6XFx0ZXJzcGFuX3NldF9obGVuKHR1bm5lbCk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM5NC1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTctXFx0ICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM5ODpcXHRpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzKGRldiwgc2V0X210dSBcXHUwMDI2XFx1MDAyNiB0dW5uZWwtXFx1MDAzZWhsZW4gIT0gb2xkX2hsZW4pO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTEzOTktfVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTQwMT1zdGF0aWMgaW50IGVyc3Bhbl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQwNC1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDA1OlxcdGVyc3Bhbl9zZXRfaGxlbih0dW5uZWwpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE0MDYtXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xNDk3PXN0YXRpYyBpbnQgaXBncmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTUwMy1cXHRfX3UzMiBmd21hcmsgPSB0LVxcdTAwM2Vmd21hcms7XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTUwNDpcXHRpbnQgb2xkX2hsZW4gPSB0LVxcdTAwM2VobGVuO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTE1MDUtXFx0aW50IGVycjtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE1MzAtXFx0ICovXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTUzMTpcXHRpcGdyZV9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTMyLVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTUzNj1zdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTQyLVxcdF9fdTMyIGZ3bWFyayA9IHQtXFx1MDAzZWZ3bWFyaztcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNTQzOlxcdGludCBvbGRfaGxlbiA9IHQtXFx1MDAzZWhsZW47XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTU0NC1cXHRpbnQgZXJyO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTU2MS1cXHQgKi9cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNTYyOlxcdGVyc3Bhbl9saW5rX3VwZGF0ZShkZXYsICF0YltJRkxBX01UVV0sIG9sZF9obGVuKTtcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTYzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxNTo0NDoxMi4zNjU1Mzg4NjRaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mzg3Nzc5NDU2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIGBlcnNwYW5feG1pdGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBlcnNwYW5feG1pdGAgZnVuY3Rpb24gaGFuZGxlcyBgdHVubmVsLVx1MDAzZWVyc3Bhbl92ZXJgLiBUaGlzIGlzIGtleS4gVGhlIGBlcnNwYW5fdmVyYCBmaWVsZCBsaWtlbHkgZGljdGF0ZXMgdGhlIHNwZWNpZmljIEVSU1BBTiB2ZXJzaW9uIGJlaW5nIHVzZWQsIGFuZCB0aGF0J3MgZ29pbmcgdG8gaW5mbHVlbmNlIGV2ZXJ5dGhpbmcgZnJvbSBoZWFkZXIgY29uc3RydWN0aW9uIHRvIGhvdyB0aGUgcGFja2V0IGlzIHVsdGltYXRlbHkgdHJhbnNtaXR0ZWQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIHZhcmlhYmxlIHdpdGhpbiB0aGUgZnVuY3Rpb24uIElzIGl0IHVzZWQgaW4gY29uZGl0aW9uYWwgbG9naWM/IERvZXMgaXQgZGlyZWN0bHkgaW5mbHVlbmNlIGFueSBjYWxjdWxhdGlvbnM/IElzIHRoZXJlIGEgbG9va3VwIHRhYmxlIG9yIGEgc3dpdGNoIHN0YXRlbWVudCB0aGF0IG1ha2VzIGRlY2lzaW9ucyBiYXNlZCBvbiB0aGlzIGZpZWxkPyBJcyBpdCBzaW1wbHkgcGFzc2VkIGFsb25nIGFzIGEgcGFyYW1ldGVyPyBXaGVyZSBhbmQgaG93IGl0J3MgdXNlZCBpcyB3aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGZ1bGx5LCBiZWNhdXNlIHRoZSBFUlNQQU4gdmVyc2lvbiBjb21wbGV0ZWx5IGFmZmVjdHMgdGhlIGZyYW1lJ3MgZm9ybWF0LiBJZiBJIGNhbiB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIHV0aWxpemVzIGB0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlcmAsIEknbGwgYmUgYWJsZSB0byBncmFzcCB0aGUgY29yZSBsb2dpYyBiZWhpbmQgdGhlIHZlcnNpb25pbmcgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTYwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDQ6MTYuMjQzMzM2MDM2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjgyMDc5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcnNwYW5feG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF9ncmUuYz02NDk9c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTcwMi1cXG5uZXQvaXB2NC9pcF9ncmUuYzo3MDM6c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvaXBfZ3JlLmMtNzA0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQxOS1cXHQubmRvX3VuaW5pdFxcdFxcdD0gaXBfdHVubmVsX3VuaW5pdCxcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNDIwOlxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gZXJzcGFuX3htaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTQyMS1cXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gZXRoX21hY19hZGRyLFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTUzNj1zdGF0aWMgaW50IGVyc3Bhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTU3LVxcdCAqIHRoZSBoZWFkZXIgbGVuZ3RoLiBSZWZyZXNoIHRoZSBsZW5ndGhzIGJlZm9yZSBsb29raW5nIGF0IEBlcnI6XFxubmV0L2lwdjQvaXBfZ3JlLmM6MTU1ODpcXHQgKiBlcnNwYW5feG1pdCgpIHNpemVzIGl0cyBwdXNoIGZyb20gdHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyLCBhbmQgYm90aCB0aGlzXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTU1OS1cXHQgKiBlcnJvciBwYXRoIGFuZCBpcF90dW5uZWxfY2hhbmdlbGluaygpIGJlbG93IGxlYXZlIHRoZSBuZXdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDQ6MTYuMjkwMTYzNzIyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI0MzQ2NDEzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gZm9jdXMgb24gbGluZXMgNzAwIHRocm91Z2ggNzYwIG9mIGBlcnNwYW5feG1pdGAuXG5cbioqQW5hbHl6aW5nIHRoZSBgZXJzcGFuX3htaXRgIENvZGUgU2VnbWVudCoqXG5cbkFscmlnaHQsIGxpbmVzIDcwMC03NjAuLi4gSSBleHBlY3QgdGhpcyBzZWN0aW9uIGxpa2VseSBoYW5kbGVzIHNvbWUgY29yZSBhc3BlY3RzIG9mIEVSU1BBTiB0cmFuc21pc3Npb24g4oCTIHByb2JhYmx5IGRhdGEgZm9ybWF0dGluZywgY2hlY2tzdW0gY2FsY3VsYXRpb25zLCBvciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBuZXR3b3JrIGludGVyZmFjZS4gS25vd2luZyBob3cgdGhpcyBtb2R1bGUgd29ya3MgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBFUlNQQU4gaXNzdWVzLiBJIHdhbnQgdG8gbG9vayBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byBlbmNhcHN1bGF0aW9uLCBWTEFOIGhhbmRsaW5nLCBvciB0aGUgYWN0dWFsIHF1ZXVpbmcgb2YgdGhlIHBhY2tldHMuIEknbSBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3Igc3VidGxlIGRldGFpbHMg4oCTIHBvdGVudGlhbCBvZmYtYnktb25lIGVycm9ycyBpbiBwYWNrZXQgc2l6aW5nLCBpbmNvcnJlY3QgY2hlY2tzdW0gY2FsY3VsYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byBkcm9wcGVkIHBhY2tldHMsIG9yIGFueSB1bnVzdWFsIGNvbnRyb2wgZmxvdyBwYXRocyB0aGF0IGRldmlhdGUgZnJvbSB0aGUgc3RhbmRhcmQgRVJTUEFOIHByb2NlZHVyZXMuIEknbGwgYmUgc2VhcmNoaW5nIGZvciBhbnkgb3B0aW1pemF0aW9uIHN0cmF0ZWdpZXMgb3IgcG90ZW50aWFsIGJvdHRsZW5lY2tzIHRoYXQgY291bGQgYWZmZWN0IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgc3lzdGVtIGluIHRlcm1zIG9mIGxhdGVuY3kgb3IgdGhyb3VnaHB1dC4gSWYgdGhlcmUgYXJlIGFueSBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBlc3BlY2lhbGx5IG5lc3RlZCBvbmVzLCBJIHdhbnQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCBlYWNoIGJyYW5jaCB3aWxsIGJlIHRha2VuLiBFc3NlbnRpYWxseSwgSSdtIHBlZWxpbmcgYmFjayB0aGUgbGF5ZXJzIHRvIHVuZGVyc3RhbmQgdGhlIG51YW5jZXMgb2YgdGhlIEVSU1BBTiBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTYzNSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQ0OjE4LjcyNDgwODA3WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gNzAxOlxcdH1cXG4gNzAyOlxcdFxcbiA3MDM6XFx0c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIDcwNDpcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gNzA1OlxcdHtcXG4gNzA2OlxcdFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuIDcwNzpcXHRcXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XFxuIDcwODpcXHRcXHRib29sIHRydW5jYXRlID0gZmFsc2U7XFxuIDcwOTpcXHRcXHRfX2JlMTYgcHJvdG87XFxuIDcxMDpcXHRcXG4gNzExOlxcdFxcdGlmICghcHNrYl9pbmV0X21heV9wdWxsKHNrYikpXFxuIDcxMjpcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiA3MTM6XFx0XFxuIDcxNDpcXHRcXHRpZiAodHVubmVsLVxcdTAwM2Vjb2xsZWN0X21kKSB7XFxuIDcxNTpcXHRcXHRcXHRlcnNwYW5fZmJfeG1pdChza2IsIGRldik7XFxuIDcxNjpcXHRcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiA3MTc6XFx0XFx0fVxcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIGZhbHNlKSlcXG4gNzIwOlxcdFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuIDcyMTpcXHRcXG4gNzIyOlxcdFxcdGlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpXFxuIDcyMzpcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiA3MjQ6XFx0XFxuIDcyNTpcXHRcXHRpZiAoc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSBkZXYtXFx1MDAzZW10dSArIGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuKSB7XFxuIDcyNjpcXHRcXHRcXHRpZiAocHNrYl90cmltKHNrYiwgZGV2LVxcdTAwM2VtdHUgKyBkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlbikpXFxuIDcyNzpcXHRcXHRcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbiA3Mjg6XFx0XFx0XFx0dHJ1bmNhdGUgPSB0cnVlO1xcbiA3Mjk6XFx0XFx0fVxcbiA3MzA6XFx0XFxuIDczMTpcXHRcXHRpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzKTtcXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0LyogUHVzaCBFUlNQQU4gaGVhZGVyICovXFxuIDczNDpcXHRcXHRpZiAodHVubmVsLVxcdTAwM2VlcnNwYW5fdmVyID09IDApIHtcXG4gNzM1OlxcdFxcdFxcdHByb3RvID0gaHRvbnMoRVRIX1BfRVJTUEFOKTtcXG4gNzM2OlxcdFxcdFxcdF9fY2xlYXJfYml0KElQX1RVTk5FTF9TRVFfQklULCBmbGFncyk7XFxuIDczNzpcXHRcXHR9IGVsc2UgaWYgKHR1bm5lbC1cXHUwMDNlZXJzcGFuX3ZlciA9PSAxKSB7XFxuIDczODpcXHRcXHRcXHRlcnNwYW5fYnVpbGRfaGVhZGVyKHNrYiwgbnRvaGwodHVubmVsLVxcdTAwM2VwYXJtcy5vX2tleSksXFxuIDczOTpcXHRcXHRcXHRcXHRcXHQgICAgdHVubmVsLVxcdTAwM2VpbmRleCxcXG4gNzQwOlxcdFxcdFxcdFxcdFxcdCAgICB0cnVuY2F0ZSwgdHJ1ZSk7XFxuIDc0MTpcXHRcXHRcXHRwcm90byA9IGh0b25zKEVUSF9QX0VSU1BBTik7XFxuIDc0MjpcXHRcXHR9IGVsc2UgaWYgKHR1bm5lbC1cXHUwMDNlZXJzcGFuX3ZlciA9PSAyKSB7XFxuIDc0MzpcXHRcXHRcXHRlcnNwYW5fYnVpbGRfaGVhZGVyX3YyKHNrYiwgbnRvaGwodHVubmVsLVxcdTAwM2VwYXJtcy5vX2tleSksXFxuIDc0NDpcXHRcXHRcXHRcXHRcXHQgICAgICAgdHVubmVsLVxcdTAwM2VkaXIsIHR1bm5lbC1cXHUwMDNlaHdpZCxcXG4gNzQ1OlxcdFxcdFxcdFxcdFxcdCAgICAgICB0cnVuY2F0ZSwgdHJ1ZSk7XFxuIDc0NjpcXHRcXHRcXHRwcm90byA9IGh0b25zKEVUSF9QX0VSU1BBTjIpO1xcbiA3NDc6XFx0XFx0fSBlbHNlIHtcXG4gNzQ4OlxcdFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuIDc0OTpcXHRcXHR9XFxuIDc1MDpcXHRcXG4gNzUxOlxcdFxcdF9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCBmbGFncyk7XFxuIDc1MjpcXHRcXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcXHUwMDI2dHVubmVsLVxcdTAwM2VwYXJtcy5pcGgsIHByb3RvLCBmbGFncyk7XFxuIDc1MzpcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiA3NTQ6XFx0XFxuIDc1NTpcXHRmcmVlX3NrYjpcXG4gNzU2OlxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiA3NTc6XFx0XFx0REVWX1NUQVRTX0lOQyhkZXYsIHR4X2Ryb3BwZWQpO1xcbiA3NTg6XFx0XFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gNzU5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDQ6MTguNzI0OTMwOTMxWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkzNjAwMTMwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgRVJTUEFOIGFuZCBJUEdSRSBUdW5uZWxpbmcgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBlcnNwYW5feG1pdGAgcGF0aCBiZWNhdXNlIHRoYXQncyB3aGVyZSB0aGluZ3MgY2FuIGdldCBoYWlyeSBxdWlja2x5LiAgYHNrYl9jb3dfaGVhZGAgaXMgdGhlIGZpcnN0IHBsYWNlIHRvIGxvb2suIEknbSB0aGlua2luZywgaWYgdGhlIGluaXRpYWwgaGVhZHJvb20gaXMgd3JvbmcsIGVpdGhlciB0b28gc21hbGwgb3IgdGhlIE1UVSBjYWxjdWxhdGlvbiBkdXJpbmcgdGhlIGBwc2tiX3RyaW1gIGlzIGluYWNjdXJhdGUsIHRoYXTigJlzIGdvaW5nIHRvIG1hbmlmZXN0IGFzIGEgY3Jhc2guIFRoZSBrZXJuZWwncyBnb2luZyB0byB0ZWxsIG1lIHByZXR0eSBmYXN0IHdoZW4gSSBoYXZlIGEgcHJvYmxlbSwgZWl0aGVyIHdpdGggYSBwYW5pYyBmcm9tIHRoZSBgc2tiX3B1c2hgLCBvciB0aGUgS0FTQU4vQlVHX09OIHdpbGwgY2F0Y2ggaXQuICBTbyBpdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggaXMgYXR0ZW1wdGluZyB0byBjb3JyZWN0IHRoZSBgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbWAgYW5kIE1UVSBjYWxjdWxhdGlvbnMsIHBhcnRpY3VsYXJseSBpbiByZXNwb25zZSB0byBjaGFuZ2VzIGluIGxpbmsgcGFyYW1ldGVycyBhbmQgdGhlIEVSU1BBTiB2ZXJzaW9uL2hlYWRlciBsZW5ndGguXG5cblRoZSBgaXBncmVfdHVubmVsX2N0bGAgY2hhbmdlIGlzIGludGVyZXN0aW5nLiBUaGV5IGFyZSBtb3ZpbmcgdG8gdXNlIHRoZSBgaGxlbmAgd2l0aCB0aGUgYGlwZ3JlX2xpbmtfdXBkYXRlYC4gSSBuZWVkIHRvIHRyYWNrIHdoZXJlIHRoYXQncyBiZWluZyB1c2VkLiBUaGUgdXBkYXRlIGZ1bmN0aW9uIGlzIHdoYXQgbW9kaWZpZXMgdGhlIHR1bm5lbGVkIGRldmljZSwgc2V0dGluZyB0aGUgYHR1bm5lbC1cdTAwM2V0dW5faGxlbmAuIFRoZXkgYXJlIHRoZW4gc2V0dGluZyBgdHVubmVsLVx1MDAzZWhsZW5gIGJhc2VkIG9uIGB0dW5uZWwtXHUwMDNldHVuX2hsZW5gIGFuZCBgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW5gLiAgYGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHNgIHNlZW1zIGxpa2UgdGhlIGtleSBmdW5jdGlvbiBub3csIGFzIHRoYXQgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgdWx0aW1hdGVseSBjYWxsZWQgdG8gcmVzZXQgTVRVIHdoZW4gdGhlIGhlYWRlciBsZW5ndGggaXMgaW52YWxpZGF0ZWQuICBJIG5lZWQgdG8gY2hlY2sgaG93IE1UVSBpcyBzZXQuIEFoLCBgaXBfdHVubmVsX2JpbmRfZGV2KGRldilgIHJlY2FsY3VsYXRlcyBgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbWAgYW5kIHJldHVybnMgdGhlIE1UVS4gU28gdGhhdCdzIHRoZSBNVFUgc291cmNlLlxuXG5Mb29raW5nIGRlZXBlciBpbnRvIGBpcGdyZV9uZXRsaW5rX3Bhcm1zYCwgdGhleSBtb3ZlZCB0aGUgbWV0YWRhdGEgaGFuZGxpbmcgbG9naWMuICBJdCBzZWVtcyB0byBjaGFuZ2UgdGhlIHR5cGUgb2YgYSBkZXZpY2UsIGlmIG1ldGFkYXRhIGNvbGxlY3Rpb24gaXMgZW5hYmxlZC4gR29vZC4gIEknbSBnbGFkIHRoZXkgYXJlIG1vdmluZyBpdCBhcm91bmQgYmFzZWQgb24gdmFsaWRhdGlvbiBvZiB0aGUgb3RoZXIgYXR0cmlidXRlcy5cblxuSW4gdGhlIGBlcnNwYW5fbmV0bGlua19wYXJtc2AsIHN0b3JpbmcgdGhlIHZhbHVlcyBsb2NhbGx5IGJlZm9yZSBzZXR0aW5nIHRoZW0gdG8gdGhlIHR1bm5lbCdzIHZhcmlhYmxlcyBpcyBzbWFydCwgYW5kIGNhbGxpbmcgYGlwZ3JlX25ldGxpbmtfcGFybXNgIGVuc3VyZXMgY29uc2lzdGVuY3kuIFRoZSBjYWxsIHRvIGBlcnNwYW5fbGlua191cGRhdGVgIGFsc28gc3VnZ2VzdHMgYSBjb21wbGV0ZSBzdGF0ZSB1cGRhdGUuXG5cbk5vdywgdGhlIGltcG9ydGFudCBwYXJ0OiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIHBhdGNoIGlzbuKAmXQgaW50cm9kdWNpbmcgYSBzZWN1cml0eSBpc3N1ZSBieSByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQ2hlY2tpbmcgZm9yIGl0LCB0aGUgcmVhZHM6IGBlcnNwYW5fdmVyYCwgYGluZGV4YCwgYGh3aWRgLCBhbmQgYGRpcmAgYXJlIGFsbCBpbml0aWFsaXplZCAqZnJvbSogdGhlIHR1bm5lbCBkYXRhIHN0cnVjdHVyZSwgc28gdGhhdCdzIGdvb2QuIEluIGBpcGdyZV9jaGFuZ2VsaW5rYCBhbmQgYGVyc3Bhbl9jaGFuZ2VsaW5rYCwgYG9sZF9obGVuYCBhbmQgYG10dWAgYXJlIGluaXRpYWxpemVkIGZyb20gZXhpc3RpbmcgdmFsdWVzIG9yIHJldHVybmVkIGZyb20gdGhlIGJpbmQgZnVuY3Rpb24uIE5vdGhpbmcgaXMgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSBkaXJlY3RseS4gSSBkb24ndCBzZWUgYW55IGBjb3B5X3RvX3VzZXJgIG9yIG5ldGxpbmsgd3JpdGUgY2FsbHMgYmVpbmcgaW50cm9kdWNlZCwgc28gdGhhdCdzIGdvb2QuXG5cbkZpbmFsbHksIEkgY2hlY2tlZCBmb3IgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMuIFNwZWNpZmljYWxseSwgdGhlIGBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiBwYCB1c2VkIGluIGBpcGdyZV9jaGFuZ2VsaW5rYCBhbmQgYGVyc3Bhbl9jaGFuZ2VsaW5rYC4gSSdtIHZlcmlmeWluZyB0aGUgaW5pdGlhbGl6YXRpb24gZmxvdywgYW5kIEkgc2VlIHRoYXQgYHBgIHdhcyB0aGVyZSBiZWZvcmUsIGFuZCB0aGVuIHRoZSBuZXRsaW5rIHBhcm1zIGFyZSBzZXQgYmFzZWQgb24gbmV0bGluayBhdHRyaWJ1dGVzLiBBbGwgdGhlIHBhcmFtZXRlcnMgYXJlIHNldCBjb3JyZWN0bHkgdG8gYHBgLiBPdmVyYWxsLCB0aGlzIHBhdGNoIGFwcGVhcnMgdG8gYmUgYSB0YXJnZXRlZCBmaXggYW5kIHVwZGF0ZSB0byBNVFUgYW5kIGhlYWRyb29tIGNhbGN1bGF0aW9uLCB3aGlsZSBtaW5pbWl6aW5nIHRoZSByaXNrIG9mIGludHJvZHVjaW5nIG5ldyBtZW1vcnktc2FmZXR5IGlzc3Vlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA4ODgsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDQ6MjguMDg0OTQ2NDk5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMDY5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjAwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjAwOlxcdFxcbjEyMDE6XFx0XFx0cGFybXMtXFx1MDAzZWlwaC5wcm90b2NvbCA9IElQUFJPVE9fR1JFO1xcbjEyMDI6XFx0XFxuMTIwMzpcXHRcXHRpZiAoIWRhdGEpXFxuMTIwNDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xMjA1OlxcdFxcbjEyMDY6XFx0XFx0aWYgKGRhdGFbSUZMQV9HUkVfTElOS10pXFxuMTIwNzpcXHRcXHRcXHRwYXJtcy1cXHUwMDNlbGluayA9IG5sYV9nZXRfdTMyKGRhdGFbSUZMQV9HUkVfTElOS10pO1xcbjEyMDg6XFx0XFxuMTIwOTpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9JRkxBR1NdKVxcbjEyMTA6XFx0XFx0XFx0Z3JlX2ZsYWdzX3RvX3RubF9mbGFncyhwYXJtcy1cXHUwMDNlaV9mbGFncyxcXG4xMjExOlxcdFxcdFxcdFxcdFxcdCAgICAgICBubGFfZ2V0X2JlMTYoZGF0YVtJRkxBX0dSRV9JRkxBR1NdKSk7XFxuMTIxMjpcXHRcXG4xMjEzOlxcdFxcdGlmIChkYXRhW0lGTEFfR1JFX09GTEFHU10pXFxuMTIxNDpcXHRcXHRcXHRncmVfZmxhZ3NfdG9fdG5sX2ZsYWdzKHBhcm1zLVxcdTAwM2VvX2ZsYWdzLFxcbjEyMTU6XFx0XFx0XFx0XFx0XFx0ICAgICAgIG5sYV9nZXRfYmUxNihkYXRhW0lGTEFfR1JFX09GTEFHU10pKTtcXG4xMjE2OlxcdFxcbjEyMTc6XFx0XFx0aWYgKGRhdGFbSUZMQV9HUkVfSUtFWV0pXFxuMTIxODpcXHRcXHRcXHRwYXJtcy1cXHUwMDNlaV9rZXkgPSBubGFfZ2V0X2JlMzIoZGF0YVtJRkxBX0dSRV9JS0VZXSk7XFxuMTIxOTpcXHRcXG4xMjIwOlxcdFxcdGlmIChkYXRhW0lGTEFfR1JFX09LRVldKVxcbjEyMjE6XFx0XFx0XFx0cGFybXMtXFx1MDAzZW9fa2V5ID0gbmxhX2dldF9iZTMyKGRhdGFbSUZMQV9HUkVfT0tFWV0pO1xcbjEyMjI6XFx0XFxuMTIyMzpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9MT0NBTF0pXFxuMTIyNDpcXHRcXHRcXHRwYXJtcy1cXHUwMDNlaXBoLnNhZGRyID0gbmxhX2dldF9pbl9hZGRyKGRhdGFbSUZMQV9HUkVfTE9DQUxdKTtcXG4xMjI1OlxcdFxcbjEyMjY6XFx0XFx0aWYgKGRhdGFbSUZMQV9HUkVfUkVNT1RFXSlcXG4xMjI3OlxcdFxcdFxcdHBhcm1zLVxcdTAwM2VpcGguZGFkZHIgPSBubGFfZ2V0X2luX2FkZHIoZGF0YVtJRkxBX0dSRV9SRU1PVEVdKTtcXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0aWYgKGRhdGFbSUZMQV9HUkVfVFRMXSlcXG4xMjMwOlxcdFxcdFxcdHBhcm1zLVxcdTAwM2VpcGgudHRsID0gbmxhX2dldF91OChkYXRhW0lGTEFfR1JFX1RUTF0pO1xcbjEyMzE6XFx0XFxuMTIzMjpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9UT1NdKVxcbjEyMzM6XFx0XFx0XFx0cGFybXMtXFx1MDAzZWlwaC50b3MgPSBubGFfZ2V0X3U4KGRhdGFbSUZMQV9HUkVfVE9TXSk7XFxuMTIzNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDQ6MjguMDg1MDU5MDk5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUwMjkyNDcxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBsaW5lcyBvZiBjb2RlLCBwcmVzZW50ZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgaXBncmVfbmV0bGlua19wYXJtc2AgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gZm9jdXNpbmcgaW4gb24gbGluZXMgMTE4MCB0aHJvdWdoIDEyMDUuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgYGlwZ3JlX25ldGxpbmtfcGFybXNgIGluaXRpYWxpemVzIHRoZSBgcGFybXNgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gc2VlIGhvdyB0aGV5J3JlIHBvcHVsYXRpbmcgdGhhdCBzdHJ1Y3QuIEknbSBhc3N1bWluZywgZ2l2ZW4gdGhlIGZ1bmN0aW9uIG5hbWUsIHRoYXQgdGhpcyBsaWtlbHkgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHBhcmFtZXRlcnMgcGFzc2VkIHRocm91Z2ggTmV0bGluay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBmcm9tIHRoZSBOZXRsaW5rIG1lc3NhZ2UgaW50byB0aGUgYHBhcm1zYCBzdHJ1Y3R1cmUuIElzIHRoZXJlIHZhbGlkYXRpb24/IERlZmF1bHQgdmFsdWVzPyBJJ20gYW50aWNpcGF0aW5nIHRoZXJlJ2xsIGJlIGEgc3dpdGNoIHN0YXRlbWVudCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBOZXRsaW5rIGF0dHJpYnV0ZXMgdG8gZmlsbCB0aGUgbWVtYmVycyBvZiB0aGUgYHBhcm1zYCBzdHJ1Y3R1cmUuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZXkgYXJlIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIGFzIHdlbGwuIE15IGV4cGVydGlzZSBpcyBOZXRsaW5rLCBzbyBJIGV4cGVjdCBhIHN0YW5kYXJkIHBhdHRlcm4gb2YgYXR0cmlidXRlIHBhcnNpbmcsIHBvdGVudGlhbCBtZW1vcnkgYWxsb2NhdGlvbiwgdmFsaWRhdGlvbiwgYW5kIGVycm9yIGhhbmRsaW5nIHRvIGJlIGluIHBsYXkuIEkgYW0gaW50ZXJlc3RlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvcHRpbWl6YXRpb25zIGFzIHdlbGwuIEknbSBhbHNvIGFudGljaXBhdGluZywgYmVjYXVzZSBpdCdzIGluIHRoZSBpbml0aWFsaXphdGlvbiwgdGhpcyBwcm9iYWJseSBhbHNvIGNvdmVycyBzb21lIHNhbml0eSBjaGVja3MuIExldCdzIHNlZSBob3cgdGhleSBkbyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM3MDAsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQ0OjMzLjExNDMwOTI1NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTE4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTE4MDpcXHRcXHRpZiAoZGF0YVtJRkxBX0dSRV9JS0VZXSBcXHUwMDI2XFx1MDAyNlxcbjExODE6XFx0XFx0ICAgIChudG9obChubGFfZ2V0X2JlMzIoZGF0YVtJRkxBX0dSRV9JS0VZXSkpIFxcdTAwMjYgfklEX01BU0spKVxcbjExODI6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTE4MzpcXHRcXG4xMTg0OlxcdFxcdGlmIChkYXRhW0lGTEFfR1JFX09LRVldIFxcdTAwMjZcXHUwMDI2XFxuMTE4NTpcXHRcXHQgICAgKG50b2hsKG5sYV9nZXRfYmUzMihkYXRhW0lGTEFfR1JFX09LRVldKSkgXFx1MDAyNiB+SURfTUFTSykpXFxuMTE4NjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMTg3OlxcdFxcbjExODg6XFx0XFx0cmV0dXJuIDA7XFxuMTE4OTpcXHR9XFxuMTE5MDpcXHRcXG4xMTkxOlxcdHN0YXRpYyBpbnQgaXBncmVfbmV0bGlua19wYXJtcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbjExOTI6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqZGF0YVtdLFxcbjExOTM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbXSxcXG4xMTk0OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwYXJtcyxcXG4xMTk1OlxcdFxcdFxcdFxcdFxcdF9fdTMyICpmd21hcmspXFxuMTE5NjpcXHR7XFxuMTE5NzpcXHRcXHRzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4xMTk4OlxcdFxcbjExOTk6XFx0XFx0bWVtc2V0KHBhcm1zLCAwLCBzaXplb2YoKnBhcm1zKSk7XFxuMTIwMDpcXHRcXG4xMjAxOlxcdFxcdHBhcm1zLVxcdTAwM2VpcGgucHJvdG9jb2wgPSBJUFBST1RPX0dSRTtcXG4xMjAyOlxcdFxcbjEyMDM6XFx0XFx0aWYgKCFkYXRhKVxcbjEyMDQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDE1OjQ0OjMzLjExNDQyMzM3NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNjUzODQ3NzUyOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyBjZW50ZXJlZCBhcm91bmQgd2hldGhlciB0aGlzIHBhdGNoIGludHJvZHVjZXMgb3IgZXhhY2VyYmF0ZXMgcmlza3MgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3MuIEknbSBmb2N1c2luZyBvbiBgaXBncmVfbmV0bGlua19wYXJtc2AsIGBpcGdyZV9jaGFuZ2VsaW5rYCwgYW5kIGBlcnNwYW5fY2hhbmdlbGlua2AgYW5kIHRoZWlyIGludGVyYWN0aW9ucy5cblxuRmlyc3QsIEkgc2VlIHRoYXQgYG1lbXNldChwYXJtcywgMCwgc2l6ZW9mKCpwYXJtcykpO2AgaXMgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYGlwZ3JlX25ldGxpbmtfcGFybXNgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5vdGljZSB0aGUgYGlwZ3JlX2NoYW5nZWxpbmtgIGNoYW5nZXMuIFRoZSBpbXBvcnRhbnQgcG9pbnQgaGVyZSBpcyB0aGF0IGV2ZW4gaWYgYGlwZ3JlX25ldGxpbmtfcGFybXNgIG9yIGBpcF90dW5uZWxfY2hhbmdlbGlua2AgcmV0dXJuIGFuIGVycm9yLCB0aGUgY29kZSBub3cgKmp1bXBzKiB0byBhIGBsaW5rX3VwZGF0ZWAgbGFiZWwsIGVuc3VyaW5nIGBpcGdyZV9saW5rX3VwZGF0ZWAgaXMgY2FsbGVkIGluIGFsbCBjYXNlcy4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMsIGV2ZW4gb24gZXJyb3IsIGBpcGdyZV9saW5rX3VwZGF0ZWAgYWNjZXNzZXMgbWVtYmVycyBvZiBhbiBhbHJlYWR5IGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgYHN0cnVjdCBpcF90dW5uZWxgIChgdGApLiBUaGUga2V5IGlzIHRoYXQgYHAuaV9mbGFnc2AgYW5kIGBwLm9fZmxhZ3NgIGFyZW4ndCBjb3BpZWQgdG8gYHQtXHUwMDNlcGFybXNgIG9uIGVycm9yLCBidXQgdGhlIGNvZGUgc3RpbGwgdXNlcyB0aGVtLCBzbyB0aGVyZSdzIGFuIGlzc3VlIHRoZXJlISBUaGUgY29kZSB0aGVuIHVwZGF0ZXMgaGVhZGVyIGxlbmd0aHMgYmFzZWQgb24gdmFsdWVzIGluICp0aGF0KiBgc3RydWN0IGlwX3R1bm5lbGAgKGB0YCkuIFRoaXMgaXMgY29uc2lzdGVudCBhbmQgZG9lc24ndCBhcHBlYXIgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTG9va2luZyBhdCB0aGUgYGVyc3Bhbl9jaGFuZ2VsaW5rYCBmdW5jdGlvbiwgdGhlcmUncyBhIHNpbWlsYXIgcGF0dGVybi4gRXZlbiBpZiBgZXJzcGFuX25ldGxpbmtfcGFybXNgIHJldHVybnMgYW4gZXJyb3IsIHRoZSBjb2RlIHByb2NlZWRzIHRvIGNhbGwgYGVyc3Bhbl9saW5rX3VwZGF0ZWAuIEhlcmUsIGltcG9ydGFudGx5LCBgZXJzcGFuX3ZlcmAgaXNuJ3QgdXBkYXRlZCBpZiBgZXJzcGFuX25ldGxpbmtfcGFybXNgIHJldHVybnMgYW4gZXJyb3IuIFRoZSBgZXJzcGFuX2xpbmtfdXBkYXRlYCBmdW5jdGlvbiBhY2Nlc3NlcyBgdHVubmVsLVx1MDAzZWVyc3Bhbl92ZXJgIGFuZCBgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW5gLCB3aGljaCBhcmUgZmllbGRzIG9mIGB0YC4gSWYgYGVyc3Bhbl9uZXRsaW5rX3Bhcm1zYCBmYWlscywgdGhlIGBlcnNwYW5fdmVyYCByZXRhaW5zIGl0cyBwcmlvciB2YWx1ZS4gSXQgbG9va3MgbGlrZSBgdHVubmVsLVx1MDAzZWVuY2FwX2hsZW5gICptaWdodCogaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgYGlwZ3JlX25ld2xpbmtfZW5jYXBfc2V0dXBgLiBUaGF04oCZcyBhbiBpbXBvcnRhbnQgY29uc2lkZXJhdGlvbiwgdGhhdCB0aG9zZSB3ZXJlIHBvdGVudGlhbGx5IHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgYW5kIHVwZGF0ZWQhIFRoZW4gaXQgcHJvY2VlZHMgdG8gY2FsbCBgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocyguLi4pYC4gQWdhaW4sIHRoaXMgbG9va3Mgc2FmZSwgZm9jdXNpbmcgb24gYHRgLCBhbiBhbHJlYWR5IGFsbG9jYXRlZCBzdHJ1Y3R1cmUsIGV2ZW4gb24gZXJyb3IgcGF0aHMuIE5vIGRhdGEgc2VlbXMgdG8gYmUgdW5pbml0aWFsaXplZCBpbiB0aGUgZGVzY3JpYmVkIGZsb3cuXG5cbk5vdywgbGV0J3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciBhbGwgYXNwZWN0cyB0byBlbnN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBJIG5lZWQgdG8gZXhwbGljaXRseSB2ZXJpZnkgdGhlIGZvbGxvd2luZzpcblxuKiAgICoqU3RhY2sgVmFyaWFibGVzKio6IEFyZSB0aGVyZSBhbnkgc3RhY2sgdmFyaWFibGVzIGRlY2xhcmVkIGJ1dCAqbm90KiBpbml0aWFsaXplZCBiZWZvcmUgdXNlPyBJIHNlZSBsb2NhbCB2YXJpYWJsZXMgbGlrZSBgb2xkX2hsZW5gLCBgZXJzcGFuX3ZlcmAsIGBpbmRleGAsIGBod2lkYCwgYGRpcmAsIGBtdHVgLiBJIGNhbiBzZWUgdGhhdCBhbGwgdGhlc2UgdmFyaWFibGVzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdoZW4gdGhleSBhcmUgZGVjbGFyZWQgb3IgYXNzaWduZWQgZnJvbSBvdGhlciBzb3VyY2VzLCBzbyBJIGRvbid0IHNlZSBhbiBpc3N1ZSB0aGVyZS5cbiogICAqKkhlYXAgQWxsb2NhdGlvbnMqKjogQXJlIGFueSBuZXcgaGVhcCBhbGxvY2F0aW9ucyBiZWluZyBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkPyBObywgSSBkb24ndCBzZWUgYW55IGNoYW5nZXMgdG8gbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIGluIHRoaXMgcGF0Y2guXG4qICAgKipVc2Vyc3BhY2UgRXhwb3N1cmUqKjogSXMgZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlIG9yIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZXMgc2VudD8gTm8sIEkgZG9uJ3Qgc2VlIGFueSBjYWxscyB0byBgY29weV90b191c2VyYCBvciBhbnkgbmV3IGF0dHJpYnV0ZXMgYmVpbmcgYWRkZWQsIHNvIHRoZXJlIHNob3VsZCBub3QgYmUgYW4gaXNzdWUuXG4qICAgKipVbmluaXRpYWxpemVkIERhdGEgQnJhbmNoaW5nKio6IElzIHRoZXJlIGFueSBjb25kaXRpb25hbCBsb2dpYyB0aGF0IGJyYW5jaGVzIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8sIEkgZG9uJ3Qgc2VlIGFueSBzdWNoIGJyYW5jaGluZyBwYXR0ZXJucy5cbiogICAqKkJ1ZmZlciBBY2Nlc3MgUmlza3MqKjogQXJlIHRoZXJlIGFueSBidWZmZXIgYWNjZXNzZXMgKGUuZy4sIHdpdGhpbiBhbiBgc2tiYCkgdGhhdCBjb3VsZCBsZWFkIHRvIGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBUaGUgTVRVIGFuZCBoZWFkcm9vbSBhcmUgYmVpbmcgcmVjYWxjdWxhdGVkLiBUaGUgcG90ZW50aWFsIHJpc2tzIGhlcmUgYXJlIGVpdGhlciBvdXQtb2YtYm91bmRzIGFjY2VzcyBvciBidWZmZXIgb3ZlcmZsb3csIHdoaWNoIGlzIGhhbmRsZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQgYXNzZXJ0aW9ucywgbm90IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5CYXNlZCBvbiB0aGlzIGNvbXByZWhlbnNpdmUgcmV2aWV3LCBJJ20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IHRoZSBwYXRjaCBkb2VzICpub3QqIGludHJvZHVjZSBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0aWVzLiBJJ20gZm9jdXNpbmcgb24gdGhlIGZhY3QgdGhhdCBhbnkgcG90ZW50aWFsIGVycm9ycyBhcmUgbm93IGhhbmRsZWQgYnkgdXBkYXRpbmcgcmVsZXZhbnQgYXR0cmlidXRlcyBhbmQgZ29pbmcgdG8gYGxpbmtfdXBkYXRlYCwgYW5kIHRoYXQgdGhlc2UgdmFsdWVzIGFyZSBhbGwgaW5pdGlhbGl6ZWQgb3IgZXhwbGljaXRseSBjaGVja2VkIGJlZm9yZSB1c2UuIEkgYWxzbyBsb29rZWQgYXQgYWxsIGFzcGVjdHMgdG8gZW5zdXJlIHRoYXQgSSB3YXMgYmVpbmcgdGhvcm91Z2ggYW5kIHN5c3RlbWF0aWMgYWJvdXQgdGhpcy4gVGh1cywgYSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlxuXG5UaGVyZWZvcmU6XG5cbmBgYFxuTmVlZHNLTVNBTiA9IGZhbHNlLlxuS01TQU5SZWFzb25pbmc6XG5UaGUgcGF0Y2ggdXBkYXRlcyBoZWFkZXIgbGVuZ3RoLCBoZWFkcm9vbSwgYW5kIE1UVSByZWNhbGN1bGF0aW9uIGxvZ2ljIGZvciBJUCBHUkUgYW5kIEVSU1BBTiB0dW5uZWxzIChgaXBncmVfbGlua191cGRhdGVgLCBgZXJzcGFuX2xpbmtfdXBkYXRlYCwgYGlwX3R1bm5lbF9yZWZyZXNoX2xlbmd0aHNgKSwgYW5kIGRlZmVycyBjb21taXR0aW5nXG5cbiIsIklucHV0VG9rZW5zIjoyNDQzOSwiT3V0cHV0VG9rZW5zIjoyMTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTU6NDc6MTguNDk5MjAxMzE4WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGp1c3RzIGhlYWRlciBsZW5ndGgsIGhlYWRyb29tLCBhbmQgTVRVIGNhbGN1bGF0aW9uIGxvZ2ljIGZvciBJUCBHUkUgYW5kIEVSU1BBTiB0dW5uZWwgZGV2aWNlcyAoaW50cm9kdWNpbmcgaXBfdHVubmVsX3JlZnJlc2hfbGVuZ3RocywgdXBkYXRpbmcgaXBncmVfbGlua191cGRhdGUgYW5kIGVyc3Bhbl9saW5rX3VwZGF0ZSwgYW5kIGRlZmVycmluZyB0dW5uZWwgc3RhdGUgdXBkYXRlcyB1bnRpbCBuZXRsaW5rIHZhbGlkYXRpb24gY29tcGxldGVzKS4gXFxuXFxuQWxsIGxvY2FsIHZhcmlhYmxlcyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCAoc3VjaCBhcyBvbGRfaGxlbiwgZXJzcGFuX3ZlciwgaW5kZXgsIGh3aWQsIGRpciwgYW5kIG10dSkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBleGlzdGluZyBzdHJ1Y3QgZmllbGRzIG9yIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGhlYXAvc3RhY2sgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgb3IgcGFkZGluZyB0byB1c2Vyc3BhY2UsIGFuZCBkb2VzIG5vdCBicmFuY2ggb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIEFueSBwb3RlbnRpYWwgYnVncyByZWxhdGVkIHRvIGluY29ycmVjdCBoZWFkcm9vbSBvciBNVFUgY2FsY3VsYXRpb25zIHdvdWxkIG1hbmlmZXN0IGFzIGJ1ZmZlciBib3VuZGFyeS9vdmVyZmxvdyBvciBwYWNrZXQgdHJhbnNtaXNzaW9uIGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgS0FTQU4gb3IgbmV0d29yayBzdGFjayBhc3NlcnRpb25zIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkanVzdHMgaGVhZGVyIGxlbmd0aCwgaGVhZHJvb20sIGFuZCBNVFUgY2FsY3VsYXRpb24gbG9naWMgZm9yIElQIEdSRSBhbmQgRVJTUEFOIHR1bm5lbCBkZXZpY2VzIChpbnRyb2R1Y2luZyBpcF90dW5uZWxfcmVmcmVzaF9sZW5ndGhzLCB1cGRhdGluZyBpcGdyZV9saW5rX3VwZGF0ZSBhbmQgZXJzcGFuX2xpbmtfdXBkYXRlLCBhbmQgZGVmZXJyaW5nIHR1bm5lbCBzdGF0ZSB1cGRhdGVzIHVudGlsIG5ldGxpbmsgdmFsaWRhdGlvbiBjb21wbGV0ZXMpLiBcXG5cXG5BbGwgbG9jYWwgdmFyaWFibGVzIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIChzdWNoIGFzIG9sZF9obGVuLCBlcnNwYW5fdmVyLCBpbmRleCwgaHdpZCwgZGlyLCBhbmQgbXR1KSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIGV4aXN0aW5nIHN0cnVjdCBmaWVsZHMgb3IgZnVuY3Rpb24gcmV0dXJuIHZhbHVlcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgaGVhcC9zdGFjayBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvciBwYWRkaW5nIHRvIHVzZXJzcGFjZSwgYW5kIGRvZXMgbm90IGJyYW5jaCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gQW55IHBvdGVudGlhbCBidWdzIHJlbGF0ZWQgdG8gaW5jb3JyZWN0IGhlYWRyb29tIG9yIE1UVSBjYWxjdWxhdGlvbnMgd291bGQgbWFuaWZlc3QgYXMgYnVmZmVyIGJvdW5kYXJ5L292ZXJmbG93IG9yIHBhY2tldCB0cmFuc21pc3Npb24gaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBLQVNBTiBvciBuZXR3b3JrIHN0YWNrIGFzc2VydGlvbnMgcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowdfsb6[1] Phase: Succeeded StartedAt: 2026-09-12 15:47:30 +0000 UTC FinishedAt: 2026-09-12 15:47:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 15:47:30 +0000 UTC FinishedAt: 2026-09-12 15:47:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2] Phase: Succeeded StartedAt: 2026-09-12 15:47:30 +0000 UTC FinishedAt: 2026-09-12 19:28:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-12 15:47:30 +0000 UTC FinishedAt: 2026-09-12 19:28:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-12 15:47:30 +0000 UTC FinishedAt: 2026-09-12 15:47:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-12 15:47:30 +0000 UTC FinishedAt: 2026-09-12 15:47:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdfsb6/series-workflowdfsb6-convert-artifact-307982288/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-12 15:47:40 +0000 UTC FinishedAt: 2026-09-12 16:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-12 15:47:40 +0000 UTC FinishedAt: 2026-09-12 16:04:04 +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:*77f2188d-5320-4589-8e5d-740c5084900e,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-workflowdfsb6/series-workflowdfsb6-convert-artifact-307982288/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": "975747a6-fded-4eba-8ecb-5f8db527dc09", "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-workflowdfsb6/series-workflowdfsb6-build-action-1422810710/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-12 15:47:40 +0000 UTC FinishedAt: 2026-09-12 16:03:54 +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:*77f2188d-5320-4589-8e5d-740c5084900e,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-workflowdfsb6/series-workflowdfsb6-convert-artifact-307982288/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": "975747a6-fded-4eba-8ecb-5f8db527dc09", "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-workflowdfsb6/series-workflowdfsb6-build-action-1422810710/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-12 16:04:04 +0000 UTC FinishedAt: 2026-09-12 16:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-12 16:04:04 +0000 UTC FinishedAt: 2026-09-12 16:04:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-12 16:04:04 +0000 UTC FinishedAt: 2026-09-12 16:04:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-12 16:04:04 +0000 UTC FinishedAt: 2026-09-12 16:04:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdfsb6/series-workflowdfsb6-convert-artifact-3628926007/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-12 16:04:14 +0000 UTC FinishedAt: 2026-09-12 16:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-12 16:04:14 +0000 UTC FinishedAt: 2026-09-12 16:06:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*975747a6-fded-4eba-8ecb-5f8db527dc09,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-workflowdfsb6/series-workflowdfsb6-build-action-1422810710/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-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-12 16:06:16 +0000 UTC FinishedAt: 2026-09-12 16:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-12 16:06:16 +0000 UTC FinishedAt: 2026-09-12 16:06:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-12 16:06:16 +0000 UTC FinishedAt: 2026-09-12 16:22:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-12 16:06:16 +0000 UTC FinishedAt: 2026-09-12 16:22:38 +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:*77f2188d-5320-4589-8e5d-740c5084900e,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-workflowdfsb6/series-workflowdfsb6-convert-artifact-3628926007/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": "29e263bd-2e0e-4600-874b-848f1de466fe", "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-workflowdfsb6/series-workflowdfsb6-build-action-1103127547/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-12 16:06:16 +0000 UTC FinishedAt: 2026-09-12 16:22:28 +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:*77f2188d-5320-4589-8e5d-740c5084900e,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-workflowdfsb6/series-workflowdfsb6-convert-artifact-3628926007/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": "29e263bd-2e0e-4600-874b-848f1de466fe", "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-workflowdfsb6/series-workflowdfsb6-build-action-1103127547/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-12 16:22:38 +0000 UTC FinishedAt: 2026-09-12 16:22:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-12 16:22:38 +0000 UTC FinishedAt: 2026-09-12 16:22:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-12 16:22:38 +0000 UTC FinishedAt: 2026-09-12 16:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-12 16:22:38 +0000 UTC FinishedAt: 2026-09-12 16:24:22 +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:*29e263bd-2e0e-4600-874b-848f1de466fe,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-workflowdfsb6/series-workflowdfsb6-build-action-1103127547/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-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-12 16:24:32 +0000 UTC FinishedAt: 2026-09-12 19:28:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-12 16:24:32 +0000 UTC FinishedAt: 2026-09-12 19:28:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"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:*975747a6-fded-4eba-8ecb-5f8db527dc09,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*29e263bd-2e0e-4600-874b-848f1de466fe,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-workflowdfsb6/series-workflowdfsb6-build-action-1422810710/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-workflowdfsb6/series-workflowdfsb6-build-action-1103127547/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-12 16:24:32 +0000 UTC FinishedAt: 2026-09-12 16:24:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-12 16:24:32 +0000 UTC FinishedAt: 2026-09-12 16:24:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"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-workflowdfsb6/series-workflowdfsb6-convert-artifact-1778735984/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-12 16:24:32 +0000 UTC FinishedAt: 2026-09-12 16:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-12 16:24:32 +0000 UTC FinishedAt: 2026-09-12 16:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-12 16:24:32 +0000 UTC FinishedAt: 2026-09-12 16:24:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-12 16:24:42 +0000 UTC FinishedAt: 2026-09-12 19:28:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdfsb6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"base_commit":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","base_tree":"net","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_tunnel_refresh_lengths","ipgre_link_update","erspan_link_update","erspan_set_hlen","ipgre_netlink_parms","erspan_netlink_parms","ipgre_changelink","erspan_changelink","ipgre_tunnel_ctl","erspan_tunnel_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e6b6078ea1731b05b3b552497b3bce4bf8b014ae","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","NET_IP_TUNNEL"],"series_id":"5f9a71b8-dd58-4258-94ec-e5a3514ccfb7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-12 16:24:42 +0000 UTC FinishedAt: 2026-09-12 19:28:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*975747a6-fded-4eba-8ecb-5f8db527dc09,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*29e263bd-2e0e-4600-874b-848f1de466fe,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-workflowdfsb6/series-workflowdfsb6-build-action-1422810710/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-workflowdfsb6/series-workflowdfsb6-build-action-1103127547/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-workflowdfsb6/series-workflowdfsb6-convert-artifact-1778735984/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}