Name: series-workflowdpw9v Phase: Succeeded StartedAt: 2026-08-12 15:48:28 +0000 UTC FinishedAt: 2026-08-12 19:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[0] Phase: Succeeded StartedAt: 2026-08-12 15:48:28 +0000 UTC FinishedAt: 2026-08-12 16:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[0].run-triage Phase: Succeeded StartedAt: 2026-08-12 15:48:28 +0000 UTC FinishedAt: 2026-08-12 16:12:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IPGRE", "NET_IPGRE_DEMUX", "IPV6_GRE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IPGRE", "NET_IPGRE_DEMUX", "IPV6_GRE" ], "series_id": "2f0be438-d7d5-45c4-ae72-66651d5be0cb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipgre_xmit", "erspan_xmit", "gre_tap_xmit", "ip6erspan_tunnel_xmit", "ipgre_fill_info", "erspan_fill_info", "ip6gre_fill_info" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGdyZV94bWl0JiMzNDssCiAgICAmIzM0O2Vyc3Bhbl94bWl0JiMzNDssCiAgICAmIzM0O2dyZV90YXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcDZlcnNwYW5fdHVubmVsX3htaXQmIzM0OywKICAgICYjMzQ7aXBncmVfZmlsbF9pbmZvJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9maWxsX2luZm8mIzM0OywKICAgICYjMzQ7aXA2Z3JlX2ZpbGxfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGJ1ZyB3aGVyZSBzaGFyZWQgdHVubmVsIHBhcmFtZXRlcnMgKGB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgaW5jb3JyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gKGBlcnNwYW5feG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgKSBhbmQgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCkuIFRoaXMgY291bGQgbGVhZCB0byBkYXRhIHJhY2VzIGFuZCBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLiBUaGUgZml4IGludHJvZHVjZXMgbG9jYWwgY29waWVzIG9mIHRoZSBmbGFncyAoYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCkgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgaXBfdHVubmVsX2ZsYWdzX2NvcHkoKWAgKHdoaWNoIHVzZXMgYGJpdG1hcF9jb3B5KClgIHRvIGNvcHkgdGhlIGVudGlyZSBgdW5zaWduZWQgbG9uZ2AgYXJyYXkpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOL0tDU0FOIGFuZCBsb2dpYyB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGRhdGEgcmFjZXMgYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdHJhbnNtaXNzaW9uIGFuZCBuZXRsaW5rIGluZm8gZHVtcGluZyBwYXRocyBmb3IgR1JFIGFuZCBFUlNQQU4gdHVubmVscyBvdmVyIElQdjQgYW5kIElQdjYuIEl0IGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSB0dW5uZWwmIzM5O3Mgb3V0cHV0IGZsYWdzIChgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgKSB3ZXJlIGJlaW5nIG1vZGlmaWVkIGR1cmluZyB0cmFuc21pc3Npb24gb3IgbmV0bGluayBkdW1wcywgd2hpY2ggY291bGQgbGVhZCB0byByYWNlIGNvbmRpdGlvbnMgb3IgdW5pbnRlbmRlZCBzdGF0ZSBjaGFuZ2VzLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgdHJhZmZpYyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjE5ZWIxNTc4MTczNDEwMzljMTVjYjY5NzdmNDM4OGUyYmZhNWRlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE2OjEwOjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmNcbmluZGV4IDZhOTI2MDc0MDFlOGEuLjgyMzA5ZWZkNDE3ZTAgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9ncmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfZ3JlLmNcbkBAIC00NzUsMTIgJiM0Mzs0NzUsOSBAQCBzdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBzdGF0aWMgdm9pZCBfX2dyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKnRubF9wYXJhbXMsXG4tXHRcdCAgICAgICBfX2JlMTYgcHJvdG8pXG4mIzQzO1x0XHQgICAgICAgX19iZTE2IHByb3RvLCBjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xuLVxuLVx0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbiBcbiBcdC8qIFB1c2ggR1JFIGhlYWRlci4gKi9cbiBcdGdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWwtXHUwMDNldHVuX2hsZW4sXG5AQCAtNjUzLDYgJiM0Mzs2NTAsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4gXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnRubF9wYXJhbXM7XG4gXG4gXHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKVxuQEAgLTY4OCwxMSAmIzQzOzY4NiwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHR0bmxfcGFyYW1zID0gXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaDtcbiBcdH1cbiBcbi1cdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULFxuLVx0XHRcdFx0XHQgICAgICB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncykpKVxuJiM0MztcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBmbGFncykpKVxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuIFxuLVx0X19ncmVfeG1pdChza2IsIGRldiwgdG5sX3BhcmFtcywgc2tiLVx1MDAzZXByb3RvY29sKTtcbiYjNDM7XHRfX2dyZV94bWl0KHNrYiwgZGV2LCB0bmxfcGFyYW1zLCBza2ItXHUwMDNlcHJvdG9jb2wsIGZsYWdzKTtcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG4gZnJlZV9za2I6XG5AQCAtNzA1LDYgJiM0Mzs3MDQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcbiBcdGJvb2wgdHJ1bmNhdGUgPSBmYWxzZTtcbiBcdF9fYmUxNiBwcm90bztcbiBcbkBAIC03MjgsMTAgJiM0Mzs3MjgsMTIgQEAgc3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHRydW5jYXRlID0gdHJ1ZTtcbiBcdH1cbiBcbiYjNDM7XHRpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuJiM0MztcbiBcdC8qIFB1c2ggRVJTUEFOIGhlYWRlciAqL1xuIFx0aWYgKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDApIHtcbiBcdFx0cHJvdG8gPSBodG9ucyhFVEhfUF9FUlNQQU4pO1xuLVx0XHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuJiM0MztcdFx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIGZsYWdzKTtcbiBcdH0gZWxzZSBpZiAodHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIgPT0gMSkge1xuIFx0XHRlcnNwYW5fYnVpbGRfaGVhZGVyKHNrYiwgbnRvaGwodHVubmVsLVx1MDAzZXBhcm1zLm9fa2V5KSxcbiBcdFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlaW5kZXgsXG5AQCAtNzQ2LDggJiM0Mzs3NDgsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0Z290byBmcmVlX3NrYjtcbiBcdH1cbiBcbi1cdF9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4tXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoLCBwcm90byk7XG4mIzQzO1x0X19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIGZsYWdzKTtcbiYjNDM7XHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoLCBwcm90bywgZmxhZ3MpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbiBmcmVlX3NrYjpcbkBAIC03NjAsNiAmIzQzOzc2Miw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBncmVfdGFwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4gXG4gXHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKVxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuQEAgLTc2OSwxNCAmIzQzOzc3MiwxNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXHR9XG4gXG4tXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCxcbi1cdFx0XHRcdFx0ICAgICAgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpKSlcbiYjNDM7XHRpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgZmxhZ3MpKSlcbiBcdFx0Z290byBmcmVlX3NrYjtcbiBcbiBcdGlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tKSlcbiBcdFx0Z290byBmcmVlX3NrYjtcbiBcbi1cdF9fZ3JlX3htaXQoc2tiLCBkZXYsIFx1MDAyNnR1bm5lbC1cdTAwM2VwYXJtcy5pcGgsIGh0b25zKEVUSF9QX1RFQikpO1xuJiM0MztcdF9fZ3JlX3htaXQoc2tiLCBkZXYsIFx1MDAyNnR1bm5lbC1cdTAwM2VwYXJtcy5pcGgsIGh0b25zKEVUSF9QX1RFQiksIGZsYWdzKTtcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG4gZnJlZV9za2I6XG5AQCAtMTU2MCwxMiAmIzQzOzE1NjQsMTUgQEAgc3RhdGljIHNpemVfdCBpcGdyZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHN0YXRpYyBpbnQgaXBncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCA9IFx1MDAyNnQtXHUwMDNlcGFybXM7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAgPSBcdTAwMjZ0LVx1MDAzZXBhcm1zO1xuIFx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1Mob19mbGFncyk7XG4gXG4gXHRpcF90dW5uZWxfZmxhZ3NfY29weShvX2ZsYWdzLCBwLVx1MDAzZW9fZmxhZ3MpO1xuIFxuJiM0MztcdGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgIT0gMCBcdTAwMjZcdTAwMjYgIXQtXHUwMDNlY29sbGVjdF9tZClcbiYjNDM7XHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgb19mbGFncyk7XG4mIzQzO1xuIFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9HUkVfTElOSywgcC1cdTAwM2VsaW5rKSB8fFxuIFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX0lGTEFHUyxcbiBcdFx0XHQgZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cdTAwM2VpX2ZsYWdzKSkgfHxcbkBAIC0xNjA4LDEyICYjNDM7MTYxNSw5IEBAIHN0YXRpYyBpbnQgaXBncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gc3RhdGljIGludCBlcnNwYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4gXHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyIFx1MDAzYz0gMikge1xuLVx0XHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyICE9IDAgXHUwMDI2XHUwMDI2ICF0LVx1MDAzZWNvbGxlY3RfbWQpXG4tXHRcdFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCB0LVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuLVxuIFx0XHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR1JFX0VSU1BBTl9WRVIsIHQtXHUwMDNlZXJzcGFuX3ZlcikpXG4gXHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jXG5pbmRleCBiODQzMTE2ZTliNzAzLi4wYjNmMzg2YjUxYTJkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbkBAIC05NjQsNyAmIzQzOzk2NCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID86IHQtXHUwMDNlaGxlbikpXG4gXHRcdGdvdG8gdHhfZXJyO1xuIFxuLVx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHQtXHUwMDNlcGFybXMub19mbGFncyk7XG4gXHRJUENCKHNrYiktXHUwMDNlZmxhZ3MgPSAwO1xuIFxuIFx0LyogRm9yIGNvbGxlY3RfbWQgbW9kZSwgZGVyaXZlIGZsNiBmcm9tIHRoZSB0dW5uZWwga2V5LFxuQEAgLTIxMTUsOCAmIzQzOzIxMTQsOCBAQCBzdGF0aWMgc2l6ZV90IGlwNmdyZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHN0YXRpYyBpbnQgaXA2Z3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdHN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCA9IFx1MDAyNnQtXHUwMDNlcGFybXM7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCA9IFx1MDAyNnQtXHUwMDNlcGFybXM7XG4gXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKTtcbiBcbiBcdGlwX3R1bm5lbF9mbGFnc19jb3B5KG9fZmxhZ3MsIHAtXHUwMDNlb19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGdyZV94bWl0JiMzNDssCiAgICAmIzM0O2Vyc3Bhbl94bWl0JiMzNDssCiAgICAmIzM0O2dyZV90YXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcDZlcnNwYW5fdHVubmVsX3htaXQmIzM0OywKICAgICYjMzQ7aXBncmVfZmlsbF9pbmZvJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9maWxsX2luZm8mIzM0OywKICAgICYjMzQ7aXA2Z3JlX2ZpbGxfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdHJhbnNtaXNzaW9uIGFuZCBuZXRsaW5rIGluZm8gZHVtcGluZyBwYXRocyBmb3IgR1JFIGFuZCBFUlNQQU4gdHVubmVscyBvdmVyIElQdjQgYW5kIElQdjYuIEl0IGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSB0dW5uZWwmIzM5O3Mgb3V0cHV0IGZsYWdzIChgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgKSB3ZXJlIGJlaW5nIG1vZGlmaWVkIGR1cmluZyB0cmFuc21pc3Npb24gb3IgbmV0bGluayBkdW1wcywgd2hpY2ggY291bGQgbGVhZCB0byByYWNlIGNvbmRpdGlvbnMgb3IgdW5pbnRlbmRlZCBzdGF0ZSBjaGFuZ2VzLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgdHJhZmZpYyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjE5ZWIxNTc4MTczNDEwMzljMTVjYjY5NzdmNDM4OGUyYmZhNWRlMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDE2OjEwOjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCA2YTkyNjA3NDAxZThhLi44MjMwOWVmZDQxN2UwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtNDc1LDEyICYjNDM7NDc1LDkgQEAgc3RhdGljIGludCBncmVfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAKIHN0YXRpYyB2b2lkIF9fZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBpcGhkciAqdG5sX3BhcmFtcywKLQkJICAgICAgIF9fYmUxNiBwcm90bykKJiM0MzsJCSAgICAgICBfX2JlMTYgcHJvdG8sIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQogewogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7Ci0JSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpOwotCi0JaXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncyk7CiAKIAkvKiBQdXNoIEdSRSBoZWFkZXIuICovCiAJZ3JlX2J1aWxkX2hlYWRlcihza2IsIHR1bm5lbC0mZ3Q7dHVuX2hsZW4sCkBAIC02NTMsNiAmIzQzOzY1MCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpcGdyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CUlQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTsKIAljb25zdCBzdHJ1Y3QgaXBoZHIgKnRubF9wYXJhbXM7CiAKIAlpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKQpAQCAtNjg4LDExICYjNDM7Njg2LDEyIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpcGdyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCXRubF9wYXJhbXMgPSAmYW1wO3R1bm5lbC0mZ3Q7cGFybXMuaXBoOwogCX0KIAotCWlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULAotCQkJCQkgICAgICB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpKSkKJiM0MzsJaXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncyk7CiYjNDM7CiYjNDM7CWlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBmbGFncykpKQogCQlnb3RvIGZyZWVfc2tiOwogCi0JX19ncmVfeG1pdChza2IsIGRldiwgdG5sX3BhcmFtcywgc2tiLSZndDtwcm90b2NvbCk7CiYjNDM7CV9fZ3JlX3htaXQoc2tiLCBkZXYsIHRubF9wYXJhbXMsIHNrYi0mZ3Q7cHJvdG9jb2wsIGZsYWdzKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBmcmVlX3NrYjoKQEAgLTcwNSw2ICYjNDM7NzA0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7CiAJYm9vbCB0cnVuY2F0ZSA9IGZhbHNlOwogCV9fYmUxNiBwcm90bzsKIApAQCAtNzI4LDEwICYjNDM7NzI4LDEyIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQl0cnVuY2F0ZSA9IHRydWU7CiAJfQogCiYjNDM7CWlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwomIzQzOwogCS8qIFB1c2ggRVJTUEFOIGhlYWRlciAqLwogCWlmICh0dW5uZWwtJmd0O2Vyc3Bhbl92ZXIgPT0gMCkgewogCQlwcm90byA9IGh0b25zKEVUSF9QX0VSU1BBTik7Ci0JCV9fY2xlYXJfYml0KElQX1RVTk5FTF9TRVFfQklULCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwomIzQzOwkJX19jbGVhcl9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIGZsYWdzKTsKIAl9IGVsc2UgaWYgKHR1bm5lbC0mZ3Q7ZXJzcGFuX3ZlciA9PSAxKSB7CiAJCWVyc3Bhbl9idWlsZF9oZWFkZXIoc2tiLCBudG9obCh0dW5uZWwtJmd0O3Bhcm1zLm9fa2V5KSwKIAkJCQkgICAgdHVubmVsLSZndDtpbmRleCwKQEAgLTc0Niw4ICYjNDM7NzQ4LDggQEAgc3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCWdvdG8gZnJlZV9za2I7CiAJfQogCi0JX19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncyk7Ci0JX19ncmVfeG1pdChza2IsIGRldiwgJmFtcDt0dW5uZWwtJmd0O3Bhcm1zLmlwaCwgcHJvdG8pOwomIzQzOwlfX2NsZWFyX2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgZmxhZ3MpOwomIzQzOwlfX2dyZV94bWl0KHNrYiwgZGV2LCAmYW1wO3R1bm5lbC0mZ3Q7cGFybXMuaXBoLCBwcm90bywgZmxhZ3MpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGZyZWVfc2tiOgpAQCAtNzYwLDYgJiM0Mzs3NjIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7CiAKIAlpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKQogCQlnb3RvIGZyZWVfc2tiOwpAQCAtNzY5LDE0ICYjNDM7NzcyLDE1IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBncmVfdGFwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKLQlpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwKLQkJCQkJICAgICAgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKSkpCiYjNDM7CWlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgZmxhZ3MpKSkKIAkJZ290byBmcmVlX3NrYjsKIAogCWlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSkpCiAJCWdvdG8gZnJlZV9za2I7CiAKLQlfX2dyZV94bWl0KHNrYiwgZGV2LCAmYW1wO3R1bm5lbC0mZ3Q7cGFybXMuaXBoLCBodG9ucyhFVEhfUF9URUIpKTsKJiM0MzsJX19ncmVfeG1pdChza2IsIGRldiwgJmFtcDt0dW5uZWwtJmd0O3Bhcm1zLmlwaCwgaHRvbnMoRVRIX1BfVEVCKSwgZmxhZ3MpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGZyZWVfc2tiOgpAQCAtMTU2MCwxMiAmIzQzOzE1NjQsMTUgQEAgc3RhdGljIHNpemVfdCBpcGdyZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiBzdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwID0gJmFtcDt0LSZndDtwYXJtczsKJiM0MzsJY29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwID0gJmFtcDt0LSZndDtwYXJtczsKIAlJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKTsKIAogCWlwX3R1bm5lbF9mbGFnc19jb3B5KG9fZmxhZ3MsIHAtJmd0O29fZmxhZ3MpOwogCiYjNDM7CWlmICh0LSZndDtlcnNwYW5fdmVyICE9IDAgJmFtcDsmYW1wOyAhdC0mZ3Q7Y29sbGVjdF9tZCkKJiM0MzsJCV9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgb19mbGFncyk7CiYjNDM7CiAJaWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9HUkVfTElOSywgcC0mZ3Q7bGluaykgfHwKIAkgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HUkVfSUZMQUdTLAogCQkJIGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtJmd0O2lfZmxhZ3MpKSB8fApAQCAtMTYwOCwxMiAmIzQzOzE2MTUsOSBAQCBzdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiBzdGF0aWMgaW50IGVyc3Bhbl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAodC0mZ3Q7ZXJzcGFuX3ZlciAmbHQ7PSAyKSB7Ci0JCWlmICh0LSZndDtlcnNwYW5fdmVyICE9IDAgJmFtcDsmYW1wOyAhdC0mZ3Q7Y29sbGVjdF9tZCkKLQkJCV9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgdC0mZ3Q7cGFybXMub19mbGFncyk7Ci0KIAkJaWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dSRV9FUlNQQU5fVkVSLCB0LSZndDtlcnNwYW5fdmVyKSkKIAkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZ3JlLmMgYi9uZXQvaXB2Ni9pcDZfZ3JlLmMKaW5kZXggYjg0MzExNmU5YjcwMy4uMGIzZjM4NmI1MWEyZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9ncmUuYwpAQCAtOTY0LDcgJiM0Mzs5NjQsNiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXA2ZXJzcGFuX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9jb3dfaGVhZChza2IsIGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID86IHQtJmd0O2hsZW4pKQogCQlnb3RvIHR4X2VycjsKIAotCV9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCB0LSZndDtwYXJtcy5vX2ZsYWdzKTsKIAlJUENCKHNrYiktJmd0O2ZsYWdzID0gMDsKIAogCS8qIEZvciBjb2xsZWN0X21kIG1vZGUsIGRlcml2ZSBmbDYgZnJvbSB0aGUgdHVubmVsIGtleSwKQEAgLTIxMTUsOCAmIzQzOzIxMTQsOCBAQCBzdGF0aWMgc2l6ZV90IGlwNmdyZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiBzdGF0aWMgaW50IGlwNmdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IF9faXA2X3RubF9wYXJtICpwID0gJmFtcDt0LSZndDtwYXJtczsKJiM0MzsJY29uc3Qgc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwljb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnAgPSAmYW1wO3QtJmd0O3Bhcm1zOwogCUlQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpOwogCiAJaXBfdHVubmVsX2ZsYWdzX2NvcHkob19mbGFncywgcC0mZ3Q7b19mbGFncyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgR1JFL0VSU1BBTiBUdW5uZWwgRmxhZyBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRhcmdldGVkIGF0IGBuZXQvaXB2NC9pcF9ncmUuY2AgYW5kIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgLCBzcGVjaWZpY2FsbHkgaG93IHR1bm5lbCBmbGFncyBhcmUgaGFuZGxlZCBpbiBHUkUgYW5kIEVSU1BBTiB0dW5uZWxzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFib3V0IGF2b2lkaW5nIG1vZGlmaWNhdGlvbnMgdG8gYHR1bm5lbC0mZ3Q7cGFybXMub19mbGFnc2AgZHVyaW5nIGNyaXRpY2FsIHRyYW5zbWlzc2lvbiBwaGFzZXMsIG5hbWVseSBpbiBgZXJzcGFuX3htaXRgIGFuZCBgaXA2ZXJzcGFuX3R1bm5lbF94bWl0YC4gSW5zdGVhZCBvZiBkaXJlY3RseSBtZXNzaW5nIHdpdGggdGhhdCBnbG9iYWwsIHRoZXkmIzM5O3JlIHVzaW5nIGEgbG9jYWwgYGZsYWdzYCBjb3B5IHdoaWNoIGdldHMgcGFzc2VkIHRvIGBfX2dyZV94bWl0YC4gU21hcnQuIFRoaXMgYWxzbyBpbnZvbHZlcyBmaXhpbmcgYGVyc3Bhbl9maWxsX2luZm9gIGFuZCBgaXBncmVfZmlsbF9pbmZvYCB0byBlbnN1cmUgdGhleSBkb24mIzM5O3QgY29ycnVwdCBgdC0mZ3Q7cGFybXMub19mbGFnc2Agd2hlbiBkdW1waW5nIG5ldGxpbmsgaW5mby4KCkZ1bmN0aW9uYWxseSwgdGhpcyBzbWVsbHMgbGlrZSBhIHJhY2UgY29uZGl0aW9uIHByZXZlbnRpb24gb3IgYSBmaXggZm9yIHVuaW50ZW5kZWQgc3RhdGUgY2hhbmdlcyBpbiBgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzYC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIHBheWluZyBhdHRlbnRpb24gdG8uIExldCYjMzk7cyBsaXN0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gYmUgc3VyZToKCkluIGBuZXQvaXB2NC9pcF9ncmUuY2A6IGBfX2dyZV94bWl0YCwgYGlwZ3JlX3htaXRgLCBgZXJzcGFuX3htaXRgLCBgZ3JlX3RhcF94bWl0YCwgYGlwZ3JlX2ZpbGxfaW5mb2AsIGFuZCBgZXJzcGFuX2ZpbGxfaW5mb2AuCgpBbmQgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2A6IGBpcDZlcnNwYW5fdHVubmVsX3htaXRgIGFuZCBgaXA2Z3JlX2ZpbGxfaW5mb2AuCgpZZXAsIHRoZXNlIGFyZSBhbGwgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMsIGNvbmNlcm5pbmcgR1JFIGFuZCBFUlNQQU4gdHVubmVscy4gSSYjMzk7ZCBjb25zaWRlciB0aGlzIHNpZ25pZmljYW50IGVub3VnaCB0byBmbGFnIGl0IGFzIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUuIE15IGltbWVkaWF0ZSBpbmNsaW5hdGlvbiBpcyB0byBhc3NpZ24gYFdvcnRoRnV6emluZz10cnVlYC4KCkxldCYjMzk7cyBrZWVwIHRoZXNlIHN5bWJvbHMgaW4gZm9jdXM6IGBpcGdyZV94bWl0YCwgYGVyc3Bhbl94bWl0YCwgYGdyZV90YXBfeG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgLCBgaXBncmVfZmlsbF9pbmZvYCwgYGVyc3Bhbl9maWxsX2luZm9gLCBhbmQgYGlwNmdyZV9maWxsX2luZm9gLgoKTm93LCBiZWZvcmUgSSBncmVlbi1saWdodCB0aGlzIGZ1bGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBgbmV0L2lwdjQvaXBfZ3JlLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVRfSVBHUkVgIGlzIGVuYWJsZWQsIGFuZCBgbmV0L2lwdjYvaXA2X2dyZS5jYCBuZWVkcyBgQ09ORklHX0lQVjZfR1JFYC4gT2theSwgSSBuZWVkIHRvIHZlcmlmeSB0aG9zZSBjb25maWcgb3B0aW9ucyBhcmUgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTE2Mj1jb25maWcgTkVUX0lQSVBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE3OS1cbm5ldC9pcHY0L0tjb25maWc6MTgwOmNvbmZpZyBORVRfSVBHUkVfREVNVVhcbm5ldC9pcHY0L0tjb25maWctMTgxLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEdSRSBkZW11bHRpcGxleGVyXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZz0xODY9Y29uZmlnIE5FVF9JUF9UVU5ORUxcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE5MS1cbm5ldC9pcHY0L0tjb25maWc6MTkyOmNvbmZpZyBORVRfSVBHUkVcbm5ldC9pcHY0L0tjb25maWctMTkzLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MTk0Olx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcbm5ldC9pcHY0L0tjb25maWctMTk1LVx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIwNi1cbm5ldC9pcHY0L0tjb25maWc6MjA3OmNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXG5uZXQvaXB2NC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7SVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzoyMDk6XHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVCBcdTAwMjZcdTAwMjYgTkVUX0lQR1JFXG5uZXQvaXB2NC9LY29uZmlnLTIxMC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG5uZXQvaXB2NC9LY29uZmlnLTMzMS1cdGJvb2wgXCYjMzQ7SVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MzMyOlx0ZGVwZW5kcyBvbiBORVRfSVBJUCB8fCBORVRfSVBHUkUgfHwgSVBWNl9TSVRcbm5ldC9pcHY0L0tjb25maWctMzMzLVx0c2VsZWN0IE5FVF9GT1Vcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfTkVUX0ZPVSkgJiM0Mzs9IGZvdS5vXG5uZXQvaXB2NC9NYWtlZmlsZToyOTpvYmotJChDT05GSUdfTkVUX0lQR1JFX0RFTVVYKSAmIzQzOz0gZ3JlLm9cbm5ldC9pcHY0L01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19ORVRfSVBHUkUpICYjNDM7PSBpcF9ncmUub1xubmV0L2lwdjQvTWFrZWZpbGUtMzEtdWRwX3R1bm5lbC15IDo9IHVkcF90dW5uZWxfY29yZS5vIHVkcF90dW5uZWxfbmljLm9cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz00NDA9c3RhdGljIGludCBncmVfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNDQ1LVxubmV0L2lwdjQvaXBfZ3JlLmM6NDQ2OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvaXBfZ3JlLmMtNDQ3LVx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGlwX2hkcihza2IpLVx1MDAzZWRhZGRyKSkge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTkzNT1zdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgaXBncmVfaGVhZGVyX29wcyA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy05MzktXG5uZXQvaXB2NC9pcF9ncmUuYzo5NDA6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXG5uZXQvaXB2NC9pcF9ncmUuYy05NDEtc3RhdGljIGludCBpcGdyZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9OTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBncmVfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy05ODYtXHQubmRvX3VuaW5pdFx0XHQ9IGlwX3R1bm5lbF91bmluaXQsXG5uZXQvaXB2NC9pcF9ncmUuYzo5ODc6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXG5uZXQvaXB2NC9pcF9ncmUuYy05ODgtXHQubmRvX29wZW5cdFx0PSBpcGdyZV9vcGVuLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEwNDA9c3RhdGljIGludCBpcGdyZV90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTEwNTQtXHRpZiAoaXBoLVx1MDAzZWRhZGRyIFx1MDAyNlx1MDAyNiAhdHVubmVsLVx1MDAzZWNvbGxlY3RfbWQpIHtcbm5ldC9pcHY0L2lwX2dyZS5jOjEwNTU6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDU2LVx0XHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBoLVx1MDAzZWRhZGRyKSkge1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTM3Nz1pbnQgaXBfdHVubmVsX3JjdihzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzgzLVxubmV0L2lwdjQvaXBfdHVubmVsLmM6Mzg0OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzg1LVx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGlwaC1cdTAwM2VkYWRkcikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzYzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zOgoKKipBbmFseXppbmcgTmV0d29yayBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHJlcXVpcmVzIGJvdGggYE5FVF9JUEdSRWAgYW5kIGBORVRfSVBHUkVfREVNVVhgLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogRG8gd2UgbmVlZCB0byBjb25zaWRlciBJUHY2IEdSRSBhcyB3ZWxsPyBTbywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBpZiBgSVBWNl9HUkVgIGlzIHJlbGV2YW50IHRvIHRoZSBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUFY2X0dSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE5OT1jb25maWcgSVBWNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvTWFrZWZpbGU9NDI9b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZTo0MzpvYmotJChDT05GSUdfSVBWNl9HUkUpICYjNDM7PSBpcDZfZ3JlLm9cbm5ldC9pcHY2L01ha2VmaWxlLTQ0LW9iai0kKENPTkZJR19JUFY2X0ZPVSkgJiM0Mzs9IGZvdTYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2ODcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEdSRSBhbmQgRVJTUEFOIFR1bm5lbCBUcmFuc21pc3Npb24gYW5kIE5ldGxpbmsgSW5mbyBQYXRocyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gYWRkcmVzcyB0aGUgYElQVjZfR1JFYCBjb25maWd1cmF0aW9uIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9uczogYGlwZ3JlX3htaXRgLCBgZXJzcGFuX3htaXRgLCBgZ3JlX3RhcF94bWl0YCwgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGAsIGBpcGdyZV9maWxsX2luZm9gLCBgZXJzcGFuX2ZpbGxfaW5mb2AsIGFuZCBgaXA2Z3JlX2ZpbGxfaW5mb2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdHJhbnNtaXNzaW9uIGFuZCBuZXRsaW5rIGluZm8gZHVtcGluZyB3aXRoaW4gdGhlIEdSRSBhbmQgRVJTUEFOIHR1bm5lbCBpbXBsZW1lbnRhdGlvbnMuCgpJIHF1aWNrbHkgY2hlY2tlZCBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYywgd2hpY2ggdGhleSBhcmUsIGJ1dCB0aGV5IGFyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyBsaWtlIGBuZG9fc3RhcnRfeG1pdGAgYW5kIGBydG5sX2xpbmtfb3BzLSZndDtmaWxsX2luZm9gLiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLCBJIHdhbnRlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgYXJlbiYjMzk7dCBpbmxpbmVkIGJlY2F1c2UgaW5saW5lZCBmdW5jdGlvbnMgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoYXQmIzM5O3Mgbm90IGlkZWFsIGZvciB3aGF0IEkgYW0gdHJ5aW5nIHRvIGRvIGhlcmUuCgpPa2F5LCBgaXBncmVfeG1pdGAsIGBlcnNwYW5feG1pdGAsIGBncmVfdGFwX3htaXRgLCBhbmQgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGAgYXJlIGFsbCBhc3NpZ25lZCB0byBgLm5kb19zdGFydF94bWl0YCBpbiB0aGVpciByZXNwZWN0aXZlIG5ldGRldl9vcHMgc3RydWN0dXJlcy4gTGlrZXdpc2UsIGBpcGdyZV9maWxsX2luZm9gLCBgZXJzcGFuX2ZpbGxfaW5mb2AsIGFuZCBgaXA2Z3JlX2ZpbGxfaW5mb2AgYXJlIGFzc2lnbmVkIHRvIGAuZmlsbF9pbmZvYCB3aXRoaW4gdGhlIGNvcnJlc3BvbmRpbmcgbGlua19vcHMgc3RydWN0dXJlcy4gR2l2ZW4gdGhlc2UgYXNzaWdubWVudHMgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIEkgY2FuIGJlIGNvbmZpZGVudCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgKm5vdCogaW5saW5lZCBhbmQgZG8gaW5kZWVkIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdDsgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4KCkkmIzM5O2xsIGFsc28gbWFrZSBzdXJlIHRvIGNvdmVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSBgTkVUX0lQR1JFYCBkZXBlbmRzIG9uIGBORVRfSVBHUkVfREVNVVhgLCBhbmQgYElQVjZfR1JFYCBpcyBjb250aW5nZW50IG9uIGBJUFY2YC4gU28sIHRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmU6IGBORVRfSVBHUkVgLCBgTkVUX0lQR1JFX0RFTVVYYCwgYW5kIGBJUFY2X0dSRWAuCgpJIHdhbnRlZCB0byBlbnN1cmUgSSBkaWRuJiMzOTt0IG1pc3MgYW55dGhpbmcuIEkgc3BvdHRlZCBgX19ncmVfeG1pdGAsIHdoaWNoICppcyogc3RhdGljIGFuZCBjYWxsZWQgYnkgdGhlIGB4bWl0YCBmdW5jdGlvbnMuIEJlY2F1c2UgaXQgbG9va3MgbGlrZSBpdCBtaWdodCBiZSBpbmxpbmVkLCBJJiMzOTttIGdvaW5nIHRvIGV4Y2x1ZGUgdGhhdCBmcm9tIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4KClNvLCBoZXJlJiMzOTtzIG15IHJlYXNvbmluZy4gVGhlIG1haW4gaXNzdWUgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIHR1bm5lbCYjMzk7cyBvdXRwdXQgZmxhZ3MgKGB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3NgKSBkdXJpbmcgdHJhbnNtaXNzaW9uIG9yIG5ldGxpbmsgZHVtcHMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlIHRoYXQmIzM5O3MgbGlrZWx5IHRvIGNhdXNlIGFsbCBzb3J0cyBvZiBwcm9ibGVtcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBmb3IgbmV0d29yayB0cmFuc21pc3Npb24gYW5kIGNvbmZpZ3VyYXRpb24sIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZXkgcmVwcmVzZW50IHRoZSBtYWluIGF2ZW51ZXMgZm9yIGRhdGEgZW50ZXJpbmcgb3IgZXhpdGluZyB0aGVzZSBHUkUgYW5kIEVSU1BBTiB0dW5uZWxzLgoKSW4gc3VtbWFyeSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOgoqICAgYGlwZ3JlX3htaXRgCiogICBgZXJzcGFuX3htaXRgCiogICBgZ3JlX3RhcF94bWl0YAoqICAgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGAKKiAgIGBpcGdyZV9maWxsX2luZm9gCiogICBgZXJzcGFuX2ZpbGxfaW5mb2AKKiAgIGBpcDZncmVfZmlsbF9pbmZvYAoKQW5kIEkmIzM5O2xsIG5lZWQgdGhlc2UgY29uZmlndXJhdGlvbnM6CiogICBgTkVUX0lQR1JFYAoqICAgYE5FVF9JUEdSRV9ERU1VWGAKKiAgIGBJUFY2X0dSRWAKCk5vdyBJIHNob3VsZCBnbyBhbmQgY2hlY2sgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGAgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2ZXJzcGFuX3R1bm5lbF94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYz04Nzg9c3RhdGljIG5ldGRldl90eF90IGlwNmdyZV90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy05MTYtXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6OTE3OnN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L2lwNl9ncmUuYy05MTgtXHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xODgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXA2ZXJzcGFuX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTE4ODUtXHQubmRvX3VuaW5pdCA9XHRcdGlwNmVyc3Bhbl90dW5uZWxfdW5pbml0LFxubmV0L2lwdjYvaXA2X2dyZS5jOjE4ODY6XHQubmRvX3N0YXJ0X3htaXQgPVx0aXA2ZXJzcGFuX3R1bm5lbF94bWl0LFxubmV0L2lwdjYvaXA2X2dyZS5jLTE4ODctXHQubmRvX3NldF9tYWNfYWRkcmVzcyA9XHRldGhfbWFjX2FkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYwMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFRyYW5zbWlzc2lvbiBQYXRoKioKClJpZ2h0LCBzbyB0aGUgdHJhY2UgcG9pbnRzIHRvIGAubmRvX3N0YXJ0X3htaXRgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGJlZ2lucywgc28gdGhhdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQsIEkgbmVlZCB0byBkaWcgaW50byBgaXBncmVfeG1pdGAgd2l0aGluIGBuZXQvaXB2NC9pcF9ncmUuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBHUkUgZW5jYXBzdWxhdGlvbiBpcyBoYXBwZW5pbmcgYW5kIHdoZXJlIHRoaXMgcGFja2V0IGlzIGluIHRoZSB0cmFuc21pc3Npb24gcXVldWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwZ3JlX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz02MjU9c3RhdGljIGludCBncmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy02NDgtXG5uZXQvaXB2NC9pcF9ncmUuYzo2NDk6c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L2lwX2dyZS5jLTY1MC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTk4ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtOTkwLSNlbmRpZlxubmV0L2lwdjQvaXBfZ3JlLmM6OTkxOlx0Lm5kb19zdGFydF94bWl0XHRcdD0gaXBncmVfeG1pdCxcbm5ldC9pcHY0L2lwX2dyZS5jLTk5Mi1cdC5uZG9fc2lvY2RldnByaXZhdGVcdD0gaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIFRyYW5zbWlzc2lvbiBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIG9uIGAubmRvX3N0YXJ0X3htaXRgLiBHb29kLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB3aGVyZSB0aGUga2VybmVsIGhhbmRzIG9mZiBwYWNrZXRzIGZvciB0cmFuc21pc3Npb24uIE5vdywgd2hlcmUgYXJlIHdlIHNlbmRpbmcgdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldHdvcmsgcGF0aC4gTGV0JiMzOTtzIHNlZS4uLiBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGBlcnNwYW5feG1pdGAgaW4gYG5ldC9pcHY0L2lwX2dyZS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBFUlNQQU4gZW5jYXBzdWxhdGlvbiBjb2RlLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3MgaW52b2x2ZWQgaGVyZSBnaXZlbiB0aGUgY29udGV4dCwgYW5kIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIHBhY2tldCBoYW5kbGluZyBmbG93LiBMZXQmIzM5O3MgdHJhY2UgdGhpcyBmdW5jdGlvbiBhbmQgc2VlIGhvdyB0aGUgcGFja2V0IGlzIGJlaW5nIGZvcm1hdHRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXJzcGFuX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz02NDk9c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy03MDItXG5uZXQvaXB2NC9pcF9ncmUuYzo3MDM6c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9pcF9ncmUuYy03MDQtXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTM3NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzctXHQubmRvX3VuaW5pdFx0XHQ9IGlwX3R1bm5lbF91bmluaXQsXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzc4Olx0Lm5kb19zdGFydF94bWl0XHRcdD0gZXJzcGFuX3htaXQsXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzc5LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gZXRoX21hY19hZGRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBncmVfdGFwX3htaXRgIGluIGBuZXQvaXB2NC9pcF9ncmUuY2AqKgoKWWVzLCB0aGF0JiMzOTtzIHdoYXQgSSB3YW50IHRvIGZvY3VzIG9uLiBSaWdodCwgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgZ3JlX3RhcF94bWl0YC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB3b3JraW5ncyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGUgdGFwIGludGVyZmFjZSB0cmFuc21pdHMgcGFja2V0cy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgcHJvYmFibHkgcmVsYXRlZCB0byBhIHJlY2VudCBpc3N1ZSBJIGhhdmUgYmVlbiB3b3JraW5nIG9uIHRoYXQgcmVxdWlyZWQgbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3JlX3RhcF94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9NzAzPXN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTc2MC1cbm5ldC9pcHY0L2lwX2dyZS5jOjc2MTpzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9pcF9ncmUuYy03NjItXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEzNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBncmVfdGFwX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM0NC1cdC5uZG9fdW5pbml0XHRcdD0gaXBfdHVubmVsX3VuaW5pdCxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNDU6XHQubmRvX3N0YXJ0X3htaXRcdFx0PSBncmVfdGFwX3htaXQsXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzQ2LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXHQ9IGV0aF9tYWNfYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEdSRSBUdW5uZWwgRmlsbCBJbmZvcm1hdGlvbiBGdW5jdGlvbioqCgpZZXMsIHRoYXQgZmVlbHMgcmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGJlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBpcGdyZV9maWxsX2luZm9gIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG5ldC9pcHY0L2lwX2dyZS5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGZpbGwgaW5mbyBzZWN0aW9uIGFzIEkgc3VzcGVjdCB0aGVyZSBhcmUgc29tZSBwYXJhbWV0ZXJzIHRoYXQgSSBjb3VsZCBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHdlJiMzOTtyZSBwb3B1bGF0aW5nIHRoZSBHUkUgdHVubmVsIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgdGhhdCBjb3VsZCBiZSBpbmZsdWVuY2luZyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgcGFyYW1ldGVycyB0aGF0IGFyZSBiZWluZyB1c2VkIGFyZSBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGdyZV9maWxsX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz0xNTE3PXN0YXRpYyBzaXplX3QgaXBncmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTY0LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTU2NTpzdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvaXBfZ3JlLmMtMTU2Ni17XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTYxNj1zdGF0aWMgaW50IGVyc3Bhbl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjM0LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTYzNTpcdHJldHVybiBpcGdyZV9maWxsX2luZm8oc2tiLCBkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTYzNi1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNjc4PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcGdyZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE2ODgtXHQuZ2V0X3NpemVcdD0gaXBncmVfZ2V0X3NpemUsXG5uZXQvaXB2NC9pcF9ncmUuYzoxNjg5Olx0LmZpbGxfaW5mb1x0PSBpcGdyZV9maWxsX2luZm8sXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjkwLVx0LmdldF9saW5rX25ldFx0PSBpcF90dW5uZWxfZ2V0X2xpbmtfbmV0LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE2OTM9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwZ3JlX3RhcF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzAzLVx0LmdldF9zaXplXHQ9IGlwZ3JlX2dldF9zaXplLFxubmV0L2lwdjQvaXBfZ3JlLmM6MTcwNDpcdC5maWxsX2luZm9cdD0gaXBncmVfZmlsbF9pbmZvLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTcwNS1cdC5nZXRfbGlua19uZXRcdD0gaXBfdHVubmVsX2dldF9saW5rX25ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGVyc3Bhbl9maWxsX2luZm9gIGluIGBuZXQvaXB2NC9pcF9ncmUuY2AqKgoKWWVzLiBPa2F5LCB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyB0b28uIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGBlcnNwYW5fZmlsbF9pbmZvYCBmdW5jdGlvbiB3aXRoaW4gdGhlIElQdjQgR1JFIGltcGxlbWVudGF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0JiMzOTtzIHdvcmtpbmcuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBudWFuY2VzIG9mIGhvdyB0aGUgRVJTUEFOIGhlYWRlciBpcyBwb3B1bGF0ZWQuIElzIGl0IGVmZmljaWVudD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyB3aXRoIGRpZmZlcmVudCBFUlNQQU4gbW9kZXMgb3IgY29uZmlndXJhdGlvbnM/IEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50cmljYXRlIGJpdCBtYW5pcHVsYXRpb24gaW4gdGhlcmUsIGRlYWxpbmcgd2l0aCB0aGUgVHlwZSBJSUkgRVJTUEFOIGhlYWRlciwgb3IgcGVyaGFwcyBzb21lIGxlc3MtdGhhbi1vYnZpb3VzIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgdGhlIGZsb3ctSUQsIHNlc3Npb24tSUQsIGFuZCBvdGhlciBtZXRhZGF0YSBmaWVsZHMuIEl0JiMzOTtzIHRpbWUgdG8gc2VlIHdoYXTigJlzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIGFuZCBhc3Nlc3MgdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlcnNwYW5fZmlsbF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9MTU2NT1zdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE2MTUtXG5uZXQvaXB2NC9pcF9ncmUuYzoxNjE2OnN0YXRpYyBpbnQgZXJzcGFuX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvaXBfZ3JlLmMtMTYxNy17XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTcwOD1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZXJzcGFuX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTcxOC1cdC5nZXRfc2l6ZVx0PSBpcGdyZV9nZXRfc2l6ZSxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3MTk6XHQuZmlsbF9pbmZvXHQ9IGVyc3Bhbl9maWxsX2luZm8sXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzIwLVx0LmdldF9saW5rX25ldFx0PSBpcF90dW5uZWxfZ2V0X2xpbmtfbmV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI5MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSVB2NiBHUkUgSW5mb3JtYXRpb24gRmlsbGluZyBGdW5jdGlvbioqCgpZZXMsIHRoYXQgZmVlbHMgcmlnaHQuIE15IGd1dCBzYXlzIHdlIG5lZWQgdG8gZGVsdmUgaW50byBgaXA2Z3JlX2ZpbGxfaW5mb2AgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2AuIExldCYjMzk7cyBjb25maXJtIG15IGFzc3VtcHRpb25zIHJlZ2FyZGluZyB0aGUgY29udHJvbCBwYXRoIG9yIGEgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgR1JFIHR1bm5lbCBpbmZvcm1hdGlvbiBpcyBiZWluZyBwb3B1bGF0ZWQgd2l0aCBJUHY2IGRhdGEsIHNwZWNpZmljYWxseSB0aGUgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBicm9hZGVyIEdSRSBpbmZyYXN0cnVjdHVyZS4gSSBhbSBmb2N1c2VkIG9uIHRoZSBzcGVjaWZpY3MgaW4gdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZncmVfZmlsbF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYz0yMDczPXN0YXRpYyBzaXplX3QgaXA2Z3JlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIxMTQtXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjExNTpzdGF0aWMgaW50IGlwNmdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMTE2LXtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjI4OD1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIyOTgtXHQuZ2V0X3NpemVcdD0gaXA2Z3JlX2dldF9zaXplLFxubmV0L2lwdjYvaXA2X2dyZS5jOjIyOTk6XHQuZmlsbF9pbmZvXHQ9IGlwNmdyZV9maWxsX2luZm8sXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMwMC1cdC5nZXRfbGlua19uZXRcdD0gaXA2X3RubF9nZXRfbGlua19uZXQsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIzMDM9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMTItXHQuZ2V0X3NpemVcdD0gaXA2Z3JlX2dldF9zaXplLFxubmV0L2lwdjYvaXA2X2dyZS5jOjIzMTM6XHQuZmlsbF9pbmZvXHQ9IGlwNmdyZV9maWxsX2luZm8sXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMxNC1cdC5nZXRfbGlua19uZXRcdD0gaXA2X3RubF9nZXRfbGlua19uZXQsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIzMTc9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmVyc3Bhbl90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMjYtXHQuZ2V0X3NpemVcdD0gaXA2Z3JlX2dldF9zaXplLFxubmV0L2lwdjYvaXA2X2dyZS5jOjIzMjc6XHQuZmlsbF9pbmZvXHQ9IGlwNmdyZV9maWxsX2luZm8sXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMyOC1cdC5nZXRfbGlua19uZXRcdD0gaXA2X3RubF9nZXRfbGlua19uZXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDY0CgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqT3BlcmF0aW9uYWxpemluZyB0aGUgR1JFIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQuIENvbmZpcm1lZCwgYWxsIHRoZSBmb2N1cyBzeW1ib2xzLCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LCBhcmUgdmFsaWQgb3B0aW9ucyB0byB3b3JrIHdpdGguIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi4gSSBzZWUgdGhhdCBgTkVUX0lQR1JFYCwgYE5FVF9JUEdSRV9ERU1VWGAsIGFuZCBgSVBWNl9HUkVgIGFyZSBlbmFibGVkLiBUaGlzIHNpZ25hbHMgYSBzZXR1cCBnZWFyZWQgdG93YXJkcyBlbmNhcHN1bGF0aW5nIHRyYWZmaWMgd2l0aCBHUkUsIHBvdGVudGlhbGx5IGZvciB0dW5uZWxpbmcgSVB2NCBhbmQgSVB2Ni4gR2l2ZW4gdGhlIGN1cnJlbnQgaW5mb3JtYXRpb24sIHRoZXJlJiMzOTtzIG5vIGluaGVyZW50IGNvbmZsaWN0IGluIHVzaW5nIHRoZXNlLCBzbyBJJiMzOTtsbCBleGVjdXRlIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0RFTVVYJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBncmVfeG1pdCYjMzQ7LAogICAgJiMzNDtlcnNwYW5feG1pdCYjMzQ7LAogICAgJiMzNDtncmVfdGFwX3htaXQmIzM0OywKICAgICYjMzQ7aXA2ZXJzcGFuX3R1bm5lbF94bWl0JiMzNDssCiAgICAmIzM0O2lwZ3JlX2ZpbGxfaW5mbyYjMzQ7LAogICAgJiMzNDtlcnNwYW5fZmlsbF9pbmZvJiMzNDssCiAgICAmIzM0O2lwNmdyZV9maWxsX2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRyYW5zbWlzc2lvbiBhbmQgbmV0bGluayBpbmZvIGR1bXBpbmcgcGF0aHMgZm9yIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMgb3ZlciBJUHY0IGFuZCBJUHY2LiBJdCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSB0aGUgdHVubmVsJiMzOTtzIG91dHB1dCBmbGFncyAoYHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzYCkgd2VyZSBiZWluZyBtb2RpZmllZCBkdXJpbmcgdHJhbnNtaXNzaW9uIG9yIG5ldGxpbmsgZHVtcHMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmFjZSBjb25kaXRpb25zIG9yIHVuaW50ZW5kZWQgc3RhdGUgY2hhbmdlcy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbiwgc28gdGhleSBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0lQR1JFJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRV9ERU1VWCYjMzQ7LAogICAgJiMzNDtJUFY2X0dSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwZ3JlX3htaXQmIzM0OywKICAgICYjMzQ7ZXJzcGFuX3htaXQmIzM0OywKICAgICYjMzQ7Z3JlX3RhcF94bWl0JiMzNDssCiAgICAmIzM0O2lwNmVyc3Bhbl90dW5uZWxfeG1pdCYjMzQ7LAogICAgJiMzNDtpcGdyZV9maWxsX2luZm8mIzM0OywKICAgICYjMzQ7ZXJzcGFuX2ZpbGxfaW5mbyYjMzQ7LAogICAgJiMzNDtpcDZncmVfZmlsbF9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0cmFuc21pc3Npb24gYW5kIG5ldGxpbmsgaW5mbyBkdW1waW5nIHBhdGhzIGZvciBHUkUgYW5kIEVSU1BBTiB0dW5uZWxzIG92ZXIgSVB2NCBhbmQgSVB2Ni4gSXQgZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlIHR1bm5lbCYjMzk7cyBvdXRwdXQgZmxhZ3MgKGB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgbW9kaWZpZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBvciBuZXRsaW5rIGR1bXBzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHJhY2UgY29uZGl0aW9ucyBvciB1bmludGVuZGVkIHN0YXRlIGNoYW5nZXMuIFRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29yayB0cmFmZmljIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24sIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9naWMgYnVnIHdoZXJlIHNoYXJlZCB0dW5uZWwgcGFyYW1ldGVycyAoYHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzYCkgd2VyZSBiZWluZyBpbmNvcnJlY3RseSBtb2RpZmllZCBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiAoYGVyc3Bhbl94bWl0YCwgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGApIGFuZCBuZXRsaW5rIGR1bXBzIChgaXBncmVfZmlsbF9pbmZvYCwgYGVyc3Bhbl9maWxsX2luZm9gKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGRhdGEgcmFjZXMgYW5kIGNvcnJ1cHRlZCB0dW5uZWwgc3RhdGUuIFRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBjb3BpZXMgb2YgdGhlIGZsYWdzIChgSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1NgKSB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBpcF90dW5uZWxfZmxhZ3NfY29weSgpYCAod2hpY2ggdXNlcyBgYml0bWFwX2NvcHkoKWAgdG8gY29weSB0aGUgZW50aXJlIGB1bnNpZ25lZCBsb25nYCBhcnJheSkuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGFueSByaXNrIG9mIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4vS0NTQU4gYW5kIGxvZ2ljIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggZGF0YSByYWNlcyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxOWViMTU3ODE3MzQxMDM5YzE1Y2I2OTc3ZjQzODhlMmJmYTVkZTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjoxMDoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggNmE5MjYwNzQwMWU4YS4uODIzMDllZmQ0MTdlMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTQ3NSwxMiAmIzQzOzQ3NSw5IEBAIHN0YXRpYyBpbnQgZ3JlX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiBzdGF0aWMgdm9pZCBfX2dyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKnRubF9wYXJhbXMsCi0JCSAgICAgICBfX2JlMTYgcHJvdG8pCiYjNDM7CQkgICAgICAgX19iZTE2IHByb3RvLCBjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncykKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwotCUlQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTsKLQotCWlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwogCiAJLyogUHVzaCBHUkUgaGVhZGVyLiAqLwogCWdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWwtJmd0O3R1bl9obGVuLApAQCAtNjUzLDYgJiM0Mzs2NTAsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7CiAJY29uc3Qgc3RydWN0IGlwaGRyICp0bmxfcGFyYW1zOwogCiAJaWYgKCFwc2tiX2luZXRfbWF5X3B1bGwoc2tiKSkKQEAgLTY4OCwxMSAmIzQzOzY4NiwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQl0bmxfcGFyYW1zID0gJmFtcDt0dW5uZWwtJmd0O3Bhcm1zLmlwaDsKIAl9CiAKLQlpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwKLQkJCQkJICAgICAgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKSkpCiYjNDM7CWlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgZmxhZ3MpKSkKIAkJZ290byBmcmVlX3NrYjsKIAotCV9fZ3JlX3htaXQoc2tiLCBkZXYsIHRubF9wYXJhbXMsIHNrYi0mZ3Q7cHJvdG9jb2wpOwomIzQzOwlfX2dyZV94bWl0KHNrYiwgZGV2LCB0bmxfcGFyYW1zLCBza2ItJmd0O3Byb3RvY29sLCBmbGFncyk7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogZnJlZV9za2I6CkBAIC03MDUsNiAmIzQzOzcwNCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpOwogCWJvb2wgdHJ1bmNhdGUgPSBmYWxzZTsKIAlfX2JlMTYgcHJvdG87CiAKQEAgLTcyOCwxMCAmIzQzOzcyOCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJdHJ1bmNhdGUgPSB0cnVlOwogCX0KIAomIzQzOwlpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKTsKJiM0MzsKIAkvKiBQdXNoIEVSU1BBTiBoZWFkZXIgKi8KIAlpZiAodHVubmVsLSZndDtlcnNwYW5fdmVyID09IDApIHsKIAkJcHJvdG8gPSBodG9ucyhFVEhfUF9FUlNQQU4pOwotCQlfX2NsZWFyX2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKTsKJiM0MzsJCV9fY2xlYXJfYml0KElQX1RVTk5FTF9TRVFfQklULCBmbGFncyk7CiAJfSBlbHNlIGlmICh0dW5uZWwtJmd0O2Vyc3Bhbl92ZXIgPT0gMSkgewogCQllcnNwYW5fYnVpbGRfaGVhZGVyKHNrYiwgbnRvaGwodHVubmVsLSZndDtwYXJtcy5vX2tleSksCiAJCQkJICAgIHR1bm5lbC0mZ3Q7aW5kZXgsCkBAIC03NDYsOCAmIzQzOzc0OCw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlnb3RvIGZyZWVfc2tiOwogCX0KIAotCV9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwotCV9fZ3JlX3htaXQoc2tiLCBkZXYsICZhbXA7dHVubmVsLSZndDtwYXJtcy5pcGgsIHByb3RvKTsKJiM0MzsJX19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIGZsYWdzKTsKJiM0MzsJX19ncmVfeG1pdChza2IsIGRldiwgJmFtcDt0dW5uZWwtJmd0O3Bhcm1zLmlwaCwgcHJvdG8sIGZsYWdzKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBmcmVlX3NrYjoKQEAgLTc2MCw2ICYjNDM7NzYyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGdyZV90YXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpOwogCiAJaWYgKCFwc2tiX2luZXRfbWF5X3B1bGwoc2tiKSkKIAkJZ290byBmcmVlX3NrYjsKQEAgLTc2OSwxNCAmIzQzOzc3MiwxNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCi0JaWYgKGdyZV9oYW5kbGVfb2ZmbG9hZHMoc2tiLCB0ZXN0X2JpdChJUF9UVU5ORUxfQ1NVTV9CSVQsCi0JCQkJCSAgICAgIHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncykpKQomIzQzOwlpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKGdyZV9oYW5kbGVfb2ZmbG9hZHMoc2tiLCB0ZXN0X2JpdChJUF9UVU5ORUxfQ1NVTV9CSVQsIGZsYWdzKSkpCiAJCWdvdG8gZnJlZV9za2I7CiAKIAlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgZGV2LSZndDtuZWVkZWRfaGVhZHJvb20pKQogCQlnb3RvIGZyZWVfc2tiOwogCi0JX19ncmVfeG1pdChza2IsIGRldiwgJmFtcDt0dW5uZWwtJmd0O3Bhcm1zLmlwaCwgaHRvbnMoRVRIX1BfVEVCKSk7CiYjNDM7CV9fZ3JlX3htaXQoc2tiLCBkZXYsICZhbXA7dHVubmVsLSZndDtwYXJtcy5pcGgsIGh0b25zKEVUSF9QX1RFQiksIGZsYWdzKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBmcmVlX3NrYjoKQEAgLTE1NjAsMTIgJiM0MzsxNTY0LDE1IEBAIHN0YXRpYyBzaXplX3QgaXBncmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogc3RhdGljIGludCBpcGdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCA9ICZhbXA7dC0mZ3Q7cGFybXM7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwljb25zdCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCA9ICZhbXA7dC0mZ3Q7cGFybXM7CiAJSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1Mob19mbGFncyk7CiAKIAlpcF90dW5uZWxfZmxhZ3NfY29weShvX2ZsYWdzLCBwLSZndDtvX2ZsYWdzKTsKIAomIzQzOwlpZiAodC0mZ3Q7ZXJzcGFuX3ZlciAhPSAwICZhbXA7JmFtcDsgIXQtJmd0O2NvbGxlY3RfbWQpCiYjNDM7CQlfX3NldF9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIG9fZmxhZ3MpOwomIzQzOwogCWlmIChubGFfcHV0X3UzMihza2IsIElGTEFfR1JFX0xJTkssIHAtJmd0O2xpbmspIHx8CiAJICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX0lGTEFHUywKIAkJCSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLSZndDtpX2ZsYWdzKSkgfHwKQEAgLTE2MDgsMTIgJiM0MzsxNjE1LDkgQEAgc3RhdGljIGludCBpcGdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogc3RhdGljIGludCBlcnNwYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKHQtJmd0O2Vyc3Bhbl92ZXIgJmx0Oz0gMikgewotCQlpZiAodC0mZ3Q7ZXJzcGFuX3ZlciAhPSAwICZhbXA7JmFtcDsgIXQtJmd0O2NvbGxlY3RfbWQpCi0JCQlfX3NldF9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHQtJmd0O3Bhcm1zLm9fZmxhZ3MpOwotCiAJCWlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HUkVfRVJTUEFOX1ZFUiwgdC0mZ3Q7ZXJzcGFuX3ZlcikpCiAJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jCmluZGV4IGI4NDMxMTZlOWI3MDMuLjBiM2YzODZiNTFhMmQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9ncmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZ3JlLmMKQEAgLTk2NCw3ICYjNDM7OTY0LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGlwNmVyc3Bhbl90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA/OiB0LSZndDtobGVuKSkKIAkJZ290byB0eF9lcnI7CiAKLQlfX2NsZWFyX2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgdC0mZ3Q7cGFybXMub19mbGFncyk7CiAJSVBDQihza2IpLSZndDtmbGFncyA9IDA7CiAKIAkvKiBGb3IgY29sbGVjdF9tZCBtb2RlLCBkZXJpdmUgZmw2IGZyb20gdGhlIHR1bm5lbCBrZXksCkBAIC0yMTE1LDggJiM0MzsyMTE0LDggQEAgc3RhdGljIHNpemVfdCBpcDZncmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogc3RhdGljIGludCBpcDZncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCA9ICZhbXA7dC0mZ3Q7cGFybXM7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwID0gJmFtcDt0LSZndDtwYXJtczsKIAlJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKTsKIAogCWlwX3R1bm5lbF9mbGFnc19jb3B5KG9fZmxhZ3MsIHAtJmd0O29fZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxNwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDg5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBHUkUgVHVubmVsIEZsYWdzIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgbmV0L2lwdjQvaXBfZ3JlLmNgIGFuZCBgbmV0L2lwdjYvaXA2X2dyZS5jYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgYWxsIGFib3V0IGhvdyBHUkUgdHVubmVsIGZsYWdzIGFyZSBoYW5kbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGdvb2QsIGZsYWcgaGFuZGxpbmcgaXMgYWx3YXlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBjb25jdXJyZW5jeSBidWdzLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBfX2dyZV94bWl0YCBub3cgZ2V0cyB0aGUgYGZsYWdzYCBwYXNzZWQgdG8gaXQgYXMgYW4gYXJndW1lbnQsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHdheSB0byBkbyB0aGlzLiBCZWZvcmUsIGl0IHdhcyBwdWxsaW5nIHRoZSBmbGFncyBkaXJlY3RseSBmcm9tIGB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3NgLiBNYWtlcyBzZW5zZTsgdGhhdCBrZWVwcyB0aGUgdHJhbnNtaXNzaW9uIGZ1bmN0aW9uIGl0c2VsZiBjbGVhbmVyIGFuZCBtb3JlIGZvY3VzZWQuIFRoZW4gdGhlIG90aGVyIHRyYW5zbWl0IGZ1bmN0aW9ucyAoYGlwZ3JlX3htaXRgLCBgZXJzcGFuX3htaXRgLCBgZ3JlX3RhcF94bWl0YCkgY29weSB0aGUgZmxhZ3MgZnJvbSBgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzYCB0byBhIGxvY2FsIGBmbGFnc2AgdmFyaWFibGUsIHBvdGVudGlhbGx5IG1vZGlmeSBpdCwgYW5kICp0aGVuKiBwYXNzIGl0IHRvIGBfX2dyZV94bWl0YC4gUmlnaHQuIFVzaW5nIGEgbG9jYWwgY29weSBpcyBhIGtleS4KClRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgaW4gdGhlIGBmaWxsX2luZm9gIGZ1bmN0aW9ucyAoYGlwZ3JlX2ZpbGxfaW5mb2AgYW5kIGBlcnNwYW5fZmlsbF9pbmZvYCkuIEl0JiMzOTtzIGZpeGluZyBhIGJ1ZyB3aGVyZSB3ZSB3ZXJlIG1vZGlmeWluZyBgdC0mZ3Q7cGFybXMub19mbGFnc2AgZHVyaW5nIGEgKnJlYWQqIG9wZXJhdGlvbiDigJMgYGZpbGxfaW5mb2AgaXMgZm9yIG5ldGxpbmssIHJpZ2h0PyBJdCB1c2VkIHRvIHNldCB0aGUgYElQX1RVTk5FTF9LRVlfQklUYCBkaXJlY3RseSBvbiB0aGUgdHVubmVsIHBhcmFtZXRlcnMgZHVyaW5nIHRoZSBgZmlsbF9pbmZvYCBjYWxsISBUaGF0JiMzOTtzIGEgaHVnZSBwcm9ibGVtLiBUaGF0JiMzOTtzIGEgY2xlYXIgc3RhdGUgY29ycnVwdGlvbiBidWcuCgpOb3csIGl0IGNvcGllcyB0aGUgZmxhZ3MgaW50byBhIGxvY2FsIGBvX2ZsYWdzYCB2YXJpYWJsZTogYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpYCBhbmQgdGhlbiBgaXBfdHVubmVsX2ZsYWdzX2NvcHkob19mbGFncywgcC0mZ3Q7b19mbGFncylgLiBOb3cgaXQmIzM5O3Mgc2FmZSB0byBtb2RpZnkgaXQgd2l0aG91dCBzaWRlLWVmZmVjdHMuIEFmdGVyIHRoZSBjb3B5LCBpdCBjb25kaXRpb25hbGx5IHNldHMgYElQX1RVTk5FTF9LRVlfQklUYCBvbiAqdGhhdCogbG9jYWwgY29weSwgYG9fZmxhZ3NgLiBUaGF0JiMzOTtzIHNtYXJ0LiBUaGF0IHByb3RlY3RzIGFnYWluc3Qgc29tZW9uZSBxdWVyeWluZyB0aGUgdHVubmVsIGluZm8gYW5kIGNoYW5naW5nIHRoZSBzdGF0ZSB1bmRlcm5lYXRoIHlvdS4gVGhlIHNhbWUgY2hhbmdlIGFsc28gc2hvd3MgdXAgaW4gYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGAuIEdvb2Qgc3R1ZmYuCgpTbywgdGhlIHVuZGVybHlpbmcgaXNzdWUgaXMgYSBjb25jdXJyZW5jeSBvciBzdGF0ZSBjb3JydXB0aW9uIGJ1Zy4gV2Ugd2VyZSBtb2RpZnlpbmcgc2hhcmVkIHR1bm5lbCBzdGF0ZSAoYHQtJmd0O3Bhcm1zLm9fZmxhZ3NgKSBkdXJpbmcgYm90aCB0cmFuc21pdCBhbmQgbmV0bGluayBkdW1wcyAod2hpY2ggY291bGQgaGFwcGVuIGNvbmN1cnJlbnRseSksIGxlYWRpbmcgdG8gZGF0YSByYWNlcy4gVGhhdCBjYW4gY29ycnVwdCB0aGUgdHVubmVsIHN0YXRlIGluIHN1YnRsZSB3YXlzLiBJdCYjMzk7cyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mbyBsZWFrcywgYnV0IGl0JiMzOTtzIGFib3V0IG1vZGlmeWluZyBzaGFyZWQgc3RhdGUgd2l0aG91dCBwcm9wZXIgbG9ja2luZy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBgaXBncmVfZmlsbF9pbmZvYCBhZ2FpbiB0byBiZSBzdXJlLi4uIGBJUF9UVU5ORUxfREVDTEFSRV9GTEFHU2AgY3JlYXRlcyBhIGJpdG1hcCwgdGhlbiB3ZSBjb3B5IHRoZSBmbGFncywgYW5kIG9ubHkgdGhlbiBkbyB3ZSBtb2RpZnkgdGhlIGNvcHkgYmVmb3JlIGNvbnZlcnRpbmcgdG8gYF9fYmUxNmAgYW5kIHNlbmRpbmcgb3ZlciBuZXRsaW5rLiBJIGRvbiYjMzk7dCBzZWUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBpbiB0aGUgY29kZS4gSXQmIzM5O3MgYSBjbGVhbiBmaXggZm9yIGEgcHJldHR5IG5hc3R5IGJ1Zy4gR29vZCBjYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNTEtXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NTI6I2RlZmluZSBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTUzLVx0X19pcHRfZmxhZ19vcChERUNMQVJFX0JJVE1BUCwgX19WQV9BUkdTX18pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NzgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGZvY3VzIGhlcmUgaXMgb24gdGhlIGZ1bmN0aW9uIGNhbGw6IGBfX2lwdF9mbGFnX29wYC4gSG1tLCBpbnRlcmVzdGluZy4gTXkgYnJhaW4gaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSXQmIzM5O3MgcHJlZml4ZWQgd2l0aCBhIGRvdWJsZSB1bmRlcnNjb3JlLCBzbyBpdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgb3Iga2VybmVsLWxldmVsIGZ1bmN0aW9uLCB3aGljaCBpbXBsaWVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbG93ZXItbGV2ZWwgbmV0d29ya2luZyBvcGVyYXRpb25zLCBwb3NzaWJseSByZWxhdGVkIHRvIG5ldGZpbHRlciwgaXB0YWJsZXMsIG9yIGEgc2ltaWxhciBmaXJld2FsbC9wYWNrZXQgbWFuaXB1bGF0aW9uIGZyYW1ld29yay4gVGhlIG5hbWUgaXRzZWxmLCBgX19pcHRfZmxhZ19vcGAsIHN1Z2dlc3RzIGl0JiMzOTtzIGludm9sdmVkIGluICpmbGFnKiBvcGVyYXRpb25zLCBhbmQgcHJvYmFibHkgYXQgYW4gKm9wZXJhdG9yKiBsZXZlbC4gVGhpcyB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IG1hbmlwdWxhdGluZyBvciB0ZXN0aW5nIHNvbWUga2luZCBvZiBmbGFnIHdpdGhpbiB0aGUgY29udGV4dCBvZiBwYWNrZXQgbWF0Y2hpbmcgb3IgcnVsZSBhcHBsaWNhdGlvbi4gSSBpbW1lZGlhdGVseSBuZWVkIG1vcmUgY29udGV4dCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGZsYWdzIGFuZCBvcGVyYXRvcnMgYXJlIGluIHBsYXkuIElzIHRoaXMgd2l0aGluIHRoZSBpcHRhYmxlcyBzdHJ1Y3R1cmUgaXRzZWxmLCBvciBpcyB0aGlzIHJlbGF0ZWQgdG8gdXNlci1zcGFjZSBpcHRhYmxlcyBpbnRlcmFjdGlvbj8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHByb2JhYmx5IGJlaW5nIGhhbmRsZWQgYW5kIHdoZXJlIGRvIHRoZXkgc2l0IGluIHRoZSBtZW1vcnkgc3BhY2U/IE1vcmUgcXVlc3Rpb25zLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIF9faXB0X2ZsYWdfb3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTQ4LVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjQ5OiNkZWZpbmUgX19pcHRfZmxhZ19vcChvcCwgLi4uKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTUwLVx0b3AoX19WQV9BUkdTX18sIF9fSVBfVFVOTkVMX0ZMQUdfTlVNKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjQxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKlVuZGVyc3RhbmRpbmcgdGhlIFR1bm5lbCBGbGFnIERlY2xhcmF0aW9uIGFuZCBDb3B5IFByb2Nlc3MqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpYCBtYWNyby4gSXQmIzM5O3MgZXhwYW5kaW5nIHRvIGBERUNMQVJFX0JJVE1BUChvX2ZsYWdzLCBfX0lQX1RVTk5FTF9GTEFHX05VTSlgLiBUaGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYml0IGZsYWdzLCBwYWNrZWQgaW50byBhIGJpdG1hcC4gYERFQ0xBUkVfQklUTUFQYCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlc29sdmUgdG8gYW4gYXJyYXkgb2YgYHVuc2lnbmVkIGxvbmdgIHZhbHVlcy4gVGhhdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSwgZWZmaWNpZW50IGZvciBiaXQgbWFuaXB1bGF0aW9uLiBXZeKAmXJlIHVzaW5nIGxvbmdzLCBwcm9iYWJseSBiZWNhdXNlIHdl4oCZcmUgd29ya2luZyB3aXRoIHRoZSBhcmNoaXRlY3R1cmXigJlzIG5hdGl2ZSB3b3JkIHNpemUgdG8gbWFrZSB0aGUgb3BlcmF0aW9ucyBhcyBmYXN0IGFzIHBvc3NpYmxlLiBUaGlzIGlzIGEgY29tbW9uIGFuZCByZWFzb25hYmxlIGFwcHJvYWNoIHRvIG1hbmFnaW5nIGEgc2V0IG9mIGJvb2xlYW4gb3B0aW9ucywgb3IgZmxhZ3MuCgpUaGVuLCB0aGVyZSYjMzk7cyBgaXBfdHVubmVsX2ZsYWdzX2NvcHlgLiBHaXZlbiB0aGUgY29udGV4dCwgdGhpcyAqaGFzKiB0byBiZSBhIGZ1bmN0aW9uIGRlc2lnbmVkIHNwZWNpZmljYWxseSB0byBjb3B5IHRoZXNlIGJpdCBmbGFncyBmcm9tIG9uZSBiaXRtYXAgKHNvdXJjZSkgdG8gYW5vdGhlciAoZGVzdGluYXRpb24pLiBJdOKAmXMgcHJvYmFibHkgaW1wbGVtZW50ZWQgdXNpbmcgYml0d2lzZSBvcGVyYXRvcnMgbGlrZSBgJmFtcDtgLCBgfGAsIGB+YCAoQU5ELCBPUiwgTk9UKSB0byBzZWxlY3RpdmVseSBzZXQsIGNsZWFyLCBhbmQgY29weSB0aGUgaW5kaXZpZHVhbCBiaXRzIHdpdGhpbiB0aGUgYHVuc2lnbmVkIGxvbmdgIGFycmF5cyB0aGF0IGNvbXByaXNlIHRoZSBiaXRtYXBzLiBUaGUgZnVuY3Rpb24mIzM5O3Mgam9iIGlzIHN0cmFpZ2h0Zm9yd2FyZDogZW5zdXJlIHRoZSBmbGFncyByZXByZXNlbnRpbmcgdGhlIHR1bm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGFyZSBjb3JyZWN0bHkgdHJhbnNmZXJyZWQsIHByb2JhYmx5IHdoZW4gc2V0dGluZyB1cCBvciBtb2RpZnlpbmcgYSB0dW5uZWwuIE5vIHN1cnByaXNlcyBoZXJlLCBqdXN0IGVmZmljaWVudCBiaXQtbGV2ZWwgbWFuaXB1bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGlwX3R1bm5lbF9mbGFnc19jb3B5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC01NS0jZGVmaW5lIGlwX3R1bm5lbF9mbGFnc196ZXJvKC4uLilcdF9faXB0X2ZsYWdfb3AoYml0bWFwX3plcm8sIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjU2OiNkZWZpbmUgaXBfdHVubmVsX2ZsYWdzX2NvcHkoLi4uKVx0X19pcHRfZmxhZ19vcChiaXRtYXBfY29weSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNTctI2RlZmluZSBpcF90dW5uZWxfZmxhZ3NfYW5kKC4uLilcdF9faXB0X2ZsYWdfb3AoYml0bWFwX2FuZCwgX19WQV9BUkdTX18pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25jZXJuIFJlZ2FyZGluZyBCaXRtYXAgQ29weWluZyBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgQml0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBgYml0bWFwX2NvcHlgIHdvcmtzIGhlcmUuIEl0JiMzOTtzIHN1cHBvc2VkIHRvIGNvcHkgYW4gZXhhY3QgbnVtYmVyIG9mIGJpdHMsIHdoaWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEhvd2V2ZXIsIGEgcG90ZW50aWFsIGlzc3VlIGlzIHN0YXJ0aW5nIHRvIG5pZ2dsZSBhdCBtZS4gSWYgYF9fSVBfVFVOTkVMX0ZMQUdfTlVNYCBpc24mIzM5O3QgYSBjbGVhbiBtdWx0aXBsZSBvZiBgQklUU19QRVJfTE9OR2Ag4oCTIHRoYXQgaXMsIGlmIHRoZXJlJiMzOTtzIGEgcmVtYWluZGVyIHdoZW4geW91IGRpdmlkZSB0aGUgbnVtYmVyIG9mIGZsYWdzIGJ5IHRoZSBiaXQgd2lkdGggb2YgYW4gYHVuc2lnbmVkIGxvbmdgIOKAkyB0aGVuIGBiaXRtYXBfY29weWAgbWlnaHQgYmUgbGVhdmluZyB0aGUgdHJhaWxpbmcgYml0cyBvZiB0aGUgbGFzdCBgdW5zaWduZWQgbG9uZ2AgaW4gdGhlIGRlc3RpbmF0aW9uIHVuaW5pdGlhbGl6ZWQuIFdlIGNhbiYjMzk7dCBoYXZlIHRoYXQ7IGl0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBsYXRlciBvbi4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgYml0bWFwX2NvcHlgIGhhbmRsZXMgdGhpcyBzaXR1YXRpb24gY29ycmVjdGx5LiBMZXQmIzM5O3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGNsb3NlIGxvb2sgYXQgaXRzIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX2NvcHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9iaXRtYXAuaD0yNzM9dm9pZCBiaXRtYXBfY29weV9jbGVhcl90YWlsKHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCB1bnNpZ25lZCBpbnQgbmJpdHMpXG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNzktXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI4MDpzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX2NvcHlfYW5kX2V4dGVuZCh1bnNpZ25lZCBsb25nICp0byxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMjgxLVx0XHRcdFx0XHQgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGJpdG1hcF9jb3B5YCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYGJpdG1hcF9jb3B5YCBtYWNybyBvciBmdW5jdGlvbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgZGVmaW5pdGlvbi4gV2hhdCYjMzk7cyB0aGUgaW1wbGVtZW50YXRpb24gbGlrZT8gSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgYml0d2lzZSBvcGVyYXRpb24sIHBvdGVudGlhbGx5IG9wdGltaXplZCB3aXRoIGNvbXBpbGVyIGludHJpbnNpY3MsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggdGhhdCByZWxpZXMgb24gbWVtb3J5IG1hbmFnZW1lbnQgb3IgaGFyZHdhcmUtc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGdvdGNoYXPigJRhbGlnbm1lbnQgaXNzdWVzLCBwb3RlbnRpYWwgZm9yIG9mZi1ieS1vbmUgZXJyb3JzIGluIGxvb3AgYm91bmRhcmllcywgb3IgYW55IGFzc3VtcHRpb25zIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgYml0bWFwIHJlcHJlc2VudGF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRldGFpbHMgd2lsbCBkaWN0YXRlIHdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLCBwZXJmb3JtYW5jZSB3aXNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYGJpdG1hcF9jb3B5YCBpcyBkb2luZyB3aGF0IEkgYmVsaWV2ZSBpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGJpdG1hcF9jb3B5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWx2aW5nIGludG8gQml0bWFwIE1hbmlwdWxhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYGJpdG1hcF9jb3B5YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHNlZS4uLiBgYml0bWFwX2NvcHlgLCByaWdodD8gVGhhdCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9iaXRtYXAuaGAuIEkmIzM5O2xsIG9wZW4gdGhhdCBmaWxlIGFuZCBjb25maXJtIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgdW5kZXIgdmFyaW91cyBjb25kaXRpb25zLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZnVuY3Rpb24gaXMgb3B0aW1pemVkIGFzIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlLCB1c2luZyB0aGUgYXBwcm9wcmlhdGUgYml0d2lzZSBvcGVyYXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgcmVzaWRlLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGVkZ2UgY2FzZXMsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHdvcmQgc2l6ZXMgKDMyLzY0IGJpdCkuIEkmIzM5O2xsIGFsc28gZ2xhbmNlIGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS4gSSB3aWxsIHdhbnQgdG8gc2VlIGlmIHRoaXMgY29weSByb3V0aW5lIHVzZXMgdW5yb2xsZWQgbG9vcHMsIHdoaWNoIGlzIG9mdGVuIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGhlcmUsIG9yIGlmIHRoZXJlJiMzOTtzIGFueSBjbGV2ZXIgdHJpY2tlcnkgd2l0aCBTSU1EIGluc3RydWN0aW9ucyAodGhvdWdoIGluIHRoZSBrZXJuZWwsIHRoYXQmIzM5O3MgbGVzcyBjb21tb24sIGFkbWl0dGVkbHkpLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaXRtYXBfY29weVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODAxIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYz0xMDIzPXZvaWQgX19pbml0IHZlY19pbml0X3ZxX21hcChlbnVtIHZlY190eXBlIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmMtMTAyNi1cdHZlY19wcm9iZV92cXMoaW5mbywgaW5mby1cdTAwM2V2cV9tYXApO1xuYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmM6MTAyNzpcdGJpdG1hcF9jb3B5KGluZm8tXHUwMDNldnFfcGFydGlhbF9tYXAsIGluZm8tXHUwMDNldnFfbWFwLCBTVkVfVlFfTUFYKTtcbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jLTEwMjgtfVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jPTE2NjM9c3RhdGljIGludCBfX2t2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTE2NzUtXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxNjc2Olx0Yml0bWFwX2NvcHkoa3ZtLVx1MDAzZWFyY2gudmNwdV9mZWF0dXJlcywgXHUwMDI2ZmVhdHVyZXMsIEtWTV9WQ1BVX01BWF9GRUFUVVJFUyk7XG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xNjc3LVxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uYz0zMzk9c3RhdGljIHZvaWQgcGt2bV9pbml0X2ZlYXR1cmVzX2Zyb21faG9zdChzdHJ1Y3QgcGt2bV9oeXBfdm0gKmh5cF92bSwgY29uc3Qgc3RydWN0IGt2bSAqaG9zdF9rdm0pXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jLTM1NS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uYzozNTY6XHRcdGJpdG1hcF9jb3B5KGt2bS1cdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMsXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmMtMzU3LVx0XHRcdCAgICBob3N0X2t2bS1cdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmM9MzcwPXZvaWQgdmdpY192NV9mb2xkX3BwaV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmMtNDAyLVx0ICovXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYzo0MDM6XHRiaXRtYXBfY29weShjcHVfaWYtXHUwMDNldmdpY19wcGlfYWN0aXZlciwgYWN0aXZlciwgVkdJQ19WNV9OUl9QUklWQVRFX0lSUVMpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmMtNDA0LX1cbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYz00MDY9dm9pZCB2Z2ljX3Y1X2ZsdXNoX3BwaV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmMtNDM3LVx0ICovXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYzo0Mzg6XHRiaXRtYXBfY29weShob3N0X2RhdGFfcHRyKHZnaWNfdjVfcHBpX3N0YXRlKS1cdTAwM2VwZW5kciwgcGVuZHIsXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYy00MzktXHRcdCAgICBWR0lDX1Y1X05SX1BSSVZBVEVfSVJRUyk7XG4tLVxuYXJjaC9hcm02NC9tbS9jb250ZXh0LmM9OTE9c3RhdGljIHZvaWQgc2V0X3Jlc2VydmVkX2FzaWRfYml0cyh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vY29udGV4dC5jLTkzLVx0aWYgKHBpbm5lZF9hc2lkX21hcClcbmFyY2gvYXJtNjQvbW0vY29udGV4dC5jOjk0Olx0XHRiaXRtYXBfY29weShhc2lkX21hcCwgcGlubmVkX2FzaWRfbWFwLCBOVU1fVVNFUl9BU0lEUyk7XG5hcmNoL2FybTY0L21tL2NvbnRleHQuYy05NS1cdGVsc2UgaWYgKGFybTY0X2tlcm5lbF91bm1hcHBlZF9hdF9lbDAoKSlcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYz0zOTA9c3RhdGljIGlubGluZSB2b2lkIHNsaWNlX2NvcHlfbWFzayhzdHJ1Y3Qgc2xpY2VfbWFzayAqZHN0LFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jLTM5NS1cdFx0cmV0dXJuO1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmM6Mzk2Olx0Yml0bWFwX2NvcHkoZHN0LVx1MDAzZWhpZ2hfc2xpY2VzLCBzcmMtXHUwMDNlaGlnaF9zbGljZXMsIFNMSUNFX05VTV9ISUdIKTtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jLTM5Ny19XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jPTYyNT1zdGF0aWMgdm9pZCBfX2luaXQgcmlzY3ZfcmVzb2x2ZV9pc2EodW5zaWduZWQgbG9uZyAqc291cmNlX2lzYSxcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMtNjQwLVx0XHR9XG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmM6NjQxOlx0XHRiaXRtYXBfY29weShwcmV2X3Jlc29sdmVkX2lzYSwgcmVzb2x2ZWRfaXNhLCBSSVNDVl9JU0FfRVhUX01BWCk7XG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMtNjQyLVx0XHRmb3JfZWFjaF9zZXRfYml0KGJpdCwgc291cmNlX2lzYSwgUklTQ1ZfSVNBX0VYVF9NQVgpIHtcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmM9ODMxPXN0YXRpYyB2b2lkIF9faW5pdCByaXNjdl9maWxsX2h3Y2FwX2Zyb21faXNhX3N0cmluZyh1bnNpZ25lZCBsb25nICppc2EyaHdjYXApXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTkxNC1cdFx0aWYgKGJpdG1hcF9lbXB0eShyaXNjdl9pc2EsIFJJU0NWX0lTQV9FWFRfTUFYKSlcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYzo5MTU6XHRcdFx0Yml0bWFwX2NvcHkocmlzY3ZfaXNhLCBpc2FpbmZvLVx1MDAzZWlzYSwgUklTQ1ZfSVNBX0VYVF9NQVgpO1xuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTkxNi1cdFx0ZWxzZVxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYz05NTc9c3RhdGljIHZvaWQgX19pbml0IHJpc2N2X2ZpbGxfdmVuZG9yX2V4dF9saXN0KGludCBjcHUpXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTk2NS1cdFx0aWYgKCFleHRfbGlzdC1cdTAwM2Vpc19pbml0aWFsaXplZCkge1xuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jOjk2NjpcdFx0XHRiaXRtYXBfY29weShleHRfbGlzdC1cdTAwM2VhbGxfaGFydHNfaXNhX2JpdG1hcC5pc2EsXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMtOTY3LVx0XHRcdFx0ICAgIGV4dF9saXN0LVx1MDAzZXBlcl9oYXJ0X2lzYV9iaXRtYXBbY3B1XS5pc2EsXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jPTEwMTk9c3RhdGljIGludCBfX2luaXQgcmlzY3ZfZmlsbF9od2NhcF9mcm9tX2V4dF9saXN0KHVuc2lnbmVkIGxvbmcgKmlzYTJod2NhcClcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTA2NS1cdFx0aWYgKGJpdG1hcF9lbXB0eShyaXNjdl9pc2EsIFJJU0NWX0lTQV9FWFRfTUFYKSlcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYzoxMDY2Olx0XHRcdGJpdG1hcF9jb3B5KHJpc2N2X2lzYSwgaXNhaW5mby1cdTAwM2Vpc2EsIFJJU0NWX0lTQV9FWFRfTUFYKTtcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYy0xMDY3LVx0XHRlbHNlXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz00NDk2PWludGVsX2dldF9ldmVudF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywgaW50IGlkeCxcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ1MTAtXHQgICAgICAgIFdBUk5fT05fT05DRSghKGMxLVx1MDAzZWZsYWdzIFx1MDAyNiBQRVJGX1g4Nl9FVkVOVF9EWU5BTUlDKSk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQ1MTE6XHRcdGJpdG1hcF9jb3B5KGMxLVx1MDAzZWlkeG1zaywgYzItXHUwMDNlaWR4bXNrLCBYODZfUE1DX0lEWF9NQVgpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00NTEyLVx0XHRjMS1cdTAwM2V3ZWlnaHQgPSBjMi1cdTAwM2V3ZWlnaHQ7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmg9NzI9c3RhdGljIGlubGluZSB2b2lkIGNvcHlfcGh5c19jcHVfcHJlc2VudF9tYXAodW5zaWduZWQgbG9uZyAqZHN0KVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgtNzMte1xuYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmg6NzQ6XHRiaXRtYXBfY29weShkc3QsIHBoeXNfY3B1X3ByZXNlbnRfbWFwLCBNQVhfTE9DQUxfQVBJQyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHNwZWMuaC03NS19XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTY0OT12b2lkIGt2bV9wbXVfaGFuZGxlX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjU1LVxuYXJjaC94ODYva3ZtL3BtdS5jOjY1NjpcdGJpdG1hcF9jb3B5KGJpdG1hcCwgcG11LVx1MDAzZXJlcHJvZ3JhbV9wbWksIFg4Nl9QTUNfSURYX01BWCk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNjU3LVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYz0xMTE5PXN0YXRpYyB2b2lkIGt2bV9wbXVfdHJpZ2dlcl9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTExMzItXHRpZiAoIWt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwocG11KSlcbmFyY2gveDg2L2t2bS9wbXUuYzoxMTMzOlx0XHRiaXRtYXBfY29weShiaXRtYXAsIGV2ZW50X3BtY3MsIFg4Nl9QTUNfSURYX01BWCk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTEzNC1cdGVsc2UgaWYgKCFiaXRtYXBfYW5kKGJpdG1hcCwgZXZlbnRfcG1jcyxcbi0tXG5kcml2ZXJzL2FuZHJvaWQvZGJpdG1hcC5oPTcwPWRiaXRtYXBfcmVwbGFjZShzdHJ1Y3QgZGJpdG1hcCAqZG1hcCwgdW5zaWduZWQgbG9uZyAqbmV3LCB1bnNpZ25lZCBpbnQgbmJpdHMpXG5kcml2ZXJzL2FuZHJvaWQvZGJpdG1hcC5oLTcxLXtcbmRyaXZlcnMvYW5kcm9pZC9kYml0bWFwLmg6NzI6XHRiaXRtYXBfY29weShuZXcsIGRtYXAtXHUwMDNlbWFwLCBtaW4oZG1hcC1cdTAwM2VuYml0cywgbmJpdHMpKTtcbmRyaXZlcnMvYW5kcm9pZC9kYml0bWFwLmgtNzMtXHRrZnJlZShkbWFwLVx1MDAzZW1hcCk7XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYtdjUuYz02MDg9c3RhdGljIGludCBjY3BfZmluZF9hbmRfYXNzaWduX2xzYl90b19xKHN0cnVjdCBjY3BfZGV2aWNlICpjY3AsXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYtdjUuYy02MzItXHRcdGlmIChxbHNiX3dndCA9PSBsc2JfY250KSB7XG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi12NS5jOjYzMzpcdFx0XHRiaXRtYXBfY29weShxbHNiLCBjbWRfcS1cdTAwM2Vsc2JtYXNrLCBNQVhfTFNCX0NOVCk7XG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi12NS5jLTYzNC1cbi0tXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi12NS5jPTY2NT1zdGF0aWMgaW50IGNjcF9hc3NpZ25fbHNicyhzdHJ1Y3QgY2NwX2RldmljZSAqY2NwKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LXY1LmMtNzA3LVx0ICovXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi12NS5jOjcwODpcdGJpdG1hcF9jb3B5KHFsc2IsIGxzYl9wdWIsIE1BWF9MU0JfQ05UKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LXY1LmMtNzA5LVxuLS1cbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgvb3R4X2NwdHBmX3Vjb2RlLmM9MTA1OD1zdGF0aWMgaW50IGVuZ19ncnBfdXBkYXRlX21hc2tzKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4L290eF9jcHRwZl91Y29kZS5jLTExMDEtXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4L290eF9jcHRwZl91Y29kZS5jOjExMDI6XHRcdGJpdG1hcF9jb3B5KGVuZ3MtXHUwMDNlYm1hcCwgdG1wX2JtYXAuYml0cywgZW5nX2dycC1cdTAwM2VnLVx1MDAzZWVuZ3NfbnVtKTtcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgvb3R4X2NwdHBmX3Vjb2RlLmMtMTEwMy1cdH1cbi0tXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4L290eF9jcHRwZl91Y29kZS5jLTExMTktXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4L290eF9jcHRwZl91Y29kZS5jOjExMjA6XHRcdGJpdG1hcF9jb3B5KHRtcF9ibWFwLmJpdHMsIG1pcnJvcmVkX2VuZ3MtXHUwMDNlYm1hcCxcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgvb3R4X2NwdHBmX3Vjb2RlLmMtMTEyMS1cdFx0XHQgICAgZW5nX2dycC1cdTAwM2VnLVx1MDAzZWVuZ3NfbnVtKTtcbi0tXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmM9ODU1PXN0YXRpYyBpbnQgZW5nX2dycF91cGRhdGVfbWFza3Moc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgyL290eDJfY3B0cGZfdWNvZGUuYy05MDItXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmM6OTAzOlx0XHRiaXRtYXBfY29weShlbmdzLVx1MDAzZWJtYXAsIHRtcF9ibWFwLmJpdHMsIGVuZ19ncnAtXHUwMDNlZy1cdTAwM2VlbmdzX251bSk7XG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmMtOTA0LVx0fVxuLS1cbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgyL290eDJfY3B0cGZfdWNvZGUuYy05MjAtXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmM6OTIxOlx0XHRiaXRtYXBfY29weSh0bXBfYm1hcC5iaXRzLCBtaXJyb3JlZF9lbmdzLVx1MDAzZWJtYXAsXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmMtOTIyLVx0XHRcdCAgICBlbmdfZ3JwLVx1MDAzZWctXHUwMDNlZW5nc19udW0pO1xuLS1cbmRyaXZlcnMvZG1hL2lkeGQvZGV2aWNlLmM9Mzc5PXN0YXRpYyB2b2lkIGlkeGRfd3FfZGlzYWJsZV9jbGVhbnVwKHN0cnVjdCBpZHhkX3dxICp3cSlcbi0tXG5kcml2ZXJzL2RtYS9pZHhkL2RldmljZS5jLTM5NC1cdGlmICh3cS1cdTAwM2VvcGNhcF9ibWFwKVxuZHJpdmVycy9kbWEvaWR4ZC9kZXZpY2UuYzozOTU6XHRcdGJpdG1hcF9jb3B5KHdxLVx1MDAzZW9wY2FwX2JtYXAsIGlkeGQtXHUwMDNlb3BjYXBfYm1hcCwgSURYRF9NQVhfT1BDQVBfQklUUyk7XG5kcml2ZXJzL2RtYS9pZHhkL2RldmljZS5jLTM5Ni19XG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmM9MTczPXN0YXRpYyBpbnQgaWR4ZF9zZXR1cF93cXMoc3RydWN0IGlkeGRfZGV2aWNlICppZHhkKVxuLS1cbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jLTIzMy1cdFx0XHR9XG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYzoyMzQ6XHRcdFx0Yml0bWFwX2NvcHkod3EtXHUwMDNlb3BjYXBfYm1hcCwgaWR4ZC1cdTAwM2VvcGNhcF9ibWFwLCBJRFhEX01BWF9PUENBUF9CSVRTKTtcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jLTIzNS1cdFx0fVxuLS1cbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jPTgyMT1zdGF0aWMgaW50IGlkeGRfZGV2aWNlX2NvbmZpZ19zYXZlKHN0cnVjdCBpZHhkX2RldmljZSAqaWR4ZCxcbi0tXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy04OTItXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYzo4OTM6XHRiaXRtYXBfY29weShzYXZlZF93cV9lbmFibGVfbWFwLCBpZHhkLVx1MDAzZXdxX2VuYWJsZV9tYXAsIGlkeGQtXHUwMDNlbWF4X3dxcyk7XG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy04OTQtXG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmM9OTQyPXN0YXRpYyB2b2lkIGlkeGRfZGV2aWNlX2NvbmZpZ19yZXN0b3JlKHN0cnVjdCBpZHhkX2RldmljZSAqaWR4ZCxcbi0tXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy05ODAtXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYzo5ODE6XHRiaXRtYXBfY29weShpZHhkLVx1MDAzZXdxX2VuYWJsZV9tYXAsIGlkeGRfc2F2ZWQtXHUwMDNlc2F2ZWRfd3FfZW5hYmxlX21hcCxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jLTk4Mi1cdFx0ICAgIGlkeGQtXHUwMDNlbWF4X3dxcyk7XG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9zeXNmcy5jPTEyNTE9c3RhdGljIHNzaXplX3Qgd3Ffb3BfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9zeXNmcy5jLTEyNzMtXG5kcml2ZXJzL2RtYS9pZHhkL3N5c2ZzLmM6MTI3NDpcdGJpdG1hcF9jb3B5KHdxLVx1MDAzZW9wY2FwX2JtYXAsIG9wbWFzaywgSURYRF9NQVhfT1BDQVBfQklUUyk7XG5kcml2ZXJzL2RtYS9pZHhkL3N5c2ZzLmMtMTI3NS1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1samNhLmM9MjMwPXN0YXRpYyBpbnQgbGpjYV9ncGlvX2luaXRfdmFsaWRfbWFzayhzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLFxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWxqY2EuYy0yMzYtXHRXQVJOX09OX09OQ0UobmdwaW9zICE9IGxqY2FfZ3Bpby1cdTAwM2VncGlvX2luZm8tXHUwMDNlbnVtKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLWxqY2EuYzoyMzc6XHRiaXRtYXBfY29weSh2YWxpZF9tYXNrLCBsamNhX2dwaW8tXHUwMDNlZ3Bpb19pbmZvLVx1MDAzZXZhbGlkX3Bpbl9tYXAsIG5ncGlvcyk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1samNhLmMtMjM4LVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWx0YzQyODMuYz0xNjA9c3RhdGljIGludCBsdGM0MjgzX2luaXRfdmFsaWRfbWFzayhzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgbG9uZyAqdmFsaWRfbWFzayxcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1sdGM0MjgzLmMtMTY0LVxuZHJpdmVycy9ncGlvL2dwaW8tbHRjNDI4My5jOjE2NTpcdGJpdG1hcF9jb3B5KHZhbGlkX21hc2ssIG1hc2ssIG5ncGlvcyk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1sdGM0MjgzLmMtMTY2LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jPTk1MD1zdGF0aWMgYm9vbCBwY2E5NTN4X2lycV9wZW5kaW5nKHN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGxvbmcgKnBlbmRpbmcpXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jLTk4OC1cbmRyaXZlcnMvZ3Bpby9ncGlvLXBjYTk1M3guYzo5ODk6XHRiaXRtYXBfY29weShvbGRfc3RhdCwgY2hpcC1cdTAwM2VpcnFfc3RhdCwgZ2MtXHUwMDNlbmdwaW8pO1xuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jLTk5MC1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTN4LmMtOTk0LVxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jOjk5NTpcdGJpdG1hcF9jb3B5KGNoaXAtXHUwMDNlaXJxX3N0YXQsIG5ld19zdGF0LCBnYy1cdTAwM2VuZ3Bpbyk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTN4LmMtOTk2LVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXJlZ21hcC5jPTI5MT1zdHJ1Y3QgZ3Bpb19yZWdtYXAgKmdwaW9fcmVnbWFwX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBncGlvX3JlZ21hcF9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1yZWdtYXAuYy0zNjMtXHRcdH1cbmRyaXZlcnMvZ3Bpby9ncGlvLXJlZ21hcC5jOjM2NDpcdFx0Yml0bWFwX2NvcHkoZ3Bpby1cdTAwM2VmaXhlZF9kaXJlY3Rpb25fbWFzayxcbmRyaXZlcnMvZ3Bpby9ncGlvLXJlZ21hcC5jLTM2NS1cdFx0XHQgICAgY29uZmlnLVx1MDAzZWZpeGVkX2RpcmVjdGlvbl9tYXNrLCBjaGlwLVx1MDAzZW5ncGlvKTtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1yZWdtYXAuYy0zNzQtXHRcdH1cbmRyaXZlcnMvZ3Bpby9ncGlvLXJlZ21hcC5jOjM3NTpcdFx0Yml0bWFwX2NvcHkoZ3Bpby1cdTAwM2VmaXhlZF9kaXJlY3Rpb25fb3V0cHV0LFxuZHJpdmVycy9ncGlvL2dwaW8tcmVnbWFwLmMtMzc2LVx0XHRcdCAgICBjb25maWctXHUwMDNlZml4ZWRfZGlyZWN0aW9uX291dHB1dCwgY2hpcC1cdTAwM2VuZ3Bpbyk7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8teGlsaW54LmM9MTc4PXN0YXRpYyBpbnQgeGdwaW9fc2V0X211bHRpcGxlKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBsb25nICptYXNrLFxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jLTE5NS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jOjE5NjpcdGJpdG1hcF9jb3B5KGNoaXAtXHUwMDNlc3RhdGUsIHN0YXRlLCA2NCk7XG5kcml2ZXJzL2dwaW8vZ3Bpby14aWxpbnguYy0xOTctXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8teGlsaW54LmM9NDc3PXN0YXRpYyB2b2lkIHhncGlvX2lycWhhbmRsZXIoc3RydWN0IGlycV9kZXNjICpkZXNjKVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jLTUwNS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jOjUwNjpcdGJpdG1hcF9jb3B5KGNoaXAtXHUwMDNlbGFzdF9pcnFfcmVhZCwgaHcsIDY0KTtcbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jLTUwNy1cdGJpdG1hcF9vcihodywgcmlzaW5nLCBmYWxsaW5nLCA2NCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jPTMyNT1zdm1fcmFuZ2UgKnN2bV9yYW5nZV9uZXcoc3RydWN0IHN2bV9yYW5nZV9saXN0ICpzdm1zLCB1aW50NjRfdCBzdGFydCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU5LVx0aWYgKHAtXHUwMDNleG5hY2tfZW5hYmxlZClcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNjA6XHRcdGJpdG1hcF9jb3B5KHByYW5nZS1cdTAwM2ViaXRtYXBfYWNjZXNzLCBzdm1zLVx1MDAzZWJpdG1hcF9zdXBwb3J0ZWQsXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzYxLVx0XHRcdCAgICBNQVhfR1BVX0lOU1RBTkNFKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9MTA0Nz1zdm1fcmFuZ2Vfc3BsaXRfYWRqdXN0KHN0cnVjdCBzdm1fcmFuZ2UgKm5ldywgc3RydWN0IHN2bV9yYW5nZSAqb2xkLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xMDc5LVx0bmV3LVx1MDAzZW1hcHBlZF90b19ncHUgPSBvbGQtXHUwMDNlbWFwcGVkX3RvX2dwdTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzoxMDgwOlx0Yml0bWFwX2NvcHkobmV3LVx1MDAzZWJpdG1hcF9hY2Nlc3MsIG9sZC1cdTAwM2ViaXRtYXBfYWNjZXNzLCBNQVhfR1BVX0lOU1RBTkNFKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzoxMDgxOlx0Yml0bWFwX2NvcHkobmV3LVx1MDAzZWJpdG1hcF9haXAsIG9sZC1cdTAwM2ViaXRtYXBfYWlwLCBNQVhfR1BVX0lOU1RBTkNFKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xMDgyLVx0YXRvbWljX3NldChcdTAwMjZuZXctXHUwMDNlcXVldWVfcmVmY291bnQsIGF0b21pY19yZWFkKFx1MDAyNm9sZC1cdTAwM2VxdWV1ZV9yZWZjb3VudCkpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0xNjc5PXN0YXRpYyBpbnQgc3ZtX3JhbmdlX3ZhbGlkYXRlX2FuZF9tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTE3MDEtXHR9IGVsc2UgaWYgKGN0eC1cdTAwM2Vwcm9jZXNzLVx1MDAzZXhuYWNrX2VuYWJsZWQpIHtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzoxNzAyOlx0XHRiaXRtYXBfY29weShjdHgtXHUwMDNlYml0bWFwLCBwcmFuZ2UtXHUwMDNlYml0bWFwX2FpcCwgTUFYX0dQVV9JTlNUQU5DRSk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMTcwMy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMTcyNy1cdFx0XHQgICAgcHJhbmdlLVx1MDAzZWZsYWdzIFx1MDAyNiBLRkRfSU9DVExfU1ZNX0ZMQUdfR1BVX0FMV0FZU19NQVBQRUQpXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MTcyODpcdFx0XHRcdGJpdG1hcF9jb3B5KGN0eC1cdTAwM2ViaXRtYXAsIHByYW5nZS1cdTAwM2ViaXRtYXBfYWNjZXNzLCBNQVhfR1BVX0lOU1RBTkNFKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xNzI5LVx0XHR9XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jPTIwOTE9c3RhdGljIHN0cnVjdCBzdm1fcmFuZ2UgKnN2bV9yYW5nZV9jbG9uZShzdHJ1Y3Qgc3ZtX3JhbmdlICpvbGQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTIxMTYtXHRuZXctXHUwMDNldnJhbV9wYWdlcyA9IG9sZC1cdTAwM2V2cmFtX3BhZ2VzO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jOjIxMTc6XHRiaXRtYXBfY29weShuZXctXHUwMDNlYml0bWFwX2FjY2Vzcywgb2xkLVx1MDAzZWJpdG1hcF9hY2Nlc3MsIE1BWF9HUFVfSU5TVEFOQ0UpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jOjIxMTg6XHRiaXRtYXBfY29weShuZXctXHUwMDNlYml0bWFwX2FpcCwgb2xkLVx1MDAzZWJpdG1hcF9haXAsIE1BWF9HUFVfSU5TVEFOQ0UpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTIxMTktXHRhdG9taWNfc2V0KFx1MDAyNm5ldy1cdTAwM2VxdWV1ZV9yZWZjb3VudCwgYXRvbWljX3JlYWQoXHUwMDI2b2xkLVx1MDAzZXF1ZXVlX3JlZmNvdW50KSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jPTM1MTU9c3ZtX3JhbmdlX2Jlc3RfcHJlZmV0Y2hfbG9jYXRpb24oc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zNTQxLVx0aWYgKHAtXHUwMDNleG5hY2tfZW5hYmxlZClcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNTQyOlx0XHRiaXRtYXBfY29weShiaXRtYXAsIHByYW5nZS1cdTAwM2ViaXRtYXBfYWlwLCBNQVhfR1BVX0lOU1RBTkNFKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zNTQzLVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0zODQ3PXN2bV9yYW5nZV9nZXRfYXR0cihzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zOTI3LVx0XHRpZiAocC1cdTAwM2V4bmFja19lbmFibGVkKVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jOjM5Mjg6XHRcdFx0Yml0bWFwX2NvcHkoYml0bWFwX2FjY2Vzcywgc3Ztcy1cdTAwM2ViaXRtYXBfc3VwcG9ydGVkLFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM5MjktXHRcdFx0XHQgICAgTUFYX0dQVV9JTlNUQU5DRSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM5MzQtXHR9XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MzkzNTpcdGJpdG1hcF9jb3B5KGJpdG1hcF9hY2Nlc3MsIHN2bXMtXHUwMDNlYml0bWFwX3N1cHBvcnRlZCwgTUFYX0dQVV9JTlNUQU5DRSk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MzkzNjpcdGJpdG1hcF9jb3B5KGJpdG1hcF9haXAsIHN2bXMtXHUwMDNlYml0bWFwX3N1cHBvcnRlZCwgTUFYX0dQVV9JTlNUQU5DRSk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzkzNy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL3BtL3N3c211L2luYy9hbWRncHVfc211Lmg9MjA4NT1zdGF0aWMgaW5saW5lIHZvaWQgc211X2ZlYXR1cmVfYml0c19jb3B5KHN0cnVjdCBzbXVfZmVhdHVyZV9iaXRzICpkc3QsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9zd3NtdS9pbmMvYW1kZ3B1X3NtdS5oLTIwODgte1xuZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9zd3NtdS9pbmMvYW1kZ3B1X3NtdS5oOjIwODk6XHRiaXRtYXBfY29weShkc3QtXHUwMDNlYml0cywgc3JjLCBuYml0cyk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL3BtL3N3c211L2luYy9hbWRncHVfc211LmgtMjA5MC19XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmM9Njc2PWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0X2FzeW5jX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5jLTcwNS1cdGlmICghYml0bWFwX2VtcHR5KHBvd2VyX2RvbWFpbnMtXHUwMDNlYXN5bmNfcHV0X2RvbWFpbnNbMV0uYml0cywgUE9XRVJfRE9NQUlOX05VTSkpIHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5jOjcwNjpcdFx0Yml0bWFwX2NvcHkocG93ZXJfZG9tYWlucy1cdTAwM2Vhc3luY19wdXRfZG9tYWluc1swXS5iaXRzLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMtNzA3LVx0XHRcdCAgICBwb3dlcl9kb21haW5zLVx1MDAzZWFzeW5jX3B1dF9kb21haW5zWzFdLmJpdHMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9zbXAuYz0zNjA9c3RydWN0IG1kcDVfc21wICptZHA1X3NtcF9pbml0KHN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMsIGNvbnN0IHN0cnVjdCBtZHA1X3NtcF9ibG9jayAqY2ZnKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfc21wLmMtMzc4LVx0Lyogc3RhdGljYWxseSB0aWVkIE1NQnMgY2Fubm90IGJlIHJlLWFsbG9jYXRlZDogKi9cbmRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfc21wLmM6Mzc5Olx0Yml0bWFwX2NvcHkoc3RhdGUtXHUwMDNlc3RhdGUsIGNmZy1cdTAwM2VyZXNlcnZlZF9zdGF0ZSwgc21wLVx1MDAzZWJsa19jbnQpO1xuZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9zbXAuYy0zODAtXHRtZW1jcHkoc21wLVx1MDAzZXJlc2VydmVkLCBjZmctXHUwMDNlcmVzZXJ2ZWQsIHNpemVvZihzbXAtXHUwMDNlcmVzZXJ2ZWQpKTtcbi0tXG5kcml2ZXJzL2h3bW9uL3BlY2kvZGltbXRlbXAuYz0yMTM9c3RhdGljIGludCBjaGVja19wb3B1bGF0ZWRfZGltbXMoc3RydWN0IHBlY2lfZGltbXRlbXAgKnByaXYpXG4tLVxuZHJpdmVycy9od21vbi9wZWNpL2RpbW10ZW1wLmMtMjgyLVxuZHJpdmVycy9od21vbi9wZWNpL2RpbW10ZW1wLmM6MjgzOlx0Yml0bWFwX2NvcHkocHJpdi1cdTAwM2VkaW1tX21hc2ssIGRpbW1fbWFzaywgRElNTV9OVU1TX01BWCk7XG5kcml2ZXJzL2h3bW9uL3BlY2kvZGltbXRlbXAuYy0yODQtXG4tLVxuZHJpdmVycy9paW8vYWRjL21heDEzNjMuYz0xNDUzPXN0YXRpYyBpbnQgbWF4MTM2M19hbGxvY19zY2FuX21hc2tzKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpXG4tLVxuZHJpdmVycy9paW8vYWRjL21heDEzNjMuYy0xNDY3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3QtXHUwMDNlY2hpcF9pbmZvLVx1MDAzZW51bV9tb2RlczsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL2lpby9hZGMvbWF4MTM2My5jOjE0Njg6XHRcdGJpdG1hcF9jb3B5KG1hc2tzICYjNDM7IEJJVFNfVE9fTE9OR1MoTUFYMTM2M19NQVhfQ0hBTk5FTFMpKmksXG5kcml2ZXJzL2lpby9hZGMvbWF4MTM2My5jLTE0NjktXHRcdFx0ICAgIG1heDEzNjNfbW9kZV90YWJsZVtzdC1cdTAwM2VjaGlwX2luZm8tXHUwMDNlbW9kZV9saXN0W2ldXVxuLS1cbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1idWZmZXIuYz01MTA9c3RhdGljIGludCBpaW9fc2Nhbl9tYXNrX3NldChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LFxuLS1cbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1idWZmZXIuYy01MjQtXHRcdHJldHVybiAtRU5PTUVNO1xuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jOjUyNTpcdGJpdG1hcF9jb3B5KHRyaWFsbWFzaywgYnVmZmVyLVx1MDAzZXNjYW5fbWFzaywgbWFza2xlbmd0aCk7XG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tYnVmZmVyLmMtNTI2LVx0c2V0X2JpdChiaXQsIHRyaWFsbWFzayk7XG4tLVxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jLTUzNi1cdH1cbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1idWZmZXIuYzo1Mzc6XHRiaXRtYXBfY29weShidWZmZXItXHUwMDNlc2Nhbl9tYXNrLCB0cmlhbG1hc2ssIG1hc2tsZW5ndGgpO1xuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jLTUzOC1cbi0tXG5kcml2ZXJzL2lpby9wcm94aW1pdHkvZDMzMjNhYS5jPTIyMj1zdGF0aWMgaW50IGQzMzIzYWFfd3JpdGVfc2V0dGluZ3Moc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldixcbi0tXG5kcml2ZXJzL2lpby9wcm94aW1pdHkvZDMzMjNhYS5jLTI3My1cbmRyaXZlcnMvaWlvL3Byb3hpbWl0eS9kMzMyM2FhLmM6Mjc0Olx0Yml0bWFwX2NvcHkod3JpdHRlbl9yZWdiaXRtYXAsIHJlZ2JpdG1hcCwgRDMzMjNBQV9SRUdfTlJfQklUUyk7XG5kcml2ZXJzL2lpby9wcm94aW1pdHkvZDMzMjNhYS5jLTI3NS1cbi0tXG5kcml2ZXJzL2lucHV0L2V2ZGV2LmM9ODg0PXN0YXRpYyBpbnQgZXZkZXZfaGFuZGxlX2dldF92YWwoc3RydWN0IGV2ZGV2X2NsaWVudCAqY2xpZW50LFxuLS1cbmRyaXZlcnMvaW5wdXQvZXZkZXYuYy04OTktXG5kcml2ZXJzL2lucHV0L2V2ZGV2LmM6OTAwOlx0Yml0bWFwX2NvcHkobWVtLCBiaXRzLCBtYXhiaXQpO1xuZHJpdmVycy9pbnB1dC9ldmRldi5jLTkwMS1cbi0tXG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYz00OD1zdGF0aWMgaXJxcmV0dXJuX3QgbXQ2Nzc5X2tleXBhZF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tdDY3Nzkta2V5cGFkLmMtODktXG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYzo5MDpcdGJpdG1hcF9jb3B5KGtleXBhZC1cdTAwM2VrZXltYXBfc3RhdGUsIG5ld19zdGF0ZSwgTVRLX0tQRF9OVU1fQklUUyk7XG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYy05MS1cbi0tXG5kcml2ZXJzL2lucHV0L3JtaTQvcm1pX2RyaXZlci5jPTM3Mj1zdGF0aWMgaW50IHJtaV9kcml2ZXJfc2V0X2lycV9iaXRzKHN0cnVjdCBybWlfZGV2aWNlICpybWlfZGV2LFxuLS1cbmRyaXZlcnMvaW5wdXQvcm1pNC9ybWlfZHJpdmVyLmMtMzkxLVxuZHJpdmVycy9pbnB1dC9ybWk0L3JtaV9kcml2ZXIuYzozOTI6XHRiaXRtYXBfY29weShkYXRhLVx1MDAzZWN1cnJlbnRfaXJxX21hc2ssIGRhdGEtXHUwMDNlbmV3X2lycV9tYXNrLCBkYXRhLVx1MDAzZWlycV9jb3VudCk7XG5kcml2ZXJzL2lucHV0L3JtaTQvcm1pX2RyaXZlci5jLTM5My1cdGJpdG1hcF9vcihkYXRhLVx1MDAzZWZuX2lycV9iaXRzLCBkYXRhLVx1MDAzZWZuX2lycV9iaXRzLCBtYXNrLCBkYXRhLVx1MDAzZWlycV9jb3VudCk7XG4tLVxuZHJpdmVycy9pbnB1dC9ybWk0L3JtaV9kcml2ZXIuYz00MDA9c3RhdGljIGludCBybWlfZHJpdmVyX2NsZWFyX2lycV9iaXRzKHN0cnVjdCBybWlfZGV2aWNlICpybWlfZGV2LFxuLS1cbmRyaXZlcnMvaW5wdXQvcm1pNC9ybWlfZHJpdmVyLmMtNDIxLVxuZHJpdmVycy9pbnB1dC9ybWk0L3JtaV9kcml2ZXIuYzo0MjI6XHRiaXRtYXBfY29weShkYXRhLVx1MDAzZWN1cnJlbnRfaXJxX21hc2ssIGRhdGEtXHUwMDNlbmV3X2lycV9tYXNrLCBkYXRhLVx1MDAzZWlycV9jb3VudCk7XG5kcml2ZXJzL2lucHV0L3JtaTQvcm1pX2RyaXZlci5jLTQyMy1cbi0tXG5kcml2ZXJzL2lycWNoaXAvaXJxLW1pcHMtZ2ljLmM9ODQzPXN0YXRpYyBpbnQgZ2ljX3JlZ2lzdGVyX2lwaV9kb21haW4oc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuLS1cbmRyaXZlcnMvaXJxY2hpcC9pcnEtbWlwcy1naWMuYy04NzAtXG5kcml2ZXJzL2lycWNoaXAvaXJxLW1pcHMtZ2ljLmM6ODcxOlx0Yml0bWFwX2NvcHkoaXBpX2F2YWlsYWJsZSwgaXBpX3Jlc3J2LCBHSUNfTUFYX0lOVFJTKTtcbmRyaXZlcnMvaXJxY2hpcC9pcnEtbWlwcy1naWMuYy04NzItXG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYz01ODU9c3RhdGljIGJvb2wgYmxvY2tfYml0bWFwX29wKHN0cnVjdCBkbV9pbnRlZ3JpdHlfYyAqaWMsIHN0cnVjdCBwYWdlX2xpc3QgKmJpdG1hcCxcbi0tXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jLTY5MC1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6NjkxOnN0YXRpYyB2b2lkIGJsb2NrX2JpdG1hcF9jb3B5KHN0cnVjdCBkbV9pbnRlZ3JpdHlfYyAqaWMsIHN0cnVjdCBwYWdlX2xpc3QgKmRzdCwgc3RydWN0IHBhZ2VfbGlzdCAqc3JjKVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy02OTIte1xuLS1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM9Mzc4Mz1zdGF0aWMgdm9pZCBkbV9pbnRlZ3JpdHlfcmVzdW1lKHN0cnVjdCBkbV90YXJnZXQgKnRpKVxuLS1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtMzgzMC1cdFx0XHQgICAgIWljLVx1MDAzZXJlc2V0X3JlY2FsY3VsYXRlX2ZsYWcpIHtcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6MzgzMTpcdFx0XHRcdGJsb2NrX2JpdG1hcF9jb3B5KGljLCBpYy1cdTAwM2VyZWNhbGNfYml0bWFwLCBpYy1cdTAwM2Vqb3VybmFsKTtcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6MzgzMjpcdFx0XHRcdGJsb2NrX2JpdG1hcF9jb3B5KGljLCBpYy1cdTAwM2VtYXlfd3JpdGVfYml0bWFwLCBpYy1cdTAwM2Vqb3VybmFsKTtcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtMzgzMy1cdFx0XHRcdGlmICghYmxvY2tfYml0bWFwX29wKGljLCBpYy1cdTAwM2Vqb3VybmFsLCAwLCBpYy1cdTAwM2Vwcm92aWRlZF9kYXRhX3NlY3RvcnMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS5oLTI1MS0jZGVmaW5lIFhHQkVfTE1fQ09QWShfZHN0LCBfZG5hbWUsIF9zcmMsIF9zbmFtZSlcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLmg6MjUyOlx0Yml0bWFwX2NvcHkoKF9kc3QpLVx1MDAzZWxpbmtfbW9kZXMuX2RuYW1lLFx0XHRcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS5oLTI1My1cdFx0ICAgIChfc3JjKS1cdTAwM2VsaW5rX21vZGVzLl9zbmFtZSxcdFx0XFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuYz0zNDI1PXN0YXRpYyBzc2l6ZV90IGJsb2NrZWRfZmxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTM0NDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuYzozNDQyOlx0Yml0bWFwX2NvcHkoYWRhcC1cdTAwM2VzZ2UuYmxvY2tlZF9mbCwgdCwgYWRhcC1cdTAwM2VzZ2UuZWdyX3N6KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTM0NDMtXHRiaXRtYXBfZnJlZSh0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTE3MzI9c3RhdGljIGludCBoY2xnZV92cG9ydF9zZXR1cChzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0LCB1MTYgbnVtX3RxcHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0xNzM5LVx0bmljLVx1MDAzZWFlX2FsZ28gPSBcdTAwMjZhZV9hbGdvO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzoxNzQwOlx0Yml0bWFwX2NvcHkobmljLVx1MDAzZW51bWFfbm9kZV9tYXNrLmJpdHMsIGhkZXYtXHUwMDNlbnVtYV9ub2RlX21hc2suYml0cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMTc0MS1cdFx0ICAgIE1BWF9OVU1OT0RFUyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz0yNDE0PXN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9yb2NlX2Jhc2VfaW5mbyhzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMjQzMi1cdHJvY2UtXHUwMDNlYWVfYWxnbyA9IG5pYy1cdTAwM2VhZV9hbGdvO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzoyNDMzOlx0Yml0bWFwX2NvcHkocm9jZS1cdTAwM2VudW1hX25vZGVfbWFzay5iaXRzLCBuaWMtXHUwMDNlbnVtYV9ub2RlX21hc2suYml0cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMjQzNC1cdFx0ICAgIE1BWF9OVU1OT0RFUyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jPTQ0Nz1zdGF0aWMgaW50IGhjbGdldmZfc2V0X2hhbmRsZV9pbmZvKHN0cnVjdCBoY2xnZXZmX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtNDUzLVx0bmljLVx1MDAzZXBkZXYgPSBoZGV2LVx1MDAzZXBkZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM6NDU0Olx0Yml0bWFwX2NvcHkobmljLVx1MDAzZW51bWFfbm9kZV9tYXNrLmJpdHMsIGhkZXYtXHUwMDNlbnVtYV9ub2RlX21hc2suYml0cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy00NTUtXHRcdCAgICBNQVhfTlVNTk9ERVMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYz0yMTQ0PXN0YXRpYyBpbnQgaGNsZ2V2Zl9pbml0X3JvY2VfYmFzZV9pbmZvKHN0cnVjdCBoY2xnZXZmX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtMjE2Mi1cdHJvY2UtXHUwMDNlYWVfYWxnbyA9IG5pYy1cdTAwM2VhZV9hbGdvO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jOjIxNjM6XHRiaXRtYXBfY29weShyb2NlLVx1MDAzZW51bWFfbm9kZV9tYXNrLmJpdHMsIG5pYy1cdTAwM2VudW1hX25vZGVfbWFzay5iaXRzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTIxNjQtXHRcdCAgICBNQVhfTlVNTk9ERVMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYz0zODU9aGluaWMzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYy0zOTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmM6Mzk5Olx0Yml0bWFwX2NvcHkobGlua19zZXR0aW5ncy1cdTAwM2VsaW5rX21vZGVzLnN1cHBvcnRlZCwgc2V0dGluZ3Muc3VwcG9ydGVkLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jLTQwMC1cdFx0ICAgIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmM6NDAxOlx0Yml0bWFwX2NvcHkobGlua19zZXR0aW5ncy1cdTAwM2VsaW5rX21vZGVzLmFkdmVydGlzaW5nLCBzZXR0aW5ncy5hZHZlcnRpc2luZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYy00MDItXHRcdCAgICBfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmM9NTIzOD1zdGF0aWMgaW50IGk0MGVfc2V0X3ByaXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMtNTI1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmM6NTI1MTpcdGJpdG1hcF9jb3B5KG9yaWdfZmxhZ3MsIHBmLVx1MDAzZWZsYWdzLCBJNDBFX1BGX0ZMQUdTX05CSVRTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmM6NTI1MjpcdGJpdG1hcF9jb3B5KG5ld19mbGFncywgcGYtXHUwMDNlZmxhZ3MsIEk0MEVfUEZfRkxBR1NfTkJJVFMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYy01MjUzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMtNTQ2MC1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYzo1NDYxOlx0Yml0bWFwX2NvcHkocGYtXHUwMDNlZmxhZ3MsIG5ld19mbGFncywgSTQwRV9QRl9GTEFHU19OQklUUyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jLTU0NjItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmM9MTczOT1zdGF0aWMgaW50IGljZV9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMtMTc1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jOjE3NTY6XHRiaXRtYXBfY29weShvcmlnX2ZsYWdzLCBwZi1cdTAwM2VmbGFncywgSUNFX1BGX0ZMQUdTX05CSVRTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jLTE3NTctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJQ0VfUFJJVl9GTEFHX0FSUkFZX1NJWkU7IGkmIzQzOyYjNDM7KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zY2hlZC5jPTI2MTc9aWNlX3NhdmVfYWdnX3RjX2JpdG1hcChzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIHUzMiBhZ2dfaWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zY2hlZC5jLTI2MjQtXHRcdHJldHVybiAtRUlOVkFMO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zY2hlZC5jOjI2MjU6XHRiaXRtYXBfY29weShhZ2dfaW5mby1cdTAwM2VyZXBsYXlfdGNfYml0bWFwLCB0Y19iaXRtYXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmMtMjYyNi1cdFx0ICAgIElDRV9NQVhfVFJBRkZJQ19DTEFTUyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zY2hlZC5jPTI4NjE9aWNlX3NhdmVfYWdnX3ZzaV90Y19iaXRtYXAoc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCB1MzIgYWdnX2lkLCB1MTYgdnNpX2hhbmRsZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmMtMjg3My1cdFx0cmV0dXJuIC1FSU5WQUw7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmM6Mjg3NDpcdGJpdG1hcF9jb3B5KGFnZ192c2lfaW5mby1cdTAwM2VyZXBsYXlfdGNfYml0bWFwLCB0Y19iaXRtYXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmMtMjg3NS1cdFx0ICAgIElDRV9NQVhfVFJBRkZJQ19DTEFTUyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYz0yMjgxPXN0YXRpYyB2b2lkIGljZV9nZXRfcmVjcF90b19wcm9mX21hcChzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jLTIyOTQtXHRcdGJpdG1hcF9mcm9tX2FycjY0KHJfYml0bWFwLCBcdTAwMjZyZWNwX2Fzc29jLCBJQ0VfTUFYX05VTV9SRUNJUEVTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmM6MjI5NTpcdFx0Yml0bWFwX2NvcHkocHJvZmlsZV90b19yZWNpcGVbaV0sIHJfYml0bWFwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYy0yMjk2LVx0XHRcdCAgICBJQ0VfTUFYX05VTV9SRUNJUEVTKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jPTIzMTU9aWNlX2dldF9yZWNwX2ZybV9mdyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9zd19yZWNpcGUgKnJlY3BzLCB1OCByaWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYy0yNDMyLVx0LyogQ29weSByZXN1bHQgaW5kZXhlcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYzoyNDMzOlx0Yml0bWFwX2NvcHkocmVjcHNbcmlkXS5yZXNfaWR4cywgcmVzdWx0X2JtLCBJQ0VfTUFYX0ZWX1dPUkRTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMtMjQzNC1cdGlmIChpc19hZGQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYz01MzA5PWljZV9hZGRfYWR2X3JlY2lwZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9hZHZfbGt1cF9lbGVtICpsa3Vwcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jLTU0MzctXHRcdC8qIFVwZGF0ZSBwcm9maWxlIHRvIHJlY2lwZSBiaXRtYXAgYXJyYXkgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmM6NTQzODpcdFx0Yml0bWFwX2NvcHkocHJvZmlsZV90b19yZWNpcGVbZnZpdC1cdTAwM2Vwcm9maWxlX2lkXSwgcl9iaXRtYXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jLTU0MzktXHRcdFx0ICAgIElDRV9NQVhfTlVNX1JFQ0lQRVMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L2NvcmVfYWNsX2ZsZXhfa2V5cy5jPTI1NT1zdGF0aWMgaW50IG1seHN3X2Fma19waWNrZXIoc3RydWN0IG1seHN3X2FmayAqbWx4c3dfYWZrLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L2NvcmVfYWNsX2ZsZXhfa2V5cy5jLTMwMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L2NvcmVfYWNsX2ZsZXhfa2V5cy5jOjMwMjpcdFx0Yml0bWFwX2NvcHkocGlja2VyW2Jsb2NrX2luZGV4XS5jaG9zZW5fZWxlbWVudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L2NvcmVfYWNsX2ZsZXhfa2V5cy5jLTMwMy1cdFx0XHQgICAgcGlja2VyW2Jsb2NrX2luZGV4XS5lbGVtZW50LCBNTFhTV19BRktfRUxFTUVOVF9NQVgpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X3ZsYW4uYz0xNjE9dm9pZCBzcGFyeDVfdXBkYXRlX2Z3ZChzdHJ1Y3Qgc3Bhcng1ICpzcGFyeDUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfdmxhbi5jLTE3My1cdFx0XHQvKiBBbGxvdyB0byBzZW5kIHRvIGFsbCBicmlkZ2VkIGJ1dCBzZWxmICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV92bGFuLmM6MTc0Olx0XHRcdGJpdG1hcF9jb3B5KHdvcmttYXNrLCBzcGFyeDUtXHUwMDNlYnJpZGdlX2Z3ZF9tYXNrLCBTUFg1X1BPUlRTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X3ZsYW4uYy0xNzUtXHRcdFx0Y2xlYXJfYml0KHBvcnQsIHdvcmttYXNrKTtcbi0tXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYz0zMTg9c3RhdGljIHZvaWQgaXB2bGFuX3NldF9tdWx0aWNhc3RfbWFjX2ZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTMzNy1cbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjMzODpcdFx0Yml0bWFwX2NvcHkoaXB2bGFuLVx1MDAzZW1hY19maWx0ZXJzLCBtY19maWx0ZXJzLFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtMzM5LVx0XHRcdCAgICBJUFZMQU5fTUFDX0ZJTFRFUl9TSVpFKTtcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9ODEwPXN0YXRpYyB2b2lkIG1hY3ZsYW5fY29tcHV0ZV9maWx0ZXIodW5zaWduZWQgbG9uZyAqbWNfZmlsdGVyLFxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy04MjktXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6ODMwOlx0XHRiaXRtYXBfY29weShtY19maWx0ZXIsIGZpbHRlciwgTUFDVkxBTl9NQ19GSUxURVJfU1opO1xuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTgzMS1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jPTUyNj1zdGF0aWMgaW50IGF0aDExa19wdWxsX3NlcnZpY2VfcmVhZHlfdGx2KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYy01NjItICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jOjU2MzpzdGF0aWMgdm9pZCBhdGgxMWtfd21pX3NlcnZpY2VfYml0bWFwX2NvcHkoc3RydWN0IGF0aDExa19wZGV2X3dtaSAqd21pLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYy01NjQtXHRcdFx0XHRcdCAgIGNvbnN0IHUzMiAqd21pX3N2Y19ibSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jPTU3Nj1zdGF0aWMgaW50IGF0aDExa193bWlfdGx2X3N2Y19yZHlfcGFyc2Uoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHRhZywgdTE2IGxlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jLTU5Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmM6NTk4Olx0XHRcdGF0aDExa193bWlfc2VydmljZV9iaXRtYXBfY29weSh3bWlfaGFuZGxlLCBwdHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYy01OTktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYz02NDY9c3RhdGljIGludCBhdGgxMmtfcHVsbF9zZXJ2aWNlX3JlYWR5X3RsdihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMtNjgyLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYzo2ODM6c3RhdGljIHZvaWQgYXRoMTJrX3dtaV9zZXJ2aWNlX2JpdG1hcF9jb3B5KHN0cnVjdCBhdGgxMmtfd21pX3BkZXYgKndtaSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMtNjg0LVx0XHRcdFx0XHQgICBjb25zdCB1MzIgKndtaV9zdmNfYm0pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYz02OTY9c3RhdGljIGludCBhdGgxMmtfd21pX3N2Y19yZHlfcGFyc2Uoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTE2IHRhZywgdTE2IGxlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jLTcxNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmM6NzE4Olx0XHRcdGF0aDEya193bWlfc2VydmljZV9iaXRtYXBfY29weSh3bWlfaGFuZGxlLCBwdHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYy03MTktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jaGFuLmM9NTkzPWVudW0gcnR3ODlfZW50aXR5X21vZGUgcnR3ODlfZW50aXR5X3JlY2FsYyhzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jaGFuLmMtNjA0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jaGFuLmM6NjA1Olx0Yml0bWFwX2NvcHkocmVjYWxjX21hcCwgaGFsLVx1MDAzZWVudGl0eV9tYXAsIE5VTV9PRl9SVFc4OV9DSEFOQ1RYKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY2hhbi5jLTYwNi1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2FsaWVud2FyZS13bWktd21heC5jPTExMTk9c3RhdGljIGludCBhd2NjX2h3bW9uX2ZhbnNfaW5pdChzdHJ1Y3Qgd21pX2RldmljZSAqd2Rldilcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2FsaWVud2FyZS13bWktd21heC5jLTExNzItXHRcdGJpdG1hcF9nYXRoZXIoZ2F0aGVyLCBmYW5fdGVtcHMsIHByaXYtXHUwMDNldGVtcF9zZW5zb3JzLCBBV0NDX0lEX0JJVE1BUF9TSVpFKTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmM6MTE3MzpcdFx0Yml0bWFwX2NvcHkoXHUwMDI2ZmFuX2RhdGEtXHUwMDNlYXV0b19jaGFubmVsc190ZW1wLCBnYXRoZXIsIEJJVFNfUEVSX0xPTkcpO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLXdtYXguYy0xMTc0LVx0XHRwcml2LVx1MDAzZWZhbl9kYXRhW2ldID0gZmFuX2RhdGE7XG4tLVxuZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYz00MTA9c3RhdGljIHZvaWQgX19pbml0IGlzYXBucF9wYXJzZV9pcnFfcmVzb3VyY2Uoc3RydWN0IHBucF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jLTQyMi1cdGJpdG1hcF96ZXJvKG1hcC5iaXRzLCBQTlBfSVJRX05SKTtcbmRyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmM6NDIzOlx0Yml0bWFwX2NvcHkobWFwLmJpdHMsIFx1MDAyNmJpdHMsIDE2KTtcbmRyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMtNDI0LVxuLS1cbmRyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYz0yNjI9c3RhdGljIF9faW5pdCB2b2lkIHBucGJpb3NfcGFyc2VfaXJxX29wdGlvbihzdHJ1Y3QgcG5wX2RldiAqZGV2LFxuLS1cbmRyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYy0yNzItXHRiaXRtYXBfemVybyhtYXAuYml0cywgUE5QX0lSUV9OUik7XG5kcml2ZXJzL3BucC9wbnBiaW9zL3JzcGFyc2VyLmM6MjczOlx0Yml0bWFwX2NvcHkobWFwLmJpdHMsIFx1MDAyNmJpdHMsIDE2KTtcbmRyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYy0yNzQtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTY3MT1zdGF0aWMgYm9vbCB2ZmlvX2FwX21kZXZfZmlsdGVyX2Nkb21zKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY3NC1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDczOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvZGU6IFVuZGVyc3RhbmRpbmcgYGJpdG1hcF9jb3B5YCoqCgpPa2F5LCBzbyBJIHNlZSBgYml0bWFwX2NvcHlgIGFuZCBpbW1lZGlhdGVseSByZWdpc3RlciB0aGF0IGl0JiMzOTtzIGxpa2VseSBhIG1hY3JvIG9yIGlubGluZSBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGtlcm5lbCBjb2RlLCB0aGF0JiMzOTtzIGFsbW9zdCBhIGNlcnRhaW50eS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpkb2VzKi4gVGltZSB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGlzIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uLCBhbG9uZyB3aXRoIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uIGFuZCwgb2YgY291cnNlLCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHRoYXQgSSYjMzk7bGwgbmVlZCB0byBhbmFseXplLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX2NvcHlcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk0OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFsaXppbmcgdGhlIE9idmlvdXMqKgoKSG9sZCBvbiBhIHNlY29uZC4uLiBkaWRuJiMzOTt0IEkganVzdCBzZWUgc29tZXRoaW5nIGFib3V0IGBiaXRtYXBfY29weWAgaW4gdGhlIG91dHB1dCBmcm9tIHRoZSBwcmV2aW91cyBzZWFyY2g/IEFoLCB5ZXMsIHRoZXJlIGl0IGlzIGluIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYDogc3BlY2lmaWNhbGx5IHRoZSBkZWZpbml0aW9uIG9mIGBiaXRtYXBfY29weV9hbmRfZXh0ZW5kYC4gT2theSwgSSB3YXMgdG9vIGhhc3R5LiBMZXQmIzM5O3Mgbm90IHJlaW52ZW50IHRoZSB3aGVlbCBoZXJlLiBMZXQmIzM5O3MgZ28gYmFjayBhbmQgZ3JlcCBzcGVjaWZpY2FsbHkgZm9yIHRoYXQgZnVuY3Rpb24gbmFtZSwgYGJpdG1hcF9jb3B5YCwgd2l0aGluIHRoYXQgc2FtZSBoZWFkZXIgZmlsZSwgYGluY2x1ZGUvbGludXgvYml0bWFwLmhgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhhdCBmdW5jdGlvbi4gSXQmIzM5O3MgcHJvYmFibHkgYWxyZWFkeSB0aGVyZSBhbmQgSSBqdXN0IG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGVyZSBpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Yml0bWFwX2NvcHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JpdG1hcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYml0bWFwLmg9MTc9c3RydWN0IGRldmljZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTQ0LSAqICBiaXRtYXBfZmlsbChkc3QsIG5iaXRzKSAgICAgICAgICAgICAgICAgICAgICpkc3QgPSB+MFVMXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjQ1OiAqICBiaXRtYXBfY29weShkc3QsIHNyYywgbmJpdHMpICAgICAgICAgICAgICAgICpkc3QgPSAqc3JjXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTQ2LSAqICBiaXRtYXBfYW5kKGRzdCwgc3JjMSwgc3JjMiwgbmJpdHMpICAgICAgICAgICpkc3QgPSAqc3JjMSBcdTAwMjYgKnNyYzJcbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oPTI1OD1zdGF0aWMgX19hbHdheXNfaW5saW5lXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI1OTp2b2lkIGJpdG1hcF9jb3B5KHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCB1bnNpZ25lZCBpbnQgbmJpdHMpXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI2MC17XG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD0yNzI9c3RhdGljIF9fYWx3YXlzX2lubGluZVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaDoyNzM6dm9pZCBiaXRtYXBfY29weV9jbGVhcl90YWlsKHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCB1bnNpZ25lZCBpbnQgbmJpdHMpXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI3NC17XG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI3NTpcdGJpdG1hcF9jb3B5KGRzdCwgc3JjLCBuYml0cyk7XG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI3Ni1cdGlmIChuYml0cyAlIEJJVFNfUEVSX0xPTkcpXG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNzktXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI4MDpzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX2NvcHlfYW5kX2V4dGVuZCh1bnNpZ25lZCBsb25nICp0byxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMjgxLVx0XHRcdFx0XHQgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yOTUtICogSW4gYm90aCBjYXNlcyBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgd2hlbiBjb3B5aW5nIGRhdGEgZnJvbS90byBhcnJheXMgb2ZcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6Mjk2OiAqIHUzMi4gQnV0IGluIExFNjQgY2FzZSwgdHlwZWNhc3QgaW4gYml0bWFwX2NvcHlfY2xlYXJfdGFpbCgpIG1heSBsZWFkXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI5Ny0gKiB0byBvdXQtb2YtYm91bmQgYWNjZXNzLiBUbyBhdm9pZCB0aGF0LCBib3RoIExFIGFuZCBCRSB2YXJpYW50cyBvZiA2NC1iaXRcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6Mjk4OiAqIGFyY2hpdGVjdHVyZXMgYXJlIG5vdCB1c2luZyBiaXRtYXBfY29weV9jbGVhcl90YWlsKCkuXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI5OS0gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oPTMwMz12b2lkIGJpdG1hcF90b19hcnIzMih1MzIgKmJ1ZiwgY29uc3QgdW5zaWduZWQgbG9uZyAqYml0bWFwLFxuLS1cbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMzA2LSNkZWZpbmUgYml0bWFwX2Zyb21fYXJyMzIoYml0bWFwLCBidWYsIG5iaXRzKVx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjMwNzpcdGJpdG1hcF9jb3B5X2NsZWFyX3RhaWwoKHVuc2lnbmVkIGxvbmcgKikgKGJpdG1hcCksXHRcXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0zMDgtXHRcdFx0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKikgKGJ1ZiksIChuYml0cykpXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTMwOS0jZGVmaW5lIGJpdG1hcF90b19hcnIzMihidWYsIGJpdG1hcCwgbmJpdHMpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6MzEwOlx0Yml0bWFwX2NvcHlfY2xlYXJfdGFpbCgodW5zaWduZWQgbG9uZyAqKSAoYnVmKSxcdFx0XFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMzExLVx0XHRcdChjb25zdCB1bnNpZ25lZCBsb25nICopIChiaXRtYXApLCAobmJpdHMpKVxuLS1cbmluY2x1ZGUvbGludXgvYml0bWFwLmg9MzIwPXZvaWQgYml0bWFwX3RvX2FycjY0KHU2NCAqYnVmLCBjb25zdCB1bnNpZ25lZCBsb25nICpiaXRtYXAsIHVuc2lnbmVkIGludCBuYml0cyk7XG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0zMjItI2RlZmluZSBiaXRtYXBfZnJvbV9hcnI2NChiaXRtYXAsIGJ1ZiwgbmJpdHMpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6MzIzOlx0Yml0bWFwX2NvcHlfY2xlYXJfdGFpbCgodW5zaWduZWQgbG9uZyAqKShiaXRtYXApLCAoY29uc3QgdW5zaWduZWQgbG9uZyAqKShidWYpLCAobmJpdHMpKVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0zMjQtI2RlZmluZSBiaXRtYXBfdG9fYXJyNjQoYnVmLCBiaXRtYXAsIG5iaXRzKVx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjMyNTpcdGJpdG1hcF9jb3B5X2NsZWFyX3RhaWwoKHVuc2lnbmVkIGxvbmcgKikoYnVmKSwgKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikoYml0bWFwKSwgKG5iaXRzKSlcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMzI2LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJpdG1hcF9jb3B5YCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0aG9yb3VnaGx5LCBlc3BlY2lhbGx5IGdpdmVuIG15IGJhY2tncm91bmQuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBpcyBpbXBsZW1lbnRlZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBjb2RlLCBjb25zaWRlciB0aGUgY29uc3RyYWludHMsIGFuZCB0aGUgZXhwZWN0ZWQgcGVyZm9ybWFuY2UuIEkgd2FudCB0byBpZGVudGlmeSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIGFuZCBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBhc3Nlc3MgaXRzIGVmZmljaWVuY3kgYW5kIG1ha2Ugc3VyZSBpdCBhbGlnbnMgd2l0aCBiZXN0IHByYWN0aWNlcyBmb3IgbXkgYXJlYSBvZiBleHBlcnRpc2UuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvc3NpYmxlIGVkZ2UgY2FzZXMgb3Igc2NlbmFyaW9zIHRoYXQgbWlnaHQgY2F1c2UgaXNzdWVzLiBJJiMzOTtsbCBzdGFydCBieSBtYWtpbmcgc3VyZSBpdCYjMzk7cyBjb3JyZWN0IGFuZCB0aGVuIG1vdmUgb24gdG8gb3B0aW1pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYml0bWFwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1ODpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbiAyNTk6XHR2b2lkIGJpdG1hcF9jb3B5KHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCB1bnNpZ25lZCBpbnQgbmJpdHMpXG4gMjYwOlx0e1xuIDI2MTpcdFx0dW5zaWduZWQgaW50IGxlbiA9IGJpdG1hcF9zaXplKG5iaXRzKTtcbiAyNjI6XHRcbiAyNjM6XHRcdGlmIChzbWFsbF9jb25zdF9uYml0cyhuYml0cykpXG4gMjY0Olx0XHRcdCpkc3QgPSAqc3JjO1xuIDI2NTpcdFx0ZWxzZVxuIDI2NjpcdFx0XHRtZW1jcHkoZHN0LCBzcmMsIGxlbik7XG4gMjY3Olx0fVxuIDI2ODpcdFxuIDI2OTpcdC8qXG4gMjcwOlx0ICogQ29weSBiaXRtYXAgYW5kIGNsZWFyIHRhaWwgYml0cyBpbiBsYXN0IHdvcmQuXG4gMjcxOlx0ICovXG4gMjcyOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxuIDI3MzpcdHZvaWQgYml0bWFwX2NvcHlfY2xlYXJfdGFpbCh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgdW5zaWduZWQgaW50IG5iaXRzKVxuIDI3NDpcdHtcbiAyNzU6XHRcdGJpdG1hcF9jb3B5KGRzdCwgc3JjLCBuYml0cyk7XG4gMjc2Olx0XHRpZiAobmJpdHMgJSBCSVRTX1BFUl9MT05HKVxuIDI3NzpcdFx0XHRkc3RbbmJpdHMgLyBCSVRTX1BFUl9MT05HXSBcdTAwMjY9IEJJVE1BUF9MQVNUX1dPUkRfTUFTSyhuYml0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjYwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGF0YSBDb3B5aW5nIExvZ2ljKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBiaXRtYXBfc2l6ZWAgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJpdHMgKGBuYml0c2ApIGFuZCBpcyB0aGVuIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IGB1bnNpZ25lZCBsb25nYCBlbGVtZW50cyBhcmUgaW4gdGhlIGJpdG1hcCwgdGFraW5nIGludG8gYWNjb3VudCB0aGVpciBzaXplLiBUaGUgYGJpdG1hcF9jb3B5YCBmdW5jdGlvbiwgdGhlcmVmb3JlLCB3b3JrcyBhdCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhvc2UgZnVsbCBgdW5zaWduZWQgbG9uZ2BzLgoKVGhpcyBpcyBpbW1lZGlhdGVseSByZWxldmFudCBiZWNhdXNlIEkgc2VlIGBJUF9UVU5ORUxfREVDTEFSRV9GTEFHU2AgaXMgZGVjbGFyaW5nIGFuIGFycmF5IG9mIGB1bnNpZ25lZCBsb25nYC4gSWYgdGhlIG1hY3JvIGp1c3QgZGVjbGFyZXMgdGhlIGFycmF5LCB0aGUgY29weSBvcGVyYXRpb24gdXNlcyBhIHNpemUgbGFyZ2UgZW5vdWdoIHRvIGNvcHkgdGhpcyBlbnRpcmUgYXJyYXkgdXNpbmcgYGJpdG1hcF9jb3B5YC4KCk5vdyB0aGUgaW50ZXJlc3RpbmcgcG9pbnQ6IFdoYXQgaWYgdGhlIGRlY2xhcmF0aW9uIHdpdGggYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpYCBpcyAqbm90KiBpbml0aWFsaXppbmcgdGhlIGFycmF5PyBUaGUgY29weSBpcyBmcm9tIGBwLSZndDtvX2ZsYWdzYCB0byBgb19mbGFnc2AsIGFuZCBpZiBgcC0mZ3Q7b19mbGFnc2AgaXMgKmFsc28qIGFuIGFycmF5IG9mIGB1bnNpZ25lZCBsb25nYCwgYW5kIHNpbmNlIHRoZSBgYml0bWFwX2NvcHlgIGlzIGNvbmZpZ3VyZWQgdG8gY29weSB0aGUgZW50aXJlIGFycmF5IGluIGEgYmxvY2sgdXNpbmcgYEJJVFNfVE9fTE9OR1MobmJpdHMpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpYCwgdGhlIGVudGlyZSBkZXN0aW5hdGlvbiBhcnJheSB3aWxsIGJlIHBvcHVsYXRlZCBpbiB0aGUgY29weS4KClRodXMsIHRoZSBjb3B5IG9wZXJhdGlvbiB3aXRoaW4gYGlwX3R1bm5lbF9mbGFnc19jb3B5YCBlbnN1cmVzIHRoYXQgYG9fZmxhZ3NgIHdpbGwgYmUgKmZ1bGx5KiBpbml0aWFsaXplZCBhcyBhIHNpZGUgZWZmZWN0IG9mIHRoZSBiaXR3aXNlIGNvcHkuIEZvbGxvd2luZyB0aGF0LCB3ZSBoYXZlIGBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhvX2ZsYWdzKWAuIFNvIHRoaXMgZXhwbGFpbnMgaG93IHRoZSBmbGFncyBhcmUgdGhlbiBjb252ZXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ3JlLmM9Mjc9c3RhdGljIGludCBtbHg1ZV9nZW5faXBfdHVubmVsX2hlYWRlcl9ncmV0YXAoY2hhciBidWZbXSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dyZS5jLTQ5LVx0aGRyX2xlblx0PSBtbHg1ZV90Y190dW5fY2FsY19obGVuX2dyZXRhcChlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ3JlLmM6NTA6XHRncmVoLVx1MDAzZWZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3ModHVuX2tleS1cdTAwM2V0dW5fZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9ncmUuYy01MS1cdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgdHVuX2tleS1cdTAwM2V0dW5fZmxhZ3MpKSB7XG4tLVxuaW5jbHVkZS9uZXQvZ3JlLmg9NjM9c3RhdGljIGlubGluZSB2b2lkIGdyZV9mbGFnc190b190bmxfZmxhZ3ModW5zaWduZWQgbG9uZyAqZHN0LCBfX2JlMTYgZmxhZ3MpXG4tLVxuaW5jbHVkZS9uZXQvZ3JlLmgtNzctXG5pbmNsdWRlL25ldC9ncmUuaDo3ODpzdGF0aWMgaW5saW5lIF9fYmUxNiBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhjb25zdCB1bnNpZ25lZCBsb25nICp0ZmxhZ3MpXG5pbmNsdWRlL25ldC9ncmUuaC03OS17XG4tLVxuaW5jbHVkZS9uZXQvZ3JlLmg9MTAwPXN0YXRpYyBpbmxpbmUgdm9pZCBncmVfYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfbGVuLFxuLS1cbmluY2x1ZGUvbmV0L2dyZS5oLTExMS1cdGdyZWggPSAoc3RydWN0IGdyZV9iYXNlX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuaW5jbHVkZS9uZXQvZ3JlLmg6MTEyOlx0Z3JlaC1cdTAwM2VmbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKGZsYWdzKTtcbmluY2x1ZGUvbmV0L2dyZS5oLTExMy1cdGdyZWgtXHUwMDNlcHJvdG9jb2wgPSBwcm90bztcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz04MjE9c3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtODU4LVxubmV0L2lwdjQvaXBfZ3JlLmM6ODU5Olx0aV9mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlaV9mbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYy04NjAtXHRpcF90dW5uZWxfZmxhZ3NfZnJvbV9iZTE2KHAtXHUwMDNlaV9mbGFncywgaV9mbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYzo4NjE6XHRvX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cdTAwM2VvX2ZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTg2Mi1cdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYocC1cdTAwM2VvX2ZsYWdzLCBvX2ZsYWdzKTtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz04OTQ9c3RhdGljIGludCBpcGdyZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy05MTAtXHRncmVoID0gKHN0cnVjdCBncmVfYmFzZV9oZHIgKikoaXBoJiM0MzsxKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjkxMTpcdGdyZWgtXHUwMDNlZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyh0LVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtOTEyLVx0Z3JlaC1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKHR5cGUpO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE1NjU9c3RhdGljIGludCBpcGdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTc3LVx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX0lGTEFHUyxcbm5ldC9pcHY0L2lwX2dyZS5jOjE1Nzg6XHRcdFx0IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlaV9mbGFncykpIHx8XG5uZXQvaXB2NC9pcF9ncmUuYy0xNTc5LVx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX09GTEFHUyxcbm5ldC9pcHY0L2lwX2dyZS5jOjE1ODA6XHRcdFx0IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKG9fZmxhZ3MpKSB8fFxubmV0L2lwdjQvaXBfZ3JlLmMtMTU4MS1cdCAgICBubGFfcHV0X2JlMzIoc2tiLCBJRkxBX0dSRV9JS0VZLCBwLVx1MDAzZWlfa2V5KSB8fFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xMjM1PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfcGFybV90b191c2VyKHN0cnVjdCBpcDZfdG5sX3Bhcm0yICp1LFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMjQ3LVx0dS1cdTAwM2VvX2tleSA9IHAtXHUwMDNlb19rZXk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTI0ODpcdHUtXHUwMDNlaV9mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlaV9mbGFncyk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTI0OTpcdHUtXHUwMDNlb19mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlb19mbGFncyk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTI1MC1cdG1lbWNweSh1LVx1MDAzZW5hbWUsIHAtXHUwMDNlbmFtZSwgc2l6ZW9mKHUtXHUwMDNlbmFtZSkpO1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMTE1PXN0YXRpYyBpbnQgaXA2Z3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMTQyLVx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX0lGTEFHUyxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMTQzOlx0XHRcdCBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVx1MDAzZWlfZmxhZ3MpKSB8fFxubmV0L2lwdjYvaXA2X2dyZS5jLTIxNDQtXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HUkVfT0ZMQUdTLFxubmV0L2lwdjYvaXA2X2dyZS5jOjIxNDU6XHRcdFx0IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKG9fZmxhZ3MpKSB8fFxubmV0L2lwdjYvaXA2X2dyZS5jLTIxNDYtXHQgICAgbmxhX3B1dF9iZTMyKHNrYiwgSUZMQV9HUkVfSUtFWSwgcC1cdTAwM2VpX2tleSkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3MzIKCQkJCQkJCW91dHB1dDogMjEwCgkJCQkJCQl0aG91Z2h0czogOTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBHUkUgVHVubmVsIEZsYWcgSGFuZGxpbmcgYW5kIENvbmN1cnJlbmN5IEZpeCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHJlZ2FyZGluZyBgZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3NgIGlzIGNvbmZpcm1lZDogaXQmIzM5O3MgYSBzaW1wbGUgYml0bWFwIGNvbnZlcnNpb24gdG8gYF9fYmUxNmAuIFRoZSBmdW5jdGlvbiBjaGVja3Mgc3BlY2lmaWMgYml0cywgc28gdGhlcmUmIzM5O3Mgbm8gd2F5IGZvciBpdCB0byBjYXVzZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsuIFRoaXMgY29uZmlybXMgdGhhdCBLTVNBTiBpc24mIzM5O3QgdGhlIHJpZ2h0IHRvb2wgaGVyZS4gVGhlIGNvcmUgcHJvYmxlbSBpcyBhIGNvbmN1cnJlbmN5IGlzc3VlIG9yIGEgbG9naWMgZXJyb3IgcmVsYXRlZCB0byB0aGUgdHVubmVsIHBhcmFtZXRlcnMsIHNwZWNpZmljYWxseSB0aGUgYG9fZmxhZ3NgIGZpZWxkIGluIGB0dW5uZWwtJmd0O3Bhcm1zYC4KClRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBpcyB0aGUgbW9kaWZpY2F0aW9uIG9mIGB0LSZndDtwYXJtcy5vX2ZsYWdzYCBlaXRoZXIgZHVyaW5nIHRyYW5zbWlzc2lvbiAoYGVyc3Bhbl94bWl0YCwgYGlwZ3JlX3htaXRgKSBvciBkdXJpbmcgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2ApLiBUaGlzIGlzIGluaGVyZW50bHkgZmxhd2VkIGJlY2F1c2UgYHQtJmd0O3Bhcm1zYCBob2xkcyB0aGUgKmNvbmZpZ3VyZWQqIHN0YXRlIG9mIHRoZSB0dW5uZWwuIElmIHdlJiMzOTtyZSBtb2RpZnlpbmcgaXQgZGlyZWN0bHkgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nIG9yIGR1bXAgb3BlcmF0aW9ucywgd2UmIzM5O3JlIGludHJvZHVjaW5nIGEgZGF0YSByYWNlLiBTdWJzZXF1ZW50IHBhY2tldHMgb3IgZHVtcHMgbWlnaHQgcmVhZCB0aGlzIG1vZGlmaWVkIChhbmQgcG90ZW50aWFsbHkgaW5jb25zaXN0ZW50KSBzdGF0ZSwgd2hpY2gsIHdoaWxlIGxlYWRpbmcgdG8gaW5jb3JyZWN0IGJlaGF2aW9yLCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gVGhlIHByb2JsZW0gaXMgYSBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYF9fZ3JlX3htaXRgIGNoYW5nZXMuIEFoLCB0aGUgb2xkIHZlcnNpb24gY29waWVkIGB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3NgIHRvIGBmbGFnc2AgYW5kIHBhc3NlZCB0aGF0IHRvIGBncmVfYnVpbGRfaGVhZGVyYC4gQnV0IGBpcGdyZV94bWl0YCBhbmQgYGVyc3Bhbl94bWl0YCB3ZXJlIG1vZGlmeWluZyB0aGUgb3JpZ2luYWwgYHR1bm5lbC0mZ3Q7cGFybXMub19mbGFnc2AgYmVmb3JlIGNhbGxpbmcgYF9fZ3JlX3htaXRgLiBUaGUgZml4IG5vdyBjb3BpZXMgYHR1bm5lbC0mZ3Q7cGFybXMub19mbGFnc2AgdG8gYSBsb2NhbCBgZmxhZ3NgIHZhcmlhYmxlICpiZWZvcmUqIG1vZGlmaWNhdGlvbiwgYW5kIHBhc3NlcyAqdGhhdCogdG8gYF9fZ3JlX3htaXRgLiBUaGlzIGlzIGEgcHJldHR5IHNvbGlkIGZpeC4gSXQgcHJldmVudHMgbW9kaWZpY2F0aW9uIG9mIHRoZSBzaGFyZWQgYHR1bm5lbC0mZ3Q7cGFybXMub19mbGFnc2AuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoYXQgYGZsYWdzYCBpcyBpbml0aWFsaXplZCBpbiBgaXBncmVfeG1pdGA6IGBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncylgIGRlY2xhcmVzIHRoZSBhcnJheSBhbmQgYGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpYCBkb2VzIHRoZSBjb3B5aW5nLiBBbmQgd2Uga25vdyB0aGF0IGBiaXRtYXBfY29weWAgZG9lcyB0aGUgcmlnaHQgdGhpbmcsIGNvcHlpbmcgdGhlIGZ1bGwgYXJyYXkuIFNvLCB0aGUgbG9jYWwgYGZsYWdzYCB2YXJpYWJsZSAqaXMqIGZ1bGx5IGluaXRpYWxpemVkLiBTYW1lIGdvZXMgZm9yIGBpcGdyZV9maWxsX2luZm9gIC0gaXQgZGVjbGFyZXMgYW5kIGluaXRpYWxpemVzIHRoZSBsb2NhbCBgb19mbGFnc2AgaW4gdGhlIHNhbWUgd2F5LgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSBhcmUgdGFsa2luZyBhYm91dCBhIGNvbmN1cnJlbmN5L2xvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgcmVhZC4gVGhlIGNvcnJlY3QgYXBwcm9hY2ggaGVyZSBpcyB0byB1c2UgS0FTQU4gKG9yIHN0YW5kYXJkIHRlc3RpbmcpIHRvIGNhdGNoIHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBLTVNBTiwgd2hpY2ggaXMgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaXMgbm90IG5lZWRlZC4gVGhpcyBpcyBhIGZpeCBmb3IgZGF0YSByYWNlcyBhbmQgbG9naWNhbCBlcnJvcnMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGJ1ZyB3aGVyZSBzaGFyZWQgdHVubmVsIHBhcmFtZXRlcnMgKGB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgaW5jb3JyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gKGBlcnNwYW5feG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgKSBhbmQgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCkuIFRoaXMgY291bGQgbGVhZCB0byBkYXRhIHJhY2VzIGFuZCBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLiBUaGUgZml4IGludHJvZHVjZXMgbG9jYWwgY29waWVzIG9mIHRoZSBmbGFncyAoYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCkgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgaXBfdHVubmVsX2ZsYWdzX2NvcHkoKWAgKHdoaWNoIHVzZXMgYGJpdG1hcF9jb3B5KClgIHRvIGNvcHkgdGhlIGVudGlyZSBgdW5zaWduZWQgbG9uZ2AgYXJyYXkpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOL0tDU0FOIGFuZCBsb2dpYyB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGRhdGEgcmFjZXMgYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9naWMgYnVnIHdoZXJlIHNoYXJlZCB0dW5uZWwgcGFyYW1ldGVycyAoYHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzYCkgd2VyZSBiZWluZyBpbmNvcnJlY3RseSBtb2RpZmllZCBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiAoYGVyc3Bhbl94bWl0YCwgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGApIGFuZCBuZXRsaW5rIGR1bXBzIChgaXBncmVfZmlsbF9pbmZvYCwgYGVyc3Bhbl9maWxsX2luZm9gKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGRhdGEgcmFjZXMgYW5kIGNvcnJ1cHRlZCB0dW5uZWwgc3RhdGUuIFRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBjb3BpZXMgb2YgdGhlIGZsYWdzIChgSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1NgKSB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBpcF90dW5uZWxfZmxhZ3NfY29weSgpYCAod2hpY2ggdXNlcyBgYml0bWFwX2NvcHkoKWAgdG8gY29weSB0aGUgZW50aXJlIGB1bnNpZ25lZCBsb25nYCBhcnJheSkuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGFueSByaXNrIG9mIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4vS0NTQU4gYW5kIGxvZ2ljIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggZGF0YSByYWNlcyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEwOjIwLjY5MjIzODU3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjYyNTQzNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIk5FVF9JUEdSRV9ERU1VWFwiLFxuICAgIFwiSVBWNl9HUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcGdyZV94bWl0XCIsXG4gICAgXCJlcnNwYW5feG1pdFwiLFxuICAgIFwiZ3JlX3RhcF94bWl0XCIsXG4gICAgXCJpcDZlcnNwYW5fdHVubmVsX3htaXRcIixcbiAgICBcImlwZ3JlX2ZpbGxfaW5mb1wiLFxuICAgIFwiZXJzcGFuX2ZpbGxfaW5mb1wiLFxuICAgIFwiaXA2Z3JlX2ZpbGxfaW5mb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9naWMgYnVnIHdoZXJlIHNoYXJlZCB0dW5uZWwgcGFyYW1ldGVycyAoYHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgaW5jb3JyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gKGBlcnNwYW5feG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgKSBhbmQgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCkuIFRoaXMgY291bGQgbGVhZCB0byBkYXRhIHJhY2VzIGFuZCBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLiBUaGUgZml4IGludHJvZHVjZXMgbG9jYWwgY29waWVzIG9mIHRoZSBmbGFncyAoYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCkgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgaXBfdHVubmVsX2ZsYWdzX2NvcHkoKWAgKHdoaWNoIHVzZXMgYGJpdG1hcF9jb3B5KClgIHRvIGNvcHkgdGhlIGVudGlyZSBgdW5zaWduZWQgbG9uZ2AgYXJyYXkpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOL0tDU0FOIGFuZCBsb2dpYyB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGRhdGEgcmFjZXMgYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0cmFuc21pc3Npb24gYW5kIG5ldGxpbmsgaW5mbyBkdW1waW5nIHBhdGhzIGZvciBHUkUgYW5kIEVSU1BBTiB0dW5uZWxzIG92ZXIgSVB2NCBhbmQgSVB2Ni4gSXQgZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlIHR1bm5lbCdzIG91dHB1dCBmbGFncyAoYHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgbW9kaWZpZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBvciBuZXRsaW5rIGR1bXBzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHJhY2UgY29uZGl0aW9ucyBvciB1bmludGVuZGVkIHN0YXRlIGNoYW5nZXMuIFRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29yayB0cmFmZmljIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24sIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEwOjIwLjY5MjI0NTg1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5NzMyNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjE5ZWIxNTc4MTczNDEwMzljMTVjYjY5NzdmNDM4OGUyYmZhNWRlMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjoxMDoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jXFxuaW5kZXggNmE5MjYwNzQwMWU4YS4uODIzMDllZmQ0MTdlMCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcF9ncmUuY1xcbisrKyBiL25ldC9pcHY0L2lwX2dyZS5jXFxuQEAgLTQ3NSwxMiArNDc1LDkgQEAgc3RhdGljIGludCBncmVfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBzdGF0aWMgdm9pZCBfX2dyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKnRubF9wYXJhbXMsXFxuLVxcdFxcdCAgICAgICBfX2JlMTYgcHJvdG8pXFxuK1xcdFxcdCAgICAgICBfX2JlMTYgcHJvdG8sIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuLVxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcXG4tXFxuLVxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbiBcXG4gXFx0LyogUHVzaCBHUkUgaGVhZGVyLiAqL1xcbiBcXHRncmVfYnVpbGRfaGVhZGVyKHNrYiwgdHVubmVsLVxcdTAwM2V0dW5faGxlbixcXG5AQCAtNjUzLDYgKzY1MCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpcGdyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xcbiBcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnRubF9wYXJhbXM7XFxuIFxcbiBcXHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKVxcbkBAIC02ODgsMTEgKzY4NiwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHR0bmxfcGFyYW1zID0gXFx1MDAyNnR1bm5lbC1cXHUwMDNlcGFybXMuaXBoO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzKSkpXFxuK1xcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbitcXG4rXFx0aWYgKGdyZV9oYW5kbGVfb2ZmbG9hZHMoc2tiLCB0ZXN0X2JpdChJUF9UVU5ORUxfQ1NVTV9CSVQsIGZsYWdzKSkpXFxuIFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuIFxcbi1cXHRfX2dyZV94bWl0KHNrYiwgZGV2LCB0bmxfcGFyYW1zLCBza2ItXFx1MDAzZXByb3RvY29sKTtcXG4rXFx0X19ncmVfeG1pdChza2IsIGRldiwgdG5sX3BhcmFtcywgc2tiLVxcdTAwM2Vwcm90b2NvbCwgZmxhZ3MpO1xcbiBcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiBcXG4gZnJlZV9za2I6XFxuQEAgLTcwNSw2ICs3MDQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xcbiBcXHRib29sIHRydW5jYXRlID0gZmFsc2U7XFxuIFxcdF9fYmUxNiBwcm90bztcXG4gXFxuQEAgLTcyOCwxMCArNzI4LDEyIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHR0cnVuY2F0ZSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuK1xcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbitcXG4gXFx0LyogUHVzaCBFUlNQQU4gaGVhZGVyICovXFxuIFxcdGlmICh0dW5uZWwtXFx1MDAzZWVyc3Bhbl92ZXIgPT0gMCkge1xcbiBcXHRcXHRwcm90byA9IGh0b25zKEVUSF9QX0VSU1BBTik7XFxuLVxcdFxcdF9fY2xlYXJfYml0KElQX1RVTk5FTF9TRVFfQklULCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbitcXHRcXHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgZmxhZ3MpO1xcbiBcXHR9IGVsc2UgaWYgKHR1bm5lbC1cXHUwMDNlZXJzcGFuX3ZlciA9PSAxKSB7XFxuIFxcdFxcdGVyc3Bhbl9idWlsZF9oZWFkZXIoc2tiLCBudG9obCh0dW5uZWwtXFx1MDAzZXBhcm1zLm9fa2V5KSxcXG4gXFx0XFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlaW5kZXgsXFxuQEAgLTc0Niw4ICs3NDgsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0Z290byBmcmVlX3NrYjtcXG4gXFx0fVxcbiBcXG4tXFx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFncyk7XFxuLVxcdF9fZ3JlX3htaXQoc2tiLCBkZXYsIFxcdTAwMjZ0dW5uZWwtXFx1MDAzZXBhcm1zLmlwaCwgcHJvdG8pO1xcbitcXHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgZmxhZ3MpO1xcbitcXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcXHUwMDI2dHVubmVsLVxcdTAwM2VwYXJtcy5pcGgsIHByb3RvLCBmbGFncyk7XFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIFxcbiBmcmVlX3NrYjpcXG5AQCAtNzYwLDYgKzc2Miw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBncmVfdGFwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XFxuIFxcbiBcXHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKVxcbiBcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbkBAIC03NjksMTQgKzc3MiwxNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpKSlcXG4rXFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFncyk7XFxuK1xcbitcXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgZmxhZ3MpKSlcXG4gXFx0XFx0Z290byBmcmVlX3NrYjtcXG4gXFxuIFxcdGlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpXFxuIFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuIFxcbi1cXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcXHUwMDI2dHVubmVsLVxcdTAwM2VwYXJtcy5pcGgsIGh0b25zKEVUSF9QX1RFQikpO1xcbitcXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcXHUwMDI2dHVubmVsLVxcdTAwM2VwYXJtcy5pcGgsIGh0b25zKEVUSF9QX1RFQiksIGZsYWdzKTtcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gXFxuIGZyZWVfc2tiOlxcbkBAIC0xNTYwLDEyICsxNTY0LDE1IEBAIHN0YXRpYyBzaXplX3QgaXBncmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIHN0YXRpYyBpbnQgaXBncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4tXFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxuLVxcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwID0gXFx1MDAyNnQtXFx1MDAzZXBhcm1zO1xcbitcXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAgPSBcXHUwMDI2dC1cXHUwMDNlcGFybXM7XFxuIFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpO1xcbiBcXG4gXFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkob19mbGFncywgcC1cXHUwMDNlb19mbGFncyk7XFxuIFxcbitcXHRpZiAodC1cXHUwMDNlZXJzcGFuX3ZlciAhPSAwIFxcdTAwMjZcXHUwMDI2ICF0LVxcdTAwM2Vjb2xsZWN0X21kKVxcbitcXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIG9fZmxhZ3MpO1xcbitcXG4gXFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9HUkVfTElOSywgcC1cXHUwMDNlbGluaykgfHxcXG4gXFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX0lGTEFHUyxcXG4gXFx0XFx0XFx0IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXFx1MDAzZWlfZmxhZ3MpKSB8fFxcbkBAIC0xNjA4LDEyICsxNjE1LDkgQEAgc3RhdGljIGludCBpcGdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIHN0YXRpYyBpbnQgZXJzcGFuX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuLVxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFxuIFxcdGlmICh0LVxcdTAwM2VlcnNwYW5fdmVyIFxcdTAwM2M9IDIpIHtcXG4tXFx0XFx0aWYgKHQtXFx1MDAzZWVyc3Bhbl92ZXIgIT0gMCBcXHUwMDI2XFx1MDAyNiAhdC1cXHUwMDNlY29sbGVjdF9tZClcXG4tXFx0XFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCB0LVxcdTAwM2VwYXJtcy5vX2ZsYWdzKTtcXG4tXFxuIFxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HUkVfRVJTUEFOX1ZFUiwgdC1cXHUwMDNlZXJzcGFuX3ZlcikpXFxuIFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jXFxuaW5kZXggYjg0MzExNmU5YjcwMy4uMGIzZjM4NmI1MWEyZCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcDZfZ3JlLmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcXG5AQCAtOTY0LDcgKzk2NCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID86IHQtXFx1MDAzZWhsZW4pKVxcbiBcXHRcXHRnb3RvIHR4X2VycjtcXG4gXFxuLVxcdF9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCB0LVxcdTAwM2VwYXJtcy5vX2ZsYWdzKTtcXG4gXFx0SVBDQihza2IpLVxcdTAwM2VmbGFncyA9IDA7XFxuIFxcbiBcXHQvKiBGb3IgY29sbGVjdF9tZCBtb2RlLCBkZXJpdmUgZmw2IGZyb20gdGhlIHR1bm5lbCBrZXksXFxuQEAgLTIxMTUsOCArMjExNCw4IEBAIHN0YXRpYyBzaXplX3QgaXA2Z3JlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiBzdGF0aWMgaW50IGlwNmdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbi1cXHRzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxuLVxcdHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCA9IFxcdTAwMjZ0LVxcdTAwM2VwYXJtcztcXG4rXFx0Y29uc3Qgc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnAgPSBcXHUwMDI2dC1cXHUwMDNlcGFybXM7XFxuIFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpO1xcbiBcXG4gXFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkob19mbGFncywgcC1cXHUwMDNlb19mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEwOjIxLjIxMjk3MTg2OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU1ODQ2NzM1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiTkVUX0lQR1JFX0RFTVVYXCIsXG4gICAgXCJJUFY2X0dSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwZ3JlX3htaXRcIixcbiAgICBcImVyc3Bhbl94bWl0XCIsXG4gICAgXCJncmVfdGFwX3htaXRcIixcbiAgICBcImlwNmVyc3Bhbl90dW5uZWxfeG1pdFwiLFxuICAgIFwiaXBncmVfZmlsbF9pbmZvXCIsXG4gICAgXCJlcnNwYW5fZmlsbF9pbmZvXCIsXG4gICAgXCJpcDZncmVfZmlsbF9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRyYW5zbWlzc2lvbiBhbmQgbmV0bGluayBpbmZvIGR1bXBpbmcgcGF0aHMgZm9yIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMgb3ZlciBJUHY0IGFuZCBJUHY2LiBJdCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSB0aGUgdHVubmVsJ3Mgb3V0cHV0IGZsYWdzIChgdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzYCkgd2VyZSBiZWluZyBtb2RpZmllZCBkdXJpbmcgdHJhbnNtaXNzaW9uIG9yIG5ldGxpbmsgZHVtcHMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmFjZSBjb25kaXRpb25zIG9yIHVuaW50ZW5kZWQgc3RhdGUgY2hhbmdlcy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbiwgc28gdGhleSBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjE5ZWIxNTc4MTczNDEwMzljMTVjYjY5NzdmNDM4OGUyYmZhNWRlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE2OjEwOjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuY1xuaW5kZXggNmE5MjYwNzQwMWU4YS4uODIzMDllZmQ0MTdlMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX2dyZS5jXG4rKysgYi9uZXQvaXB2NC9pcF9ncmUuY1xuQEAgLTQ3NSwxMiArNDc1LDkgQEAgc3RhdGljIGludCBncmVfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gc3RhdGljIHZvaWQgX19ncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGlwaGRyICp0bmxfcGFyYW1zLFxuLVx0XHQgICAgICAgX19iZTE2IHByb3RvKVxuK1x0XHQgICAgICAgX19iZTE2IHByb3RvLCBjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xuLVxuLVx0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbiBcbiBcdC8qIFB1c2ggR1JFIGhlYWRlci4gKi9cbiBcdGdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWwtXHUwMDNldHVuX2hsZW4sXG5AQCAtNjUzLDYgKzY1MCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpcGdyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xuIFx0Y29uc3Qgc3RydWN0IGlwaGRyICp0bmxfcGFyYW1zO1xuIFxuIFx0aWYgKCFwc2tiX2luZXRfbWF5X3B1bGwoc2tiKSlcbkBAIC02ODgsMTEgKzY4NiwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHR0bmxfcGFyYW1zID0gXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaDtcbiBcdH1cbiBcbi1cdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULFxuLVx0XHRcdFx0XHQgICAgICB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncykpKVxuK1x0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbitcbitcdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBmbGFncykpKVxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuIFxuLVx0X19ncmVfeG1pdChza2IsIGRldiwgdG5sX3BhcmFtcywgc2tiLVx1MDAzZXByb3RvY29sKTtcbitcdF9fZ3JlX3htaXQoc2tiLCBkZXYsIHRubF9wYXJhbXMsIHNrYi1cdTAwM2Vwcm90b2NvbCwgZmxhZ3MpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbiBmcmVlX3NrYjpcbkBAIC03MDUsNiArNzA0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcbiBcdGJvb2wgdHJ1bmNhdGUgPSBmYWxzZTtcbiBcdF9fYmUxNiBwcm90bztcbiBcbkBAIC03MjgsMTAgKzcyOCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0dHJ1bmNhdGUgPSB0cnVlO1xuIFx0fVxuIFxuK1x0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbitcbiBcdC8qIFB1c2ggRVJTUEFOIGhlYWRlciAqL1xuIFx0aWYgKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDApIHtcbiBcdFx0cHJvdG8gPSBodG9ucyhFVEhfUF9FUlNQQU4pO1xuLVx0XHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuK1x0XHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgZmxhZ3MpO1xuIFx0fSBlbHNlIGlmICh0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciA9PSAxKSB7XG4gXHRcdGVyc3Bhbl9idWlsZF9oZWFkZXIoc2tiLCBudG9obCh0dW5uZWwtXHUwMDNlcGFybXMub19rZXkpLFxuIFx0XHRcdFx0ICAgIHR1bm5lbC1cdTAwM2VpbmRleCxcbkBAIC03NDYsOCArNzQ4LDggQEAgc3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGdvdG8gZnJlZV9za2I7XG4gXHR9XG4gXG4tXHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuLVx0X19ncmVfeG1pdChza2IsIGRldiwgXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaCwgcHJvdG8pO1xuK1x0X19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIGZsYWdzKTtcbitcdF9fZ3JlX3htaXQoc2tiLCBkZXYsIFx1MDAyNnR1bm5lbC1cdTAwM2VwYXJtcy5pcGgsIHByb3RvLCBmbGFncyk7XG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuIGZyZWVfc2tiOlxuQEAgLTc2MCw2ICs3NjIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4gXG4gXHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKVxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuQEAgLTc2OSwxNCArNzcyLDE1IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBncmVfdGFwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcdH1cbiBcbi1cdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULFxuLVx0XHRcdFx0XHQgICAgICB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncykpKVxuK1x0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbitcbitcdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBmbGFncykpKVxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuIFxuIFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20pKVxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuIFxuLVx0X19ncmVfeG1pdChza2IsIGRldiwgXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaCwgaHRvbnMoRVRIX1BfVEVCKSk7XG4rXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoLCBodG9ucyhFVEhfUF9URUIpLCBmbGFncyk7XG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuIGZyZWVfc2tiOlxuQEAgLTE1NjAsMTIgKzE1NjQsMTUgQEAgc3RhdGljIHNpemVfdCBpcGdyZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHN0YXRpYyBpbnQgaXBncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCA9IFx1MDAyNnQtXHUwMDNlcGFybXM7XG4rXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwID0gXHUwMDI2dC1cdTAwM2VwYXJtcztcbiBcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpO1xuIFxuIFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkob19mbGFncywgcC1cdTAwM2VvX2ZsYWdzKTtcbiBcbitcdGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgIT0gMCBcdTAwMjZcdTAwMjYgIXQtXHUwMDNlY29sbGVjdF9tZClcbitcdFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCBvX2ZsYWdzKTtcbitcbiBcdGlmIChubGFfcHV0X3UzMihza2IsIElGTEFfR1JFX0xJTkssIHAtXHUwMDNlbGluaykgfHxcbiBcdCAgICBubGFfcHV0X2JlMTYoc2tiLCBJRkxBX0dSRV9JRkxBR1MsXG4gXHRcdFx0IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlaV9mbGFncykpIHx8XG5AQCAtMTYwOCwxMiArMTYxNSw5IEBAIHN0YXRpYyBpbnQgaXBncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gc3RhdGljIGludCBlcnNwYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbiBcdGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgXHUwMDNjPSAyKSB7XG4tXHRcdGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgIT0gMCBcdTAwMjZcdTAwMjYgIXQtXHUwMDNlY29sbGVjdF9tZClcbi1cdFx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHQtXHUwMDNlcGFybXMub19mbGFncyk7XG4tXG4gXHRcdGlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HUkVfRVJTUEFOX1ZFUiwgdC1cdTAwM2VlcnNwYW5fdmVyKSlcbiBcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZ3JlLmMgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbmluZGV4IGI4NDMxMTZlOWI3MDMuLjBiM2YzODZiNTFhMmQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZ3JlLmNcbisrKyBiL25ldC9pcHY2L2lwNl9ncmUuY1xuQEAgLTk2NCw3ICs5NjQsNiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXA2ZXJzcGFuX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA/OiB0LVx1MDAzZWhsZW4pKVxuIFx0XHRnb3RvIHR4X2VycjtcbiBcbi1cdF9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCB0LVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuIFx0SVBDQihza2IpLVx1MDAzZWZsYWdzID0gMDtcbiBcbiBcdC8qIEZvciBjb2xsZWN0X21kIG1vZGUsIGRlcml2ZSBmbDYgZnJvbSB0aGUgdHVubmVsIGtleSxcbkBAIC0yMTE1LDggKzIxMTQsOCBAQCBzdGF0aWMgc2l6ZV90IGlwNmdyZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHN0YXRpYyBpbnQgaXA2Z3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdHN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCA9IFx1MDAyNnQtXHUwMDNlcGFybXM7XG4rXHRjb25zdCBzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnAgPSBcdTAwMjZ0LVx1MDAzZXBhcm1zO1xuIFx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1Mob19mbGFncyk7XG4gXG4gXHRpcF90dW5uZWxfZmxhZ3NfY29weShvX2ZsYWdzLCBwLVx1MDAzZW9fZmxhZ3MpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTA6MjEuMjEyOTc2MzQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMjEwMTY3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgR1JFL0VSU1BBTiBUdW5uZWwgRmxhZyBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGFyZ2V0ZWQgYXQgYG5ldC9pcHY0L2lwX2dyZS5jYCBhbmQgYG5ldC9pcHY2L2lwNl9ncmUuY2AsIHNwZWNpZmljYWxseSBob3cgdHVubmVsIGZsYWdzIGFyZSBoYW5kbGVkIGluIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYWJvdXQgYXZvaWRpbmcgbW9kaWZpY2F0aW9ucyB0byBgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgIGR1cmluZyBjcml0aWNhbCB0cmFuc21pc3Npb24gcGhhc2VzLCBuYW1lbHkgaW4gYGVyc3Bhbl94bWl0YCBhbmQgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGAuIEluc3RlYWQgb2YgZGlyZWN0bHkgbWVzc2luZyB3aXRoIHRoYXQgZ2xvYmFsLCB0aGV5J3JlIHVzaW5nIGEgbG9jYWwgYGZsYWdzYCBjb3B5IHdoaWNoIGdldHMgcGFzc2VkIHRvIGBfX2dyZV94bWl0YC4gU21hcnQuIFRoaXMgYWxzbyBpbnZvbHZlcyBmaXhpbmcgYGVyc3Bhbl9maWxsX2luZm9gIGFuZCBgaXBncmVfZmlsbF9pbmZvYCB0byBlbnN1cmUgdGhleSBkb24ndCBjb3JydXB0IGB0LVx1MDAzZXBhcm1zLm9fZmxhZ3NgIHdoZW4gZHVtcGluZyBuZXRsaW5rIGluZm8uXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBzbWVsbHMgbGlrZSBhIHJhY2UgY29uZGl0aW9uIHByZXZlbnRpb24gb3IgYSBmaXggZm9yIHVuaW50ZW5kZWQgc3RhdGUgY2hhbmdlcyBpbiBgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgLiBUaGF0J3MgZGVmaW5pdGVseSB3b3J0aCBwYXlpbmcgYXR0ZW50aW9uIHRvLiBMZXQncyBsaXN0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gYmUgc3VyZTpcblxuSW4gYG5ldC9pcHY0L2lwX2dyZS5jYDogYF9fZ3JlX3htaXRgLCBgaXBncmVfeG1pdGAsIGBlcnNwYW5feG1pdGAsIGBncmVfdGFwX3htaXRgLCBgaXBncmVfZmlsbF9pbmZvYCwgYW5kIGBlcnNwYW5fZmlsbF9pbmZvYC5cblxuQW5kIGluIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgOiBgaXA2ZXJzcGFuX3R1bm5lbF94bWl0YCBhbmQgYGlwNmdyZV9maWxsX2luZm9gLlxuXG5ZZXAsIHRoZXNlIGFyZSBhbGwgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMsIGNvbmNlcm5pbmcgR1JFIGFuZCBFUlNQQU4gdHVubmVscy4gSSdkIGNvbnNpZGVyIHRoaXMgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIGZsYWcgaXQgYXMgcG90ZW50aWFsbHkgdnVsbmVyYWJsZS4gTXkgaW1tZWRpYXRlIGluY2xpbmF0aW9uIGlzIHRvIGFzc2lnbiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5MZXQncyBrZWVwIHRoZXNlIHN5bWJvbHMgaW4gZm9jdXM6IGBpcGdyZV94bWl0YCwgYGVyc3Bhbl94bWl0YCwgYGdyZV90YXBfeG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgLCBgaXBncmVfZmlsbF9pbmZvYCwgYGVyc3Bhbl9maWxsX2luZm9gLCBhbmQgYGlwNmdyZV9maWxsX2luZm9gLlxuXG5Ob3csIGJlZm9yZSBJIGdyZWVuLWxpZ2h0IHRoaXMgZnVsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIGBuZXQvaXB2NC9pcF9ncmUuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX05FVF9JUEdSRWAgaXMgZW5hYmxlZCwgYW5kIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgIG5lZWRzIGBDT05GSUdfSVBWNl9HUkVgLiBPa2F5LCBJIG5lZWQgdG8gdmVyaWZ5IHRob3NlIGNvbmZpZyBvcHRpb25zIGFyZSBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMjAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMDozMS40MzM5OTY5MDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5ODQ1MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX0lQR1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTE2Mj1jb25maWcgTkVUX0lQSVBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMTc5LVxcbm5ldC9pcHY0L0tjb25maWc6MTgwOmNvbmZpZyBORVRfSVBHUkVfREVNVVhcXG5uZXQvaXB2NC9LY29uZmlnLTE4MS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEdSRSBkZW11bHRpcGxleGVyXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0xODY9Y29uZmlnIE5FVF9JUF9UVU5ORUxcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMTkxLVxcbm5ldC9pcHY0L0tjb25maWc6MTkyOmNvbmZpZyBORVRfSVBHUkVcXG5uZXQvaXB2NC9LY29uZmlnLTE5My1cXHR0cmlzdGF0ZSBcXFwiSVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzoxOTQ6XFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcXG5uZXQvaXB2NC9LY29uZmlnLTE5NS1cXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMDYtXFxubmV0L2lwdjQvS2NvbmZpZzoyMDc6Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG5uZXQvaXB2NC9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJJUDogYnJvYWRjYXN0IEdSRSBvdmVyIElQXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MjA5OlxcdGRlcGVuZHMgb24gSVBfTVVMVElDQVNUIFxcdTAwMjZcXHUwMDI2IE5FVF9JUEdSRVxcbm5ldC9pcHY0L0tjb25maWctMjEwLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzMwPWNvbmZpZyBORVRfRk9VX0lQX1RVTk5FTFNcXG5uZXQvaXB2NC9LY29uZmlnLTMzMS1cXHRib29sIFxcXCJJUDogRk9VIGVuY2Fwc3VsYXRpb24gb2YgSVAgdHVubmVsc1xcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjMzMjpcXHRkZXBlbmRzIG9uIE5FVF9JUElQIHx8IE5FVF9JUEdSRSB8fCBJUFY2X1NJVFxcbm5ldC9pcHY0L0tjb25maWctMzMzLVxcdHNlbGVjdCBORVRfRk9VXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfTkVUX0ZPVSkgKz0gZm91Lm9cXG5uZXQvaXB2NC9NYWtlZmlsZToyOTpvYmotJChDT05GSUdfTkVUX0lQR1JFX0RFTVVYKSArPSBncmUub1xcbm5ldC9pcHY0L01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19ORVRfSVBHUkUpICs9IGlwX2dyZS5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMzEtdWRwX3R1bm5lbC15IDo9IHVkcF90dW5uZWxfY29yZS5vIHVkcF90dW5uZWxfbmljLm9cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTQ0MD1zdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ0NS1cXG5uZXQvaXB2NC9pcF9ncmUuYzo0NDY6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvaXBfZ3JlLmMtNDQ3LVxcdGlmIChpcHY0X2lzX211bHRpY2FzdChpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz05MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIGlwZ3JlX2hlYWRlcl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05MzktXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTQwOiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk0MS1zdGF0aWMgaW50IGlwZ3JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTk4ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05ODYtXFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTg3OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk4OC1cXHQubmRvX29wZW5cXHRcXHQ9IGlwZ3JlX29wZW4sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDQwPXN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNTQtXFx0aWYgKGlwaC1cXHUwMDNlZGFkZHIgXFx1MDAyNlxcdTAwMjYgIXR1bm5lbC1cXHUwMDNlY29sbGVjdF9tZCkge1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEwNTU6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA1Ni1cXHRcXHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBoLVxcdTAwM2VkYWRkcikpIHtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTM3Nz1pbnQgaXBfdHVubmVsX3JjdihzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zODMtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6Mzg0OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM4NS1cXHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBoLVxcdTAwM2VkYWRkcikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTA6MzEuNTA5OTg5Mzc2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NTk1NjQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbmV0d29ya2luZyBjb25maWd1cmF0aW9uczpcblxuKipBbmFseXppbmcgTmV0d29yayBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgcmVxdWlyZXMgYm90aCBgTkVUX0lQR1JFYCBhbmQgYE5FVF9JUEdSRV9ERU1VWGAuIFRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBEbyB3ZSBuZWVkIHRvIGNvbnNpZGVyIElQdjYgR1JFIGFzIHdlbGw/IFNvLCBsZXQncyBqdXN0IGNvbmZpcm0gaWYgYElQVjZfR1JFYCBpcyByZWxldmFudCB0byB0aGUgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNjMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMDozNC41NTU5NDg5NjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1NTA3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBWNl9HUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MTk5PWNvbmZpZyBJUFY2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMDktXFxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXFxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEdSRSB0dW5uZWxcXFwiXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZT00Mj1vYmotJChDT05GSUdfSVBWNl9UVU5ORUwpICs9IGlwNl90dW5uZWwub1xcbm5ldC9pcHY2L01ha2VmaWxlOjQzOm9iai0kKENPTkZJR19JUFY2X0dSRSkgKz0gaXA2X2dyZS5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNDQtb2JqLSQoQ09ORklHX0lQVjZfRk9VKSArPSBmb3U2Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTA6MzQuNjQ5NTExMTMxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM4MDY3NjkxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEdSRSBhbmQgRVJTUEFOIFR1bm5lbCBUcmFuc21pc3Npb24gYW5kIE5ldGxpbmsgSW5mbyBQYXRocyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhZGRyZXNzIHRoZSBgSVBWNl9HUkVgIGNvbmZpZ3VyYXRpb24gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zOiBgaXBncmVfeG1pdGAsIGBlcnNwYW5feG1pdGAsIGBncmVfdGFwX3htaXRgLCBgaXA2ZXJzcGFuX3R1bm5lbF94bWl0YCwgYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCwgYW5kIGBpcDZncmVfZmlsbF9pbmZvYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0cmFuc21pc3Npb24gYW5kIG5ldGxpbmsgaW5mbyBkdW1waW5nIHdpdGhpbiB0aGUgR1JFIGFuZCBFUlNQQU4gdHVubmVsIGltcGxlbWVudGF0aW9ucy5cblxuSSBxdWlja2x5IGNoZWNrZWQgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHdoaWNoIHRoZXkgYXJlLCBidXQgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgbGlrZSBgbmRvX3N0YXJ0X3htaXRgIGFuZCBgcnRubF9saW5rX29wcy1cdTAwM2VmaWxsX2luZm9gLiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLCBJIHdhbnRlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgYXJlbid0IGlubGluZWQgYmVjYXVzZSBpbmxpbmVkIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIGFuZCB0aGF0J3Mgbm90IGlkZWFsIGZvciB3aGF0IEkgYW0gdHJ5aW5nIHRvIGRvIGhlcmUuXG5cbk9rYXksIGBpcGdyZV94bWl0YCwgYGVyc3Bhbl94bWl0YCwgYGdyZV90YXBfeG1pdGAsIGFuZCBgaXA2ZXJzcGFuX3R1bm5lbF94bWl0YCBhcmUgYWxsIGFzc2lnbmVkIHRvIGAubmRvX3N0YXJ0X3htaXRgIGluIHRoZWlyIHJlc3BlY3RpdmUgbmV0ZGV2X29wcyBzdHJ1Y3R1cmVzLiBMaWtld2lzZSwgYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCwgYW5kIGBpcDZncmVfZmlsbF9pbmZvYCBhcmUgYXNzaWduZWQgdG8gYC5maWxsX2luZm9gIHdpdGhpbiB0aGUgY29ycmVzcG9uZGluZyBsaW5rX29wcyBzdHJ1Y3R1cmVzLiBHaXZlbiB0aGVzZSBhc3NpZ25tZW50cyB0byBmdW5jdGlvbiBwb2ludGVycywgSSBjYW4gYmUgY29uZmlkZW50IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSAqbm90KiBpbmxpbmVkIGFuZCBkbyBpbmRlZWQgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBQZXJmZWN0OyB0aGF0J3MgZXhhY3RseSB3aGF0IEknbSBsb29raW5nIGZvci5cblxuSSdsbCBhbHNvIG1ha2Ugc3VyZSB0byBjb3ZlciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYE5FVF9JUEdSRWAgZGVwZW5kcyBvbiBgTkVUX0lQR1JFX0RFTVVYYCwgYW5kIGBJUFY2X0dSRWAgaXMgY29udGluZ2VudCBvbiBgSVBWNmAuIFNvLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgYXJlOiBgTkVUX0lQR1JFYCwgYE5FVF9JUEdSRV9ERU1VWGAsIGFuZCBgSVBWNl9HUkVgLlxuXG5JIHdhbnRlZCB0byBlbnN1cmUgSSBkaWRuJ3QgbWlzcyBhbnl0aGluZy4gSSBzcG90dGVkIGBfX2dyZV94bWl0YCwgd2hpY2ggKmlzKiBzdGF0aWMgYW5kIGNhbGxlZCBieSB0aGUgYHhtaXRgIGZ1bmN0aW9ucy4gQmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlIGlubGluZWQsIEknbSBnb2luZyB0byBleGNsdWRlIHRoYXQgZnJvbSBteSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuXG5cblNvLCBoZXJlJ3MgbXkgcmVhc29uaW5nLiBUaGUgbWFpbiBpc3N1ZSBhcHBlYXJzIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgdHVubmVsJ3Mgb3V0cHV0IGZsYWdzIChgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgKSBkdXJpbmcgdHJhbnNtaXNzaW9uIG9yIG5ldGxpbmsgZHVtcHMuIFRoYXQncyBhIGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUgdGhhdCdzIGxpa2VseSB0byBjYXVzZSBhbGwgc29ydHMgb2YgcHJvYmxlbXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZm9yIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGFuZCBjb25maWd1cmF0aW9uLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGV5IHJlcHJlc2VudCB0aGUgbWFpbiBhdmVudWVzIGZvciBkYXRhIGVudGVyaW5nIG9yIGV4aXRpbmcgdGhlc2UgR1JFIGFuZCBFUlNQQU4gdHVubmVscy5cblxuSW4gc3VtbWFyeSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOlxuKiAgIGBpcGdyZV94bWl0YFxuKiAgIGBlcnNwYW5feG1pdGBcbiogICBgZ3JlX3RhcF94bWl0YFxuKiAgIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgXG4qICAgYGlwZ3JlX2ZpbGxfaW5mb2BcbiogICBgZXJzcGFuX2ZpbGxfaW5mb2BcbiogICBgaXA2Z3JlX2ZpbGxfaW5mb2BcblxuQW5kIEknbGwgbmVlZCB0aGVzZSBjb25maWd1cmF0aW9uczpcbiogICBgTkVUX0lQR1JFYFxuKiAgIGBORVRfSVBHUkVfREVNVVhgXG4qICAgYElQVjZfR1JFYFxuXG5Ob3cgSSBzaG91bGQgZ28gYW5kIGNoZWNrIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgIGluIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njg3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEwOjQ4LjQ1NjI4MjU5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDYwODk4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZlcnNwYW5fdHVubmVsX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz04Nzg9c3RhdGljIG5ldGRldl90eF90IGlwNmdyZV90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTkxNi1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6OTE3OnN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtOTE4LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTE4ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZlcnNwYW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xODg1LVxcdC5uZG9fdW5pbml0ID1cXHRcXHRpcDZlcnNwYW5fdHVubmVsX3VuaW5pdCxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTg4NjpcXHQubmRvX3N0YXJ0X3htaXQgPVxcdGlwNmVyc3Bhbl90dW5uZWxfeG1pdCxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTg4Ny1cXHQubmRvX3NldF9tYWNfYWRkcmVzcyA9XFx0ZXRoX21hY19hZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMDo0OC41MzA4OTgxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Mzc2MzA4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERhdGEgVHJhbnNtaXNzaW9uIFBhdGgqKlxuXG5SaWdodCwgc28gdGhlIHRyYWNlIHBvaW50cyB0byBgLm5kb19zdGFydF94bWl0YC4gVGhhdCdzIHdoZXJlIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGJlZ2lucywgc28gdGhhdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaGFuZGxlZCwgSSBuZWVkIHRvIGRpZyBpbnRvIGBpcGdyZV94bWl0YCB3aXRoaW4gYG5ldC9pcHY0L2lwX2dyZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IEdSRSBlbmNhcHN1bGF0aW9uIGlzIGhhcHBlbmluZyBhbmQgd2hlcmUgdGhpcyBwYWNrZXQgaXMgaW4gdGhlIHRyYW5zbWlzc2lvbiBxdWV1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYwMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEwOjUxLjk2ODUzMjM1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyMDYxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBncmVfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF9ncmUuYz02MjU9c3RhdGljIGludCBncmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTY0OC1cXG5uZXQvaXB2NC9pcF9ncmUuYzo2NDk6c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC9pcF9ncmUuYy02NTAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTk4ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05OTAtI2VuZGlmXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTkxOlxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaXBncmVfeG1pdCxcXG5uZXQvaXB2NC9pcF9ncmUuYy05OTItXFx0Lm5kb19zaW9jZGV2cHJpdmF0ZVxcdD0gaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMDo1Mi4wNDg3NDMzNTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNjYwODQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgVHJhbnNtaXNzaW9uIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIG9uIGAubmRvX3N0YXJ0X3htaXRgLiBHb29kLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB3aGVyZSB0aGUga2VybmVsIGhhbmRzIG9mZiBwYWNrZXRzIGZvciB0cmFuc21pc3Npb24uIE5vdywgd2hlcmUgYXJlIHdlIHNlbmRpbmcgdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldHdvcmsgcGF0aC4gTGV0J3Mgc2VlLi4uIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGVyc3Bhbl94bWl0YCBpbiBgbmV0L2lwdjQvaXBfZ3JlLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBFUlNQQU4gZW5jYXBzdWxhdGlvbiBjb2RlLiBJJ20gZ3Vlc3NpbmcgdGhhdCdzIGludm9sdmVkIGhlcmUgZ2l2ZW4gdGhlIGNvbnRleHQsIGFuZCBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIHBhY2tldCBoYW5kbGluZyBmbG93LiBMZXQncyB0cmFjZSB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgaG93IHRoZSBwYWNrZXQgaXMgYmVpbmcgZm9ybWF0dGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTA6NTUuNjg1MzU0NzgxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDc2MDMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcnNwYW5feG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF9ncmUuYz02NDk9c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTcwMi1cXG5uZXQvaXB2NC9pcF9ncmUuYzo3MDM6c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvaXBfZ3JlLmMtNzA0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTM3NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3Ny1cXHQubmRvX3VuaW5pdFxcdFxcdD0gaXBfdHVubmVsX3VuaW5pdCxcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzc4OlxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gZXJzcGFuX3htaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3OS1cXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gZXRoX21hY19hZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMDo1NS43NTYxMjUwMDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4MTI4Mzg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBncmVfdGFwX3htaXRgIGluIGBuZXQvaXB2NC9pcF9ncmUuY2AqKlxuXG5ZZXMsIHRoYXQncyB3aGF0IEkgd2FudCB0byBmb2N1cyBvbi4gUmlnaHQsIGxldCdzIGRyaWxsIGRvd24gaW50byBgZ3JlX3RhcF94bWl0YC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB3b3JraW5ncyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGUgdGFwIGludGVyZmFjZSB0cmFuc21pdHMgcGFja2V0cy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgcHJvYmFibHkgcmVsYXRlZCB0byBhIHJlY2VudCBpc3N1ZSBJIGhhdmUgYmVlbiB3b3JraW5nIG9uIHRoYXQgcmVxdWlyZWQgbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEwOjU4LjczNzQxMjM3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0ODQyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3JlX3RhcF94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTcwMz1zdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTc2MC1cXG5uZXQvaXB2NC9pcF9ncmUuYzo3NjE6c3RhdGljIG5ldGRldl90eF90IGdyZV90YXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTc2Mi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTM0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNDQtXFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM0NTpcXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGdyZV90YXBfeG1pdCxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzQ2LVxcdC5uZG9fc2V0X21hY19hZGRyZXNzIFxcdD0gZXRoX21hY19hZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMDo1OC44MjQ5MDIwNDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2OTEzOTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBHUkUgVHVubmVsIEZpbGwgSW5mb3JtYXRpb24gRnVuY3Rpb24qKlxuXG5ZZXMsIHRoYXQgZmVlbHMgcmlnaHQsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gYmUuIExldCdzIGRpZyBpbnRvIHRoZSBgaXBncmVfZmlsbF9pbmZvYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBuZXQvaXB2NC9pcF9ncmUuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGZpbGwgaW5mbyBzZWN0aW9uIGFzIEkgc3VzcGVjdCB0aGVyZSBhcmUgc29tZSBwYXJhbWV0ZXJzIHRoYXQgSSBjb3VsZCBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJJ20gbG9va2luZyBmb3Igd2hlcmUgd2UncmUgcG9wdWxhdGluZyB0aGUgR1JFIHR1bm5lbCBpbmZvcm1hdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgdGhhdCBjb3VsZCBiZSBpbmZsdWVuY2luZyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBzeXN0ZW0uIEknbGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIGJlaW5nIHVzZWQgYXJlIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDI0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6MDIuNjk0MDQ1NzU3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc5NzMyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGdyZV9maWxsX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9MTUxNz1zdGF0aWMgc2l6ZV90IGlwZ3JlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTY0LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE1NjU6c3RhdGljIGludCBpcGdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTY2LXtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE2MTY9c3RhdGljIGludCBlcnNwYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjM0LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE2MzU6XFx0cmV0dXJuIGlwZ3JlX2ZpbGxfaW5mbyhza2IsIGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTYzNi1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE2Nzg9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwZ3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjg4LVxcdC5nZXRfc2l6ZVxcdD0gaXBncmVfZ2V0X3NpemUsXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTY4OTpcXHQuZmlsbF9pbmZvXFx0PSBpcGdyZV9maWxsX2luZm8sXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTY5MC1cXHQuZ2V0X2xpbmtfbmV0XFx0PSBpcF90dW5uZWxfZ2V0X2xpbmtfbmV0LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTY5Mz1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBncmVfdGFwX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTcwMy1cXHQuZ2V0X3NpemVcXHQ9IGlwZ3JlX2dldF9zaXplLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3MDQ6XFx0LmZpbGxfaW5mb1xcdD0gaXBncmVfZmlsbF9pbmZvLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3MDUtXFx0LmdldF9saW5rX25ldFxcdD0gaXBfdHVubmVsX2dldF9saW5rX25ldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6MDIuNzU2ODQ3Mzk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTE0NTA0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgZXJzcGFuX2ZpbGxfaW5mb2AgaW4gYG5ldC9pcHY0L2lwX2dyZS5jYCoqXG5cblllcy4gT2theSwgdGhhdCdzIHdoYXQgSSdtIHRoaW5raW5nIHRvby4gTGV0J3MgZGlnIGludG8gdGhhdCBgZXJzcGFuX2ZpbGxfaW5mb2AgZnVuY3Rpb24gd2l0aGluIHRoZSBJUHY0IEdSRSBpbXBsZW1lbnRhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCdzIHdvcmtpbmcuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgaG93IHRoZSBFUlNQQU4gaGVhZGVyIGlzIHBvcHVsYXRlZC4gSXMgaXQgZWZmaWNpZW50PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIHdpdGggZGlmZmVyZW50IEVSU1BBTiBtb2RlcyBvciBjb25maWd1cmF0aW9ucz8gSSdtIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBiaXQgbWFuaXB1bGF0aW9uIGluIHRoZXJlLCBkZWFsaW5nIHdpdGggdGhlIFR5cGUgSUlJIEVSU1BBTiBoZWFkZXIsIG9yIHBlcmhhcHMgc29tZSBsZXNzLXRoYW4tb2J2aW91cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZXMuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgdGhlIGZsb3ctSUQsIHNlc3Npb24tSUQsIGFuZCBvdGhlciBtZXRhZGF0YSBmaWVsZHMuIEl0J3MgdGltZSB0byBzZWUgd2hhdOKAmXMgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QgYW5kIGFzc2VzcyB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzU1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6MDcuMTY4MzAwMTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMTY5NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyc3Bhbl9maWxsX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9MTU2NT1zdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTYxNS1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNjE2OnN0YXRpYyBpbnQgZXJzcGFuX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE2MTcte1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTcwOD1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZXJzcGFuX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzE4LVxcdC5nZXRfc2l6ZVxcdD0gaXBncmVfZ2V0X3NpemUsXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTcxOTpcXHQuZmlsbF9pbmZvXFx0PSBlcnNwYW5fZmlsbF9pbmZvLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3MjAtXFx0LmdldF9saW5rX25ldFxcdD0gaXBfdHVubmVsX2dldF9saW5rX25ldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6MDcuMjU4NDc3MTQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTU5MzkyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSVB2NiBHUkUgSW5mb3JtYXRpb24gRmlsbGluZyBGdW5jdGlvbioqXG5cblllcywgdGhhdCBmZWVscyByaWdodC4gTXkgZ3V0IHNheXMgd2UgbmVlZCB0byBkZWx2ZSBpbnRvIGBpcDZncmVfZmlsbF9pbmZvYCBpbiBgbmV0L2lwdjYvaXA2X2dyZS5jYC4gTGV0J3MgY29uZmlybSBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIGNvbnRyb2wgcGF0aCBvciBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEdSRSB0dW5uZWwgaW5mb3JtYXRpb24gaXMgYmVpbmcgcG9wdWxhdGVkIHdpdGggSVB2NiBkYXRhLCBzcGVjaWZpY2FsbHkgdGhlIG51YW5jZXMgb2YgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgYnJvYWRlciBHUkUgaW5mcmFzdHJ1Y3R1cmUuIEkgYW0gZm9jdXNlZCBvbiB0aGUgc3BlY2lmaWNzIGluIHRoaXMgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyOTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMToxMC41MTQ0MjA2NThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MjY3NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNmdyZV9maWxsX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz0yMDczPXN0YXRpYyBzaXplX3QgaXA2Z3JlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjExNC1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjExNTpzdGF0aWMgaW50IGlwNmdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjExNi17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjI4OD1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI5OC1cXHQuZ2V0X3NpemVcXHQ9IGlwNmdyZV9nZXRfc2l6ZSxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI5OTpcXHQuZmlsbF9pbmZvXFx0PSBpcDZncmVfZmlsbF9pbmZvLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzAwLVxcdC5nZXRfbGlua19uZXRcXHQ9IGlwNl90bmxfZ2V0X2xpbmtfbmV0LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIzMDM9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMxMi1cXHQuZ2V0X3NpemVcXHQ9IGlwNmdyZV9nZXRfc2l6ZSxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjMxMzpcXHQuZmlsbF9pbmZvXFx0PSBpcDZncmVfZmlsbF9pbmZvLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzE0LVxcdC5nZXRfbGlua19uZXRcXHQ9IGlwNl90bmxfZ2V0X2xpbmtfbmV0LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIzMTc9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmVyc3Bhbl90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMyNi1cXHQuZ2V0X3NpemVcXHQ9IGlwNmdyZV9nZXRfc2l6ZSxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjMyNzpcXHQuZmlsbF9pbmZvXFx0PSBpcDZncmVfZmlsbF9pbmZvLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzI4LVxcdC5nZXRfbGlua19uZXRcXHQ9IGlwNl90bmxfZ2V0X2xpbmtfbmV0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMToxMC41Njk2OTQ2NDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM1MDAwMTExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipPcGVyYXRpb25hbGl6aW5nIHRoZSBHUkUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LiBDb25maXJtZWQsIGFsbCB0aGUgZm9jdXMgc3ltYm9scywgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dCwgYXJlIHZhbGlkIG9wdGlvbnMgdG8gd29yayB3aXRoLiBTcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi4gSSBzZWUgdGhhdCBgTkVUX0lQR1JFYCwgYE5FVF9JUEdSRV9ERU1VWGAsIGFuZCBgSVBWNl9HUkVgIGFyZSBlbmFibGVkLiBUaGlzIHNpZ25hbHMgYSBzZXR1cCBnZWFyZWQgdG93YXJkcyBlbmNhcHN1bGF0aW5nIHRyYWZmaWMgd2l0aCBHUkUsIHBvdGVudGlhbGx5IGZvciB0dW5uZWxpbmcgSVB2NCBhbmQgSVB2Ni4gR2l2ZW4gdGhlIGN1cnJlbnQgaW5mb3JtYXRpb24sIHRoZXJlJ3Mgbm8gaW5oZXJlbnQgY29uZmxpY3QgaW4gdXNpbmcgdGhlc2UsIHNvIEknbGwgZXhlY3V0ZSB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDY0LCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjExOjE2LjkxOTcwMjkwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDAwMTM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIixcbiAgICBcIklQVjZfR1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBncmVfeG1pdFwiLFxuICAgIFwiZXJzcGFuX3htaXRcIixcbiAgICBcImdyZV90YXBfeG1pdFwiLFxuICAgIFwiaXA2ZXJzcGFuX3R1bm5lbF94bWl0XCIsXG4gICAgXCJpcGdyZV9maWxsX2luZm9cIixcbiAgICBcImVyc3Bhbl9maWxsX2luZm9cIixcbiAgICBcImlwNmdyZV9maWxsX2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdHJhbnNtaXNzaW9uIGFuZCBuZXRsaW5rIGluZm8gZHVtcGluZyBwYXRocyBmb3IgR1JFIGFuZCBFUlNQQU4gdHVubmVscyBvdmVyIElQdjQgYW5kIElQdjYuIEl0IGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSB0dW5uZWwncyBvdXRwdXQgZmxhZ3MgKGB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3NgKSB3ZXJlIGJlaW5nIG1vZGlmaWVkIGR1cmluZyB0cmFuc21pc3Npb24gb3IgbmV0bGluayBkdW1wcywgd2hpY2ggY291bGQgbGVhZCB0byByYWNlIGNvbmRpdGlvbnMgb3IgdW5pbnRlbmRlZCBzdGF0ZSBjaGFuZ2VzLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgdHJhZmZpYyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiTkVUX0lQR1JFX0RFTVVYXCIsXG4gICAgXCJJUFY2X0dSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwZ3JlX3htaXRcIixcbiAgICBcImVyc3Bhbl94bWl0XCIsXG4gICAgXCJncmVfdGFwX3htaXRcIixcbiAgICBcImlwNmVyc3Bhbl90dW5uZWxfeG1pdFwiLFxuICAgIFwiaXBncmVfZmlsbF9pbmZvXCIsXG4gICAgXCJlcnNwYW5fZmlsbF9pbmZvXCIsXG4gICAgXCJpcDZncmVfZmlsbF9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRyYW5zbWlzc2lvbiBhbmQgbmV0bGluayBpbmZvIGR1bXBpbmcgcGF0aHMgZm9yIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMgb3ZlciBJUHY0IGFuZCBJUHY2LiBJdCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSB0aGUgdHVubmVsJ3Mgb3V0cHV0IGZsYWdzIChgdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzYCkgd2VyZSBiZWluZyBtb2RpZmllZCBkdXJpbmcgdHJhbnNtaXNzaW9uIG9yIG5ldGxpbmsgZHVtcHMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmFjZSBjb25kaXRpb25zIG9yIHVuaW50ZW5kZWQgc3RhdGUgY2hhbmdlcy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbiwgc28gdGhleSBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6MTcuMDU5NzExMjk3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDI1Nzk0NjIzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjExOjE3LjA2MDI4MDQ2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MDI1NzM3MDg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9naWMgYnVnIHdoZXJlIHNoYXJlZCB0dW5uZWwgcGFyYW1ldGVycyAoYHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgaW5jb3JyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gKGBlcnNwYW5feG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgKSBhbmQgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCkuIFRoaXMgY291bGQgbGVhZCB0byBkYXRhIHJhY2VzIGFuZCBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLiBUaGUgZml4IGludHJvZHVjZXMgbG9jYWwgY29waWVzIG9mIHRoZSBmbGFncyAoYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCkgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgaXBfdHVubmVsX2ZsYWdzX2NvcHkoKWAgKHdoaWNoIHVzZXMgYGJpdG1hcF9jb3B5KClgIHRvIGNvcHkgdGhlIGVudGlyZSBgdW5zaWduZWQgbG9uZ2AgYXJyYXkpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOL0tDU0FOIGFuZCBsb2dpYyB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGRhdGEgcmFjZXMgYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxOWViMTU3ODE3MzQxMDM5YzE1Y2I2OTc3ZjQzODhlMmJmYTVkZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjoxMDoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmNcbmluZGV4IDZhOTI2MDc0MDFlOGEuLjgyMzA5ZWZkNDE3ZTAgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9ncmUuY1xuKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmNcbkBAIC00NzUsMTIgKzQ3NSw5IEBAIHN0YXRpYyBpbnQgZ3JlX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIHN0YXRpYyB2b2lkIF9fZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpcGhkciAqdG5sX3BhcmFtcyxcbi1cdFx0ICAgICAgIF9fYmUxNiBwcm90bylcbitcdFx0ICAgICAgIF9fYmUxNiBwcm90bywgY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcbi1cbi1cdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4gXG4gXHQvKiBQdXNoIEdSRSBoZWFkZXIuICovXG4gXHRncmVfYnVpbGRfaGVhZGVyKHNrYiwgdHVubmVsLVx1MDAzZXR1bl9obGVuLFxuQEAgLTY1Myw2ICs2NTAsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcbiBcdGNvbnN0IHN0cnVjdCBpcGhkciAqdG5sX3BhcmFtcztcbiBcbiBcdGlmICghcHNrYl9pbmV0X21heV9wdWxsKHNrYikpXG5AQCAtNjg4LDExICs2ODYsMTIgQEAgc3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0dG5sX3BhcmFtcyA9IFx1MDAyNnR1bm5lbC1cdTAwM2VwYXJtcy5pcGg7XG4gXHR9XG4gXG4tXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCxcbi1cdFx0XHRcdFx0ICAgICAgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpKSlcbitcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4rXG4rXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgZmxhZ3MpKSlcbiBcdFx0Z290byBmcmVlX3NrYjtcbiBcbi1cdF9fZ3JlX3htaXQoc2tiLCBkZXYsIHRubF9wYXJhbXMsIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG4rXHRfX2dyZV94bWl0KHNrYiwgZGV2LCB0bmxfcGFyYW1zLCBza2ItXHUwMDNlcHJvdG9jb2wsIGZsYWdzKTtcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG4gZnJlZV9za2I6XG5AQCAtNzA1LDYgKzcwNCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4gXHRib29sIHRydW5jYXRlID0gZmFsc2U7XG4gXHRfX2JlMTYgcHJvdG87XG4gXG5AQCAtNzI4LDEwICs3MjgsMTIgQEAgc3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHRydW5jYXRlID0gdHJ1ZTtcbiBcdH1cbiBcbitcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4rXG4gXHQvKiBQdXNoIEVSU1BBTiBoZWFkZXIgKi9cbiBcdGlmICh0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciA9PSAwKSB7XG4gXHRcdHByb3RvID0gaHRvbnMoRVRIX1BfRVJTUEFOKTtcbi1cdFx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbitcdFx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIGZsYWdzKTtcbiBcdH0gZWxzZSBpZiAodHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIgPT0gMSkge1xuIFx0XHRlcnNwYW5fYnVpbGRfaGVhZGVyKHNrYiwgbnRvaGwodHVubmVsLVx1MDAzZXBhcm1zLm9fa2V5KSxcbiBcdFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlaW5kZXgsXG5AQCAtNzQ2LDggKzc0OCw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuIFx0fVxuIFxuLVx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbi1cdF9fZ3JlX3htaXQoc2tiLCBkZXYsIFx1MDAyNnR1bm5lbC1cdTAwM2VwYXJtcy5pcGgsIHByb3RvKTtcbitcdF9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCBmbGFncyk7XG4rXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoLCBwcm90bywgZmxhZ3MpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbiBmcmVlX3NrYjpcbkBAIC03NjAsNiArNzYyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGdyZV90YXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xuIFxuIFx0aWYgKCFwc2tiX2luZXRfbWF5X3B1bGwoc2tiKSlcbiBcdFx0Z290byBmcmVlX3NrYjtcbkBAIC03NjksMTQgKzc3MiwxNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXHR9XG4gXG4tXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCxcbi1cdFx0XHRcdFx0ICAgICAgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpKSlcbitcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4rXG4rXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgZmxhZ3MpKSlcbiBcdFx0Z290byBmcmVlX3NrYjtcbiBcbiBcdGlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tKSlcbiBcdFx0Z290byBmcmVlX3NrYjtcbiBcbi1cdF9fZ3JlX3htaXQoc2tiLCBkZXYsIFx1MDAyNnR1bm5lbC1cdTAwM2VwYXJtcy5pcGgsIGh0b25zKEVUSF9QX1RFQikpO1xuK1x0X19ncmVfeG1pdChza2IsIGRldiwgXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaCwgaHRvbnMoRVRIX1BfVEVCKSwgZmxhZ3MpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbiBmcmVlX3NrYjpcbkBAIC0xNTYwLDEyICsxNTY0LDE1IEBAIHN0YXRpYyBzaXplX3QgaXBncmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBzdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAgPSBcdTAwMjZ0LVx1MDAzZXBhcm1zO1xuK1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCA9IFx1MDAyNnQtXHUwMDNlcGFybXM7XG4gXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKTtcbiBcbiBcdGlwX3R1bm5lbF9mbGFnc19jb3B5KG9fZmxhZ3MsIHAtXHUwMDNlb19mbGFncyk7XG4gXG4rXHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyICE9IDAgXHUwMDI2XHUwMDI2ICF0LVx1MDAzZWNvbGxlY3RfbWQpXG4rXHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgb19mbGFncyk7XG4rXG4gXHRpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX0dSRV9MSU5LLCBwLVx1MDAzZWxpbmspIHx8XG4gXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HUkVfSUZMQUdTLFxuIFx0XHRcdCBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVx1MDAzZWlfZmxhZ3MpKSB8fFxuQEAgLTE2MDgsMTIgKzE2MTUsOSBAQCBzdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHN0YXRpYyBpbnQgZXJzcGFuX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4gXHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyIFx1MDAzYz0gMikge1xuLVx0XHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyICE9IDAgXHUwMDI2XHUwMDI2ICF0LVx1MDAzZWNvbGxlY3RfbWQpXG4tXHRcdFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCB0LVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuLVxuIFx0XHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR1JFX0VSU1BBTl9WRVIsIHQtXHUwMDNlZXJzcGFuX3ZlcikpXG4gXHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jXG5pbmRleCBiODQzMTE2ZTliNzAzLi4wYjNmMzg2YjUxYTJkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbkBAIC05NjQsNyArOTY0LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGlwNmVyc3Bhbl90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPzogdC1cdTAwM2VobGVuKSlcbiBcdFx0Z290byB0eF9lcnI7XG4gXG4tXHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgdC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbiBcdElQQ0Ioc2tiKS1cdTAwM2VmbGFncyA9IDA7XG4gXG4gXHQvKiBGb3IgY29sbGVjdF9tZCBtb2RlLCBkZXJpdmUgZmw2IGZyb20gdGhlIHR1bm5lbCBrZXksXG5AQCAtMjExNSw4ICsyMTE0LDggQEAgc3RhdGljIHNpemVfdCBpcDZncmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBzdGF0aWMgaW50IGlwNmdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnAgPSBcdTAwMjZ0LVx1MDAzZXBhcm1zO1xuK1x0Y29uc3Qgc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwID0gXHUwMDI2dC1cdTAwM2VwYXJtcztcbiBcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpO1xuIFxuIFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkob19mbGFncywgcC1cdTAwM2VvX2ZsYWdzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjExOjE3LjA2MDI4MTY3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjU0NDYyMTE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBHUkUgVHVubmVsIEZsYWdzIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbmV0L2lwdjQvaXBfZ3JlLmNgIGFuZCBgbmV0L2lwdjYvaXA2X2dyZS5jYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGFsbCBhYm91dCBob3cgR1JFIHR1bm5lbCBmbGFncyBhcmUgaGFuZGxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBnb29kLCBmbGFnIGhhbmRsaW5nIGlzIGFsd2F5cyBhIHBvdGVudGlhbCBhcmVhIGZvciBzdWJ0bGUgY29uY3VycmVuY3kgYnVncy5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBfX2dyZV94bWl0YCBub3cgZ2V0cyB0aGUgYGZsYWdzYCBwYXNzZWQgdG8gaXQgYXMgYW4gYXJndW1lbnQsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHdheSB0byBkbyB0aGlzLiBCZWZvcmUsIGl0IHdhcyBwdWxsaW5nIHRoZSBmbGFncyBkaXJlY3RseSBmcm9tIGB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFnc2AuIE1ha2VzIHNlbnNlOyB0aGF0IGtlZXBzIHRoZSB0cmFuc21pc3Npb24gZnVuY3Rpb24gaXRzZWxmIGNsZWFuZXIgYW5kIG1vcmUgZm9jdXNlZC4gVGhlbiB0aGUgb3RoZXIgdHJhbnNtaXQgZnVuY3Rpb25zIChgaXBncmVfeG1pdGAsIGBlcnNwYW5feG1pdGAsIGBncmVfdGFwX3htaXRgKSBjb3B5IHRoZSBmbGFncyBmcm9tIGB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFnc2AgdG8gYSBsb2NhbCBgZmxhZ3NgIHZhcmlhYmxlLCBwb3RlbnRpYWxseSBtb2RpZnkgaXQsIGFuZCAqdGhlbiogcGFzcyBpdCB0byBgX19ncmVfeG1pdGAuIFJpZ2h0LiBVc2luZyBhIGxvY2FsIGNvcHkgaXMgYSBrZXkuXG5cblRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgaW4gdGhlIGBmaWxsX2luZm9gIGZ1bmN0aW9ucyAoYGlwZ3JlX2ZpbGxfaW5mb2AgYW5kIGBlcnNwYW5fZmlsbF9pbmZvYCkuIEl0J3MgZml4aW5nIGEgYnVnIHdoZXJlIHdlIHdlcmUgbW9kaWZ5aW5nIGB0LVx1MDAzZXBhcm1zLm9fZmxhZ3NgIGR1cmluZyBhICpyZWFkKiBvcGVyYXRpb24g4oCTIGBmaWxsX2luZm9gIGlzIGZvciBuZXRsaW5rLCByaWdodD8gSXQgdXNlZCB0byBzZXQgdGhlIGBJUF9UVU5ORUxfS0VZX0JJVGAgZGlyZWN0bHkgb24gdGhlIHR1bm5lbCBwYXJhbWV0ZXJzIGR1cmluZyB0aGUgYGZpbGxfaW5mb2AgY2FsbCEgVGhhdCdzIGEgaHVnZSBwcm9ibGVtLiBUaGF0J3MgYSBjbGVhciBzdGF0ZSBjb3JydXB0aW9uIGJ1Zy5cblxuTm93LCBpdCBjb3BpZXMgdGhlIGZsYWdzIGludG8gYSBsb2NhbCBgb19mbGFnc2AgdmFyaWFibGU6IGBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKWAgYW5kIHRoZW4gYGlwX3R1bm5lbF9mbGFnc19jb3B5KG9fZmxhZ3MsIHAtXHUwMDNlb19mbGFncylgLiBOb3cgaXQncyBzYWZlIHRvIG1vZGlmeSBpdCB3aXRob3V0IHNpZGUtZWZmZWN0cy4gQWZ0ZXIgdGhlIGNvcHksIGl0IGNvbmRpdGlvbmFsbHkgc2V0cyBgSVBfVFVOTkVMX0tFWV9CSVRgIG9uICp0aGF0KiBsb2NhbCBjb3B5LCBgb19mbGFnc2AuIFRoYXQncyBzbWFydC4gVGhhdCBwcm90ZWN0cyBhZ2FpbnN0IHNvbWVvbmUgcXVlcnlpbmcgdGhlIHR1bm5lbCBpbmZvIGFuZCBjaGFuZ2luZyB0aGUgc3RhdGUgdW5kZXJuZWF0aCB5b3UuIFRoZSBzYW1lIGNoYW5nZSBhbHNvIHNob3dzIHVwIGluIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgLiBHb29kIHN0dWZmLlxuXG5TbywgdGhlIHVuZGVybHlpbmcgaXNzdWUgaXMgYSBjb25jdXJyZW5jeSBvciBzdGF0ZSBjb3JydXB0aW9uIGJ1Zy4gV2Ugd2VyZSBtb2RpZnlpbmcgc2hhcmVkIHR1bm5lbCBzdGF0ZSAoYHQtXHUwMDNlcGFybXMub19mbGFnc2ApIGR1cmluZyBib3RoIHRyYW5zbWl0IGFuZCBuZXRsaW5rIGR1bXBzICh3aGljaCBjb3VsZCBoYXBwZW4gY29uY3VycmVudGx5KSwgbGVhZGluZyB0byBkYXRhIHJhY2VzLiBUaGF0IGNhbiBjb3JydXB0IHRoZSB0dW5uZWwgc3RhdGUgaW4gc3VidGxlIHdheXMuIEl0J3Mgbm90IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8gbGVha3MsIGJ1dCBpdCdzIGFib3V0IG1vZGlmeWluZyBzaGFyZWQgc3RhdGUgd2l0aG91dCBwcm9wZXIgbG9ja2luZy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGBpcGdyZV9maWxsX2luZm9gIGFnYWluIHRvIGJlIHN1cmUuLi4gYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCBjcmVhdGVzIGEgYml0bWFwLCB0aGVuIHdlIGNvcHkgdGhlIGZsYWdzLCBhbmQgb25seSB0aGVuIGRvIHdlIG1vZGlmeSB0aGUgY29weSBiZWZvcmUgY29udmVydGluZyB0byBgX19iZTE2YCBhbmQgc2VuZGluZyBvdmVyIG5ldGxpbmsuIEkgZG9uJ3Qgc2VlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaW4gdGhlIGNvZGUuIEl0J3MgYSBjbGVhbiBmaXggZm9yIGEgcHJldHR5IG5hc3R5IGJ1Zy4gR29vZCBjYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjExOjI5LjYwNDkwNzM1M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NDYxOTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC01MS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NTI6I2RlZmluZSBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC01My1cXHRfX2lwdF9mbGFnX29wKERFQ0xBUkVfQklUTUFQLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6MzIuMjY5NTQyMjkxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjQzOTg4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBmb2N1cyBoZXJlIGlzIG9uIHRoZSBmdW5jdGlvbiBjYWxsOiBgX19pcHRfZmxhZ19vcGAuIEhtbSwgaW50ZXJlc3RpbmcuIE15IGJyYWluIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEl0J3MgcHJlZml4ZWQgd2l0aCBhIGRvdWJsZSB1bmRlcnNjb3JlLCBzbyBpdCdzIGxpa2VseSBhbiBpbnRlcm5hbCBvciBrZXJuZWwtbGV2ZWwgZnVuY3Rpb24sIHdoaWNoIGltcGxpZXMgd2UncmUgZGVhbGluZyB3aXRoIGxvd2VyLWxldmVsIG5ldHdvcmtpbmcgb3BlcmF0aW9ucywgcG9zc2libHkgcmVsYXRlZCB0byBuZXRmaWx0ZXIsIGlwdGFibGVzLCBvciBhIHNpbWlsYXIgZmlyZXdhbGwvcGFja2V0IG1hbmlwdWxhdGlvbiBmcmFtZXdvcmsuIFRoZSBuYW1lIGl0c2VsZiwgYF9faXB0X2ZsYWdfb3BgLCBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluICpmbGFnKiBvcGVyYXRpb25zLCBhbmQgcHJvYmFibHkgYXQgYW4gKm9wZXJhdG9yKiBsZXZlbC4gVGhpcyB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgbWFuaXB1bGF0aW5nIG9yIHRlc3Rpbmcgc29tZSBraW5kIG9mIGZsYWcgd2l0aGluIHRoZSBjb250ZXh0IG9mIHBhY2tldCBtYXRjaGluZyBvciBydWxlIGFwcGxpY2F0aW9uLiBJIGltbWVkaWF0ZWx5IG5lZWQgbW9yZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgZmxhZ3MgYW5kIG9wZXJhdG9ycyBhcmUgaW4gcGxheS4gSXMgdGhpcyB3aXRoaW4gdGhlIGlwdGFibGVzIHN0cnVjdHVyZSBpdHNlbGYsIG9yIGlzIHRoaXMgcmVsYXRlZCB0byB1c2VyLXNwYWNlIGlwdGFibGVzIGludGVyYWN0aW9uPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcHJvYmFibHkgYmVpbmcgaGFuZGxlZCBhbmQgd2hlcmUgZG8gdGhleSBzaXQgaW4gdGhlIG1lbW9yeSBzcGFjZT8gTW9yZSBxdWVzdGlvbnMuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMTozNy4wOTM5NTQ0MDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODY5NjgyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBfX2lwdF9mbGFnX29wXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC00OC1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NDk6I2RlZmluZSBfX2lwdF9mbGFnX29wKG9wLCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC01MC1cXHRvcChfX1ZBX0FSR1NfXywgX19JUF9UVU5ORUxfRkxBR19OVU0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjExOjM5LjM4MDk1MjgzM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODg2OTQ1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFR1bm5lbCBGbGFnIERlY2xhcmF0aW9uIGFuZCBDb3B5IFByb2Nlc3MqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyB0aGlzIGBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKWAgbWFjcm8uIEl0J3MgZXhwYW5kaW5nIHRvIGBERUNMQVJFX0JJVE1BUChvX2ZsYWdzLCBfX0lQX1RVTk5FTF9GTEFHX05VTSlgLiBUaGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBiaXQgZmxhZ3MsIHBhY2tlZCBpbnRvIGEgYml0bWFwLiBgREVDTEFSRV9CSVRNQVBgIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gcmVzb2x2ZSB0byBhbiBhcnJheSBvZiBgdW5zaWduZWQgbG9uZ2AgdmFsdWVzLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGVmZmljaWVudCBmb3IgYml0IG1hbmlwdWxhdGlvbi4gV2XigJlyZSB1c2luZyBsb25ncywgcHJvYmFibHkgYmVjYXVzZSB3ZeKAmXJlIHdvcmtpbmcgd2l0aCB0aGUgYXJjaGl0ZWN0dXJl4oCZcyBuYXRpdmUgd29yZCBzaXplIHRvIG1ha2UgdGhlIG9wZXJhdGlvbnMgYXMgZmFzdCBhcyBwb3NzaWJsZS4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgcmVhc29uYWJsZSBhcHByb2FjaCB0byBtYW5hZ2luZyBhIHNldCBvZiBib29sZWFuIG9wdGlvbnMsIG9yIGZsYWdzLlxuXG5UaGVuLCB0aGVyZSdzIGBpcF90dW5uZWxfZmxhZ3NfY29weWAuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzICpoYXMqIHRvIGJlIGEgZnVuY3Rpb24gZGVzaWduZWQgc3BlY2lmaWNhbGx5IHRvIGNvcHkgdGhlc2UgYml0IGZsYWdzIGZyb20gb25lIGJpdG1hcCAoc291cmNlKSB0byBhbm90aGVyIChkZXN0aW5hdGlvbikuIEl04oCZcyBwcm9iYWJseSBpbXBsZW1lbnRlZCB1c2luZyBiaXR3aXNlIG9wZXJhdG9ycyBsaWtlIGBcdTAwMjZgLCBgfGAsIGB+YCAoQU5ELCBPUiwgTk9UKSB0byBzZWxlY3RpdmVseSBzZXQsIGNsZWFyLCBhbmQgY29weSB0aGUgaW5kaXZpZHVhbCBiaXRzIHdpdGhpbiB0aGUgYHVuc2lnbmVkIGxvbmdgIGFycmF5cyB0aGF0IGNvbXByaXNlIHRoZSBiaXRtYXBzLiBUaGUgZnVuY3Rpb24ncyBqb2IgaXMgc3RyYWlnaHRmb3J3YXJkOiBlbnN1cmUgdGhlIGZsYWdzIHJlcHJlc2VudGluZyB0aGUgdHVubmVsJ3MgY29uZmlndXJhdGlvbiBhcmUgY29ycmVjdGx5IHRyYW5zZmVycmVkLCBwcm9iYWJseSB3aGVuIHNldHRpbmcgdXAgb3IgbW9kaWZ5aW5nIGEgdHVubmVsLiBObyBzdXJwcmlzZXMgaGVyZSwganVzdCBlZmZpY2llbnQgYml0LWxldmVsIG1hbmlwdWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI0MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjExOjQ1LjI2NzkwMDM2NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MDA2NTAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGlwX3R1bm5lbF9mbGFnc19jb3B5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC01NS0jZGVmaW5lIGlwX3R1bm5lbF9mbGFnc196ZXJvKC4uLilcXHRfX2lwdF9mbGFnX29wKGJpdG1hcF96ZXJvLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NTY6I2RlZmluZSBpcF90dW5uZWxfZmxhZ3NfY29weSguLi4pXFx0X19pcHRfZmxhZ19vcChiaXRtYXBfY29weSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTU3LSNkZWZpbmUgaXBfdHVubmVsX2ZsYWdzX2FuZCguLi4pXFx0X19pcHRfZmxhZ19vcChiaXRtYXBfYW5kLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6NDcuNDQ3OTY5NTQ3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTYwMTA1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uY2VybiBSZWdhcmRpbmcgQml0bWFwIENvcHlpbmcgYW5kIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIEJpdHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGBiaXRtYXBfY29weWAgd29ya3MgaGVyZS4gSXQncyBzdXBwb3NlZCB0byBjb3B5IGFuIGV4YWN0IG51bWJlciBvZiBiaXRzLCB3aGljaCBpcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBIb3dldmVyLCBhIHBvdGVudGlhbCBpc3N1ZSBpcyBzdGFydGluZyB0byBuaWdnbGUgYXQgbWUuIElmIGBfX0lQX1RVTk5FTF9GTEFHX05VTWAgaXNuJ3QgYSBjbGVhbiBtdWx0aXBsZSBvZiBgQklUU19QRVJfTE9OR2Ag4oCTIHRoYXQgaXMsIGlmIHRoZXJlJ3MgYSByZW1haW5kZXIgd2hlbiB5b3UgZGl2aWRlIHRoZSBudW1iZXIgb2YgZmxhZ3MgYnkgdGhlIGJpdCB3aWR0aCBvZiBhbiBgdW5zaWduZWQgbG9uZ2Ag4oCTIHRoZW4gYGJpdG1hcF9jb3B5YCBtaWdodCBiZSBsZWF2aW5nIHRoZSB0cmFpbGluZyBiaXRzIG9mIHRoZSBsYXN0IGB1bnNpZ25lZCBsb25nYCBpbiB0aGUgZGVzdGluYXRpb24gdW5pbml0aWFsaXplZC4gV2UgY2FuJ3QgaGF2ZSB0aGF0OyBpdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgbGF0ZXIgb24uIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGJpdG1hcF9jb3B5YCBoYW5kbGVzIHRoaXMgc2l0dWF0aW9uIGNvcnJlY3RseS4gTGV0J3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGNsb3NlIGxvb2sgYXQgaXRzIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMTo1Mi4wNjM5ODI1NjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjA5OTEwNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSB2b2lkIGJpdG1hcF9jb3B5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYml0bWFwLmg9MjczPXZvaWQgYml0bWFwX2NvcHlfY2xlYXJfdGFpbCh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgdW5zaWduZWQgaW50IG5iaXRzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNzktXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaDoyODA6c3RhdGljIGlubGluZSB2b2lkIGJpdG1hcF9jb3B5X2FuZF9leHRlbmQodW5zaWduZWQgbG9uZyAqdG8sXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yODEtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCB1bnNpZ25lZCBsb25nICpmcm9tLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMTo1NC4xODQ5OTgyNTJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2MTQ1MDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBiaXRtYXBfY29weWAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYGJpdG1hcF9jb3B5YCBtYWNybyBvciBmdW5jdGlvbi4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IGl0cyBkZWZpbml0aW9uLiBXaGF0J3MgdGhlIGltcGxlbWVudGF0aW9uIGxpa2U/IElzIGl0IGEgc3RyYWlnaHRmb3J3YXJkIGJpdHdpc2Ugb3BlcmF0aW9uLCBwb3RlbnRpYWxseSBvcHRpbWl6ZWQgd2l0aCBjb21waWxlciBpbnRyaW5zaWNzLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IHRoYXQgcmVsaWVzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGhhcmR3YXJlLXNwZWNpZmljIGluc3RydWN0aW9ucz8gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGdvdGNoYXPigJRhbGlnbm1lbnQgaXNzdWVzLCBwb3RlbnRpYWwgZm9yIG9mZi1ieS1vbmUgZXJyb3JzIGluIGxvb3AgYm91bmRhcmllcywgb3IgYW55IGFzc3VtcHRpb25zIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgYml0bWFwIHJlcHJlc2VudGF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRldGFpbHMgd2lsbCBkaWN0YXRlIHdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgd2hhdCBJJ20gbG9va2luZyBmb3IsIHBlcmZvcm1hbmNlIHdpc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBgYml0bWFwX2NvcHlgIGlzIGRvaW5nIHdoYXQgSSBiZWxpZXZlIGl0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTYzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6NTcuODQ2NDUxNzU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcxNTc4OTk0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGJpdG1hcF9jb3B5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMjowMC4wMTgwNDA3ODJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5MjYyMTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlbHZpbmcgaW50byBCaXRtYXAgTWFuaXB1bGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGBiaXRtYXBfY29weWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCdzIHNlZS4uLiBgYml0bWFwX2NvcHlgLCByaWdodD8gVGhhdCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9iaXRtYXAuaGAuIEknbGwgb3BlbiB0aGF0IGZpbGUgYW5kIGNvbmZpcm0gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBleHBlY3RlZCBiZWhhdmlvciB1bmRlciB2YXJpb3VzIGNvbmRpdGlvbnMuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBmdW5jdGlvbiBpcyBvcHRpbWl6ZWQgYXMgSSdkIGV4cGVjdCBpdCB0byBiZSwgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGJpdHdpc2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIHJlc2lkZS4gSSB3YW50IHRvIGNoZWNrIGZvciBlZGdlIGNhc2VzLCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCB3b3JkIHNpemVzICgzMi82NCBiaXQpLiBJJ2xsIGFsc28gZ2xhbmNlIGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS4gSSB3aWxsIHdhbnQgdG8gc2VlIGlmIHRoaXMgY29weSByb3V0aW5lIHVzZXMgdW5yb2xsZWQgbG9vcHMsIHdoaWNoIGlzIG9mdGVuIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGhlcmUsIG9yIGlmIHRoZXJlJ3MgYW55IGNsZXZlciB0cmlja2VyeSB3aXRoIFNJTUQgaW5zdHJ1Y3Rpb25zICh0aG91Z2ggaW4gdGhlIGtlcm5lbCwgdGhhdCdzIGxlc3MgY29tbW9uLCBhZG1pdHRlZGx5KS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM4MywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEyOjA0LjYxMDY2OTM0MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4MDM3NDI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaXRtYXBfY29weVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODAxIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYz0xMDIzPXZvaWQgX19pbml0IHZlY19pbml0X3ZxX21hcChlbnVtIHZlY190eXBlIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYy0xMDI2LVxcdHZlY19wcm9iZV92cXMoaW5mbywgaW5mby1cXHUwMDNldnFfbWFwKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYzoxMDI3OlxcdGJpdG1hcF9jb3B5KGluZm8tXFx1MDAzZXZxX3BhcnRpYWxfbWFwLCBpbmZvLVxcdTAwM2V2cV9tYXAsIFNWRV9WUV9NQVgpO1xcbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jLTEwMjgtfVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM9MTY2Mz1zdGF0aWMgaW50IF9fa3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xNjc1LVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjE2NzY6XFx0Yml0bWFwX2NvcHkoa3ZtLVxcdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMsIFxcdTAwMjZmZWF0dXJlcywgS1ZNX1ZDUFVfTUFYX0ZFQVRVUkVTKTtcXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xNjc3LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jPTMzOT1zdGF0aWMgdm9pZCBwa3ZtX2luaXRfZmVhdHVyZXNfZnJvbV9ob3N0KHN0cnVjdCBwa3ZtX2h5cF92bSAqaHlwX3ZtLCBjb25zdCBzdHJ1Y3Qga3ZtICpob3N0X2t2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uYy0zNTUtXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jOjM1NjpcXHRcXHRiaXRtYXBfY29weShrdm0tXFx1MDAzZWFyY2gudmNwdV9mZWF0dXJlcyxcXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmMtMzU3LVxcdFxcdFxcdCAgICBob3N0X2t2bS1cXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmM9MzcwPXZvaWQgdmdpY192NV9mb2xkX3BwaV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYy00MDItXFx0ICovXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmM6NDAzOlxcdGJpdG1hcF9jb3B5KGNwdV9pZi1cXHUwMDNldmdpY19wcGlfYWN0aXZlciwgYWN0aXZlciwgVkdJQ19WNV9OUl9QUklWQVRFX0lSUVMpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NS5jLTQwNC19XFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYz00MDY9dm9pZCB2Z2ljX3Y1X2ZsdXNoX3BwaV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYy00MzctXFx0ICovXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmM6NDM4OlxcdGJpdG1hcF9jb3B5KGhvc3RfZGF0YV9wdHIodmdpY192NV9wcGlfc3RhdGUpLVxcdTAwM2VwZW5kciwgcGVuZHIsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmMtNDM5LVxcdFxcdCAgICBWR0lDX1Y1X05SX1BSSVZBVEVfSVJRUyk7XFxuLS1cXG5hcmNoL2FybTY0L21tL2NvbnRleHQuYz05MT1zdGF0aWMgdm9pZCBzZXRfcmVzZXJ2ZWRfYXNpZF9iaXRzKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L21tL2NvbnRleHQuYy05My1cXHRpZiAocGlubmVkX2FzaWRfbWFwKVxcbmFyY2gvYXJtNjQvbW0vY29udGV4dC5jOjk0OlxcdFxcdGJpdG1hcF9jb3B5KGFzaWRfbWFwLCBwaW5uZWRfYXNpZF9tYXAsIE5VTV9VU0VSX0FTSURTKTtcXG5hcmNoL2FybTY0L21tL2NvbnRleHQuYy05NS1cXHRlbHNlIGlmIChhcm02NF9rZXJuZWxfdW5tYXBwZWRfYXRfZWwwKCkpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYz0zOTA9c3RhdGljIGlubGluZSB2b2lkIHNsaWNlX2NvcHlfbWFzayhzdHJ1Y3Qgc2xpY2VfbWFzayAqZHN0LFxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmMtMzk1LVxcdFxcdHJldHVybjtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYzozOTY6XFx0Yml0bWFwX2NvcHkoZHN0LVxcdTAwM2VoaWdoX3NsaWNlcywgc3JjLVxcdTAwM2VoaWdoX3NsaWNlcywgU0xJQ0VfTlVNX0hJR0gpO1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jLTM5Ny19XFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmM9NjI1PXN0YXRpYyB2b2lkIF9faW5pdCByaXNjdl9yZXNvbHZlX2lzYSh1bnNpZ25lZCBsb25nICpzb3VyY2VfaXNhLFxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTY0MC1cXHRcXHR9XFxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jOjY0MTpcXHRcXHRiaXRtYXBfY29weShwcmV2X3Jlc29sdmVkX2lzYSwgcmVzb2x2ZWRfaXNhLCBSSVNDVl9JU0FfRVhUX01BWCk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTY0Mi1cXHRcXHRmb3JfZWFjaF9zZXRfYml0KGJpdCwgc291cmNlX2lzYSwgUklTQ1ZfSVNBX0VYVF9NQVgpIHtcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYz04MzE9c3RhdGljIHZvaWQgX19pbml0IHJpc2N2X2ZpbGxfaHdjYXBfZnJvbV9pc2Ffc3RyaW5nKHVuc2lnbmVkIGxvbmcgKmlzYTJod2NhcClcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYy05MTQtXFx0XFx0aWYgKGJpdG1hcF9lbXB0eShyaXNjdl9pc2EsIFJJU0NWX0lTQV9FWFRfTUFYKSlcXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmM6OTE1OlxcdFxcdFxcdGJpdG1hcF9jb3B5KHJpc2N2X2lzYSwgaXNhaW5mby1cXHUwMDNlaXNhLCBSSVNDVl9JU0FfRVhUX01BWCk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTkxNi1cXHRcXHRlbHNlXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmM9OTU3PXN0YXRpYyB2b2lkIF9faW5pdCByaXNjdl9maWxsX3ZlbmRvcl9leHRfbGlzdChpbnQgY3B1KVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTk2NS1cXHRcXHRpZiAoIWV4dF9saXN0LVxcdTAwM2Vpc19pbml0aWFsaXplZCkge1xcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYzo5NjY6XFx0XFx0XFx0Yml0bWFwX2NvcHkoZXh0X2xpc3QtXFx1MDAzZWFsbF9oYXJ0c19pc2FfYml0bWFwLmlzYSxcXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMtOTY3LVxcdFxcdFxcdFxcdCAgICBleHRfbGlzdC1cXHUwMDNlcGVyX2hhcnRfaXNhX2JpdG1hcFtjcHVdLmlzYSxcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYz0xMDE5PXN0YXRpYyBpbnQgX19pbml0IHJpc2N2X2ZpbGxfaHdjYXBfZnJvbV9leHRfbGlzdCh1bnNpZ25lZCBsb25nICppc2EyaHdjYXApXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTA2NS1cXHRcXHRpZiAoYml0bWFwX2VtcHR5KHJpc2N2X2lzYSwgUklTQ1ZfSVNBX0VYVF9NQVgpKVxcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYzoxMDY2OlxcdFxcdFxcdGJpdG1hcF9jb3B5KHJpc2N2X2lzYSwgaXNhaW5mby1cXHUwMDNlaXNhLCBSSVNDVl9JU0FfRVhUX01BWCk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEwNjctXFx0XFx0ZWxzZVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz00NDk2PWludGVsX2dldF9ldmVudF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywgaW50IGlkeCxcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDUxMC1cXHQgICAgICAgIFdBUk5fT05fT05DRSghKGMxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFBFUkZfWDg2X0VWRU5UX0RZTkFNSUMpKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQ1MTE6XFx0XFx0Yml0bWFwX2NvcHkoYzEtXFx1MDAzZWlkeG1zaywgYzItXFx1MDAzZWlkeG1zaywgWDg2X1BNQ19JRFhfTUFYKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ1MTItXFx0XFx0YzEtXFx1MDAzZXdlaWdodCA9IGMyLVxcdTAwM2V3ZWlnaHQ7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHNwZWMuaD03Mj1zdGF0aWMgaW5saW5lIHZvaWQgY29weV9waHlzX2NwdV9wcmVzZW50X21hcCh1bnNpZ25lZCBsb25nICpkc3QpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgtNzMte1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlYy5oOjc0OlxcdGJpdG1hcF9jb3B5KGRzdCwgcGh5c19jcHVfcHJlc2VudF9tYXAsIE1BWF9MT0NBTF9BUElDKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHNwZWMuaC03NS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9NjQ5PXZvaWQga3ZtX3BtdV9oYW5kbGVfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTY1NS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjU2OlxcdGJpdG1hcF9jb3B5KGJpdG1hcCwgcG11LVxcdTAwM2VyZXByb2dyYW1fcG1pLCBYODZfUE1DX0lEWF9NQVgpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy02NTctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9MTExOT1zdGF0aWMgdm9pZCBrdm1fcG11X3RyaWdnZXJfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTExMzItXFx0aWYgKCFrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSkpXFxuYXJjaC94ODYva3ZtL3BtdS5jOjExMzM6XFx0XFx0Yml0bWFwX2NvcHkoYml0bWFwLCBldmVudF9wbWNzLCBYODZfUE1DX0lEWF9NQVgpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xMTM0LVxcdGVsc2UgaWYgKCFiaXRtYXBfYW5kKGJpdG1hcCwgZXZlbnRfcG1jcyxcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9kYml0bWFwLmg9NzA9ZGJpdG1hcF9yZXBsYWNlKHN0cnVjdCBkYml0bWFwICpkbWFwLCB1bnNpZ25lZCBsb25nICpuZXcsIHVuc2lnbmVkIGludCBuYml0cylcXG5kcml2ZXJzL2FuZHJvaWQvZGJpdG1hcC5oLTcxLXtcXG5kcml2ZXJzL2FuZHJvaWQvZGJpdG1hcC5oOjcyOlxcdGJpdG1hcF9jb3B5KG5ldywgZG1hcC1cXHUwMDNlbWFwLCBtaW4oZG1hcC1cXHUwMDNlbmJpdHMsIG5iaXRzKSk7XFxuZHJpdmVycy9hbmRyb2lkL2RiaXRtYXAuaC03My1cXHRrZnJlZShkbWFwLVxcdTAwM2VtYXApO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYtdjUuYz02MDg9c3RhdGljIGludCBjY3BfZmluZF9hbmRfYXNzaWduX2xzYl90b19xKHN0cnVjdCBjY3BfZGV2aWNlICpjY3AsXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi12NS5jLTYzMi1cXHRcXHRpZiAocWxzYl93Z3QgPT0gbHNiX2NudCkge1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LXY1LmM6NjMzOlxcdFxcdFxcdGJpdG1hcF9jb3B5KHFsc2IsIGNtZF9xLVxcdTAwM2Vsc2JtYXNrLCBNQVhfTFNCX0NOVCk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYtdjUuYy02MzQtXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi12NS5jPTY2NT1zdGF0aWMgaW50IGNjcF9hc3NpZ25fbHNicyhzdHJ1Y3QgY2NwX2RldmljZSAqY2NwKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYtdjUuYy03MDctXFx0ICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYtdjUuYzo3MDg6XFx0Yml0bWFwX2NvcHkocWxzYiwgbHNiX3B1YiwgTUFYX0xTQl9DTlQpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LXY1LmMtNzA5LVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eC9vdHhfY3B0cGZfdWNvZGUuYz0xMDU4PXN0YXRpYyBpbnQgZW5nX2dycF91cGRhdGVfbWFza3Moc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eC9vdHhfY3B0cGZfdWNvZGUuYy0xMTAxLVxcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgvb3R4X2NwdHBmX3Vjb2RlLmM6MTEwMjpcXHRcXHRiaXRtYXBfY29weShlbmdzLVxcdTAwM2VibWFwLCB0bXBfYm1hcC5iaXRzLCBlbmdfZ3JwLVxcdTAwM2VnLVxcdTAwM2VlbmdzX251bSk7XFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eC9vdHhfY3B0cGZfdWNvZGUuYy0xMTAzLVxcdH1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgvb3R4X2NwdHBmX3Vjb2RlLmMtMTExOS1cXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4L290eF9jcHRwZl91Y29kZS5jOjExMjA6XFx0XFx0Yml0bWFwX2NvcHkodG1wX2JtYXAuYml0cywgbWlycm9yZWRfZW5ncy1cXHUwMDNlYm1hcCxcXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4L290eF9jcHRwZl91Y29kZS5jLTExMjEtXFx0XFx0XFx0ICAgIGVuZ19ncnAtXFx1MDAzZWctXFx1MDAzZWVuZ3NfbnVtKTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgyL290eDJfY3B0cGZfdWNvZGUuYz04NTU9c3RhdGljIGludCBlbmdfZ3JwX3VwZGF0ZV9tYXNrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmMtOTAyLVxcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgyL290eDJfY3B0cGZfdWNvZGUuYzo5MDM6XFx0XFx0Yml0bWFwX2NvcHkoZW5ncy1cXHUwMDNlYm1hcCwgdG1wX2JtYXAuYml0cywgZW5nX2dycC1cXHUwMDNlZy1cXHUwMDNlZW5nc19udW0pO1xcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgyL290eDJfY3B0cGZfdWNvZGUuYy05MDQtXFx0fVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eDIvb3R4Ml9jcHRwZl91Y29kZS5jLTkyMC1cXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmM6OTIxOlxcdFxcdGJpdG1hcF9jb3B5KHRtcF9ibWFwLmJpdHMsIG1pcnJvcmVkX2VuZ3MtXFx1MDAzZWJtYXAsXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eDIvb3R4Ml9jcHRwZl91Y29kZS5jLTkyMi1cXHRcXHRcXHQgICAgZW5nX2dycC1cXHUwMDNlZy1cXHUwMDNlZW5nc19udW0pO1xcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9kZXZpY2UuYz0zNzk9c3RhdGljIHZvaWQgaWR4ZF93cV9kaXNhYmxlX2NsZWFudXAoc3RydWN0IGlkeGRfd3EgKndxKVxcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9kZXZpY2UuYy0zOTQtXFx0aWYgKHdxLVxcdTAwM2VvcGNhcF9ibWFwKVxcbmRyaXZlcnMvZG1hL2lkeGQvZGV2aWNlLmM6Mzk1OlxcdFxcdGJpdG1hcF9jb3B5KHdxLVxcdTAwM2VvcGNhcF9ibWFwLCBpZHhkLVxcdTAwM2VvcGNhcF9ibWFwLCBJRFhEX01BWF9PUENBUF9CSVRTKTtcXG5kcml2ZXJzL2RtYS9pZHhkL2RldmljZS5jLTM5Ni19XFxuLS1cXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYz0xNzM9c3RhdGljIGludCBpZHhkX3NldHVwX3dxcyhzdHJ1Y3QgaWR4ZF9kZXZpY2UgKmlkeGQpXFxuLS1cXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy0yMzMtXFx0XFx0XFx0fVxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jOjIzNDpcXHRcXHRcXHRiaXRtYXBfY29weSh3cS1cXHUwMDNlb3BjYXBfYm1hcCwgaWR4ZC1cXHUwMDNlb3BjYXBfYm1hcCwgSURYRF9NQVhfT1BDQVBfQklUUyk7XFxuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmMtMjM1LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jPTgyMT1zdGF0aWMgaW50IGlkeGRfZGV2aWNlX2NvbmZpZ19zYXZlKHN0cnVjdCBpZHhkX2RldmljZSAqaWR4ZCxcXG4tLVxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jLTg5Mi1cXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYzo4OTM6XFx0Yml0bWFwX2NvcHkoc2F2ZWRfd3FfZW5hYmxlX21hcCwgaWR4ZC1cXHUwMDNld3FfZW5hYmxlX21hcCwgaWR4ZC1cXHUwMDNlbWF4X3dxcyk7XFxuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmMtODk0LVxcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmM9OTQyPXN0YXRpYyB2b2lkIGlkeGRfZGV2aWNlX2NvbmZpZ19yZXN0b3JlKHN0cnVjdCBpZHhkX2RldmljZSAqaWR4ZCxcXG4tLVxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jLTk4MC1cXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYzo5ODE6XFx0Yml0bWFwX2NvcHkoaWR4ZC1cXHUwMDNld3FfZW5hYmxlX21hcCwgaWR4ZF9zYXZlZC1cXHUwMDNlc2F2ZWRfd3FfZW5hYmxlX21hcCxcXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy05ODItXFx0XFx0ICAgIGlkeGQtXFx1MDAzZW1heF93cXMpO1xcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9zeXNmcy5jPTEyNTE9c3RhdGljIHNzaXplX3Qgd3Ffb3BfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2RtYS9pZHhkL3N5c2ZzLmMtMTI3My1cXG5kcml2ZXJzL2RtYS9pZHhkL3N5c2ZzLmM6MTI3NDpcXHRiaXRtYXBfY29weSh3cS1cXHUwMDNlb3BjYXBfYm1hcCwgb3BtYXNrLCBJRFhEX01BWF9PUENBUF9CSVRTKTtcXG5kcml2ZXJzL2RtYS9pZHhkL3N5c2ZzLmMtMTI3NS1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWxqY2EuYz0yMzA9c3RhdGljIGludCBsamNhX2dwaW9faW5pdF92YWxpZF9tYXNrKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1samNhLmMtMjM2LVxcdFdBUk5fT05fT05DRShuZ3Bpb3MgIT0gbGpjYV9ncGlvLVxcdTAwM2VncGlvX2luZm8tXFx1MDAzZW51bSk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbGpjYS5jOjIzNzpcXHRiaXRtYXBfY29weSh2YWxpZF9tYXNrLCBsamNhX2dwaW8tXFx1MDAzZWdwaW9faW5mby1cXHUwMDNldmFsaWRfcGluX21hcCwgbmdwaW9zKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1samNhLmMtMjM4LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbHRjNDI4My5jPTE2MD1zdGF0aWMgaW50IGx0YzQyODNfaW5pdF92YWxpZF9tYXNrKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBsb25nICp2YWxpZF9tYXNrLFxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbHRjNDI4My5jLTE2NC1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1sdGM0MjgzLmM6MTY1OlxcdGJpdG1hcF9jb3B5KHZhbGlkX21hc2ssIG1hc2ssIG5ncGlvcyk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbHRjNDI4My5jLTE2Ni1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLXBjYTk1M3guYz05NTA9c3RhdGljIGJvb2wgcGNhOTUzeF9pcnFfcGVuZGluZyhzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBsb25nICpwZW5kaW5nKVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jLTk4OC1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTN4LmM6OTg5OlxcdGJpdG1hcF9jb3B5KG9sZF9zdGF0LCBjaGlwLVxcdTAwM2VpcnFfc3RhdCwgZ2MtXFx1MDAzZW5ncGlvKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTN4LmMtOTkwLVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jLTk5NC1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTN4LmM6OTk1OlxcdGJpdG1hcF9jb3B5KGNoaXAtXFx1MDAzZWlycV9zdGF0LCBuZXdfc3RhdCwgZ2MtXFx1MDAzZW5ncGlvKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTN4LmMtOTk2LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tcmVnbWFwLmM9MjkxPXN0cnVjdCBncGlvX3JlZ21hcCAqZ3Bpb19yZWdtYXBfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGdwaW9fcmVnbWFwX2NvbmZpZyAqY29uZmlnKVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tcmVnbWFwLmMtMzYzLVxcdFxcdH1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1yZWdtYXAuYzozNjQ6XFx0XFx0Yml0bWFwX2NvcHkoZ3Bpby1cXHUwMDNlZml4ZWRfZGlyZWN0aW9uX21hc2ssXFxuZHJpdmVycy9ncGlvL2dwaW8tcmVnbWFwLmMtMzY1LVxcdFxcdFxcdCAgICBjb25maWctXFx1MDAzZWZpeGVkX2RpcmVjdGlvbl9tYXNrLCBjaGlwLVxcdTAwM2VuZ3Bpbyk7XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1yZWdtYXAuYy0zNzQtXFx0XFx0fVxcbmRyaXZlcnMvZ3Bpby9ncGlvLXJlZ21hcC5jOjM3NTpcXHRcXHRiaXRtYXBfY29weShncGlvLVxcdTAwM2VmaXhlZF9kaXJlY3Rpb25fb3V0cHV0LFxcbmRyaXZlcnMvZ3Bpby9ncGlvLXJlZ21hcC5jLTM3Ni1cXHRcXHRcXHQgICAgY29uZmlnLVxcdTAwM2VmaXhlZF9kaXJlY3Rpb25fb3V0cHV0LCBjaGlwLVxcdTAwM2VuZ3Bpbyk7XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby14aWxpbnguYz0xNzg9c3RhdGljIGludCB4Z3Bpb19zZXRfbXVsdGlwbGUoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGxvbmcgKm1hc2ssXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby14aWxpbnguYy0xOTUtXFxuZHJpdmVycy9ncGlvL2dwaW8teGlsaW54LmM6MTk2OlxcdGJpdG1hcF9jb3B5KGNoaXAtXFx1MDAzZXN0YXRlLCBzdGF0ZSwgNjQpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jLTE5Ny1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jPTQ3Nz1zdGF0aWMgdm9pZCB4Z3Bpb19pcnFoYW5kbGVyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYylcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jLTUwNS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby14aWxpbnguYzo1MDY6XFx0Yml0bWFwX2NvcHkoY2hpcC1cXHUwMDNlbGFzdF9pcnFfcmVhZCwgaHcsIDY0KTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby14aWxpbnguYy01MDctXFx0Yml0bWFwX29yKGh3LCByaXNpbmcsIGZhbGxpbmcsIDY0KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0zMjU9c3ZtX3JhbmdlICpzdm1fcmFuZ2VfbmV3KHN0cnVjdCBzdm1fcmFuZ2VfbGlzdCAqc3ZtcywgdWludDY0X3Qgc3RhcnQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU5LVxcdGlmIChwLVxcdTAwM2V4bmFja19lbmFibGVkKVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNjA6XFx0XFx0Yml0bWFwX2NvcHkocHJhbmdlLVxcdTAwM2ViaXRtYXBfYWNjZXNzLCBzdm1zLVxcdTAwM2ViaXRtYXBfc3VwcG9ydGVkLFxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zNjEtXFx0XFx0XFx0ICAgIE1BWF9HUFVfSU5TVEFOQ0UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jPTEwNDc9c3ZtX3JhbmdlX3NwbGl0X2FkanVzdChzdHJ1Y3Qgc3ZtX3JhbmdlICpuZXcsIHN0cnVjdCBzdm1fcmFuZ2UgKm9sZCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xMDc5LVxcdG5ldy1cXHUwMDNlbWFwcGVkX3RvX2dwdSA9IG9sZC1cXHUwMDNlbWFwcGVkX3RvX2dwdTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MTA4MDpcXHRiaXRtYXBfY29weShuZXctXFx1MDAzZWJpdG1hcF9hY2Nlc3MsIG9sZC1cXHUwMDNlYml0bWFwX2FjY2VzcywgTUFYX0dQVV9JTlNUQU5DRSk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jOjEwODE6XFx0Yml0bWFwX2NvcHkobmV3LVxcdTAwM2ViaXRtYXBfYWlwLCBvbGQtXFx1MDAzZWJpdG1hcF9haXAsIE1BWF9HUFVfSU5TVEFOQ0UpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xMDgyLVxcdGF0b21pY19zZXQoXFx1MDAyNm5ldy1cXHUwMDNlcXVldWVfcmVmY291bnQsIGF0b21pY19yZWFkKFxcdTAwMjZvbGQtXFx1MDAzZXF1ZXVlX3JlZmNvdW50KSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9MTY3OT1zdGF0aWMgaW50IHN2bV9yYW5nZV92YWxpZGF0ZV9hbmRfbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTE3MDEtXFx0fSBlbHNlIGlmIChjdHgtXFx1MDAzZXByb2Nlc3MtXFx1MDAzZXhuYWNrX2VuYWJsZWQpIHtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MTcwMjpcXHRcXHRiaXRtYXBfY29weShjdHgtXFx1MDAzZWJpdG1hcCwgcHJhbmdlLVxcdTAwM2ViaXRtYXBfYWlwLCBNQVhfR1BVX0lOU1RBTkNFKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMTcwMy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xNzI3LVxcdFxcdFxcdCAgICBwcmFuZ2UtXFx1MDAzZWZsYWdzIFxcdTAwMjYgS0ZEX0lPQ1RMX1NWTV9GTEFHX0dQVV9BTFdBWVNfTUFQUEVEKVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzoxNzI4OlxcdFxcdFxcdFxcdGJpdG1hcF9jb3B5KGN0eC1cXHUwMDNlYml0bWFwLCBwcmFuZ2UtXFx1MDAzZWJpdG1hcF9hY2Nlc3MsIE1BWF9HUFVfSU5TVEFOQ0UpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xNzI5LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0yMDkxPXN0YXRpYyBzdHJ1Y3Qgc3ZtX3JhbmdlICpzdm1fcmFuZ2VfY2xvbmUoc3RydWN0IHN2bV9yYW5nZSAqb2xkKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTIxMTYtXFx0bmV3LVxcdTAwM2V2cmFtX3BhZ2VzID0gb2xkLVxcdTAwM2V2cmFtX3BhZ2VzO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzoyMTE3OlxcdGJpdG1hcF9jb3B5KG5ldy1cXHUwMDNlYml0bWFwX2FjY2Vzcywgb2xkLVxcdTAwM2ViaXRtYXBfYWNjZXNzLCBNQVhfR1BVX0lOU1RBTkNFKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MjExODpcXHRiaXRtYXBfY29weShuZXctXFx1MDAzZWJpdG1hcF9haXAsIG9sZC1cXHUwMDNlYml0bWFwX2FpcCwgTUFYX0dQVV9JTlNUQU5DRSk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTIxMTktXFx0YXRvbWljX3NldChcXHUwMDI2bmV3LVxcdTAwM2VxdWV1ZV9yZWZjb3VudCwgYXRvbWljX3JlYWQoXFx1MDAyNm9sZC1cXHUwMDNlcXVldWVfcmVmY291bnQpKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0zNTE1PXN2bV9yYW5nZV9iZXN0X3ByZWZldGNoX2xvY2F0aW9uKHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zNTQxLVxcdGlmIChwLVxcdTAwM2V4bmFja19lbmFibGVkKVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNTQyOlxcdFxcdGJpdG1hcF9jb3B5KGJpdG1hcCwgcHJhbmdlLVxcdTAwM2ViaXRtYXBfYWlwLCBNQVhfR1BVX0lOU1RBTkNFKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU0My1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9Mzg0Nz1zdm1fcmFuZ2VfZ2V0X2F0dHIoc3RydWN0IGtmZF9wcm9jZXNzICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zOTI3LVxcdFxcdGlmIChwLVxcdTAwM2V4bmFja19lbmFibGVkKVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozOTI4OlxcdFxcdFxcdGJpdG1hcF9jb3B5KGJpdG1hcF9hY2Nlc3MsIHN2bXMtXFx1MDAzZWJpdG1hcF9zdXBwb3J0ZWQsXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM5MjktXFx0XFx0XFx0XFx0ICAgIE1BWF9HUFVfSU5TVEFOQ0UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM5MzQtXFx0fVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozOTM1OlxcdGJpdG1hcF9jb3B5KGJpdG1hcF9hY2Nlc3MsIHN2bXMtXFx1MDAzZWJpdG1hcF9zdXBwb3J0ZWQsIE1BWF9HUFVfSU5TVEFOQ0UpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozOTM2OlxcdGJpdG1hcF9jb3B5KGJpdG1hcF9haXAsIHN2bXMtXFx1MDAzZWJpdG1hcF9zdXBwb3J0ZWQsIE1BWF9HUFVfSU5TVEFOQ0UpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zOTM3LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9zd3NtdS9pbmMvYW1kZ3B1X3NtdS5oPTIwODU9c3RhdGljIGlubGluZSB2b2lkIHNtdV9mZWF0dXJlX2JpdHNfY29weShzdHJ1Y3Qgc211X2ZlYXR1cmVfYml0cyAqZHN0LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9zd3NtdS9pbmMvYW1kZ3B1X3NtdS5oLTIwODgte1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvcG0vc3dzbXUvaW5jL2FtZGdwdV9zbXUuaDoyMDg5OlxcdGJpdG1hcF9jb3B5KGRzdC1cXHUwMDNlYml0cywgc3JjLCBuYml0cyk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9zd3NtdS9pbmMvYW1kZ3B1X3NtdS5oLTIwOTAtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmM9Njc2PWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0X2FzeW5jX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMtNzA1LVxcdGlmICghYml0bWFwX2VtcHR5KHBvd2VyX2RvbWFpbnMtXFx1MDAzZWFzeW5jX3B1dF9kb21haW5zWzFdLmJpdHMsIFBPV0VSX0RPTUFJTl9OVU0pKSB7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmM6NzA2OlxcdFxcdGJpdG1hcF9jb3B5KHBvd2VyX2RvbWFpbnMtXFx1MDAzZWFzeW5jX3B1dF9kb21haW5zWzBdLmJpdHMsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMtNzA3LVxcdFxcdFxcdCAgICBwb3dlcl9kb21haW5zLVxcdTAwM2Vhc3luY19wdXRfZG9tYWluc1sxXS5iaXRzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9zbXAuYz0zNjA9c3RydWN0IG1kcDVfc21wICptZHA1X3NtcF9pbml0KHN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMsIGNvbnN0IHN0cnVjdCBtZHA1X3NtcF9ibG9jayAqY2ZnKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9zbXAuYy0zNzgtXFx0Lyogc3RhdGljYWxseSB0aWVkIE1NQnMgY2Fubm90IGJlIHJlLWFsbG9jYXRlZDogKi9cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1X3NtcC5jOjM3OTpcXHRiaXRtYXBfY29weShzdGF0ZS1cXHUwMDNlc3RhdGUsIGNmZy1cXHUwMDNlcmVzZXJ2ZWRfc3RhdGUsIHNtcC1cXHUwMDNlYmxrX2NudCk7XFxuZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9zbXAuYy0zODAtXFx0bWVtY3B5KHNtcC1cXHUwMDNlcmVzZXJ2ZWQsIGNmZy1cXHUwMDNlcmVzZXJ2ZWQsIHNpemVvZihzbXAtXFx1MDAzZXJlc2VydmVkKSk7XFxuLS1cXG5kcml2ZXJzL2h3bW9uL3BlY2kvZGltbXRlbXAuYz0yMTM9c3RhdGljIGludCBjaGVja19wb3B1bGF0ZWRfZGltbXMoc3RydWN0IHBlY2lfZGltbXRlbXAgKnByaXYpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL3BlY2kvZGltbXRlbXAuYy0yODItXFxuZHJpdmVycy9od21vbi9wZWNpL2RpbW10ZW1wLmM6MjgzOlxcdGJpdG1hcF9jb3B5KHByaXYtXFx1MDAzZWRpbW1fbWFzaywgZGltbV9tYXNrLCBESU1NX05VTVNfTUFYKTtcXG5kcml2ZXJzL2h3bW9uL3BlY2kvZGltbXRlbXAuYy0yODQtXFxuLS1cXG5kcml2ZXJzL2lpby9hZGMvbWF4MTM2My5jPTE0NTM9c3RhdGljIGludCBtYXgxMzYzX2FsbG9jX3NjYW5fbWFza3Moc3RydWN0IGlpb19kZXYgKmluZGlvX2RldilcXG4tLVxcbmRyaXZlcnMvaWlvL2FkYy9tYXgxMzYzLmMtMTQ2Ny1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3QtXFx1MDAzZWNoaXBfaW5mby1cXHUwMDNlbnVtX21vZGVzOyBpKyspXFxuZHJpdmVycy9paW8vYWRjL21heDEzNjMuYzoxNDY4OlxcdFxcdGJpdG1hcF9jb3B5KG1hc2tzICsgQklUU19UT19MT05HUyhNQVgxMzYzX01BWF9DSEFOTkVMUykqaSxcXG5kcml2ZXJzL2lpby9hZGMvbWF4MTM2My5jLTE0NjktXFx0XFx0XFx0ICAgIG1heDEzNjNfbW9kZV90YWJsZVtzdC1cXHUwMDNlY2hpcF9pbmZvLVxcdTAwM2Vtb2RlX2xpc3RbaV1dXFxuLS1cXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tYnVmZmVyLmM9NTEwPXN0YXRpYyBpbnQgaWlvX3NjYW5fbWFza19zZXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldixcXG4tLVxcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1idWZmZXIuYy01MjQtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jOjUyNTpcXHRiaXRtYXBfY29weSh0cmlhbG1hc2ssIGJ1ZmZlci1cXHUwMDNlc2Nhbl9tYXNrLCBtYXNrbGVuZ3RoKTtcXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tYnVmZmVyLmMtNTI2LVxcdHNldF9iaXQoYml0LCB0cmlhbG1hc2spO1xcbi0tXFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jLTUzNi1cXHR9XFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jOjUzNzpcXHRiaXRtYXBfY29weShidWZmZXItXFx1MDAzZXNjYW5fbWFzaywgdHJpYWxtYXNrLCBtYXNrbGVuZ3RoKTtcXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tYnVmZmVyLmMtNTM4LVxcbi0tXFxuZHJpdmVycy9paW8vcHJveGltaXR5L2QzMzIzYWEuYz0yMjI9c3RhdGljIGludCBkMzMyM2FhX3dyaXRlX3NldHRpbmdzKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsXFxuLS1cXG5kcml2ZXJzL2lpby9wcm94aW1pdHkvZDMzMjNhYS5jLTI3My1cXG5kcml2ZXJzL2lpby9wcm94aW1pdHkvZDMzMjNhYS5jOjI3NDpcXHRiaXRtYXBfY29weSh3cml0dGVuX3JlZ2JpdG1hcCwgcmVnYml0bWFwLCBEMzMyM0FBX1JFR19OUl9CSVRTKTtcXG5kcml2ZXJzL2lpby9wcm94aW1pdHkvZDMzMjNhYS5jLTI3NS1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvZXZkZXYuYz04ODQ9c3RhdGljIGludCBldmRldl9oYW5kbGVfZ2V0X3ZhbChzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQsXFxuLS1cXG5kcml2ZXJzL2lucHV0L2V2ZGV2LmMtODk5LVxcbmRyaXZlcnMvaW5wdXQvZXZkZXYuYzo5MDA6XFx0Yml0bWFwX2NvcHkobWVtLCBiaXRzLCBtYXhiaXQpO1xcbmRyaXZlcnMvaW5wdXQvZXZkZXYuYy05MDEtXFxuLS1cXG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYz00OD1zdGF0aWMgaXJxcmV0dXJuX3QgbXQ2Nzc5X2tleXBhZF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYy04OS1cXG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYzo5MDpcXHRiaXRtYXBfY29weShrZXlwYWQtXFx1MDAzZWtleW1hcF9zdGF0ZSwgbmV3X3N0YXRlLCBNVEtfS1BEX05VTV9CSVRTKTtcXG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYy05MS1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvcm1pNC9ybWlfZHJpdmVyLmM9MzcyPXN0YXRpYyBpbnQgcm1pX2RyaXZlcl9zZXRfaXJxX2JpdHMoc3RydWN0IHJtaV9kZXZpY2UgKnJtaV9kZXYsXFxuLS1cXG5kcml2ZXJzL2lucHV0L3JtaTQvcm1pX2RyaXZlci5jLTM5MS1cXG5kcml2ZXJzL2lucHV0L3JtaTQvcm1pX2RyaXZlci5jOjM5MjpcXHRiaXRtYXBfY29weShkYXRhLVxcdTAwM2VjdXJyZW50X2lycV9tYXNrLCBkYXRhLVxcdTAwM2VuZXdfaXJxX21hc2ssIGRhdGEtXFx1MDAzZWlycV9jb3VudCk7XFxuZHJpdmVycy9pbnB1dC9ybWk0L3JtaV9kcml2ZXIuYy0zOTMtXFx0Yml0bWFwX29yKGRhdGEtXFx1MDAzZWZuX2lycV9iaXRzLCBkYXRhLVxcdTAwM2Vmbl9pcnFfYml0cywgbWFzaywgZGF0YS1cXHUwMDNlaXJxX2NvdW50KTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvcm1pNC9ybWlfZHJpdmVyLmM9NDAwPXN0YXRpYyBpbnQgcm1pX2RyaXZlcl9jbGVhcl9pcnFfYml0cyhzdHJ1Y3Qgcm1pX2RldmljZSAqcm1pX2RldixcXG4tLVxcbmRyaXZlcnMvaW5wdXQvcm1pNC9ybWlfZHJpdmVyLmMtNDIxLVxcbmRyaXZlcnMvaW5wdXQvcm1pNC9ybWlfZHJpdmVyLmM6NDIyOlxcdGJpdG1hcF9jb3B5KGRhdGEtXFx1MDAzZWN1cnJlbnRfaXJxX21hc2ssIGRhdGEtXFx1MDAzZW5ld19pcnFfbWFzaywgZGF0YS1cXHUwMDNlaXJxX2NvdW50KTtcXG5kcml2ZXJzL2lucHV0L3JtaTQvcm1pX2RyaXZlci5jLTQyMy1cXG4tLVxcbmRyaXZlcnMvaXJxY2hpcC9pcnEtbWlwcy1naWMuYz04NDM9c3RhdGljIGludCBnaWNfcmVnaXN0ZXJfaXBpX2RvbWFpbihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL2lycWNoaXAvaXJxLW1pcHMtZ2ljLmMtODcwLVxcbmRyaXZlcnMvaXJxY2hpcC9pcnEtbWlwcy1naWMuYzo4NzE6XFx0Yml0bWFwX2NvcHkoaXBpX2F2YWlsYWJsZSwgaXBpX3Jlc3J2LCBHSUNfTUFYX0lOVFJTKTtcXG5kcml2ZXJzL2lycWNoaXAvaXJxLW1pcHMtZ2ljLmMtODcyLVxcbi0tXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYz01ODU9c3RhdGljIGJvb2wgYmxvY2tfYml0bWFwX29wKHN0cnVjdCBkbV9pbnRlZ3JpdHlfYyAqaWMsIHN0cnVjdCBwYWdlX2xpc3QgKmJpdG1hcCxcXG4tLVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNjkwLVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6NjkxOnN0YXRpYyB2b2lkIGJsb2NrX2JpdG1hcF9jb3B5KHN0cnVjdCBkbV9pbnRlZ3JpdHlfYyAqaWMsIHN0cnVjdCBwYWdlX2xpc3QgKmRzdCwgc3RydWN0IHBhZ2VfbGlzdCAqc3JjKVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNjkyLXtcXG4tLVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM9Mzc4Mz1zdGF0aWMgdm9pZCBkbV9pbnRlZ3JpdHlfcmVzdW1lKHN0cnVjdCBkbV90YXJnZXQgKnRpKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy0zODMwLVxcdFxcdFxcdCAgICAhaWMtXFx1MDAzZXJlc2V0X3JlY2FsY3VsYXRlX2ZsYWcpIHtcXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jOjM4MzE6XFx0XFx0XFx0XFx0YmxvY2tfYml0bWFwX2NvcHkoaWMsIGljLVxcdTAwM2VyZWNhbGNfYml0bWFwLCBpYy1cXHUwMDNlam91cm5hbCk7XFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzozODMyOlxcdFxcdFxcdFxcdGJsb2NrX2JpdG1hcF9jb3B5KGljLCBpYy1cXHUwMDNlbWF5X3dyaXRlX2JpdG1hcCwgaWMtXFx1MDAzZWpvdXJuYWwpO1xcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtMzgzMy1cXHRcXHRcXHRcXHRpZiAoIWJsb2NrX2JpdG1hcF9vcChpYywgaWMtXFx1MDAzZWpvdXJuYWwsIDAsIGljLVxcdTAwM2Vwcm92aWRlZF9kYXRhX3NlY3RvcnMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLmgtMjUxLSNkZWZpbmUgWEdCRV9MTV9DT1BZKF9kc3QsIF9kbmFtZSwgX3NyYywgX3NuYW1lKVxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLmg6MjUyOlxcdGJpdG1hcF9jb3B5KChfZHN0KS1cXHUwMDNlbGlua19tb2Rlcy5fZG5hbWUsXFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUuaC0yNTMtXFx0XFx0ICAgIChfc3JjKS1cXHUwMDNlbGlua19tb2Rlcy5fc25hbWUsXFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmM9MzQyNT1zdGF0aWMgc3NpemVfdCBibG9ja2VkX2ZsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTM0NDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmM6MzQ0MjpcXHRiaXRtYXBfY29weShhZGFwLVxcdTAwM2VzZ2UuYmxvY2tlZF9mbCwgdCwgYWRhcC1cXHUwMDNlc2dlLmVncl9zeik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmMtMzQ0My1cXHRiaXRtYXBfZnJlZSh0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MTczMj1zdGF0aWMgaW50IGhjbGdlX3Zwb3J0X3NldHVwKHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQsIHUxNiBudW1fdHFwcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMTczOS1cXHRuaWMtXFx1MDAzZWFlX2FsZ28gPSBcXHUwMDI2YWVfYWxnbztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjE3NDA6XFx0Yml0bWFwX2NvcHkobmljLVxcdTAwM2VudW1hX25vZGVfbWFzay5iaXRzLCBoZGV2LVxcdTAwM2VudW1hX25vZGVfbWFzay5iaXRzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMTc0MS1cXHRcXHQgICAgTUFYX05VTU5PREVTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MjQxND1zdGF0aWMgaW50IGhjbGdlX2luaXRfcm9jZV9iYXNlX2luZm8oc3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMjQzMi1cXHRyb2NlLVxcdTAwM2VhZV9hbGdvID0gbmljLVxcdTAwM2VhZV9hbGdvO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MjQzMzpcXHRiaXRtYXBfY29weShyb2NlLVxcdTAwM2VudW1hX25vZGVfbWFzay5iaXRzLCBuaWMtXFx1MDAzZW51bWFfbm9kZV9tYXNrLmJpdHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0yNDM0LVxcdFxcdCAgICBNQVhfTlVNTk9ERVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jPTQ0Nz1zdGF0aWMgaW50IGhjbGdldmZfc2V0X2hhbmRsZV9pbmZvKHN0cnVjdCBoY2xnZXZmX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy00NTMtXFx0bmljLVxcdTAwM2VwZGV2ID0gaGRldi1cXHUwMDNlcGRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM6NDU0OlxcdGJpdG1hcF9jb3B5KG5pYy1cXHUwMDNlbnVtYV9ub2RlX21hc2suYml0cywgaGRldi1cXHUwMDNlbnVtYV9ub2RlX21hc2suYml0cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtNDU1LVxcdFxcdCAgICBNQVhfTlVNTk9ERVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jPTIxNDQ9c3RhdGljIGludCBoY2xnZXZmX2luaXRfcm9jZV9iYXNlX2luZm8oc3RydWN0IGhjbGdldmZfZGV2ICpoZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTIxNjItXFx0cm9jZS1cXHUwMDNlYWVfYWxnbyA9IG5pYy1cXHUwMDNlYWVfYWxnbztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM6MjE2MzpcXHRiaXRtYXBfY29weShyb2NlLVxcdTAwM2VudW1hX25vZGVfbWFzay5iaXRzLCBuaWMtXFx1MDAzZW51bWFfbm9kZV9tYXNrLmJpdHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTIxNjQtXFx0XFx0ICAgIE1BWF9OVU1OT0RFUyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmM9Mzg1PWhpbmljM19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYy0zOTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jOjM5OTpcXHRiaXRtYXBfY29weShsaW5rX3NldHRpbmdzLVxcdTAwM2VsaW5rX21vZGVzLnN1cHBvcnRlZCwgc2V0dGluZ3Muc3VwcG9ydGVkLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYy00MDAtXFx0XFx0ICAgIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jOjQwMTpcXHRiaXRtYXBfY29weShsaW5rX3NldHRpbmdzLVxcdTAwM2VsaW5rX21vZGVzLmFkdmVydGlzaW5nLCBzZXR0aW5ncy5hZHZlcnRpc2luZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmMtNDAyLVxcdFxcdCAgICBfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYz01MjM4PXN0YXRpYyBpbnQgaTQwZV9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jLTUyNTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYzo1MjUxOlxcdGJpdG1hcF9jb3B5KG9yaWdfZmxhZ3MsIHBmLVxcdTAwM2VmbGFncywgSTQwRV9QRl9GTEFHU19OQklUUyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYzo1MjUyOlxcdGJpdG1hcF9jb3B5KG5ld19mbGFncywgcGYtXFx1MDAzZWZsYWdzLCBJNDBFX1BGX0ZMQUdTX05CSVRTKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jLTUyNTMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jLTU0NjAtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYzo1NDYxOlxcdGJpdG1hcF9jb3B5KHBmLVxcdTAwM2VmbGFncywgbmV3X2ZsYWdzLCBJNDBFX1BGX0ZMQUdTX05CSVRTKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jLTU0NjItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYz0xNzM5PXN0YXRpYyBpbnQgaWNlX3NldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jLTE3NTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmM6MTc1NjpcXHRiaXRtYXBfY29weShvcmlnX2ZsYWdzLCBwZi1cXHUwMDNlZmxhZ3MsIElDRV9QRl9GTEFHU19OQklUUyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMtMTc1Ny1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSUNFX1BSSVZfRkxBR19BUlJBWV9TSVpFOyBpKyspIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc2NoZWQuYz0yNjE3PWljZV9zYXZlX2FnZ190Y19iaXRtYXAoc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCB1MzIgYWdnX2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zY2hlZC5jLTI2MjQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zY2hlZC5jOjI2MjU6XFx0Yml0bWFwX2NvcHkoYWdnX2luZm8tXFx1MDAzZXJlcGxheV90Y19iaXRtYXAsIHRjX2JpdG1hcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmMtMjYyNi1cXHRcXHQgICAgSUNFX01BWF9UUkFGRklDX0NMQVNTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc2NoZWQuYz0yODYxPWljZV9zYXZlX2FnZ192c2lfdGNfYml0bWFwKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgdTMyIGFnZ19pZCwgdTE2IHZzaV9oYW5kbGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmMtMjg3My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmM6Mjg3NDpcXHRiaXRtYXBfY29weShhZ2dfdnNpX2luZm8tXFx1MDAzZXJlcGxheV90Y19iaXRtYXAsIHRjX2JpdG1hcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmMtMjg3NS1cXHRcXHQgICAgSUNFX01BWF9UUkFGRklDX0NMQVNTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmM9MjI4MT1zdGF0aWMgdm9pZCBpY2VfZ2V0X3JlY3BfdG9fcHJvZl9tYXAoc3RydWN0IGljZV9odyAqaHcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jLTIyOTQtXFx0XFx0Yml0bWFwX2Zyb21fYXJyNjQocl9iaXRtYXAsIFxcdTAwMjZyZWNwX2Fzc29jLCBJQ0VfTUFYX05VTV9SRUNJUEVTKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jOjIyOTU6XFx0XFx0Yml0bWFwX2NvcHkocHJvZmlsZV90b19yZWNpcGVbaV0sIHJfYml0bWFwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMtMjI5Ni1cXHRcXHRcXHQgICAgSUNFX01BWF9OVU1fUkVDSVBFUyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jPTIzMTU9aWNlX2dldF9yZWNwX2ZybV9mdyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9zd19yZWNpcGUgKnJlY3BzLCB1OCByaWQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jLTI0MzItXFx0LyogQ29weSByZXN1bHQgaW5kZXhlcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmM6MjQzMzpcXHRiaXRtYXBfY29weShyZWNwc1tyaWRdLnJlc19pZHhzLCByZXN1bHRfYm0sIElDRV9NQVhfRlZfV09SRFMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMtMjQzNC1cXHRpZiAoaXNfYWRkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYz01MzA5PWljZV9hZGRfYWR2X3JlY2lwZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9hZHZfbGt1cF9lbGVtICpsa3VwcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMtNTQzNy1cXHRcXHQvKiBVcGRhdGUgcHJvZmlsZSB0byByZWNpcGUgYml0bWFwIGFycmF5ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYzo1NDM4OlxcdFxcdGJpdG1hcF9jb3B5KHByb2ZpbGVfdG9fcmVjaXBlW2Z2aXQtXFx1MDAzZXByb2ZpbGVfaWRdLCByX2JpdG1hcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jLTU0MzktXFx0XFx0XFx0ICAgIElDRV9NQVhfTlVNX1JFQ0lQRVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvY29yZV9hY2xfZmxleF9rZXlzLmM9MjU1PXN0YXRpYyBpbnQgbWx4c3dfYWZrX3BpY2tlcihzdHJ1Y3QgbWx4c3dfYWZrICptbHhzd19hZmssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9jb3JlX2FjbF9mbGV4X2tleXMuYy0zMDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvY29yZV9hY2xfZmxleF9rZXlzLmM6MzAyOlxcdFxcdGJpdG1hcF9jb3B5KHBpY2tlcltibG9ja19pbmRleF0uY2hvc2VuX2VsZW1lbnQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvY29yZV9hY2xfZmxleF9rZXlzLmMtMzAzLVxcdFxcdFxcdCAgICBwaWNrZXJbYmxvY2tfaW5kZXhdLmVsZW1lbnQsIE1MWFNXX0FGS19FTEVNRU5UX01BWCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV92bGFuLmM9MTYxPXZvaWQgc3Bhcng1X3VwZGF0ZV9md2Qoc3RydWN0IHNwYXJ4NSAqc3Bhcng1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfdmxhbi5jLTE3My1cXHRcXHRcXHQvKiBBbGxvdyB0byBzZW5kIHRvIGFsbCBicmlkZ2VkIGJ1dCBzZWxmICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfdmxhbi5jOjE3NDpcXHRcXHRcXHRiaXRtYXBfY29weSh3b3JrbWFzaywgc3Bhcng1LVxcdTAwM2VicmlkZ2VfZndkX21hc2ssIFNQWDVfUE9SVFMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X3ZsYW4uYy0xNzUtXFx0XFx0XFx0Y2xlYXJfYml0KHBvcnQsIHdvcmttYXNrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jPTMxOD1zdGF0aWMgdm9pZCBpcHZsYW5fc2V0X211bHRpY2FzdF9tYWNfZmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYy0zMzctXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmM6MzM4OlxcdFxcdGJpdG1hcF9jb3B5KGlwdmxhbi1cXHUwMDNlbWFjX2ZpbHRlcnMsIG1jX2ZpbHRlcnMsXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtMzM5LVxcdFxcdFxcdCAgICBJUFZMQU5fTUFDX0ZJTFRFUl9TSVpFKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz04MTA9c3RhdGljIHZvaWQgbWFjdmxhbl9jb21wdXRlX2ZpbHRlcih1bnNpZ25lZCBsb25nICptY19maWx0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtODI5LVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzo4MzA6XFx0XFx0Yml0bWFwX2NvcHkobWNfZmlsdGVyLCBmaWx0ZXIsIE1BQ1ZMQU5fTUNfRklMVEVSX1NaKTtcXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtODMxLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmM9NTI2PXN0YXRpYyBpbnQgYXRoMTFrX3B1bGxfc2VydmljZV9yZWFkeV90bHYoc3RydWN0IGF0aDExa19iYXNlICphYixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmMtNTYyLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmM6NTYzOnN0YXRpYyB2b2lkIGF0aDExa193bWlfc2VydmljZV9iaXRtYXBfY29weShzdHJ1Y3QgYXRoMTFrX3BkZXZfd21pICp3bWksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYy01NjQtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgdTMyICp3bWlfc3ZjX2JtKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYz01NzY9c3RhdGljIGludCBhdGgxMWtfd21pX3Rsdl9zdmNfcmR5X3BhcnNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIHUxNiB0YWcsIHUxNiBsZW4sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jLTU5Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jOjU5ODpcXHRcXHRcXHRhdGgxMWtfd21pX3NlcnZpY2VfYml0bWFwX2NvcHkod21pX2hhbmRsZSwgcHRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jLTU5OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmM9NjQ2PXN0YXRpYyBpbnQgYXRoMTJrX3B1bGxfc2VydmljZV9yZWFkeV90bHYoc3RydWN0IGF0aDEya19iYXNlICphYixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMtNjgyLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmM6NjgzOnN0YXRpYyB2b2lkIGF0aDEya193bWlfc2VydmljZV9iaXRtYXBfY29weShzdHJ1Y3QgYXRoMTJrX3dtaV9wZGV2ICp3bWksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYy02ODQtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgdTMyICp3bWlfc3ZjX2JtKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYz02OTY9c3RhdGljIGludCBhdGgxMmtfd21pX3N2Y19yZHlfcGFyc2Uoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTE2IHRhZywgdTE2IGxlbixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMtNzE3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmM6NzE4OlxcdFxcdFxcdGF0aDEya193bWlfc2VydmljZV9iaXRtYXBfY29weSh3bWlfaGFuZGxlLCBwdHIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMtNzE5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jaGFuLmM9NTkzPWVudW0gcnR3ODlfZW50aXR5X21vZGUgcnR3ODlfZW50aXR5X3JlY2FsYyhzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NoYW4uYy02MDQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jaGFuLmM6NjA1OlxcdGJpdG1hcF9jb3B5KHJlY2FsY19tYXAsIGhhbC1cXHUwMDNlZW50aXR5X21hcCwgTlVNX09GX1JUVzg5X0NIQU5DVFgpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY2hhbi5jLTYwNi1cXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmM9MTExOT1zdGF0aWMgaW50IGF3Y2NfaHdtb25fZmFuc19pbml0KHN0cnVjdCB3bWlfZGV2aWNlICp3ZGV2KVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLXdtYXguYy0xMTcyLVxcdFxcdGJpdG1hcF9nYXRoZXIoZ2F0aGVyLCBmYW5fdGVtcHMsIHByaXYtXFx1MDAzZXRlbXBfc2Vuc29ycywgQVdDQ19JRF9CSVRNQVBfU0laRSk7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLXdtYXguYzoxMTczOlxcdFxcdGJpdG1hcF9jb3B5KFxcdTAwMjZmYW5fZGF0YS1cXHUwMDNlYXV0b19jaGFubmVsc190ZW1wLCBnYXRoZXIsIEJJVFNfUEVSX0xPTkcpO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmMtMTE3NC1cXHRcXHRwcml2LVxcdTAwM2VmYW5fZGF0YVtpXSA9IGZhbl9kYXRhO1xcbi0tXFxuZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYz00MTA9c3RhdGljIHZvaWQgX19pbml0IGlzYXBucF9wYXJzZV9pcnFfcmVzb3VyY2Uoc3RydWN0IHBucF9kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMtNDIyLVxcdGJpdG1hcF96ZXJvKG1hcC5iaXRzLCBQTlBfSVJRX05SKTtcXG5kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jOjQyMzpcXHRiaXRtYXBfY29weShtYXAuYml0cywgXFx1MDAyNmJpdHMsIDE2KTtcXG5kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jLTQyNC1cXG4tLVxcbmRyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYz0yNjI9c3RhdGljIF9faW5pdCB2b2lkIHBucGJpb3NfcGFyc2VfaXJxX29wdGlvbihzdHJ1Y3QgcG5wX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9wbnAvcG5wYmlvcy9yc3BhcnNlci5jLTI3Mi1cXHRiaXRtYXBfemVybyhtYXAuYml0cywgUE5QX0lSUV9OUik7XFxuZHJpdmVycy9wbnAvcG5wYmlvcy9yc3BhcnNlci5jOjI3MzpcXHRiaXRtYXBfY29weShtYXAuYml0cywgXFx1MDAyNmJpdHMsIDE2KTtcXG5kcml2ZXJzL3BucC9wbnBiaW9zL3JzcGFyc2VyLmMtMjc0LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTY3MT1zdGF0aWMgYm9vbCB2ZmlvX2FwX21kZXZfZmlsdGVyX2Nkb21zKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjc0LVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMjowNy42OTEwNTA0MzdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA4ODgwMDA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZTogVW5kZXJzdGFuZGluZyBgYml0bWFwX2NvcHlgKipcblxuT2theSwgc28gSSBzZWUgYGJpdG1hcF9jb3B5YCBhbmQgaW1tZWRpYXRlbHkgcmVnaXN0ZXIgdGhhdCBpdCdzIGxpa2VseSBhIG1hY3JvIG9yIGlubGluZSBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGtlcm5lbCBjb2RlLCB0aGF0J3MgYWxtb3N0IGEgY2VydGFpbnR5LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgKmRvZXMqLiBUaW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgaXMgYGluY2x1ZGUvbGludXgvYml0bWFwLmhgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uLCBhbG9uZyB3aXRoIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uIGFuZCwgb2YgY291cnNlLCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHRoYXQgSSdsbCBuZWVkIHRvIGFuYWx5emUuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMjoxNC43Nzk4NTQwOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0ODEzMjEyNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSB2b2lkIGJpdG1hcF9jb3B5XFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEyOjE3LjgyNzk5ODg0N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk0Mjk1NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWxpemluZyB0aGUgT2J2aW91cyoqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gZGlkbid0IEkganVzdCBzZWUgc29tZXRoaW5nIGFib3V0IGBiaXRtYXBfY29weWAgaW4gdGhlIG91dHB1dCBmcm9tIHRoZSBwcmV2aW91cyBzZWFyY2g/IEFoLCB5ZXMsIHRoZXJlIGl0IGlzIGluIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYDogc3BlY2lmaWNhbGx5IHRoZSBkZWZpbml0aW9uIG9mIGBiaXRtYXBfY29weV9hbmRfZXh0ZW5kYC4gT2theSwgSSB3YXMgdG9vIGhhc3R5LiBMZXQncyBub3QgcmVpbnZlbnQgdGhlIHdoZWVsIGhlcmUuIExldCdzIGdvIGJhY2sgYW5kIGdyZXAgc3BlY2lmaWNhbGx5IGZvciB0aGF0IGZ1bmN0aW9uIG5hbWUsIGBiaXRtYXBfY29weWAsIHdpdGhpbiB0aGF0IHNhbWUgaGVhZGVyIGZpbGUsIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhhdCBmdW5jdGlvbi4gSXQncyBwcm9iYWJseSBhbHJlYWR5IHRoZXJlIGFuZCBJIGp1c3QgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoZXJlIGl0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk0OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMjoyMS42MjIyOTc3NTFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTYyNzM5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaXRtYXBfY29weVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2JpdG1hcC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYml0bWFwLmg9MTc9c3RydWN0IGRldmljZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtNDQtICogIGJpdG1hcF9maWxsKGRzdCwgbmJpdHMpICAgICAgICAgICAgICAgICAgICAgKmRzdCA9IH4wVUxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjQ1OiAqICBiaXRtYXBfY29weShkc3QsIHNyYywgbmJpdHMpICAgICAgICAgICAgICAgICpkc3QgPSAqc3JjXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC00Ni0gKiAgYml0bWFwX2FuZChkc3QsIHNyYzEsIHNyYzIsIG5iaXRzKSAgICAgICAgICAqZHN0ID0gKnNyYzEgXFx1MDAyNiAqc3JjMlxcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD0yNTg9c3RhdGljIF9fYWx3YXlzX2lubGluZVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6MjU5OnZvaWQgYml0bWFwX2NvcHkodW5zaWduZWQgbG9uZyAqZHN0LCBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsIHVuc2lnbmVkIGludCBuYml0cylcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI2MC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oPTI3Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaDoyNzM6dm9pZCBiaXRtYXBfY29weV9jbGVhcl90YWlsKHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCB1bnNpZ25lZCBpbnQgbmJpdHMpXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNzQte1xcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6Mjc1OlxcdGJpdG1hcF9jb3B5KGRzdCwgc3JjLCBuYml0cyk7XFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNzYtXFx0aWYgKG5iaXRzICUgQklUU19QRVJfTE9ORylcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMjc5LVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6MjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBiaXRtYXBfY29weV9hbmRfZXh0ZW5kKHVuc2lnbmVkIGxvbmcgKnRvLFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMjgxLVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMjk1LSAqIEluIGJvdGggY2FzZXMgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIHdoZW4gY29weWluZyBkYXRhIGZyb20vdG8gYXJyYXlzIG9mXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaDoyOTY6ICogdTMyLiBCdXQgaW4gTEU2NCBjYXNlLCB0eXBlY2FzdCBpbiBiaXRtYXBfY29weV9jbGVhcl90YWlsKCkgbWF5IGxlYWRcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI5Ny0gKiB0byBvdXQtb2YtYm91bmQgYWNjZXNzLiBUbyBhdm9pZCB0aGF0LCBib3RoIExFIGFuZCBCRSB2YXJpYW50cyBvZiA2NC1iaXRcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI5ODogKiBhcmNoaXRlY3R1cmVzIGFyZSBub3QgdXNpbmcgYml0bWFwX2NvcHlfY2xlYXJfdGFpbCgpLlxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMjk5LSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD0zMDM9dm9pZCBiaXRtYXBfdG9fYXJyMzIodTMyICpidWYsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMzA2LSNkZWZpbmUgYml0bWFwX2Zyb21fYXJyMzIoYml0bWFwLCBidWYsIG5iaXRzKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjMwNzpcXHRiaXRtYXBfY29weV9jbGVhcl90YWlsKCh1bnNpZ25lZCBsb25nICopIChiaXRtYXApLFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTMwOC1cXHRcXHRcXHQoY29uc3QgdW5zaWduZWQgbG9uZyAqKSAoYnVmKSwgKG5iaXRzKSlcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTMwOS0jZGVmaW5lIGJpdG1hcF90b19hcnIzMihidWYsIGJpdG1hcCwgbmJpdHMpXFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6MzEwOlxcdGJpdG1hcF9jb3B5X2NsZWFyX3RhaWwoKHVuc2lnbmVkIGxvbmcgKikgKGJ1ZiksXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMzExLVxcdFxcdFxcdChjb25zdCB1bnNpZ25lZCBsb25nICopIChiaXRtYXApLCAobmJpdHMpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD0zMjA9dm9pZCBiaXRtYXBfdG9fYXJyNjQodTY0ICpidWYsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgaW50IG5iaXRzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMzIyLSNkZWZpbmUgYml0bWFwX2Zyb21fYXJyNjQoYml0bWFwLCBidWYsIG5iaXRzKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjMyMzpcXHRiaXRtYXBfY29weV9jbGVhcl90YWlsKCh1bnNpZ25lZCBsb25nICopKGJpdG1hcCksIChjb25zdCB1bnNpZ25lZCBsb25nICopKGJ1ZiksIChuYml0cykpXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0zMjQtI2RlZmluZSBiaXRtYXBfdG9fYXJyNjQoYnVmLCBiaXRtYXAsIG5iaXRzKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjMyNTpcXHRiaXRtYXBfY29weV9jbGVhcl90YWlsKCh1bnNpZ25lZCBsb25nICopKGJ1ZiksIChjb25zdCB1bnNpZ25lZCBsb25nICopKGJpdG1hcCksIChuYml0cykpXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0zMjYtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEyOjIxLjcyMzkzMTkxOFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTk5MDQwMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYml0bWFwX2NvcHlgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRob3JvdWdobHksIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgYmFja2dyb3VuZC4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIGlzIGltcGxlbWVudGVkLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY29kZSwgY29uc2lkZXIgdGhlIGNvbnN0cmFpbnRzLCBhbmQgdGhlIGV4cGVjdGVkIHBlcmZvcm1hbmNlLiBJIHdhbnQgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLCBhbmQgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIHVzZWQuIEknbGwgbmVlZCB0byBhc3Nlc3MgaXRzIGVmZmljaWVuY3kgYW5kIG1ha2Ugc3VyZSBpdCBhbGlnbnMgd2l0aCBiZXN0IHByYWN0aWNlcyBmb3IgbXkgYXJlYSBvZiBleHBlcnRpc2UuIEknbGwgYmUgbG9va2luZyBmb3IgcG9zc2libGUgZWRnZSBjYXNlcyBvciBzY2VuYXJpb3MgdGhhdCBtaWdodCBjYXVzZSBpc3N1ZXMuIEknbGwgc3RhcnQgYnkgbWFraW5nIHN1cmUgaXQncyBjb3JyZWN0IGFuZCB0aGVuIG1vdmUgb24gdG8gb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE3MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEyOjI0LjcyMjk3NTM3NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9iaXRtYXAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNTgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTg6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcbiAyNTk6XFx0dm9pZCBiaXRtYXBfY29weSh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgdW5zaWduZWQgaW50IG5iaXRzKVxcbiAyNjA6XFx0e1xcbiAyNjE6XFx0XFx0dW5zaWduZWQgaW50IGxlbiA9IGJpdG1hcF9zaXplKG5iaXRzKTtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0aWYgKHNtYWxsX2NvbnN0X25iaXRzKG5iaXRzKSlcXG4gMjY0OlxcdFxcdFxcdCpkc3QgPSAqc3JjO1xcbiAyNjU6XFx0XFx0ZWxzZVxcbiAyNjY6XFx0XFx0XFx0bWVtY3B5KGRzdCwgc3JjLCBsZW4pO1xcbiAyNjc6XFx0fVxcbiAyNjg6XFx0XFxuIDI2OTpcXHQvKlxcbiAyNzA6XFx0ICogQ29weSBiaXRtYXAgYW5kIGNsZWFyIHRhaWwgYml0cyBpbiBsYXN0IHdvcmQuXFxuIDI3MTpcXHQgKi9cXG4gMjcyOlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG4gMjczOlxcdHZvaWQgYml0bWFwX2NvcHlfY2xlYXJfdGFpbCh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgdW5zaWduZWQgaW50IG5iaXRzKVxcbiAyNzQ6XFx0e1xcbiAyNzU6XFx0XFx0Yml0bWFwX2NvcHkoZHN0LCBzcmMsIG5iaXRzKTtcXG4gMjc2OlxcdFxcdGlmIChuYml0cyAlIEJJVFNfUEVSX0xPTkcpXFxuIDI3NzpcXHRcXHRcXHRkc3RbbmJpdHMgLyBCSVRTX1BFUl9MT05HXSBcXHUwMDI2PSBCSVRNQVBfTEFTVF9XT1JEX01BU0sobmJpdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMjoyNC43MjMwOTMyNTZaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEwMjg1MTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERhdGEgQ29weWluZyBMb2dpYyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBiaXRtYXBfc2l6ZWAgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJpdHMgKGBuYml0c2ApIGFuZCBpcyB0aGVuIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IGB1bnNpZ25lZCBsb25nYCBlbGVtZW50cyBhcmUgaW4gdGhlIGJpdG1hcCwgdGFraW5nIGludG8gYWNjb3VudCB0aGVpciBzaXplLiBUaGUgYGJpdG1hcF9jb3B5YCBmdW5jdGlvbiwgdGhlcmVmb3JlLCB3b3JrcyBhdCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhvc2UgZnVsbCBgdW5zaWduZWQgbG9uZ2BzLlxuXG5UaGlzIGlzIGltbWVkaWF0ZWx5IHJlbGV2YW50IGJlY2F1c2UgSSBzZWUgYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCBpcyBkZWNsYXJpbmcgYW4gYXJyYXkgb2YgYHVuc2lnbmVkIGxvbmdgLiBJZiB0aGUgbWFjcm8ganVzdCBkZWNsYXJlcyB0aGUgYXJyYXksIHRoZSBjb3B5IG9wZXJhdGlvbiB1c2VzIGEgc2l6ZSBsYXJnZSBlbm91Z2ggdG8gY29weSB0aGlzIGVudGlyZSBhcnJheSB1c2luZyBgYml0bWFwX2NvcHlgLlxuXG5Ob3cgdGhlIGludGVyZXN0aW5nIHBvaW50OiBXaGF0IGlmIHRoZSBkZWNsYXJhdGlvbiB3aXRoIGBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKWAgaXMgKm5vdCogaW5pdGlhbGl6aW5nIHRoZSBhcnJheT8gVGhlIGNvcHkgaXMgZnJvbSBgcC1cdTAwM2VvX2ZsYWdzYCB0byBgb19mbGFnc2AsIGFuZCBpZiBgcC1cdTAwM2VvX2ZsYWdzYCBpcyAqYWxzbyogYW4gYXJyYXkgb2YgYHVuc2lnbmVkIGxvbmdgLCBhbmQgc2luY2UgdGhlIGBiaXRtYXBfY29weWAgaXMgY29uZmlndXJlZCB0byBjb3B5IHRoZSBlbnRpcmUgYXJyYXkgaW4gYSBibG9jayB1c2luZyBgQklUU19UT19MT05HUyhuYml0cykgKiBzaXplb2YodW5zaWduZWQgbG9uZylgLCB0aGUgZW50aXJlIGRlc3RpbmF0aW9uIGFycmF5IHdpbGwgYmUgcG9wdWxhdGVkIGluIHRoZSBjb3B5LlxuXG5UaHVzLCB0aGUgY29weSBvcGVyYXRpb24gd2l0aGluIGBpcF90dW5uZWxfZmxhZ3NfY29weWAgZW5zdXJlcyB0aGF0IGBvX2ZsYWdzYCB3aWxsIGJlICpmdWxseSogaW5pdGlhbGl6ZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB0aGUgYml0d2lzZSBjb3B5LiBGb2xsb3dpbmcgdGhhdCwgd2UgaGF2ZSBgZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3Mob19mbGFncylgLiBTbyB0aGlzIGV4cGxhaW5zIGhvdyB0aGUgZmxhZ3MgYXJlIHRoZW4gY29udmVydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY2MCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEyOjMwLjgyNTk0OTc0OVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxOTIxMDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFnc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dyZS5jPTI3PXN0YXRpYyBpbnQgbWx4NWVfZ2VuX2lwX3R1bm5lbF9oZWFkZXJfZ3JldGFwKGNoYXIgYnVmW10sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dyZS5jLTQ5LVxcdGhkcl9sZW5cXHQ9IG1seDVlX3RjX3R1bl9jYWxjX2hsZW5fZ3JldGFwKGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ3JlLmM6NTA6XFx0Z3JlaC1cXHUwMDNlZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyh0dW5fa2V5LVxcdTAwM2V0dW5fZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ3JlLmMtNTEtXFx0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9LRVlfQklULCB0dW5fa2V5LVxcdTAwM2V0dW5fZmxhZ3MpKSB7XFxuLS1cXG5pbmNsdWRlL25ldC9ncmUuaD02Mz1zdGF0aWMgaW5saW5lIHZvaWQgZ3JlX2ZsYWdzX3RvX3RubF9mbGFncyh1bnNpZ25lZCBsb25nICpkc3QsIF9fYmUxNiBmbGFncylcXG4tLVxcbmluY2x1ZGUvbmV0L2dyZS5oLTc3LVxcbmluY2x1ZGUvbmV0L2dyZS5oOjc4OnN0YXRpYyBpbmxpbmUgX19iZTE2IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKnRmbGFncylcXG5pbmNsdWRlL25ldC9ncmUuaC03OS17XFxuLS1cXG5pbmNsdWRlL25ldC9ncmUuaD0xMDA9c3RhdGljIGlubGluZSB2b2lkIGdyZV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9sZW4sXFxuLS1cXG5pbmNsdWRlL25ldC9ncmUuaC0xMTEtXFx0Z3JlaCA9IChzdHJ1Y3QgZ3JlX2Jhc2VfaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbmluY2x1ZGUvbmV0L2dyZS5oOjExMjpcXHRncmVoLVxcdTAwM2VmbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKGZsYWdzKTtcXG5pbmNsdWRlL25ldC9ncmUuaC0xMTMtXFx0Z3JlaC1cXHUwMDNlcHJvdG9jb2wgPSBwcm90bztcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTgyMT1zdGF0aWMgaW50IGlwZ3JlX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTg1OC1cXG5uZXQvaXB2NC9pcF9ncmUuYzo4NTk6XFx0aV9mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXFx1MDAzZWlfZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTg2MC1cXHRpcF90dW5uZWxfZmxhZ3NfZnJvbV9iZTE2KHAtXFx1MDAzZWlfZmxhZ3MsIGlfZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjg2MTpcXHRvX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cXHUwMDNlb19mbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtODYyLVxcdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYocC1cXHUwMDNlb19mbGFncywgb19mbGFncyk7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz04OTQ9c3RhdGljIGludCBpcGdyZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTkxMC1cXHRncmVoID0gKHN0cnVjdCBncmVfYmFzZV9oZHIgKikoaXBoKzEpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjkxMTpcXHRncmVoLVxcdTAwM2VmbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHQtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTkxMi1cXHRncmVoLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKHR5cGUpO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTU2NT1zdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTU3Ny1cXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HUkVfSUZMQUdTLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjE1Nzg6XFx0XFx0XFx0IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXFx1MDAzZWlfZmxhZ3MpKSB8fFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE1NzktXFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX09GTEFHUyxcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNTgwOlxcdFxcdFxcdCBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhvX2ZsYWdzKSkgfHxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTgxLVxcdCAgICBubGFfcHV0X2JlMzIoc2tiLCBJRkxBX0dSRV9JS0VZLCBwLVxcdTAwM2VpX2tleSkgfHxcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0xMjM1PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfcGFybV90b191c2VyKHN0cnVjdCBpcDZfdG5sX3Bhcm0yICp1LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyNDctXFx0dS1cXHUwMDNlb19rZXkgPSBwLVxcdTAwM2VvX2tleTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTI0ODpcXHR1LVxcdTAwM2VpX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cXHUwMDNlaV9mbGFncyk7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjEyNDk6XFx0dS1cXHUwMDNlb19mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXFx1MDAzZW9fZmxhZ3MpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMjUwLVxcdG1lbWNweSh1LVxcdTAwM2VuYW1lLCBwLVxcdTAwM2VuYW1lLCBzaXplb2YodS1cXHUwMDNlbmFtZSkpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIxMTU9c3RhdGljIGludCBpcDZncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjE0Mi1cXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HUkVfSUZMQUdTLFxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMTQzOlxcdFxcdFxcdCBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVxcdTAwM2VpX2ZsYWdzKSkgfHxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjE0NC1cXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HUkVfT0ZMQUdTLFxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMTQ1OlxcdFxcdFxcdCBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhvX2ZsYWdzKSkgfHxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjE0Ni1cXHQgICAgbmxhX3B1dF9iZTMyKHNrYiwgSUZMQV9HUkVfSUtFWSwgcC1cXHUwMDNlaV9rZXkpIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEyOjMzLjQ0NTE2NzgyOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzg3MjQ1MDQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgR1JFIFR1bm5lbCBGbGFnIEhhbmRsaW5nIGFuZCBDb25jdXJyZW5jeSBGaXgqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHJlZ2FyZGluZyBgZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3NgIGlzIGNvbmZpcm1lZDogaXQncyBhIHNpbXBsZSBiaXRtYXAgY29udmVyc2lvbiB0byBgX19iZTE2YC4gVGhlIGZ1bmN0aW9uIGNoZWNrcyBzcGVjaWZpYyBiaXRzLCBzbyB0aGVyZSdzIG5vIHdheSBmb3IgaXQgdG8gY2F1c2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrLiBUaGlzIGNvbmZpcm1zIHRoYXQgS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgaGVyZS4gVGhlIGNvcmUgcHJvYmxlbSBpcyBhIGNvbmN1cnJlbmN5IGlzc3VlIG9yIGEgbG9naWMgZXJyb3IgcmVsYXRlZCB0byB0aGUgdHVubmVsIHBhcmFtZXRlcnMsIHNwZWNpZmljYWxseSB0aGUgYG9fZmxhZ3NgIGZpZWxkIGluIGB0dW5uZWwtXHUwMDNlcGFybXNgLlxuXG5UaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgdGhlIG1vZGlmaWNhdGlvbiBvZiBgdC1cdTAwM2VwYXJtcy5vX2ZsYWdzYCBlaXRoZXIgZHVyaW5nIHRyYW5zbWlzc2lvbiAoYGVyc3Bhbl94bWl0YCwgYGlwZ3JlX3htaXRgKSBvciBkdXJpbmcgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2ApLiBUaGlzIGlzIGluaGVyZW50bHkgZmxhd2VkIGJlY2F1c2UgYHQtXHUwMDNlcGFybXNgIGhvbGRzIHRoZSAqY29uZmlndXJlZCogc3RhdGUgb2YgdGhlIHR1bm5lbC4gSWYgd2UncmUgbW9kaWZ5aW5nIGl0IGRpcmVjdGx5IGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZyBvciBkdW1wIG9wZXJhdGlvbnMsIHdlJ3JlIGludHJvZHVjaW5nIGEgZGF0YSByYWNlLiBTdWJzZXF1ZW50IHBhY2tldHMgb3IgZHVtcHMgbWlnaHQgcmVhZCB0aGlzIG1vZGlmaWVkIChhbmQgcG90ZW50aWFsbHkgaW5jb25zaXN0ZW50KSBzdGF0ZSwgd2hpY2gsIHdoaWxlIGxlYWRpbmcgdG8gaW5jb3JyZWN0IGJlaGF2aW9yLCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gVGhlIHByb2JsZW0gaXMgYSBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGBfX2dyZV94bWl0YCBjaGFuZ2VzLiBBaCwgdGhlIG9sZCB2ZXJzaW9uIGNvcGllZCBgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgIHRvIGBmbGFnc2AgYW5kIHBhc3NlZCB0aGF0IHRvIGBncmVfYnVpbGRfaGVhZGVyYC4gQnV0IGBpcGdyZV94bWl0YCBhbmQgYGVyc3Bhbl94bWl0YCB3ZXJlIG1vZGlmeWluZyB0aGUgb3JpZ2luYWwgYHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzYCBiZWZvcmUgY2FsbGluZyBgX19ncmVfeG1pdGAuIFRoZSBmaXggbm93IGNvcGllcyBgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgIHRvIGEgbG9jYWwgYGZsYWdzYCB2YXJpYWJsZSAqYmVmb3JlKiBtb2RpZmljYXRpb24sIGFuZCBwYXNzZXMgKnRoYXQqIHRvIGBfX2dyZV94bWl0YC4gVGhpcyBpcyBhIHByZXR0eSBzb2xpZCBmaXguIEl0IHByZXZlbnRzIG1vZGlmaWNhdGlvbiBvZiB0aGUgc2hhcmVkIGB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFnc2AuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSB0aGF0IGBmbGFnc2AgaXMgaW5pdGlhbGl6ZWQgaW4gYGlwZ3JlX3htaXRgOiBgSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpYCBkZWNsYXJlcyB0aGUgYXJyYXkgYW5kIGBpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpYCBkb2VzIHRoZSBjb3B5aW5nLiBBbmQgd2Uga25vdyB0aGF0IGBiaXRtYXBfY29weWAgZG9lcyB0aGUgcmlnaHQgdGhpbmcsIGNvcHlpbmcgdGhlIGZ1bGwgYXJyYXkuIFNvLCB0aGUgbG9jYWwgYGZsYWdzYCB2YXJpYWJsZSAqaXMqIGZ1bGx5IGluaXRpYWxpemVkLiBTYW1lIGdvZXMgZm9yIGBpcGdyZV9maWxsX2luZm9gIC0gaXQgZGVjbGFyZXMgYW5kIGluaXRpYWxpemVzIHRoZSBsb2NhbCBgb19mbGFnc2AgaW4gdGhlIHNhbWUgd2F5LlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgYSBjb25jdXJyZW5jeS9sb2dpYyBidWcsIG5vdCBhbiB1bmluaXRpYWxpemVkIHJlYWQuIFRoZSBjb3JyZWN0IGFwcHJvYWNoIGhlcmUgaXMgdG8gdXNlIEtBU0FOIChvciBzdGFuZGFyZCB0ZXN0aW5nKSB0byBjYXRjaCByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gS01TQU4sIHdoaWNoIGlzIGZvciBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGlzIG5vdCBuZWVkZWQuIFRoaXMgaXMgYSBmaXggZm9yIGRhdGEgcmFjZXMgYW5kIGxvZ2ljYWwgZXJyb3JzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDczMiwiT3V0cHV0VG9rZW5zIjoyMTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTI6NDcuMzE3NjIxOTI0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2dpYyBidWcgd2hlcmUgc2hhcmVkIHR1bm5lbCBwYXJhbWV0ZXJzIChgdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzYCkgd2VyZSBiZWluZyBpbmNvcnJlY3RseSBtb2RpZmllZCBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiAoYGVyc3Bhbl94bWl0YCwgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGApIGFuZCBuZXRsaW5rIGR1bXBzIChgaXBncmVfZmlsbF9pbmZvYCwgYGVyc3Bhbl9maWxsX2luZm9gKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGRhdGEgcmFjZXMgYW5kIGNvcnJ1cHRlZCB0dW5uZWwgc3RhdGUuIFRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBjb3BpZXMgb2YgdGhlIGZsYWdzIChgSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1NgKSB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBpcF90dW5uZWxfZmxhZ3NfY29weSgpYCAod2hpY2ggdXNlcyBgYml0bWFwX2NvcHkoKWAgdG8gY29weSB0aGUgZW50aXJlIGB1bnNpZ25lZCBsb25nYCBhcnJheSkuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGFueSByaXNrIG9mIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4vS0NTQU4gYW5kIGxvZ2ljIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggZGF0YSByYWNlcyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9naWMgYnVnIHdoZXJlIHNoYXJlZCB0dW5uZWwgcGFyYW1ldGVycyAoYHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgaW5jb3JyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gKGBlcnNwYW5feG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgKSBhbmQgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCkuIFRoaXMgY291bGQgbGVhZCB0byBkYXRhIHJhY2VzIGFuZCBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLiBUaGUgZml4IGludHJvZHVjZXMgbG9jYWwgY29waWVzIG9mIHRoZSBmbGFncyAoYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCkgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgaXBfdHVubmVsX2ZsYWdzX2NvcHkoKWAgKHdoaWNoIHVzZXMgYGJpdG1hcF9jb3B5KClgIHRvIGNvcHkgdGhlIGVudGlyZSBgdW5zaWduZWQgbG9uZ2AgYXJyYXkpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOL0tDU0FOIGFuZCBsb2dpYyB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGRhdGEgcmFjZXMgYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpw9v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-12 15:48:28 +0000 UTC FinishedAt: 2026-08-12 16:12:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IPGRE", "NET_IPGRE_DEMUX", "IPV6_GRE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ac155a26750a595703e7dadff84735456d75a479", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_IPGRE", "NET_IPGRE_DEMUX", "IPV6_GRE" ], "series_id": "2f0be438-d7d5-45c4-ae72-66651d5be0cb" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ipgre_xmit", "erspan_xmit", "gre_tap_xmit", "ip6erspan_tunnel_xmit", "ipgre_fill_info", "erspan_fill_info", "ip6gre_fill_info" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGdyZV94bWl0JiMzNDssCiAgICAmIzM0O2Vyc3Bhbl94bWl0JiMzNDssCiAgICAmIzM0O2dyZV90YXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcDZlcnNwYW5fdHVubmVsX3htaXQmIzM0OywKICAgICYjMzQ7aXBncmVfZmlsbF9pbmZvJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9maWxsX2luZm8mIzM0OywKICAgICYjMzQ7aXA2Z3JlX2ZpbGxfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGJ1ZyB3aGVyZSBzaGFyZWQgdHVubmVsIHBhcmFtZXRlcnMgKGB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgaW5jb3JyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gKGBlcnNwYW5feG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgKSBhbmQgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCkuIFRoaXMgY291bGQgbGVhZCB0byBkYXRhIHJhY2VzIGFuZCBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLiBUaGUgZml4IGludHJvZHVjZXMgbG9jYWwgY29waWVzIG9mIHRoZSBmbGFncyAoYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCkgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgaXBfdHVubmVsX2ZsYWdzX2NvcHkoKWAgKHdoaWNoIHVzZXMgYGJpdG1hcF9jb3B5KClgIHRvIGNvcHkgdGhlIGVudGlyZSBgdW5zaWduZWQgbG9uZ2AgYXJyYXkpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOL0tDU0FOIGFuZCBsb2dpYyB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGRhdGEgcmFjZXMgYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdHJhbnNtaXNzaW9uIGFuZCBuZXRsaW5rIGluZm8gZHVtcGluZyBwYXRocyBmb3IgR1JFIGFuZCBFUlNQQU4gdHVubmVscyBvdmVyIElQdjQgYW5kIElQdjYuIEl0IGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSB0dW5uZWwmIzM5O3Mgb3V0cHV0IGZsYWdzIChgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgKSB3ZXJlIGJlaW5nIG1vZGlmaWVkIGR1cmluZyB0cmFuc21pc3Npb24gb3IgbmV0bGluayBkdW1wcywgd2hpY2ggY291bGQgbGVhZCB0byByYWNlIGNvbmRpdGlvbnMgb3IgdW5pbnRlbmRlZCBzdGF0ZSBjaGFuZ2VzLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgdHJhZmZpYyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNjE5ZWIxNTc4MTczNDEwMzljMTVjYjY5NzdmNDM4OGUyYmZhNWRlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE2OjEwOjE5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmNcbmluZGV4IDZhOTI2MDc0MDFlOGEuLjgyMzA5ZWZkNDE3ZTAgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9ncmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfZ3JlLmNcbkBAIC00NzUsMTIgJiM0Mzs0NzUsOSBAQCBzdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcbiBzdGF0aWMgdm9pZCBfX2dyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKnRubF9wYXJhbXMsXG4tXHRcdCAgICAgICBfX2JlMTYgcHJvdG8pXG4mIzQzO1x0XHQgICAgICAgX19iZTE2IHByb3RvLCBjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xuLVxuLVx0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbiBcbiBcdC8qIFB1c2ggR1JFIGhlYWRlci4gKi9cbiBcdGdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWwtXHUwMDNldHVuX2hsZW4sXG5AQCAtNjUzLDYgJiM0Mzs2NTAsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4gXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnRubF9wYXJhbXM7XG4gXG4gXHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKVxuQEAgLTY4OCwxMSAmIzQzOzY4NiwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHR0bmxfcGFyYW1zID0gXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaDtcbiBcdH1cbiBcbi1cdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULFxuLVx0XHRcdFx0XHQgICAgICB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncykpKVxuJiM0MztcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4mIzQzO1xuJiM0MztcdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBmbGFncykpKVxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuIFxuLVx0X19ncmVfeG1pdChza2IsIGRldiwgdG5sX3BhcmFtcywgc2tiLVx1MDAzZXByb3RvY29sKTtcbiYjNDM7XHRfX2dyZV94bWl0KHNrYiwgZGV2LCB0bmxfcGFyYW1zLCBza2ItXHUwMDNlcHJvdG9jb2wsIGZsYWdzKTtcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG4gZnJlZV9za2I6XG5AQCAtNzA1LDYgJiM0Mzs3MDQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcbiBcdGJvb2wgdHJ1bmNhdGUgPSBmYWxzZTtcbiBcdF9fYmUxNiBwcm90bztcbiBcbkBAIC03MjgsMTAgJiM0Mzs3MjgsMTIgQEAgc3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHRydW5jYXRlID0gdHJ1ZTtcbiBcdH1cbiBcbiYjNDM7XHRpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuJiM0MztcbiBcdC8qIFB1c2ggRVJTUEFOIGhlYWRlciAqL1xuIFx0aWYgKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDApIHtcbiBcdFx0cHJvdG8gPSBodG9ucyhFVEhfUF9FUlNQQU4pO1xuLVx0XHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuJiM0MztcdFx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIGZsYWdzKTtcbiBcdH0gZWxzZSBpZiAodHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIgPT0gMSkge1xuIFx0XHRlcnNwYW5fYnVpbGRfaGVhZGVyKHNrYiwgbnRvaGwodHVubmVsLVx1MDAzZXBhcm1zLm9fa2V5KSxcbiBcdFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlaW5kZXgsXG5AQCAtNzQ2LDggJiM0Mzs3NDgsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0Z290byBmcmVlX3NrYjtcbiBcdH1cbiBcbi1cdF9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4tXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoLCBwcm90byk7XG4mIzQzO1x0X19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIGZsYWdzKTtcbiYjNDM7XHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoLCBwcm90bywgZmxhZ3MpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbiBmcmVlX3NrYjpcbkBAIC03NjAsNiAmIzQzOzc2Miw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBncmVfdGFwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4gXG4gXHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKVxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuQEAgLTc2OSwxNCAmIzQzOzc3MiwxNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXHR9XG4gXG4tXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCxcbi1cdFx0XHRcdFx0ICAgICAgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpKSlcbiYjNDM7XHRpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgZmxhZ3MpKSlcbiBcdFx0Z290byBmcmVlX3NrYjtcbiBcbiBcdGlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tKSlcbiBcdFx0Z290byBmcmVlX3NrYjtcbiBcbi1cdF9fZ3JlX3htaXQoc2tiLCBkZXYsIFx1MDAyNnR1bm5lbC1cdTAwM2VwYXJtcy5pcGgsIGh0b25zKEVUSF9QX1RFQikpO1xuJiM0MztcdF9fZ3JlX3htaXQoc2tiLCBkZXYsIFx1MDAyNnR1bm5lbC1cdTAwM2VwYXJtcy5pcGgsIGh0b25zKEVUSF9QX1RFQiksIGZsYWdzKTtcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG4gZnJlZV9za2I6XG5AQCAtMTU2MCwxMiAmIzQzOzE1NjQsMTUgQEAgc3RhdGljIHNpemVfdCBpcGdyZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHN0YXRpYyBpbnQgaXBncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCA9IFx1MDAyNnQtXHUwMDNlcGFybXM7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAgPSBcdTAwMjZ0LVx1MDAzZXBhcm1zO1xuIFx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1Mob19mbGFncyk7XG4gXG4gXHRpcF90dW5uZWxfZmxhZ3NfY29weShvX2ZsYWdzLCBwLVx1MDAzZW9fZmxhZ3MpO1xuIFxuJiM0MztcdGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgIT0gMCBcdTAwMjZcdTAwMjYgIXQtXHUwMDNlY29sbGVjdF9tZClcbiYjNDM7XHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgb19mbGFncyk7XG4mIzQzO1xuIFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9HUkVfTElOSywgcC1cdTAwM2VsaW5rKSB8fFxuIFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX0lGTEFHUyxcbiBcdFx0XHQgZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cdTAwM2VpX2ZsYWdzKSkgfHxcbkBAIC0xNjA4LDEyICYjNDM7MTYxNSw5IEBAIHN0YXRpYyBpbnQgaXBncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gc3RhdGljIGludCBlcnNwYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4gXHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyIFx1MDAzYz0gMikge1xuLVx0XHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyICE9IDAgXHUwMDI2XHUwMDI2ICF0LVx1MDAzZWNvbGxlY3RfbWQpXG4tXHRcdFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCB0LVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuLVxuIFx0XHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR1JFX0VSU1BBTl9WRVIsIHQtXHUwMDNlZXJzcGFuX3ZlcikpXG4gXHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jXG5pbmRleCBiODQzMTE2ZTliNzAzLi4wYjNmMzg2YjUxYTJkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbkBAIC05NjQsNyAmIzQzOzk2NCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tID86IHQtXHUwMDNlaGxlbikpXG4gXHRcdGdvdG8gdHhfZXJyO1xuIFxuLVx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHQtXHUwMDNlcGFybXMub19mbGFncyk7XG4gXHRJUENCKHNrYiktXHUwMDNlZmxhZ3MgPSAwO1xuIFxuIFx0LyogRm9yIGNvbGxlY3RfbWQgbW9kZSwgZGVyaXZlIGZsNiBmcm9tIHRoZSB0dW5uZWwga2V5LFxuQEAgLTIxMTUsOCAmIzQzOzIxMTQsOCBAQCBzdGF0aWMgc2l6ZV90IGlwNmdyZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHN0YXRpYyBpbnQgaXA2Z3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdHN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCA9IFx1MDAyNnQtXHUwMDNlcGFybXM7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCA9IFx1MDAyNnQtXHUwMDNlcGFybXM7XG4gXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKTtcbiBcbiBcdGlwX3R1bm5lbF9mbGFnc19jb3B5KG9fZmxhZ3MsIHAtXHUwMDNlb19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICAgJiMzNDtORVRfSVBHUkVfREVNVVgmIzM0OywKICAgICYjMzQ7SVBWNl9HUkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcGdyZV94bWl0JiMzNDssCiAgICAmIzM0O2Vyc3Bhbl94bWl0JiMzNDssCiAgICAmIzM0O2dyZV90YXBfeG1pdCYjMzQ7LAogICAgJiMzNDtpcDZlcnNwYW5fdHVubmVsX3htaXQmIzM0OywKICAgICYjMzQ7aXBncmVfZmlsbF9pbmZvJiMzNDssCiAgICAmIzM0O2Vyc3Bhbl9maWxsX2luZm8mIzM0OywKICAgICYjMzQ7aXA2Z3JlX2ZpbGxfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgdHJhbnNtaXNzaW9uIGFuZCBuZXRsaW5rIGluZm8gZHVtcGluZyBwYXRocyBmb3IgR1JFIGFuZCBFUlNQQU4gdHVubmVscyBvdmVyIElQdjQgYW5kIElQdjYuIEl0IGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSB0dW5uZWwmIzM5O3Mgb3V0cHV0IGZsYWdzIChgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgKSB3ZXJlIGJlaW5nIG1vZGlmaWVkIGR1cmluZyB0cmFuc21pc3Npb24gb3IgbmV0bGluayBkdW1wcywgd2hpY2ggY291bGQgbGVhZCB0byByYWNlIGNvbmRpdGlvbnMgb3IgdW5pbnRlbmRlZCBzdGF0ZSBjaGFuZ2VzLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgdHJhZmZpYyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjE5ZWIxNTc4MTczNDEwMzljMTVjYjY5NzdmNDM4OGUyYmZhNWRlMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDEyIDE2OjEwOjE5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCA2YTkyNjA3NDAxZThhLi44MjMwOWVmZDQxN2UwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtNDc1LDEyICYjNDM7NDc1LDkgQEAgc3RhdGljIGludCBncmVfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiAKIHN0YXRpYyB2b2lkIF9fZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBpcGhkciAqdG5sX3BhcmFtcywKLQkJICAgICAgIF9fYmUxNiBwcm90bykKJiM0MzsJCSAgICAgICBfX2JlMTYgcHJvdG8sIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKQogewogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7Ci0JSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpOwotCi0JaXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncyk7CiAKIAkvKiBQdXNoIEdSRSBoZWFkZXIuICovCiAJZ3JlX2J1aWxkX2hlYWRlcihza2IsIHR1bm5lbC0mZ3Q7dHVuX2hsZW4sCkBAIC02NTMsNiAmIzQzOzY1MCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpcGdyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CUlQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTsKIAljb25zdCBzdHJ1Y3QgaXBoZHIgKnRubF9wYXJhbXM7CiAKIAlpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKQpAQCAtNjg4LDExICYjNDM7Njg2LDEyIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpcGdyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCXRubF9wYXJhbXMgPSAmYW1wO3R1bm5lbC0mZ3Q7cGFybXMuaXBoOwogCX0KIAotCWlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULAotCQkJCQkgICAgICB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpKSkKJiM0MzsJaXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncyk7CiYjNDM7CiYjNDM7CWlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBmbGFncykpKQogCQlnb3RvIGZyZWVfc2tiOwogCi0JX19ncmVfeG1pdChza2IsIGRldiwgdG5sX3BhcmFtcywgc2tiLSZndDtwcm90b2NvbCk7CiYjNDM7CV9fZ3JlX3htaXQoc2tiLCBkZXYsIHRubF9wYXJhbXMsIHNrYi0mZ3Q7cHJvdG9jb2wsIGZsYWdzKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBmcmVlX3NrYjoKQEAgLTcwNSw2ICYjNDM7NzA0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7CiAJYm9vbCB0cnVuY2F0ZSA9IGZhbHNlOwogCV9fYmUxNiBwcm90bzsKIApAQCAtNzI4LDEwICYjNDM7NzI4LDEyIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQl0cnVuY2F0ZSA9IHRydWU7CiAJfQogCiYjNDM7CWlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwomIzQzOwogCS8qIFB1c2ggRVJTUEFOIGhlYWRlciAqLwogCWlmICh0dW5uZWwtJmd0O2Vyc3Bhbl92ZXIgPT0gMCkgewogCQlwcm90byA9IGh0b25zKEVUSF9QX0VSU1BBTik7Ci0JCV9fY2xlYXJfYml0KElQX1RVTk5FTF9TRVFfQklULCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwomIzQzOwkJX19jbGVhcl9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIGZsYWdzKTsKIAl9IGVsc2UgaWYgKHR1bm5lbC0mZ3Q7ZXJzcGFuX3ZlciA9PSAxKSB7CiAJCWVyc3Bhbl9idWlsZF9oZWFkZXIoc2tiLCBudG9obCh0dW5uZWwtJmd0O3Bhcm1zLm9fa2V5KSwKIAkJCQkgICAgdHVubmVsLSZndDtpbmRleCwKQEAgLTc0Niw4ICYjNDM7NzQ4LDggQEAgc3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCWdvdG8gZnJlZV9za2I7CiAJfQogCi0JX19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncyk7Ci0JX19ncmVfeG1pdChza2IsIGRldiwgJmFtcDt0dW5uZWwtJmd0O3Bhcm1zLmlwaCwgcHJvdG8pOwomIzQzOwlfX2NsZWFyX2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgZmxhZ3MpOwomIzQzOwlfX2dyZV94bWl0KHNrYiwgZGV2LCAmYW1wO3R1bm5lbC0mZ3Q7cGFybXMuaXBoLCBwcm90bywgZmxhZ3MpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGZyZWVfc2tiOgpAQCAtNzYwLDYgJiM0Mzs3NjIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7CiAKIAlpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKQogCQlnb3RvIGZyZWVfc2tiOwpAQCAtNzY5LDE0ICYjNDM7NzcyLDE1IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBncmVfdGFwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKLQlpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwKLQkJCQkJICAgICAgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKSkpCiYjNDM7CWlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgZmxhZ3MpKSkKIAkJZ290byBmcmVlX3NrYjsKIAogCWlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSkpCiAJCWdvdG8gZnJlZV9za2I7CiAKLQlfX2dyZV94bWl0KHNrYiwgZGV2LCAmYW1wO3R1bm5lbC0mZ3Q7cGFybXMuaXBoLCBodG9ucyhFVEhfUF9URUIpKTsKJiM0MzsJX19ncmVfeG1pdChza2IsIGRldiwgJmFtcDt0dW5uZWwtJmd0O3Bhcm1zLmlwaCwgaHRvbnMoRVRIX1BfVEVCKSwgZmxhZ3MpOwogCXJldHVybiBORVRERVZfVFhfT0s7CiAKIGZyZWVfc2tiOgpAQCAtMTU2MCwxMiAmIzQzOzE1NjQsMTUgQEAgc3RhdGljIHNpemVfdCBpcGdyZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiBzdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwID0gJmFtcDt0LSZndDtwYXJtczsKJiM0MzsJY29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwID0gJmFtcDt0LSZndDtwYXJtczsKIAlJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKTsKIAogCWlwX3R1bm5lbF9mbGFnc19jb3B5KG9fZmxhZ3MsIHAtJmd0O29fZmxhZ3MpOwogCiYjNDM7CWlmICh0LSZndDtlcnNwYW5fdmVyICE9IDAgJmFtcDsmYW1wOyAhdC0mZ3Q7Y29sbGVjdF9tZCkKJiM0MzsJCV9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgb19mbGFncyk7CiYjNDM7CiAJaWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9HUkVfTElOSywgcC0mZ3Q7bGluaykgfHwKIAkgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HUkVfSUZMQUdTLAogCQkJIGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtJmd0O2lfZmxhZ3MpKSB8fApAQCAtMTYwOCwxMiAmIzQzOzE2MTUsOSBAQCBzdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiBzdGF0aWMgaW50IGVyc3Bhbl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlpZiAodC0mZ3Q7ZXJzcGFuX3ZlciAmbHQ7PSAyKSB7Ci0JCWlmICh0LSZndDtlcnNwYW5fdmVyICE9IDAgJmFtcDsmYW1wOyAhdC0mZ3Q7Y29sbGVjdF9tZCkKLQkJCV9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgdC0mZ3Q7cGFybXMub19mbGFncyk7Ci0KIAkJaWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dSRV9FUlNQQU5fVkVSLCB0LSZndDtlcnNwYW5fdmVyKSkKIAkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZ3JlLmMgYi9uZXQvaXB2Ni9pcDZfZ3JlLmMKaW5kZXggYjg0MzExNmU5YjcwMy4uMGIzZjM4NmI1MWEyZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2lwNl9ncmUuYwpAQCAtOTY0LDcgJiM0Mzs5NjQsNiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXA2ZXJzcGFuX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJaWYgKHNrYl9jb3dfaGVhZChza2IsIGRldi0mZ3Q7bmVlZGVkX2hlYWRyb29tID86IHQtJmd0O2hsZW4pKQogCQlnb3RvIHR4X2VycjsKIAotCV9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCB0LSZndDtwYXJtcy5vX2ZsYWdzKTsKIAlJUENCKHNrYiktJmd0O2ZsYWdzID0gMDsKIAogCS8qIEZvciBjb2xsZWN0X21kIG1vZGUsIGRlcml2ZSBmbDYgZnJvbSB0aGUgdHVubmVsIGtleSwKQEAgLTIxMTUsOCAmIzQzOzIxMTQsOCBAQCBzdGF0aWMgc2l6ZV90IGlwNmdyZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiBzdGF0aWMgaW50IGlwNmdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IF9faXA2X3RubF9wYXJtICpwID0gJmFtcDt0LSZndDtwYXJtczsKJiM0MzsJY29uc3Qgc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwljb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnAgPSAmYW1wO3QtJmd0O3Bhcm1zOwogCUlQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpOwogCiAJaXBfdHVubmVsX2ZsYWdzX2NvcHkob19mbGFncywgcC0mZ3Q7b19mbGFncyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgR1JFL0VSU1BBTiBUdW5uZWwgRmxhZyBNb2RpZmljYXRpb24qKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBjbGVhcmx5IHRhcmdldGVkIGF0IGBuZXQvaXB2NC9pcF9ncmUuY2AgYW5kIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgLCBzcGVjaWZpY2FsbHkgaG93IHR1bm5lbCBmbGFncyBhcmUgaGFuZGxlZCBpbiBHUkUgYW5kIEVSU1BBTiB0dW5uZWxzLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFib3V0IGF2b2lkaW5nIG1vZGlmaWNhdGlvbnMgdG8gYHR1bm5lbC0mZ3Q7cGFybXMub19mbGFnc2AgZHVyaW5nIGNyaXRpY2FsIHRyYW5zbWlzc2lvbiBwaGFzZXMsIG5hbWVseSBpbiBgZXJzcGFuX3htaXRgIGFuZCBgaXA2ZXJzcGFuX3R1bm5lbF94bWl0YC4gSW5zdGVhZCBvZiBkaXJlY3RseSBtZXNzaW5nIHdpdGggdGhhdCBnbG9iYWwsIHRoZXkmIzM5O3JlIHVzaW5nIGEgbG9jYWwgYGZsYWdzYCBjb3B5IHdoaWNoIGdldHMgcGFzc2VkIHRvIGBfX2dyZV94bWl0YC4gU21hcnQuIFRoaXMgYWxzbyBpbnZvbHZlcyBmaXhpbmcgYGVyc3Bhbl9maWxsX2luZm9gIGFuZCBgaXBncmVfZmlsbF9pbmZvYCB0byBlbnN1cmUgdGhleSBkb24mIzM5O3QgY29ycnVwdCBgdC0mZ3Q7cGFybXMub19mbGFnc2Agd2hlbiBkdW1waW5nIG5ldGxpbmsgaW5mby4KCkZ1bmN0aW9uYWxseSwgdGhpcyBzbWVsbHMgbGlrZSBhIHJhY2UgY29uZGl0aW9uIHByZXZlbnRpb24gb3IgYSBmaXggZm9yIHVuaW50ZW5kZWQgc3RhdGUgY2hhbmdlcyBpbiBgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzYC4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIHBheWluZyBhdHRlbnRpb24gdG8uIExldCYjMzk7cyBsaXN0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gYmUgc3VyZToKCkluIGBuZXQvaXB2NC9pcF9ncmUuY2A6IGBfX2dyZV94bWl0YCwgYGlwZ3JlX3htaXRgLCBgZXJzcGFuX3htaXRgLCBgZ3JlX3RhcF94bWl0YCwgYGlwZ3JlX2ZpbGxfaW5mb2AsIGFuZCBgZXJzcGFuX2ZpbGxfaW5mb2AuCgpBbmQgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2A6IGBpcDZlcnNwYW5fdHVubmVsX3htaXRgIGFuZCBgaXA2Z3JlX2ZpbGxfaW5mb2AuCgpZZXAsIHRoZXNlIGFyZSBhbGwgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMsIGNvbmNlcm5pbmcgR1JFIGFuZCBFUlNQQU4gdHVubmVscy4gSSYjMzk7ZCBjb25zaWRlciB0aGlzIHNpZ25pZmljYW50IGVub3VnaCB0byBmbGFnIGl0IGFzIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUuIE15IGltbWVkaWF0ZSBpbmNsaW5hdGlvbiBpcyB0byBhc3NpZ24gYFdvcnRoRnV6emluZz10cnVlYC4KCkxldCYjMzk7cyBrZWVwIHRoZXNlIHN5bWJvbHMgaW4gZm9jdXM6IGBpcGdyZV94bWl0YCwgYGVyc3Bhbl94bWl0YCwgYGdyZV90YXBfeG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgLCBgaXBncmVfZmlsbF9pbmZvYCwgYGVyc3Bhbl9maWxsX2luZm9gLCBhbmQgYGlwNmdyZV9maWxsX2luZm9gLgoKTm93LCBiZWZvcmUgSSBncmVlbi1saWdodCB0aGlzIGZ1bGx5LCBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBgbmV0L2lwdjQvaXBfZ3JlLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19ORVRfSVBHUkVgIGlzIGVuYWJsZWQsIGFuZCBgbmV0L2lwdjYvaXA2X2dyZS5jYCBuZWVkcyBgQ09ORklHX0lQVjZfR1JFYC4gT2theSwgSSBuZWVkIHRvIHZlcmlmeSB0aG9zZSBjb25maWcgb3B0aW9ucyBhcmUgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FVF9JUEdSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9LY29uZmlnPTE2Mj1jb25maWcgTkVUX0lQSVBcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE3OS1cbm5ldC9pcHY0L0tjb25maWc6MTgwOmNvbmZpZyBORVRfSVBHUkVfREVNVVhcbm5ldC9pcHY0L0tjb25maWctMTgxLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEdSRSBkZW11bHRpcGxleGVyXCYjMzQ7XG4tLVxubmV0L2lwdjQvS2NvbmZpZz0xODY9Y29uZmlnIE5FVF9JUF9UVU5ORUxcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE5MS1cbm5ldC9pcHY0L0tjb25maWc6MTkyOmNvbmZpZyBORVRfSVBHUkVcbm5ldC9pcHY0L0tjb25maWctMTkzLVx0dHJpc3RhdGUgXCYjMzQ7SVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MTk0Olx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcbm5ldC9pcHY0L0tjb25maWctMTk1LVx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTIwNi1cbm5ldC9pcHY0L0tjb25maWc6MjA3OmNvbmZpZyBORVRfSVBHUkVfQlJPQURDQVNUXG5uZXQvaXB2NC9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7SVA6IGJyb2FkY2FzdCBHUkUgb3ZlciBJUFwmIzM0O1xubmV0L2lwdjQvS2NvbmZpZzoyMDk6XHRkZXBlbmRzIG9uIElQX01VTFRJQ0FTVCBcdTAwMjZcdTAwMjYgTkVUX0lQR1JFXG5uZXQvaXB2NC9LY29uZmlnLTIxMC1cdGhlbHBcbi0tXG5uZXQvaXB2NC9LY29uZmlnPTMzMD1jb25maWcgTkVUX0ZPVV9JUF9UVU5ORUxTXG5uZXQvaXB2NC9LY29uZmlnLTMzMS1cdGJvb2wgXCYjMzQ7SVA6IEZPVSBlbmNhcHN1bGF0aW9uIG9mIElQIHR1bm5lbHNcJiMzNDtcbm5ldC9pcHY0L0tjb25maWc6MzMyOlx0ZGVwZW5kcyBvbiBORVRfSVBJUCB8fCBORVRfSVBHUkUgfHwgSVBWNl9TSVRcbm5ldC9pcHY0L0tjb25maWctMzMzLVx0c2VsZWN0IE5FVF9GT1Vcbi0tXG5uZXQvaXB2NC9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfTkVUX0ZPVSkgJiM0Mzs9IGZvdS5vXG5uZXQvaXB2NC9NYWtlZmlsZToyOTpvYmotJChDT05GSUdfTkVUX0lQR1JFX0RFTVVYKSAmIzQzOz0gZ3JlLm9cbm5ldC9pcHY0L01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19ORVRfSVBHUkUpICYjNDM7PSBpcF9ncmUub1xubmV0L2lwdjQvTWFrZWZpbGUtMzEtdWRwX3R1bm5lbC15IDo9IHVkcF90dW5uZWxfY29yZS5vIHVkcF90dW5uZWxfbmljLm9cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz00NDA9c3RhdGljIGludCBncmVfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtNDQ1LVxubmV0L2lwdjQvaXBfZ3JlLmM6NDQ2OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvaXBfZ3JlLmMtNDQ3LVx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGlwX2hkcihza2IpLVx1MDAzZWRhZGRyKSkge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTkzNT1zdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgaXBncmVfaGVhZGVyX29wcyA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy05MzktXG5uZXQvaXB2NC9pcF9ncmUuYzo5NDA6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXG5uZXQvaXB2NC9pcF9ncmUuYy05NDEtc3RhdGljIGludCBpcGdyZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9OTg0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBncmVfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy05ODYtXHQubmRvX3VuaW5pdFx0XHQ9IGlwX3R1bm5lbF91bmluaXQsXG5uZXQvaXB2NC9pcF9ncmUuYzo5ODc6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXG5uZXQvaXB2NC9pcF9ncmUuYy05ODgtXHQubmRvX29wZW5cdFx0PSBpcGdyZV9vcGVuLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEwNDA9c3RhdGljIGludCBpcGdyZV90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTEwNTQtXHRpZiAoaXBoLVx1MDAzZWRhZGRyIFx1MDAyNlx1MDAyNiAhdHVubmVsLVx1MDAzZWNvbGxlY3RfbWQpIHtcbm5ldC9pcHY0L2lwX2dyZS5jOjEwNTU6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXG5uZXQvaXB2NC9pcF9ncmUuYy0xMDU2LVx0XHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBoLVx1MDAzZWRhZGRyKSkge1xuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTM3Nz1pbnQgaXBfdHVubmVsX3JjdihzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzgzLVxubmV0L2lwdjQvaXBfdHVubmVsLmM6Mzg0OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxubmV0L2lwdjQvaXBfdHVubmVsLmMtMzg1LVx0aWYgKGlwdjRfaXNfbXVsdGljYXN0KGlwaC1cdTAwM2VkYWRkcikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MzYzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBuZXR3b3JraW5nIGNvbmZpZ3VyYXRpb25zOgoKKipBbmFseXppbmcgTmV0d29yayBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIHJlcXVpcmVzIGJvdGggYE5FVF9JUEdSRWAgYW5kIGBORVRfSVBHUkVfREVNVVhgLiBUaGF0IG11Y2ggaXMgY2xlYXIuIFRoZSBxdWVzdGlvbiBub3cgYmVjb21lczogRG8gd2UgbmVlZCB0byBjb25zaWRlciBJUHY2IEdSRSBhcyB3ZWxsPyBTbywgbGV0JiMzOTtzIGp1c3QgY29uZmlybSBpZiBgSVBWNl9HUkVgIGlzIHJlbGV2YW50IHRvIHRoZSBzb2x1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJUFY2X0dSRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE5OT1jb25maWcgSVBWNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwOS1cbm5ldC9pcHY2L0tjb25maWc6MjEwOmNvbmZpZyBJUFY2X0dSRVxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXHR0cmlzdGF0ZSBcJiMzNDtJUHY2OiBHUkUgdHVubmVsXCYjMzQ7XG4tLVxubmV0L2lwdjYvTWFrZWZpbGU9NDI9b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZTo0MzpvYmotJChDT05GSUdfSVBWNl9HUkUpICYjNDM7PSBpcDZfZ3JlLm9cbm5ldC9pcHY2L01ha2VmaWxlLTQ0LW9iai0kKENPTkZJR19JUFY2X0ZPVSkgJiM0Mzs9IGZvdTYub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2ODcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA4NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEdSRSBhbmQgRVJTUEFOIFR1bm5lbCBUcmFuc21pc3Npb24gYW5kIE5ldGxpbmsgSW5mbyBQYXRocyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gYWRkcmVzcyB0aGUgYElQVjZfR1JFYCBjb25maWd1cmF0aW9uIGhlcmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZXNlIGZ1bmN0aW9uczogYGlwZ3JlX3htaXRgLCBgZXJzcGFuX3htaXRgLCBgZ3JlX3RhcF94bWl0YCwgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGAsIGBpcGdyZV9maWxsX2luZm9gLCBgZXJzcGFuX2ZpbGxfaW5mb2AsIGFuZCBgaXA2Z3JlX2ZpbGxfaW5mb2AuIFRoZXNlIHNlZW0gbGlrZSB0aGUga2V5IGVudHJ5IHBvaW50cyBmb3IgdHJhbnNtaXNzaW9uIGFuZCBuZXRsaW5rIGluZm8gZHVtcGluZyB3aXRoaW4gdGhlIEdSRSBhbmQgRVJTUEFOIHR1bm5lbCBpbXBsZW1lbnRhdGlvbnMuCgpJIHF1aWNrbHkgY2hlY2tlZCBpZiB0aGVzZSBmdW5jdGlvbnMgYXJlIHN0YXRpYywgd2hpY2ggdGhleSBhcmUsIGJ1dCB0aGV5IGFyZSBhc3NpZ25lZCB0byBmdW5jdGlvbiBwb2ludGVycyBsaWtlIGBuZG9fc3RhcnRfeG1pdGAgYW5kIGBydG5sX2xpbmtfb3BzLSZndDtmaWxsX2luZm9gLiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLCBJIHdhbnRlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgYXJlbiYjMzk7dCBpbmxpbmVkIGJlY2F1c2UgaW5saW5lZCBmdW5jdGlvbnMgZG9uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcywgYW5kIHRoYXQmIzM5O3Mgbm90IGlkZWFsIGZvciB3aGF0IEkgYW0gdHJ5aW5nIHRvIGRvIGhlcmUuCgpPa2F5LCBgaXBncmVfeG1pdGAsIGBlcnNwYW5feG1pdGAsIGBncmVfdGFwX3htaXRgLCBhbmQgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGAgYXJlIGFsbCBhc3NpZ25lZCB0byBgLm5kb19zdGFydF94bWl0YCBpbiB0aGVpciByZXNwZWN0aXZlIG5ldGRldl9vcHMgc3RydWN0dXJlcy4gTGlrZXdpc2UsIGBpcGdyZV9maWxsX2luZm9gLCBgZXJzcGFuX2ZpbGxfaW5mb2AsIGFuZCBgaXA2Z3JlX2ZpbGxfaW5mb2AgYXJlIGFzc2lnbmVkIHRvIGAuZmlsbF9pbmZvYCB3aXRoaW4gdGhlIGNvcnJlc3BvbmRpbmcgbGlua19vcHMgc3RydWN0dXJlcy4gR2l2ZW4gdGhlc2UgYXNzaWdubWVudHMgdG8gZnVuY3Rpb24gcG9pbnRlcnMsIEkgY2FuIGJlIGNvbmZpZGVudCB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgKm5vdCogaW5saW5lZCBhbmQgZG8gaW5kZWVkIGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4gUGVyZmVjdDsgdGhhdCYjMzk7cyBleGFjdGx5IHdoYXQgSSYjMzk7bSBsb29raW5nIGZvci4KCkkmIzM5O2xsIGFsc28gbWFrZSBzdXJlIHRvIGNvdmVyIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gSXQgbG9va3MgbGlrZSBgTkVUX0lQR1JFYCBkZXBlbmRzIG9uIGBORVRfSVBHUkVfREVNVVhgLCBhbmQgYElQVjZfR1JFYCBpcyBjb250aW5nZW50IG9uIGBJUFY2YC4gU28sIHRoZSBuZWNlc3NhcnkgY29uZmlncyBhcmU6IGBORVRfSVBHUkVgLCBgTkVUX0lQR1JFX0RFTVVYYCwgYW5kIGBJUFY2X0dSRWAuCgpJIHdhbnRlZCB0byBlbnN1cmUgSSBkaWRuJiMzOTt0IG1pc3MgYW55dGhpbmcuIEkgc3BvdHRlZCBgX19ncmVfeG1pdGAsIHdoaWNoICppcyogc3RhdGljIGFuZCBjYWxsZWQgYnkgdGhlIGB4bWl0YCBmdW5jdGlvbnMuIEJlY2F1c2UgaXQgbG9va3MgbGlrZSBpdCBtaWdodCBiZSBpbmxpbmVkLCBJJiMzOTttIGdvaW5nIHRvIGV4Y2x1ZGUgdGhhdCBmcm9tIG15IGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4KClNvLCBoZXJlJiMzOTtzIG15IHJlYXNvbmluZy4gVGhlIG1haW4gaXNzdWUgYXBwZWFycyB0byBiZSByZWxhdGVkIHRvIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIHR1bm5lbCYjMzk7cyBvdXRwdXQgZmxhZ3MgKGB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3NgKSBkdXJpbmcgdHJhbnNtaXNzaW9uIG9yIG5ldGxpbmsgZHVtcHMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNvbmN1cnJlbmN5IGlzc3VlIHRoYXQmIzM5O3MgbGlrZWx5IHRvIGNhdXNlIGFsbCBzb3J0cyBvZiBwcm9ibGVtcy4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcml0aWNhbCBmb3IgbmV0d29yayB0cmFuc21pc3Npb24gYW5kIGNvbmZpZ3VyYXRpb24sIG1ha2luZyB0aGVtIHByaW1lIHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZXkgcmVwcmVzZW50IHRoZSBtYWluIGF2ZW51ZXMgZm9yIGRhdGEgZW50ZXJpbmcgb3IgZXhpdGluZyB0aGVzZSBHUkUgYW5kIEVSU1BBTiB0dW5uZWxzLgoKSW4gc3VtbWFyeSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOgoqICAgYGlwZ3JlX3htaXRgCiogICBgZXJzcGFuX3htaXRgCiogICBgZ3JlX3RhcF94bWl0YAoqICAgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGAKKiAgIGBpcGdyZV9maWxsX2luZm9gCiogICBgZXJzcGFuX2ZpbGxfaW5mb2AKKiAgIGBpcDZncmVfZmlsbF9pbmZvYAoKQW5kIEkmIzM5O2xsIG5lZWQgdGhlc2UgY29uZmlndXJhdGlvbnM6CiogICBgTkVUX0lQR1JFYAoqICAgYE5FVF9JUEdSRV9ERU1VWGAKKiAgIGBJUFY2X0dSRWAKCk5vdyBJIHNob3VsZCBnbyBhbmQgY2hlY2sgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGAgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXA2ZXJzcGFuX3R1bm5lbF94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYz04Nzg9c3RhdGljIG5ldGRldl90eF90IGlwNmdyZV90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy05MTYtXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6OTE3OnN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY2L2lwNl9ncmUuYy05MTgtXHRcdFx0XHRcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xODgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXA2ZXJzcGFuX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTE4ODUtXHQubmRvX3VuaW5pdCA9XHRcdGlwNmVyc3Bhbl90dW5uZWxfdW5pbml0LFxubmV0L2lwdjYvaXA2X2dyZS5jOjE4ODY6XHQubmRvX3N0YXJ0X3htaXQgPVx0aXA2ZXJzcGFuX3R1bm5lbF94bWl0LFxubmV0L2lwdjYvaXA2X2dyZS5jLTE4ODctXHQubmRvX3NldF9tYWNfYWRkcmVzcyA9XHRldGhfbWFjX2FkZHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYwMwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBEYXRhIFRyYW5zbWlzc2lvbiBQYXRoKioKClJpZ2h0LCBzbyB0aGUgdHJhY2UgcG9pbnRzIHRvIGAubmRvX3N0YXJ0X3htaXRgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGJlZ2lucywgc28gdGhhdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGhhbmRsZWQsIEkgbmVlZCB0byBkaWcgaW50byBgaXBncmVfeG1pdGAgd2l0aGluIGBuZXQvaXB2NC9pcF9ncmUuY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBHUkUgZW5jYXBzdWxhdGlvbiBpcyBoYXBwZW5pbmcgYW5kIHdoZXJlIHRoaXMgcGFja2V0IGlzIGluIHRoZSB0cmFuc21pc3Npb24gcXVldWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwZ3JlX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz02MjU9c3RhdGljIGludCBncmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy02NDgtXG5uZXQvaXB2NC9pcF9ncmUuYzo2NDk6c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9pcHY0L2lwX2dyZS5jLTY1MC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTk4ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtOTkwLSNlbmRpZlxubmV0L2lwdjQvaXBfZ3JlLmM6OTkxOlx0Lm5kb19zdGFydF94bWl0XHRcdD0gaXBncmVfeG1pdCxcbm5ldC9pcHY0L2lwX2dyZS5jLTk5Mi1cdC5uZG9fc2lvY2RldnByaXZhdGVcdD0gaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYSBOZXR3b3JrIFRyYW5zbWlzc2lvbiBGdW5jdGlvbioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIG9uIGAubmRvX3N0YXJ0X3htaXRgLiBHb29kLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB3aGVyZSB0aGUga2VybmVsIGhhbmRzIG9mZiBwYWNrZXRzIGZvciB0cmFuc21pc3Npb24uIE5vdywgd2hlcmUgYXJlIHdlIHNlbmRpbmcgdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldHdvcmsgcGF0aC4gTGV0JiMzOTtzIHNlZS4uLiBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIGBlcnNwYW5feG1pdGAgaW4gYG5ldC9pcHY0L2lwX2dyZS5jYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBFUlNQQU4gZW5jYXBzdWxhdGlvbiBjb2RlLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3MgaW52b2x2ZWQgaGVyZSBnaXZlbiB0aGUgY29udGV4dCwgYW5kIGl0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIHBhY2tldCBoYW5kbGluZyBmbG93LiBMZXQmIzM5O3MgdHJhY2UgdGhpcyBmdW5jdGlvbiBhbmQgc2VlIGhvdyB0aGUgcGFja2V0IGlzIGJlaW5nIGZvcm1hdHRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXJzcGFuX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz02NDk9c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy03MDItXG5uZXQvaXB2NC9pcF9ncmUuYzo3MDM6c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9pcF9ncmUuYy03MDQtXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTM3NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTEzNzctXHQubmRvX3VuaW5pdFx0XHQ9IGlwX3R1bm5lbF91bmluaXQsXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzc4Olx0Lm5kb19zdGFydF94bWl0XHRcdD0gZXJzcGFuX3htaXQsXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzc5LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gZXRoX21hY19hZGRyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGBncmVfdGFwX3htaXRgIGluIGBuZXQvaXB2NC9pcF9ncmUuY2AqKgoKWWVzLCB0aGF0JiMzOTtzIHdoYXQgSSB3YW50IHRvIGZvY3VzIG9uLiBSaWdodCwgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgZ3JlX3RhcF94bWl0YC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB3b3JraW5ncyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGUgdGFwIGludGVyZmFjZSB0cmFuc21pdHMgcGFja2V0cy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgcHJvYmFibHkgcmVsYXRlZCB0byBhIHJlY2VudCBpc3N1ZSBJIGhhdmUgYmVlbiB3b3JraW5nIG9uIHRoYXQgcmVxdWlyZWQgbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3JlX3RhcF94bWl0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9NzAzPXN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTc2MC1cbm5ldC9pcHY0L2lwX2dyZS5jOjc2MTpzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvaXB2NC9pcF9ncmUuYy03NjItXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTEzNDI9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBncmVfdGFwX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTM0NC1cdC5uZG9fdW5pbml0XHRcdD0gaXBfdHVubmVsX3VuaW5pdCxcbm5ldC9pcHY0L2lwX2dyZS5jOjEzNDU6XHQubmRvX3N0YXJ0X3htaXRcdFx0PSBncmVfdGFwX3htaXQsXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzQ2LVx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgXHQ9IGV0aF9tYWNfYWRkcixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIEdSRSBUdW5uZWwgRmlsbCBJbmZvcm1hdGlvbiBGdW5jdGlvbioqCgpZZXMsIHRoYXQgZmVlbHMgcmlnaHQsIHRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGJlLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGBpcGdyZV9maWxsX2luZm9gIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYG5ldC9pcHY0L2lwX2dyZS5jYCBmaWxlLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGZpbGwgaW5mbyBzZWN0aW9uIGFzIEkgc3VzcGVjdCB0aGVyZSBhcmUgc29tZSBwYXJhbWV0ZXJzIHRoYXQgSSBjb3VsZCBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJJiMzOTttIGxvb2tpbmcgZm9yIHdoZXJlIHdlJiMzOTtyZSBwb3B1bGF0aW5nIHRoZSBHUkUgdHVubmVsIGluZm9ybWF0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgdGhhdCBjb3VsZCBiZSBpbmZsdWVuY2luZyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgcGFyYW1ldGVycyB0aGF0IGFyZSBiZWluZyB1c2VkIGFyZSBjb3JyZWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGdyZV9maWxsX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pcF9ncmUuYz0xNTE3PXN0YXRpYyBzaXplX3QgaXBncmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTY0LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTU2NTpzdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvaXBfZ3JlLmMtMTU2Ni17XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTYxNj1zdGF0aWMgaW50IGVyc3Bhbl9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjM0LVxubmV0L2lwdjQvaXBfZ3JlLmM6MTYzNTpcdHJldHVybiBpcGdyZV9maWxsX2luZm8oc2tiLCBkZXYpO1xubmV0L2lwdjQvaXBfZ3JlLmMtMTYzNi1cbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz0xNjc4PXN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcGdyZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE2ODgtXHQuZ2V0X3NpemVcdD0gaXBncmVfZ2V0X3NpemUsXG5uZXQvaXB2NC9pcF9ncmUuYzoxNjg5Olx0LmZpbGxfaW5mb1x0PSBpcGdyZV9maWxsX2luZm8sXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjkwLVx0LmdldF9saW5rX25ldFx0PSBpcF90dW5uZWxfZ2V0X2xpbmtfbmV0LFxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE2OTM9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwZ3JlX3RhcF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzAzLVx0LmdldF9zaXplXHQ9IGlwZ3JlX2dldF9zaXplLFxubmV0L2lwdjQvaXBfZ3JlLmM6MTcwNDpcdC5maWxsX2luZm9cdD0gaXBncmVfZmlsbF9pbmZvLFxubmV0L2lwdjQvaXBfZ3JlLmMtMTcwNS1cdC5nZXRfbGlua19uZXRcdD0gaXBfdHVubmVsX2dldF9saW5rX25ldCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYGVyc3Bhbl9maWxsX2luZm9gIGluIGBuZXQvaXB2NC9pcF9ncmUuY2AqKgoKWWVzLiBPa2F5LCB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyB0b28uIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGBlcnNwYW5fZmlsbF9pbmZvYCBmdW5jdGlvbiB3aXRoaW4gdGhlIElQdjQgR1JFIGltcGxlbWVudGF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGF0JiMzOTtzIHdvcmtpbmcuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBudWFuY2VzIG9mIGhvdyB0aGUgRVJTUEFOIGhlYWRlciBpcyBwb3B1bGF0ZWQuIElzIGl0IGVmZmljaWVudD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgZ290Y2hhcyB3aXRoIGRpZmZlcmVudCBFUlNQQU4gbW9kZXMgb3IgY29uZmlndXJhdGlvbnM/IEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50cmljYXRlIGJpdCBtYW5pcHVsYXRpb24gaW4gdGhlcmUsIGRlYWxpbmcgd2l0aCB0aGUgVHlwZSBJSUkgRVJTUEFOIGhlYWRlciwgb3IgcGVyaGFwcyBzb21lIGxlc3MtdGhhbi1vYnZpb3VzIGludGVyYWN0aW9ucyB3aXRoIHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgaW50ZXJmYWNlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgdGhlIGZsb3ctSUQsIHNlc3Npb24tSUQsIGFuZCBvdGhlciBtZXRhZGF0YSBmaWVsZHMuIEl0JiMzOTtzIHRpbWUgdG8gc2VlIHdoYXTigJlzIGdvaW5nIG9uIHVuZGVyIHRoZSBob29kIGFuZCBhc3Nlc3MgdGhlIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlcnNwYW5fZmlsbF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaXBfZ3JlLmM9MTU2NT1zdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY0L2lwX2dyZS5jLTE2MTUtXG5uZXQvaXB2NC9pcF9ncmUuYzoxNjE2OnN0YXRpYyBpbnQgZXJzcGFuX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxubmV0L2lwdjQvaXBfZ3JlLmMtMTYxNy17XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmM9MTcwOD1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZXJzcGFuX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtMTcxOC1cdC5nZXRfc2l6ZVx0PSBpcGdyZV9nZXRfc2l6ZSxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3MTk6XHQuZmlsbF9pbmZvXHQ9IGVyc3Bhbl9maWxsX2luZm8sXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzIwLVx0LmdldF9saW5rX25ldFx0PSBpcF90dW5uZWxfZ2V0X2xpbmtfbmV0LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI5MwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSVB2NiBHUkUgSW5mb3JtYXRpb24gRmlsbGluZyBGdW5jdGlvbioqCgpZZXMsIHRoYXQgZmVlbHMgcmlnaHQuIE15IGd1dCBzYXlzIHdlIG5lZWQgdG8gZGVsdmUgaW50byBgaXA2Z3JlX2ZpbGxfaW5mb2AgaW4gYG5ldC9pcHY2L2lwNl9ncmUuY2AuIExldCYjMzk7cyBjb25maXJtIG15IGFzc3VtcHRpb25zIHJlZ2FyZGluZyB0aGUgY29udHJvbCBwYXRoIG9yIGEgc3BlY2lmaWMgZGF0YSBzdHJ1Y3R1cmUuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgR1JFIHR1bm5lbCBpbmZvcm1hdGlvbiBpcyBiZWluZyBwb3B1bGF0ZWQgd2l0aCBJUHY2IGRhdGEsIHNwZWNpZmljYWxseSB0aGUgbnVhbmNlcyBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBicm9hZGVyIEdSRSBpbmZyYXN0cnVjdHVyZS4gSSBhbSBmb2N1c2VkIG9uIHRoZSBzcGVjaWZpY3MgaW4gdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZncmVfZmlsbF9pbmZvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjYvaXA2X2dyZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl9ncmUuYz0yMDczPXN0YXRpYyBzaXplX3QgaXA2Z3JlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIxMTQtXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjExNTpzdGF0aWMgaW50IGlwNmdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMTE2LXtcbi0tXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjI4OD1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIyOTgtXHQuZ2V0X3NpemVcdD0gaXA2Z3JlX2dldF9zaXplLFxubmV0L2lwdjYvaXA2X2dyZS5jOjIyOTk6XHQuZmlsbF9pbmZvXHQ9IGlwNmdyZV9maWxsX2luZm8sXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMwMC1cdC5nZXRfbGlua19uZXRcdD0gaXA2X3RubF9nZXRfbGlua19uZXQsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIzMDM9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMTItXHQuZ2V0X3NpemVcdD0gaXA2Z3JlX2dldF9zaXplLFxubmV0L2lwdjYvaXA2X2dyZS5jOjIzMTM6XHQuZmlsbF9pbmZvXHQ9IGlwNmdyZV9maWxsX2luZm8sXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMxNC1cdC5nZXRfbGlua19uZXRcdD0gaXA2X3RubF9nZXRfbGlua19uZXQsXG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jPTIzMTc9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmVyc3Bhbl90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L2lwdjYvaXA2X2dyZS5jLTIzMjYtXHQuZ2V0X3NpemVcdD0gaXA2Z3JlX2dldF9zaXplLFxubmV0L2lwdjYvaXA2X2dyZS5jOjIzMjc6XHQuZmlsbF9pbmZvXHQ9IGlwNmdyZV9maWxsX2luZm8sXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMyOC1cdC5nZXRfbGlua19uZXRcdD0gaXA2X3RubF9nZXRfbGlua19uZXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDY0CgkJCQkJCQlvdXRwdXQ6IDIwNgoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqT3BlcmF0aW9uYWxpemluZyB0aGUgR1JFIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQuIENvbmZpcm1lZCwgYWxsIHRoZSBmb2N1cyBzeW1ib2xzLCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0LCBhcmUgdmFsaWQgb3B0aW9ucyB0byB3b3JrIHdpdGguIFNwZWNpZmljYWxseSwgSSYjMzk7bSBub3RpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi4gSSBzZWUgdGhhdCBgTkVUX0lQR1JFYCwgYE5FVF9JUEdSRV9ERU1VWGAsIGFuZCBgSVBWNl9HUkVgIGFyZSBlbmFibGVkLiBUaGlzIHNpZ25hbHMgYSBzZXR1cCBnZWFyZWQgdG93YXJkcyBlbmNhcHN1bGF0aW5nIHRyYWZmaWMgd2l0aCBHUkUsIHBvdGVudGlhbGx5IGZvciB0dW5uZWxpbmcgSVB2NCBhbmQgSVB2Ni4gR2l2ZW4gdGhlIGN1cnJlbnQgaW5mb3JtYXRpb24sIHRoZXJlJiMzOTtzIG5vIGluaGVyZW50IGNvbmZsaWN0IGluIHVzaW5nIHRoZXNlLCBzbyBJJiMzOTtsbCBleGVjdXRlIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcC4gSSYjMzk7bSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfSVBHUkUmIzM0OywKICAgICYjMzQ7TkVUX0lQR1JFX0RFTVVYJiMzNDssCiAgICAmIzM0O0lQVjZfR1JFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBncmVfeG1pdCYjMzQ7LAogICAgJiMzNDtlcnNwYW5feG1pdCYjMzQ7LAogICAgJiMzNDtncmVfdGFwX3htaXQmIzM0OywKICAgICYjMzQ7aXA2ZXJzcGFuX3R1bm5lbF94bWl0JiMzNDssCiAgICAmIzM0O2lwZ3JlX2ZpbGxfaW5mbyYjMzQ7LAogICAgJiMzNDtlcnNwYW5fZmlsbF9pbmZvJiMzNDssCiAgICAmIzM0O2lwNmdyZV9maWxsX2luZm8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRyYW5zbWlzc2lvbiBhbmQgbmV0bGluayBpbmZvIGR1bXBpbmcgcGF0aHMgZm9yIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMgb3ZlciBJUHY0IGFuZCBJUHY2LiBJdCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSB0aGUgdHVubmVsJiMzOTtzIG91dHB1dCBmbGFncyAoYHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzYCkgd2VyZSBiZWluZyBtb2RpZmllZCBkdXJpbmcgdHJhbnNtaXNzaW9uIG9yIG5ldGxpbmsgZHVtcHMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmFjZSBjb25kaXRpb25zIG9yIHVuaW50ZW5kZWQgc3RhdGUgY2hhbmdlcy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbiwgc28gdGhleSBhcmUgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX0lQR1JFJiMzNDssCiAgICAmIzM0O05FVF9JUEdSRV9ERU1VWCYjMzQ7LAogICAgJiMzNDtJUFY2X0dSRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwZ3JlX3htaXQmIzM0OywKICAgICYjMzQ7ZXJzcGFuX3htaXQmIzM0OywKICAgICYjMzQ7Z3JlX3RhcF94bWl0JiMzNDssCiAgICAmIzM0O2lwNmVyc3Bhbl90dW5uZWxfeG1pdCYjMzQ7LAogICAgJiMzNDtpcGdyZV9maWxsX2luZm8mIzM0OywKICAgICYjMzQ7ZXJzcGFuX2ZpbGxfaW5mbyYjMzQ7LAogICAgJiMzNDtpcDZncmVfZmlsbF9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0cmFuc21pc3Npb24gYW5kIG5ldGxpbmsgaW5mbyBkdW1waW5nIHBhdGhzIGZvciBHUkUgYW5kIEVSU1BBTiB0dW5uZWxzIG92ZXIgSVB2NCBhbmQgSVB2Ni4gSXQgZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlIHR1bm5lbCYjMzk7cyBvdXRwdXQgZmxhZ3MgKGB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgbW9kaWZpZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBvciBuZXRsaW5rIGR1bXBzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHJhY2UgY29uZGl0aW9ucyBvciB1bmludGVuZGVkIHN0YXRlIGNoYW5nZXMuIFRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29yayB0cmFmZmljIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24sIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjExPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9naWMgYnVnIHdoZXJlIHNoYXJlZCB0dW5uZWwgcGFyYW1ldGVycyAoYHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzYCkgd2VyZSBiZWluZyBpbmNvcnJlY3RseSBtb2RpZmllZCBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiAoYGVyc3Bhbl94bWl0YCwgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGApIGFuZCBuZXRsaW5rIGR1bXBzIChgaXBncmVfZmlsbF9pbmZvYCwgYGVyc3Bhbl9maWxsX2luZm9gKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGRhdGEgcmFjZXMgYW5kIGNvcnJ1cHRlZCB0dW5uZWwgc3RhdGUuIFRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBjb3BpZXMgb2YgdGhlIGZsYWdzIChgSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1NgKSB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBpcF90dW5uZWxfZmxhZ3NfY29weSgpYCAod2hpY2ggdXNlcyBgYml0bWFwX2NvcHkoKWAgdG8gY29weSB0aGUgZW50aXJlIGB1bnNpZ25lZCBsb25nYCBhcnJheSkuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGFueSByaXNrIG9mIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4vS0NTQU4gYW5kIGxvZ2ljIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggZGF0YSByYWNlcyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYxOWViMTU3ODE3MzQxMDM5YzE1Y2I2OTc3ZjQzODhlMmJmYTVkZTEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjoxMDoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggNmE5MjYwNzQwMWU4YS4uODIzMDllZmQ0MTdlMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZ3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaXBfZ3JlLmMKQEAgLTQ3NSwxMiAmIzQzOzQ3NSw5IEBAIHN0YXRpYyBpbnQgZ3JlX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiBzdGF0aWMgdm9pZCBfX2dyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKnRubF9wYXJhbXMsCi0JCSAgICAgICBfX2JlMTYgcHJvdG8pCiYjNDM7CQkgICAgICAgX19iZTE2IHByb3RvLCBjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncykKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwotCUlQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTsKLQotCWlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwogCiAJLyogUHVzaCBHUkUgaGVhZGVyLiAqLwogCWdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWwtJmd0O3R1bl9obGVuLApAQCAtNjUzLDYgJiM0Mzs2NTAsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7CiAJY29uc3Qgc3RydWN0IGlwaGRyICp0bmxfcGFyYW1zOwogCiAJaWYgKCFwc2tiX2luZXRfbWF5X3B1bGwoc2tiKSkKQEAgLTY4OCwxMSAmIzQzOzY4NiwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQl0bmxfcGFyYW1zID0gJmFtcDt0dW5uZWwtJmd0O3Bhcm1zLmlwaDsKIAl9CiAKLQlpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwKLQkJCQkJICAgICAgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKSkpCiYjNDM7CWlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwomIzQzOwomIzQzOwlpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgZmxhZ3MpKSkKIAkJZ290byBmcmVlX3NrYjsKIAotCV9fZ3JlX3htaXQoc2tiLCBkZXYsIHRubF9wYXJhbXMsIHNrYi0mZ3Q7cHJvdG9jb2wpOwomIzQzOwlfX2dyZV94bWl0KHNrYiwgZGV2LCB0bmxfcGFyYW1zLCBza2ItJmd0O3Byb3RvY29sLCBmbGFncyk7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogZnJlZV9za2I6CkBAIC03MDUsNiAmIzQzOzcwNCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpOwogCWJvb2wgdHJ1bmNhdGUgPSBmYWxzZTsKIAlfX2JlMTYgcHJvdG87CiAKQEAgLTcyOCwxMCAmIzQzOzcyOCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJdHJ1bmNhdGUgPSB0cnVlOwogCX0KIAomIzQzOwlpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKTsKJiM0MzsKIAkvKiBQdXNoIEVSU1BBTiBoZWFkZXIgKi8KIAlpZiAodHVubmVsLSZndDtlcnNwYW5fdmVyID09IDApIHsKIAkJcHJvdG8gPSBodG9ucyhFVEhfUF9FUlNQQU4pOwotCQlfX2NsZWFyX2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKTsKJiM0MzsJCV9fY2xlYXJfYml0KElQX1RVTk5FTF9TRVFfQklULCBmbGFncyk7CiAJfSBlbHNlIGlmICh0dW5uZWwtJmd0O2Vyc3Bhbl92ZXIgPT0gMSkgewogCQllcnNwYW5fYnVpbGRfaGVhZGVyKHNrYiwgbnRvaGwodHVubmVsLSZndDtwYXJtcy5vX2tleSksCiAJCQkJICAgIHR1bm5lbC0mZ3Q7aW5kZXgsCkBAIC03NDYsOCAmIzQzOzc0OCw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQlnb3RvIGZyZWVfc2tiOwogCX0KIAotCV9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpOwotCV9fZ3JlX3htaXQoc2tiLCBkZXYsICZhbXA7dHVubmVsLSZndDtwYXJtcy5pcGgsIHByb3RvKTsKJiM0MzsJX19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIGZsYWdzKTsKJiM0MzsJX19ncmVfeG1pdChza2IsIGRldiwgJmFtcDt0dW5uZWwtJmd0O3Bhcm1zLmlwaCwgcHJvdG8sIGZsYWdzKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBmcmVlX3NrYjoKQEAgLTc2MCw2ICYjNDM7NzYyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGdyZV90YXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpOwogCiAJaWYgKCFwc2tiX2luZXRfbWF5X3B1bGwoc2tiKSkKIAkJZ290byBmcmVlX3NrYjsKQEAgLTc2OSwxNCAmIzQzOzc3MiwxNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCi0JaWYgKGdyZV9oYW5kbGVfb2ZmbG9hZHMoc2tiLCB0ZXN0X2JpdChJUF9UVU5ORUxfQ1NVTV9CSVQsCi0JCQkJCSAgICAgIHR1bm5lbC0mZ3Q7cGFybXMub19mbGFncykpKQomIzQzOwlpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzKTsKJiM0MzsKJiM0MzsJaWYgKGdyZV9oYW5kbGVfb2ZmbG9hZHMoc2tiLCB0ZXN0X2JpdChJUF9UVU5ORUxfQ1NVTV9CSVQsIGZsYWdzKSkpCiAJCWdvdG8gZnJlZV9za2I7CiAKIAlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgZGV2LSZndDtuZWVkZWRfaGVhZHJvb20pKQogCQlnb3RvIGZyZWVfc2tiOwogCi0JX19ncmVfeG1pdChza2IsIGRldiwgJmFtcDt0dW5uZWwtJmd0O3Bhcm1zLmlwaCwgaHRvbnMoRVRIX1BfVEVCKSk7CiYjNDM7CV9fZ3JlX3htaXQoc2tiLCBkZXYsICZhbXA7dHVubmVsLSZndDtwYXJtcy5pcGgsIGh0b25zKEVUSF9QX1RFQiksIGZsYWdzKTsKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogCiBmcmVlX3NrYjoKQEAgLTE1NjAsMTIgJiM0MzsxNTY0LDE1IEBAIHN0YXRpYyBzaXplX3QgaXBncmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogc3RhdGljIGludCBpcGdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCA9ICZhbXA7dC0mZ3Q7cGFybXM7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwljb25zdCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCA9ICZhbXA7dC0mZ3Q7cGFybXM7CiAJSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1Mob19mbGFncyk7CiAKIAlpcF90dW5uZWxfZmxhZ3NfY29weShvX2ZsYWdzLCBwLSZndDtvX2ZsYWdzKTsKIAomIzQzOwlpZiAodC0mZ3Q7ZXJzcGFuX3ZlciAhPSAwICZhbXA7JmFtcDsgIXQtJmd0O2NvbGxlY3RfbWQpCiYjNDM7CQlfX3NldF9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIG9fZmxhZ3MpOwomIzQzOwogCWlmIChubGFfcHV0X3UzMihza2IsIElGTEFfR1JFX0xJTkssIHAtJmd0O2xpbmspIHx8CiAJICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX0lGTEFHUywKIAkJCSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLSZndDtpX2ZsYWdzKSkgfHwKQEAgLTE2MDgsMTIgJiM0MzsxNjE1LDkgQEAgc3RhdGljIGludCBpcGdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogc3RhdGljIGludCBlcnNwYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKHQtJmd0O2Vyc3Bhbl92ZXIgJmx0Oz0gMikgewotCQlpZiAodC0mZ3Q7ZXJzcGFuX3ZlciAhPSAwICZhbXA7JmFtcDsgIXQtJmd0O2NvbGxlY3RfbWQpCi0JCQlfX3NldF9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHQtJmd0O3Bhcm1zLm9fZmxhZ3MpOwotCiAJCWlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HUkVfRVJTUEFOX1ZFUiwgdC0mZ3Q7ZXJzcGFuX3ZlcikpCiAJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jCmluZGV4IGI4NDMxMTZlOWI3MDMuLjBiM2YzODZiNTFhMmQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9ncmUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfZ3JlLmMKQEAgLTk2NCw3ICYjNDM7OTY0LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGlwNmVyc3Bhbl90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtJmd0O25lZWRlZF9oZWFkcm9vbSA/OiB0LSZndDtobGVuKSkKIAkJZ290byB0eF9lcnI7CiAKLQlfX2NsZWFyX2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgdC0mZ3Q7cGFybXMub19mbGFncyk7CiAJSVBDQihza2IpLSZndDtmbGFncyA9IDA7CiAKIAkvKiBGb3IgY29sbGVjdF9tZCBtb2RlLCBkZXJpdmUgZmw2IGZyb20gdGhlIHR1bm5lbCBrZXksCkBAIC0yMTE1LDggJiM0MzsyMTE0LDggQEAgc3RhdGljIHNpemVfdCBpcDZncmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogc3RhdGljIGludCBpcDZncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCA9ICZhbXA7dC0mZ3Q7cGFybXM7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwID0gJmFtcDt0LSZndDtwYXJtczsKIAlJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKTsKIAogCWlwX3R1bm5lbF9mbGFnc19jb3B5KG9fZmxhZ3MsIHAtJmd0O29fZmxhZ3MpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIxNwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDg5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBHUkUgVHVubmVsIEZsYWdzIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0b3VjaGluZyBgbmV0L2lwdjQvaXBfZ3JlLmNgIGFuZCBgbmV0L2lwdjYvaXA2X2dyZS5jYC4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogaXQmIzM5O3MgYWxsIGFib3V0IGhvdyBHUkUgdHVubmVsIGZsYWdzIGFyZSBoYW5kbGVkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGdvb2QsIGZsYWcgaGFuZGxpbmcgaXMgYWx3YXlzIGEgcG90ZW50aWFsIGFyZWEgZm9yIHN1YnRsZSBjb25jdXJyZW5jeSBidWdzLgoKU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBfX2dyZV94bWl0YCBub3cgZ2V0cyB0aGUgYGZsYWdzYCBwYXNzZWQgdG8gaXQgYXMgYW4gYXJndW1lbnQsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHdheSB0byBkbyB0aGlzLiBCZWZvcmUsIGl0IHdhcyBwdWxsaW5nIHRoZSBmbGFncyBkaXJlY3RseSBmcm9tIGB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3NgLiBNYWtlcyBzZW5zZTsgdGhhdCBrZWVwcyB0aGUgdHJhbnNtaXNzaW9uIGZ1bmN0aW9uIGl0c2VsZiBjbGVhbmVyIGFuZCBtb3JlIGZvY3VzZWQuIFRoZW4gdGhlIG90aGVyIHRyYW5zbWl0IGZ1bmN0aW9ucyAoYGlwZ3JlX3htaXRgLCBgZXJzcGFuX3htaXRgLCBgZ3JlX3RhcF94bWl0YCkgY29weSB0aGUgZmxhZ3MgZnJvbSBgdHVubmVsLSZndDtwYXJtcy5vX2ZsYWdzYCB0byBhIGxvY2FsIGBmbGFnc2AgdmFyaWFibGUsIHBvdGVudGlhbGx5IG1vZGlmeSBpdCwgYW5kICp0aGVuKiBwYXNzIGl0IHRvIGBfX2dyZV94bWl0YC4gUmlnaHQuIFVzaW5nIGEgbG9jYWwgY29weSBpcyBhIGtleS4KClRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgaW4gdGhlIGBmaWxsX2luZm9gIGZ1bmN0aW9ucyAoYGlwZ3JlX2ZpbGxfaW5mb2AgYW5kIGBlcnNwYW5fZmlsbF9pbmZvYCkuIEl0JiMzOTtzIGZpeGluZyBhIGJ1ZyB3aGVyZSB3ZSB3ZXJlIG1vZGlmeWluZyBgdC0mZ3Q7cGFybXMub19mbGFnc2AgZHVyaW5nIGEgKnJlYWQqIG9wZXJhdGlvbiDigJMgYGZpbGxfaW5mb2AgaXMgZm9yIG5ldGxpbmssIHJpZ2h0PyBJdCB1c2VkIHRvIHNldCB0aGUgYElQX1RVTk5FTF9LRVlfQklUYCBkaXJlY3RseSBvbiB0aGUgdHVubmVsIHBhcmFtZXRlcnMgZHVyaW5nIHRoZSBgZmlsbF9pbmZvYCBjYWxsISBUaGF0JiMzOTtzIGEgaHVnZSBwcm9ibGVtLiBUaGF0JiMzOTtzIGEgY2xlYXIgc3RhdGUgY29ycnVwdGlvbiBidWcuCgpOb3csIGl0IGNvcGllcyB0aGUgZmxhZ3MgaW50byBhIGxvY2FsIGBvX2ZsYWdzYCB2YXJpYWJsZTogYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpYCBhbmQgdGhlbiBgaXBfdHVubmVsX2ZsYWdzX2NvcHkob19mbGFncywgcC0mZ3Q7b19mbGFncylgLiBOb3cgaXQmIzM5O3Mgc2FmZSB0byBtb2RpZnkgaXQgd2l0aG91dCBzaWRlLWVmZmVjdHMuIEFmdGVyIHRoZSBjb3B5LCBpdCBjb25kaXRpb25hbGx5IHNldHMgYElQX1RVTk5FTF9LRVlfQklUYCBvbiAqdGhhdCogbG9jYWwgY29weSwgYG9fZmxhZ3NgLiBUaGF0JiMzOTtzIHNtYXJ0LiBUaGF0IHByb3RlY3RzIGFnYWluc3Qgc29tZW9uZSBxdWVyeWluZyB0aGUgdHVubmVsIGluZm8gYW5kIGNoYW5naW5nIHRoZSBzdGF0ZSB1bmRlcm5lYXRoIHlvdS4gVGhlIHNhbWUgY2hhbmdlIGFsc28gc2hvd3MgdXAgaW4gYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGAuIEdvb2Qgc3R1ZmYuCgpTbywgdGhlIHVuZGVybHlpbmcgaXNzdWUgaXMgYSBjb25jdXJyZW5jeSBvciBzdGF0ZSBjb3JydXB0aW9uIGJ1Zy4gV2Ugd2VyZSBtb2RpZnlpbmcgc2hhcmVkIHR1bm5lbCBzdGF0ZSAoYHQtJmd0O3Bhcm1zLm9fZmxhZ3NgKSBkdXJpbmcgYm90aCB0cmFuc21pdCBhbmQgbmV0bGluayBkdW1wcyAod2hpY2ggY291bGQgaGFwcGVuIGNvbmN1cnJlbnRseSksIGxlYWRpbmcgdG8gZGF0YSByYWNlcy4gVGhhdCBjYW4gY29ycnVwdCB0aGUgdHVubmVsIHN0YXRlIGluIHN1YnRsZSB3YXlzLiBJdCYjMzk7cyBub3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mbyBsZWFrcywgYnV0IGl0JiMzOTtzIGFib3V0IG1vZGlmeWluZyBzaGFyZWQgc3RhdGUgd2l0aG91dCBwcm9wZXIgbG9ja2luZy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBgaXBncmVfZmlsbF9pbmZvYCBhZ2FpbiB0byBiZSBzdXJlLi4uIGBJUF9UVU5ORUxfREVDTEFSRV9GTEFHU2AgY3JlYXRlcyBhIGJpdG1hcCwgdGhlbiB3ZSBjb3B5IHRoZSBmbGFncywgYW5kIG9ubHkgdGhlbiBkbyB3ZSBtb2RpZnkgdGhlIGNvcHkgYmVmb3JlIGNvbnZlcnRpbmcgdG8gYF9fYmUxNmAgYW5kIHNlbmRpbmcgb3ZlciBuZXRsaW5rLiBJIGRvbiYjMzk7dCBzZWUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBpbiB0aGUgY29kZS4gSXQmIzM5O3MgYSBjbGVhbiBmaXggZm9yIGEgcHJldHR5IG5hc3R5IGJ1Zy4gR29vZCBjYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7I2RlZmluZSBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNTEtXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NTI6I2RlZmluZSBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyguLi4pXHRcdFx0XHRcXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTUzLVx0X19pcHRfZmxhZ19vcChERUNMQVJFX0JJVE1BUCwgX19WQV9BUkdTX18pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4NzgKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIGZvY3VzIGhlcmUgaXMgb24gdGhlIGZ1bmN0aW9uIGNhbGw6IGBfX2lwdF9mbGFnX29wYC4gSG1tLCBpbnRlcmVzdGluZy4gTXkgYnJhaW4gaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucy4gSXQmIzM5O3MgcHJlZml4ZWQgd2l0aCBhIGRvdWJsZSB1bmRlcnNjb3JlLCBzbyBpdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgb3Iga2VybmVsLWxldmVsIGZ1bmN0aW9uLCB3aGljaCBpbXBsaWVzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbG93ZXItbGV2ZWwgbmV0d29ya2luZyBvcGVyYXRpb25zLCBwb3NzaWJseSByZWxhdGVkIHRvIG5ldGZpbHRlciwgaXB0YWJsZXMsIG9yIGEgc2ltaWxhciBmaXJld2FsbC9wYWNrZXQgbWFuaXB1bGF0aW9uIGZyYW1ld29yay4gVGhlIG5hbWUgaXRzZWxmLCBgX19pcHRfZmxhZ19vcGAsIHN1Z2dlc3RzIGl0JiMzOTtzIGludm9sdmVkIGluICpmbGFnKiBvcGVyYXRpb25zLCBhbmQgcHJvYmFibHkgYXQgYW4gKm9wZXJhdG9yKiBsZXZlbC4gVGhpcyB0ZWxscyBtZSB3ZSYjMzk7cmUgbGlrZWx5IG1hbmlwdWxhdGluZyBvciB0ZXN0aW5nIHNvbWUga2luZCBvZiBmbGFnIHdpdGhpbiB0aGUgY29udGV4dCBvZiBwYWNrZXQgbWF0Y2hpbmcgb3IgcnVsZSBhcHBsaWNhdGlvbi4gSSBpbW1lZGlhdGVseSBuZWVkIG1vcmUgY29udGV4dCB0byB1bmRlcnN0YW5kIHByZWNpc2VseSB3aGF0IGZsYWdzIGFuZCBvcGVyYXRvcnMgYXJlIGluIHBsYXkuIElzIHRoaXMgd2l0aGluIHRoZSBpcHRhYmxlcyBzdHJ1Y3R1cmUgaXRzZWxmLCBvciBpcyB0aGlzIHJlbGF0ZWQgdG8gdXNlci1zcGFjZSBpcHRhYmxlcyBpbnRlcmFjdGlvbj8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIHByb2JhYmx5IGJlaW5nIGhhbmRsZWQgYW5kIHdoZXJlIGRvIHRoZXkgc2l0IGluIHRoZSBtZW1vcnkgc3BhY2U/IE1vcmUgcXVlc3Rpb25zLiBJIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiB0byBkaWcgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIF9faXB0X2ZsYWdfb3AmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTQ4LVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjQ5OiNkZWZpbmUgX19pcHRfZmxhZ19vcChvcCwgLi4uKVx0XHRcdFx0XHRcXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTUwLVx0b3AoX19WQV9BUkdTX18sIF9fSVBfVFVOTkVMX0ZMQUdfTlVNKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjQxCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uCgoqKlVuZGVyc3RhbmRpbmcgdGhlIFR1bm5lbCBGbGFnIERlY2xhcmF0aW9uIGFuZCBDb3B5IFByb2Nlc3MqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIHRoaXMgYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpYCBtYWNyby4gSXQmIzM5O3MgZXhwYW5kaW5nIHRvIGBERUNMQVJFX0JJVE1BUChvX2ZsYWdzLCBfX0lQX1RVTk5FTF9GTEFHX05VTSlgLiBUaGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYml0IGZsYWdzLCBwYWNrZWQgaW50byBhIGJpdG1hcC4gYERFQ0xBUkVfQklUTUFQYCBpcyBkZWZpbml0ZWx5IGdvaW5nIHRvIHJlc29sdmUgdG8gYW4gYXJyYXkgb2YgYHVuc2lnbmVkIGxvbmdgIHZhbHVlcy4gVGhhdCYjMzk7cyBzdGFuZGFyZCBwcmFjdGljZSwgZWZmaWNpZW50IGZvciBiaXQgbWFuaXB1bGF0aW9uLiBXZeKAmXJlIHVzaW5nIGxvbmdzLCBwcm9iYWJseSBiZWNhdXNlIHdl4oCZcmUgd29ya2luZyB3aXRoIHRoZSBhcmNoaXRlY3R1cmXigJlzIG5hdGl2ZSB3b3JkIHNpemUgdG8gbWFrZSB0aGUgb3BlcmF0aW9ucyBhcyBmYXN0IGFzIHBvc3NpYmxlLiBUaGlzIGlzIGEgY29tbW9uIGFuZCByZWFzb25hYmxlIGFwcHJvYWNoIHRvIG1hbmFnaW5nIGEgc2V0IG9mIGJvb2xlYW4gb3B0aW9ucywgb3IgZmxhZ3MuCgpUaGVuLCB0aGVyZSYjMzk7cyBgaXBfdHVubmVsX2ZsYWdzX2NvcHlgLiBHaXZlbiB0aGUgY29udGV4dCwgdGhpcyAqaGFzKiB0byBiZSBhIGZ1bmN0aW9uIGRlc2lnbmVkIHNwZWNpZmljYWxseSB0byBjb3B5IHRoZXNlIGJpdCBmbGFncyBmcm9tIG9uZSBiaXRtYXAgKHNvdXJjZSkgdG8gYW5vdGhlciAoZGVzdGluYXRpb24pLiBJdOKAmXMgcHJvYmFibHkgaW1wbGVtZW50ZWQgdXNpbmcgYml0d2lzZSBvcGVyYXRvcnMgbGlrZSBgJmFtcDtgLCBgfGAsIGB+YCAoQU5ELCBPUiwgTk9UKSB0byBzZWxlY3RpdmVseSBzZXQsIGNsZWFyLCBhbmQgY29weSB0aGUgaW5kaXZpZHVhbCBiaXRzIHdpdGhpbiB0aGUgYHVuc2lnbmVkIGxvbmdgIGFycmF5cyB0aGF0IGNvbXByaXNlIHRoZSBiaXRtYXBzLiBUaGUgZnVuY3Rpb24mIzM5O3Mgam9iIGlzIHN0cmFpZ2h0Zm9yd2FyZDogZW5zdXJlIHRoZSBmbGFncyByZXByZXNlbnRpbmcgdGhlIHR1bm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGFyZSBjb3JyZWN0bHkgdHJhbnNmZXJyZWQsIHByb2JhYmx5IHdoZW4gc2V0dGluZyB1cCBvciBtb2RpZnlpbmcgYSB0dW5uZWwuIE5vIHN1cnByaXNlcyBoZXJlLCBqdXN0IGVmZmljaWVudCBiaXQtbGV2ZWwgbWFuaXB1bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGlwX3R1bm5lbF9mbGFnc19jb3B5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC01NS0jZGVmaW5lIGlwX3R1bm5lbF9mbGFnc196ZXJvKC4uLilcdF9faXB0X2ZsYWdfb3AoYml0bWFwX3plcm8sIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oOjU2OiNkZWZpbmUgaXBfdHVubmVsX2ZsYWdzX2NvcHkoLi4uKVx0X19pcHRfZmxhZ19vcChiaXRtYXBfY29weSwgX19WQV9BUkdTX18pXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgtNTctI2RlZmluZSBpcF90dW5uZWxfZmxhZ3NfYW5kKC4uLilcdF9faXB0X2ZsYWdfb3AoYml0bWFwX2FuZCwgX19WQV9BUkdTX18pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NjMKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25jZXJuIFJlZ2FyZGluZyBCaXRtYXAgQ29weWluZyBhbmQgUG90ZW50aWFsIFVuaW5pdGlhbGl6ZWQgQml0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBgYml0bWFwX2NvcHlgIHdvcmtzIGhlcmUuIEl0JiMzOTtzIHN1cHBvc2VkIHRvIGNvcHkgYW4gZXhhY3QgbnVtYmVyIG9mIGJpdHMsIHdoaWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEhvd2V2ZXIsIGEgcG90ZW50aWFsIGlzc3VlIGlzIHN0YXJ0aW5nIHRvIG5pZ2dsZSBhdCBtZS4gSWYgYF9fSVBfVFVOTkVMX0ZMQUdfTlVNYCBpc24mIzM5O3QgYSBjbGVhbiBtdWx0aXBsZSBvZiBgQklUU19QRVJfTE9OR2Ag4oCTIHRoYXQgaXMsIGlmIHRoZXJlJiMzOTtzIGEgcmVtYWluZGVyIHdoZW4geW91IGRpdmlkZSB0aGUgbnVtYmVyIG9mIGZsYWdzIGJ5IHRoZSBiaXQgd2lkdGggb2YgYW4gYHVuc2lnbmVkIGxvbmdgIOKAkyB0aGVuIGBiaXRtYXBfY29weWAgbWlnaHQgYmUgbGVhdmluZyB0aGUgdHJhaWxpbmcgYml0cyBvZiB0aGUgbGFzdCBgdW5zaWduZWQgbG9uZ2AgaW4gdGhlIGRlc3RpbmF0aW9uIHVuaW5pdGlhbGl6ZWQuIFdlIGNhbiYjMzk7dCBoYXZlIHRoYXQ7IGl0IGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBsYXRlciBvbi4gU28sIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgYml0bWFwX2NvcHlgIGhhbmRsZXMgdGhpcyBzaXR1YXRpb24gY29ycmVjdGx5LiBMZXQmIzM5O3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGNsb3NlIGxvb2sgYXQgaXRzIGltcGxlbWVudGF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIHRoZSBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX2NvcHkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9iaXRtYXAuaD0yNzM9dm9pZCBiaXRtYXBfY29weV9jbGVhcl90YWlsKHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCB1bnNpZ25lZCBpbnQgbmJpdHMpXG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNzktXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI4MDpzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX2NvcHlfYW5kX2V4dGVuZCh1bnNpZ25lZCBsb25nICp0byxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMjgxLVx0XHRcdFx0XHQgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNjMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGJpdG1hcF9jb3B5YCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYGJpdG1hcF9jb3B5YCBtYWNybyBvciBmdW5jdGlvbi4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgZGVmaW5pdGlvbi4gV2hhdCYjMzk7cyB0aGUgaW1wbGVtZW50YXRpb24gbGlrZT8gSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgYml0d2lzZSBvcGVyYXRpb24sIHBvdGVudGlhbGx5IG9wdGltaXplZCB3aXRoIGNvbXBpbGVyIGludHJpbnNpY3MsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggdGhhdCByZWxpZXMgb24gbWVtb3J5IG1hbmFnZW1lbnQgb3IgaGFyZHdhcmUtc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zPyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGdvdGNoYXPigJRhbGlnbm1lbnQgaXNzdWVzLCBwb3RlbnRpYWwgZm9yIG9mZi1ieS1vbmUgZXJyb3JzIGluIGxvb3AgYm91bmRhcmllcywgb3IgYW55IGFzc3VtcHRpb25zIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgYml0bWFwIHJlcHJlc2VudGF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRldGFpbHMgd2lsbCBkaWN0YXRlIHdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLCBwZXJmb3JtYW5jZSB3aXNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgYGJpdG1hcF9jb3B5YCBpcyBkb2luZyB3aGF0IEkgYmVsaWV2ZSBpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsjZGVmaW5lIGJpdG1hcF9jb3B5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM4MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWx2aW5nIGludG8gQml0bWFwIE1hbmlwdWxhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpY3Mgb2YgYGJpdG1hcF9jb3B5YC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbmF2aWdhdGUgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIHNlZS4uLiBgYml0bWFwX2NvcHlgLCByaWdodD8gVGhhdCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9iaXRtYXAuaGAuIEkmIzM5O2xsIG9wZW4gdGhhdCBmaWxlIGFuZCBjb25maXJtIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IgdW5kZXIgdmFyaW91cyBjb25kaXRpb25zLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZnVuY3Rpb24gaXMgb3B0aW1pemVkIGFzIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlLCB1c2luZyB0aGUgYXBwcm9wcmlhdGUgYml0d2lzZSBvcGVyYXRpb25zLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIHdpbGwgcmVzaWRlLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGVkZ2UgY2FzZXMsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IHdvcmQgc2l6ZXMgKDMyLzY0IGJpdCkuIEkmIzM5O2xsIGFsc28gZ2xhbmNlIGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS4gSSB3aWxsIHdhbnQgdG8gc2VlIGlmIHRoaXMgY29weSByb3V0aW5lIHVzZXMgdW5yb2xsZWQgbG9vcHMsIHdoaWNoIGlzIG9mdGVuIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGhlcmUsIG9yIGlmIHRoZXJlJiMzOTtzIGFueSBjbGV2ZXIgdHJpY2tlcnkgd2l0aCBTSU1EIGluc3RydWN0aW9ucyAodGhvdWdoIGluIHRoZSBrZXJuZWwsIHRoYXQmIzM5O3MgbGVzcyBjb21tb24sIGFkbWl0dGVkbHkpLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtiaXRtYXBfY29weVxcKCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODAxIGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYz0xMDIzPXZvaWQgX19pbml0IHZlY19pbml0X3ZxX21hcChlbnVtIHZlY190eXBlIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmMtMTAyNi1cdHZlY19wcm9iZV92cXMoaW5mbywgaW5mby1cdTAwM2V2cV9tYXApO1xuYXJjaC9hcm02NC9rZXJuZWwvZnBzaW1kLmM6MTAyNzpcdGJpdG1hcF9jb3B5KGluZm8tXHUwMDNldnFfcGFydGlhbF9tYXAsIGluZm8tXHUwMDNldnFfbWFwLCBTVkVfVlFfTUFYKTtcbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jLTEwMjgtfVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jPTE2NjM9c3RhdGljIGludCBfX2t2bV92Y3B1X3NldF90YXJnZXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTE2NzUtXG5hcmNoL2FybTY0L2t2bS9hcm0uYzoxNjc2Olx0Yml0bWFwX2NvcHkoa3ZtLVx1MDAzZWFyY2gudmNwdV9mZWF0dXJlcywgXHUwMDI2ZmVhdHVyZXMsIEtWTV9WQ1BVX01BWF9GRUFUVVJFUyk7XG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xNjc3LVxuLS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uYz0zMzk9c3RhdGljIHZvaWQgcGt2bV9pbml0X2ZlYXR1cmVzX2Zyb21faG9zdChzdHJ1Y3QgcGt2bV9oeXBfdm0gKmh5cF92bSwgY29uc3Qgc3RydWN0IGt2bSAqaG9zdF9rdm0pXG4tLVxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jLTM1NS1cbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uYzozNTY6XHRcdGJpdG1hcF9jb3B5KGt2bS1cdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMsXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmMtMzU3LVx0XHRcdCAgICBob3N0X2t2bS1cdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmM9MzcwPXZvaWQgdmdpY192NV9mb2xkX3BwaV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmMtNDAyLVx0ICovXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYzo0MDM6XHRiaXRtYXBfY29weShjcHVfaWYtXHUwMDNldmdpY19wcGlfYWN0aXZlciwgYWN0aXZlciwgVkdJQ19WNV9OUl9QUklWQVRFX0lSUVMpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmMtNDA0LX1cbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYz00MDY9dm9pZCB2Z2ljX3Y1X2ZsdXNoX3BwaV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmMtNDM3LVx0ICovXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYzo0Mzg6XHRiaXRtYXBfY29weShob3N0X2RhdGFfcHRyKHZnaWNfdjVfcHBpX3N0YXRlKS1cdTAwM2VwZW5kciwgcGVuZHIsXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYy00MzktXHRcdCAgICBWR0lDX1Y1X05SX1BSSVZBVEVfSVJRUyk7XG4tLVxuYXJjaC9hcm02NC9tbS9jb250ZXh0LmM9OTE9c3RhdGljIHZvaWQgc2V0X3Jlc2VydmVkX2FzaWRfYml0cyh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vY29udGV4dC5jLTkzLVx0aWYgKHBpbm5lZF9hc2lkX21hcClcbmFyY2gvYXJtNjQvbW0vY29udGV4dC5jOjk0Olx0XHRiaXRtYXBfY29weShhc2lkX21hcCwgcGlubmVkX2FzaWRfbWFwLCBOVU1fVVNFUl9BU0lEUyk7XG5hcmNoL2FybTY0L21tL2NvbnRleHQuYy05NS1cdGVsc2UgaWYgKGFybTY0X2tlcm5lbF91bm1hcHBlZF9hdF9lbDAoKSlcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYz0zOTA9c3RhdGljIGlubGluZSB2b2lkIHNsaWNlX2NvcHlfbWFzayhzdHJ1Y3Qgc2xpY2VfbWFzayAqZHN0LFxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jLTM5NS1cdFx0cmV0dXJuO1xuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmM6Mzk2Olx0Yml0bWFwX2NvcHkoZHN0LVx1MDAzZWhpZ2hfc2xpY2VzLCBzcmMtXHUwMDNlaGlnaF9zbGljZXMsIFNMSUNFX05VTV9ISUdIKTtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jLTM5Ny19XG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jPTYyNT1zdGF0aWMgdm9pZCBfX2luaXQgcmlzY3ZfcmVzb2x2ZV9pc2EodW5zaWduZWQgbG9uZyAqc291cmNlX2lzYSxcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMtNjQwLVx0XHR9XG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmM6NjQxOlx0XHRiaXRtYXBfY29weShwcmV2X3Jlc29sdmVkX2lzYSwgcmVzb2x2ZWRfaXNhLCBSSVNDVl9JU0FfRVhUX01BWCk7XG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMtNjQyLVx0XHRmb3JfZWFjaF9zZXRfYml0KGJpdCwgc291cmNlX2lzYSwgUklTQ1ZfSVNBX0VYVF9NQVgpIHtcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmM9ODMxPXN0YXRpYyB2b2lkIF9faW5pdCByaXNjdl9maWxsX2h3Y2FwX2Zyb21faXNhX3N0cmluZyh1bnNpZ25lZCBsb25nICppc2EyaHdjYXApXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTkxNC1cdFx0aWYgKGJpdG1hcF9lbXB0eShyaXNjdl9pc2EsIFJJU0NWX0lTQV9FWFRfTUFYKSlcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYzo5MTU6XHRcdFx0Yml0bWFwX2NvcHkocmlzY3ZfaXNhLCBpc2FpbmZvLVx1MDAzZWlzYSwgUklTQ1ZfSVNBX0VYVF9NQVgpO1xuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTkxNi1cdFx0ZWxzZVxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYz05NTc9c3RhdGljIHZvaWQgX19pbml0IHJpc2N2X2ZpbGxfdmVuZG9yX2V4dF9saXN0KGludCBjcHUpXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTk2NS1cdFx0aWYgKCFleHRfbGlzdC1cdTAwM2Vpc19pbml0aWFsaXplZCkge1xuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jOjk2NjpcdFx0XHRiaXRtYXBfY29weShleHRfbGlzdC1cdTAwM2VhbGxfaGFydHNfaXNhX2JpdG1hcC5pc2EsXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMtOTY3LVx0XHRcdFx0ICAgIGV4dF9saXN0LVx1MDAzZXBlcl9oYXJ0X2lzYV9iaXRtYXBbY3B1XS5pc2EsXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jPTEwMTk9c3RhdGljIGludCBfX2luaXQgcmlzY3ZfZmlsbF9od2NhcF9mcm9tX2V4dF9saXN0KHVuc2lnbmVkIGxvbmcgKmlzYTJod2NhcClcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTA2NS1cdFx0aWYgKGJpdG1hcF9lbXB0eShyaXNjdl9pc2EsIFJJU0NWX0lTQV9FWFRfTUFYKSlcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYzoxMDY2Olx0XHRcdGJpdG1hcF9jb3B5KHJpc2N2X2lzYSwgaXNhaW5mby1cdTAwM2Vpc2EsIFJJU0NWX0lTQV9FWFRfTUFYKTtcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYy0xMDY3LVx0XHRlbHNlXG4tLVxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz00NDk2PWludGVsX2dldF9ldmVudF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywgaW50IGlkeCxcbi0tXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ1MTAtXHQgICAgICAgIFdBUk5fT05fT05DRSghKGMxLVx1MDAzZWZsYWdzIFx1MDAyNiBQRVJGX1g4Nl9FVkVOVF9EWU5BTUlDKSk7XG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQ1MTE6XHRcdGJpdG1hcF9jb3B5KGMxLVx1MDAzZWlkeG1zaywgYzItXHUwMDNlaWR4bXNrLCBYODZfUE1DX0lEWF9NQVgpO1xuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYy00NTEyLVx0XHRjMS1cdTAwM2V3ZWlnaHQgPSBjMi1cdTAwM2V3ZWlnaHQ7XG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmg9NzI9c3RhdGljIGlubGluZSB2b2lkIGNvcHlfcGh5c19jcHVfcHJlc2VudF9tYXAodW5zaWduZWQgbG9uZyAqZHN0KVxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgtNzMte1xuYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmg6NzQ6XHRiaXRtYXBfY29weShkc3QsIHBoeXNfY3B1X3ByZXNlbnRfbWFwLCBNQVhfTE9DQUxfQVBJQyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHNwZWMuaC03NS19XG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jPTY0OT12b2lkIGt2bV9wbXVfaGFuZGxlX2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vcG11LmMtNjU1LVxuYXJjaC94ODYva3ZtL3BtdS5jOjY1NjpcdGJpdG1hcF9jb3B5KGJpdG1hcCwgcG11LVx1MDAzZXJlcHJvZ3JhbV9wbWksIFg4Nl9QTUNfSURYX01BWCk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtNjU3LVxuLS1cbmFyY2gveDg2L2t2bS9wbXUuYz0xMTE5PXN0YXRpYyB2b2lkIGt2bV9wbXVfdHJpZ2dlcl9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC94ODYva3ZtL3BtdS5jLTExMzItXHRpZiAoIWt2bV9wbXVfaGFzX3BlcmZfZ2xvYmFsX2N0cmwocG11KSlcbmFyY2gveDg2L2t2bS9wbXUuYzoxMTMzOlx0XHRiaXRtYXBfY29weShiaXRtYXAsIGV2ZW50X3BtY3MsIFg4Nl9QTUNfSURYX01BWCk7XG5hcmNoL3g4Ni9rdm0vcG11LmMtMTEzNC1cdGVsc2UgaWYgKCFiaXRtYXBfYW5kKGJpdG1hcCwgZXZlbnRfcG1jcyxcbi0tXG5kcml2ZXJzL2FuZHJvaWQvZGJpdG1hcC5oPTcwPWRiaXRtYXBfcmVwbGFjZShzdHJ1Y3QgZGJpdG1hcCAqZG1hcCwgdW5zaWduZWQgbG9uZyAqbmV3LCB1bnNpZ25lZCBpbnQgbmJpdHMpXG5kcml2ZXJzL2FuZHJvaWQvZGJpdG1hcC5oLTcxLXtcbmRyaXZlcnMvYW5kcm9pZC9kYml0bWFwLmg6NzI6XHRiaXRtYXBfY29weShuZXcsIGRtYXAtXHUwMDNlbWFwLCBtaW4oZG1hcC1cdTAwM2VuYml0cywgbmJpdHMpKTtcbmRyaXZlcnMvYW5kcm9pZC9kYml0bWFwLmgtNzMtXHRrZnJlZShkbWFwLVx1MDAzZW1hcCk7XG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYtdjUuYz02MDg9c3RhdGljIGludCBjY3BfZmluZF9hbmRfYXNzaWduX2xzYl90b19xKHN0cnVjdCBjY3BfZGV2aWNlICpjY3AsXG4tLVxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYtdjUuYy02MzItXHRcdGlmIChxbHNiX3dndCA9PSBsc2JfY250KSB7XG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi12NS5jOjYzMzpcdFx0XHRiaXRtYXBfY29weShxbHNiLCBjbWRfcS1cdTAwM2Vsc2JtYXNrLCBNQVhfTFNCX0NOVCk7XG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi12NS5jLTYzNC1cbi0tXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi12NS5jPTY2NT1zdGF0aWMgaW50IGNjcF9hc3NpZ25fbHNicyhzdHJ1Y3QgY2NwX2RldmljZSAqY2NwKVxuLS1cbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LXY1LmMtNzA3LVx0ICovXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi12NS5jOjcwODpcdGJpdG1hcF9jb3B5KHFsc2IsIGxzYl9wdWIsIE1BWF9MU0JfQ05UKTtcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LXY1LmMtNzA5LVxuLS1cbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgvb3R4X2NwdHBmX3Vjb2RlLmM9MTA1OD1zdGF0aWMgaW50IGVuZ19ncnBfdXBkYXRlX21hc2tzKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4L290eF9jcHRwZl91Y29kZS5jLTExMDEtXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4L290eF9jcHRwZl91Y29kZS5jOjExMDI6XHRcdGJpdG1hcF9jb3B5KGVuZ3MtXHUwMDNlYm1hcCwgdG1wX2JtYXAuYml0cywgZW5nX2dycC1cdTAwM2VnLVx1MDAzZWVuZ3NfbnVtKTtcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgvb3R4X2NwdHBmX3Vjb2RlLmMtMTEwMy1cdH1cbi0tXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4L290eF9jcHRwZl91Y29kZS5jLTExMTktXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4L290eF9jcHRwZl91Y29kZS5jOjExMjA6XHRcdGJpdG1hcF9jb3B5KHRtcF9ibWFwLmJpdHMsIG1pcnJvcmVkX2VuZ3MtXHUwMDNlYm1hcCxcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgvb3R4X2NwdHBmX3Vjb2RlLmMtMTEyMS1cdFx0XHQgICAgZW5nX2dycC1cdTAwM2VnLVx1MDAzZWVuZ3NfbnVtKTtcbi0tXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmM9ODU1PXN0YXRpYyBpbnQgZW5nX2dycF91cGRhdGVfbWFza3Moc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgyL290eDJfY3B0cGZfdWNvZGUuYy05MDItXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmM6OTAzOlx0XHRiaXRtYXBfY29weShlbmdzLVx1MDAzZWJtYXAsIHRtcF9ibWFwLmJpdHMsIGVuZ19ncnAtXHUwMDNlZy1cdTAwM2VlbmdzX251bSk7XG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmMtOTA0LVx0fVxuLS1cbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgyL290eDJfY3B0cGZfdWNvZGUuYy05MjAtXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmM6OTIxOlx0XHRiaXRtYXBfY29weSh0bXBfYm1hcC5iaXRzLCBtaXJyb3JlZF9lbmdzLVx1MDAzZWJtYXAsXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmMtOTIyLVx0XHRcdCAgICBlbmdfZ3JwLVx1MDAzZWctXHUwMDNlZW5nc19udW0pO1xuLS1cbmRyaXZlcnMvZG1hL2lkeGQvZGV2aWNlLmM9Mzc5PXN0YXRpYyB2b2lkIGlkeGRfd3FfZGlzYWJsZV9jbGVhbnVwKHN0cnVjdCBpZHhkX3dxICp3cSlcbi0tXG5kcml2ZXJzL2RtYS9pZHhkL2RldmljZS5jLTM5NC1cdGlmICh3cS1cdTAwM2VvcGNhcF9ibWFwKVxuZHJpdmVycy9kbWEvaWR4ZC9kZXZpY2UuYzozOTU6XHRcdGJpdG1hcF9jb3B5KHdxLVx1MDAzZW9wY2FwX2JtYXAsIGlkeGQtXHUwMDNlb3BjYXBfYm1hcCwgSURYRF9NQVhfT1BDQVBfQklUUyk7XG5kcml2ZXJzL2RtYS9pZHhkL2RldmljZS5jLTM5Ni19XG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmM9MTczPXN0YXRpYyBpbnQgaWR4ZF9zZXR1cF93cXMoc3RydWN0IGlkeGRfZGV2aWNlICppZHhkKVxuLS1cbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jLTIzMy1cdFx0XHR9XG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYzoyMzQ6XHRcdFx0Yml0bWFwX2NvcHkod3EtXHUwMDNlb3BjYXBfYm1hcCwgaWR4ZC1cdTAwM2VvcGNhcF9ibWFwLCBJRFhEX01BWF9PUENBUF9CSVRTKTtcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jLTIzNS1cdFx0fVxuLS1cbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jPTgyMT1zdGF0aWMgaW50IGlkeGRfZGV2aWNlX2NvbmZpZ19zYXZlKHN0cnVjdCBpZHhkX2RldmljZSAqaWR4ZCxcbi0tXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy04OTItXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYzo4OTM6XHRiaXRtYXBfY29weShzYXZlZF93cV9lbmFibGVfbWFwLCBpZHhkLVx1MDAzZXdxX2VuYWJsZV9tYXAsIGlkeGQtXHUwMDNlbWF4X3dxcyk7XG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy04OTQtXG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmM9OTQyPXN0YXRpYyB2b2lkIGlkeGRfZGV2aWNlX2NvbmZpZ19yZXN0b3JlKHN0cnVjdCBpZHhkX2RldmljZSAqaWR4ZCxcbi0tXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy05ODAtXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYzo5ODE6XHRiaXRtYXBfY29weShpZHhkLVx1MDAzZXdxX2VuYWJsZV9tYXAsIGlkeGRfc2F2ZWQtXHUwMDNlc2F2ZWRfd3FfZW5hYmxlX21hcCxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jLTk4Mi1cdFx0ICAgIGlkeGQtXHUwMDNlbWF4X3dxcyk7XG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9zeXNmcy5jPTEyNTE9c3RhdGljIHNzaXplX3Qgd3Ffb3BfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxuZHJpdmVycy9kbWEvaWR4ZC9zeXNmcy5jLTEyNzMtXG5kcml2ZXJzL2RtYS9pZHhkL3N5c2ZzLmM6MTI3NDpcdGJpdG1hcF9jb3B5KHdxLVx1MDAzZW9wY2FwX2JtYXAsIG9wbWFzaywgSURYRF9NQVhfT1BDQVBfQklUUyk7XG5kcml2ZXJzL2RtYS9pZHhkL3N5c2ZzLmMtMTI3NS1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1samNhLmM9MjMwPXN0YXRpYyBpbnQgbGpjYV9ncGlvX2luaXRfdmFsaWRfbWFzayhzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLFxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWxqY2EuYy0yMzYtXHRXQVJOX09OX09OQ0UobmdwaW9zICE9IGxqY2FfZ3Bpby1cdTAwM2VncGlvX2luZm8tXHUwMDNlbnVtKTtcbmRyaXZlcnMvZ3Bpby9ncGlvLWxqY2EuYzoyMzc6XHRiaXRtYXBfY29weSh2YWxpZF9tYXNrLCBsamNhX2dwaW8tXHUwMDNlZ3Bpb19pbmZvLVx1MDAzZXZhbGlkX3Bpbl9tYXAsIG5ncGlvcyk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1samNhLmMtMjM4LVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLWx0YzQyODMuYz0xNjA9c3RhdGljIGludCBsdGM0MjgzX2luaXRfdmFsaWRfbWFzayhzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgbG9uZyAqdmFsaWRfbWFzayxcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1sdGM0MjgzLmMtMTY0LVxuZHJpdmVycy9ncGlvL2dwaW8tbHRjNDI4My5jOjE2NTpcdGJpdG1hcF9jb3B5KHZhbGlkX21hc2ssIG1hc2ssIG5ncGlvcyk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1sdGM0MjgzLmMtMTY2LVx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jPTk1MD1zdGF0aWMgYm9vbCBwY2E5NTN4X2lycV9wZW5kaW5nKHN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAsIHVuc2lnbmVkIGxvbmcgKnBlbmRpbmcpXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jLTk4OC1cbmRyaXZlcnMvZ3Bpby9ncGlvLXBjYTk1M3guYzo5ODk6XHRiaXRtYXBfY29weShvbGRfc3RhdCwgY2hpcC1cdTAwM2VpcnFfc3RhdCwgZ2MtXHUwMDNlbmdwaW8pO1xuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jLTk5MC1cbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTN4LmMtOTk0LVxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jOjk5NTpcdGJpdG1hcF9jb3B5KGNoaXAtXHUwMDNlaXJxX3N0YXQsIG5ld19zdGF0LCBnYy1cdTAwM2VuZ3Bpbyk7XG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTN4LmMtOTk2LVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXJlZ21hcC5jPTI5MT1zdHJ1Y3QgZ3Bpb19yZWdtYXAgKmdwaW9fcmVnbWFwX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBncGlvX3JlZ21hcF9jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1yZWdtYXAuYy0zNjMtXHRcdH1cbmRyaXZlcnMvZ3Bpby9ncGlvLXJlZ21hcC5jOjM2NDpcdFx0Yml0bWFwX2NvcHkoZ3Bpby1cdTAwM2VmaXhlZF9kaXJlY3Rpb25fbWFzayxcbmRyaXZlcnMvZ3Bpby9ncGlvLXJlZ21hcC5jLTM2NS1cdFx0XHQgICAgY29uZmlnLVx1MDAzZWZpeGVkX2RpcmVjdGlvbl9tYXNrLCBjaGlwLVx1MDAzZW5ncGlvKTtcbi0tXG5kcml2ZXJzL2dwaW8vZ3Bpby1yZWdtYXAuYy0zNzQtXHRcdH1cbmRyaXZlcnMvZ3Bpby9ncGlvLXJlZ21hcC5jOjM3NTpcdFx0Yml0bWFwX2NvcHkoZ3Bpby1cdTAwM2VmaXhlZF9kaXJlY3Rpb25fb3V0cHV0LFxuZHJpdmVycy9ncGlvL2dwaW8tcmVnbWFwLmMtMzc2LVx0XHRcdCAgICBjb25maWctXHUwMDNlZml4ZWRfZGlyZWN0aW9uX291dHB1dCwgY2hpcC1cdTAwM2VuZ3Bpbyk7XG4tLVxuZHJpdmVycy9ncGlvL2dwaW8teGlsaW54LmM9MTc4PXN0YXRpYyBpbnQgeGdwaW9fc2V0X211bHRpcGxlKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBsb25nICptYXNrLFxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jLTE5NS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jOjE5NjpcdGJpdG1hcF9jb3B5KGNoaXAtXHUwMDNlc3RhdGUsIHN0YXRlLCA2NCk7XG5kcml2ZXJzL2dwaW8vZ3Bpby14aWxpbnguYy0xOTctXG4tLVxuZHJpdmVycy9ncGlvL2dwaW8teGlsaW54LmM9NDc3PXN0YXRpYyB2b2lkIHhncGlvX2lycWhhbmRsZXIoc3RydWN0IGlycV9kZXNjICpkZXNjKVxuLS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jLTUwNS1cbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jOjUwNjpcdGJpdG1hcF9jb3B5KGNoaXAtXHUwMDNlbGFzdF9pcnFfcmVhZCwgaHcsIDY0KTtcbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jLTUwNy1cdGJpdG1hcF9vcihodywgcmlzaW5nLCBmYWxsaW5nLCA2NCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jPTMyNT1zdm1fcmFuZ2UgKnN2bV9yYW5nZV9uZXcoc3RydWN0IHN2bV9yYW5nZV9saXN0ICpzdm1zLCB1aW50NjRfdCBzdGFydCxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU5LVx0aWYgKHAtXHUwMDNleG5hY2tfZW5hYmxlZClcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNjA6XHRcdGJpdG1hcF9jb3B5KHByYW5nZS1cdTAwM2ViaXRtYXBfYWNjZXNzLCBzdm1zLVx1MDAzZWJpdG1hcF9zdXBwb3J0ZWQsXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzYxLVx0XHRcdCAgICBNQVhfR1BVX0lOU1RBTkNFKTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9MTA0Nz1zdm1fcmFuZ2Vfc3BsaXRfYWRqdXN0KHN0cnVjdCBzdm1fcmFuZ2UgKm5ldywgc3RydWN0IHN2bV9yYW5nZSAqb2xkLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xMDc5LVx0bmV3LVx1MDAzZW1hcHBlZF90b19ncHUgPSBvbGQtXHUwMDNlbWFwcGVkX3RvX2dwdTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzoxMDgwOlx0Yml0bWFwX2NvcHkobmV3LVx1MDAzZWJpdG1hcF9hY2Nlc3MsIG9sZC1cdTAwM2ViaXRtYXBfYWNjZXNzLCBNQVhfR1BVX0lOU1RBTkNFKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzoxMDgxOlx0Yml0bWFwX2NvcHkobmV3LVx1MDAzZWJpdG1hcF9haXAsIG9sZC1cdTAwM2ViaXRtYXBfYWlwLCBNQVhfR1BVX0lOU1RBTkNFKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xMDgyLVx0YXRvbWljX3NldChcdTAwMjZuZXctXHUwMDNlcXVldWVfcmVmY291bnQsIGF0b21pY19yZWFkKFx1MDAyNm9sZC1cdTAwM2VxdWV1ZV9yZWZjb3VudCkpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0xNjc5PXN0YXRpYyBpbnQgc3ZtX3JhbmdlX3ZhbGlkYXRlX2FuZF9tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTE3MDEtXHR9IGVsc2UgaWYgKGN0eC1cdTAwM2Vwcm9jZXNzLVx1MDAzZXhuYWNrX2VuYWJsZWQpIHtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzoxNzAyOlx0XHRiaXRtYXBfY29weShjdHgtXHUwMDNlYml0bWFwLCBwcmFuZ2UtXHUwMDNlYml0bWFwX2FpcCwgTUFYX0dQVV9JTlNUQU5DRSk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMTcwMy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMTcyNy1cdFx0XHQgICAgcHJhbmdlLVx1MDAzZWZsYWdzIFx1MDAyNiBLRkRfSU9DVExfU1ZNX0ZMQUdfR1BVX0FMV0FZU19NQVBQRUQpXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MTcyODpcdFx0XHRcdGJpdG1hcF9jb3B5KGN0eC1cdTAwM2ViaXRtYXAsIHByYW5nZS1cdTAwM2ViaXRtYXBfYWNjZXNzLCBNQVhfR1BVX0lOU1RBTkNFKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xNzI5LVx0XHR9XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jPTIwOTE9c3RhdGljIHN0cnVjdCBzdm1fcmFuZ2UgKnN2bV9yYW5nZV9jbG9uZShzdHJ1Y3Qgc3ZtX3JhbmdlICpvbGQpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTIxMTYtXHRuZXctXHUwMDNldnJhbV9wYWdlcyA9IG9sZC1cdTAwM2V2cmFtX3BhZ2VzO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jOjIxMTc6XHRiaXRtYXBfY29weShuZXctXHUwMDNlYml0bWFwX2FjY2Vzcywgb2xkLVx1MDAzZWJpdG1hcF9hY2Nlc3MsIE1BWF9HUFVfSU5TVEFOQ0UpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jOjIxMTg6XHRiaXRtYXBfY29weShuZXctXHUwMDNlYml0bWFwX2FpcCwgb2xkLVx1MDAzZWJpdG1hcF9haXAsIE1BWF9HUFVfSU5TVEFOQ0UpO1xuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTIxMTktXHRhdG9taWNfc2V0KFx1MDAyNm5ldy1cdTAwM2VxdWV1ZV9yZWZjb3VudCwgYXRvbWljX3JlYWQoXHUwMDI2b2xkLVx1MDAzZXF1ZXVlX3JlZmNvdW50KSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jPTM1MTU9c3ZtX3JhbmdlX2Jlc3RfcHJlZmV0Y2hfbG9jYXRpb24oc3RydWN0IHN2bV9yYW5nZSAqcHJhbmdlKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zNTQxLVx0aWYgKHAtXHUwMDNleG5hY2tfZW5hYmxlZClcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNTQyOlx0XHRiaXRtYXBfY29weShiaXRtYXAsIHByYW5nZS1cdTAwM2ViaXRtYXBfYWlwLCBNQVhfR1BVX0lOU1RBTkNFKTtcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zNTQzLVx0ZWxzZVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0zODQ3PXN2bV9yYW5nZV9nZXRfYXR0cihzdHJ1Y3Qga2ZkX3Byb2Nlc3MgKnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zOTI3LVx0XHRpZiAocC1cdTAwM2V4bmFja19lbmFibGVkKVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jOjM5Mjg6XHRcdFx0Yml0bWFwX2NvcHkoYml0bWFwX2FjY2Vzcywgc3Ztcy1cdTAwM2ViaXRtYXBfc3VwcG9ydGVkLFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM5MjktXHRcdFx0XHQgICAgTUFYX0dQVV9JTlNUQU5DRSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM5MzQtXHR9XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MzkzNTpcdGJpdG1hcF9jb3B5KGJpdG1hcF9hY2Nlc3MsIHN2bXMtXHUwMDNlYml0bWFwX3N1cHBvcnRlZCwgTUFYX0dQVV9JTlNUQU5DRSk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MzkzNjpcdGJpdG1hcF9jb3B5KGJpdG1hcF9haXAsIHN2bXMtXHUwMDNlYml0bWFwX3N1cHBvcnRlZCwgTUFYX0dQVV9JTlNUQU5DRSk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzkzNy1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vYW1kL3BtL3N3c211L2luYy9hbWRncHVfc211Lmg9MjA4NT1zdGF0aWMgaW5saW5lIHZvaWQgc211X2ZlYXR1cmVfYml0c19jb3B5KHN0cnVjdCBzbXVfZmVhdHVyZV9iaXRzICpkc3QsXG4tLVxuZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9zd3NtdS9pbmMvYW1kZ3B1X3NtdS5oLTIwODgte1xuZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9zd3NtdS9pbmMvYW1kZ3B1X3NtdS5oOjIwODk6XHRiaXRtYXBfY29weShkc3QtXHUwMDNlYml0cywgc3JjLCBuYml0cyk7XG5kcml2ZXJzL2dwdS9kcm0vYW1kL3BtL3N3c211L2luYy9hbWRncHVfc211LmgtMjA5MC19XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmM9Njc2PWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0X2FzeW5jX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5jLTcwNS1cdGlmICghYml0bWFwX2VtcHR5KHBvd2VyX2RvbWFpbnMtXHUwMDNlYXN5bmNfcHV0X2RvbWFpbnNbMV0uYml0cywgUE9XRVJfRE9NQUlOX05VTSkpIHtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2Rpc3BsYXkvaW50ZWxfZGlzcGxheV9wb3dlci5jOjcwNjpcdFx0Yml0bWFwX2NvcHkocG93ZXJfZG9tYWlucy1cdTAwM2Vhc3luY19wdXRfZG9tYWluc1swXS5iaXRzLFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMtNzA3LVx0XHRcdCAgICBwb3dlcl9kb21haW5zLVx1MDAzZWFzeW5jX3B1dF9kb21haW5zWzFdLmJpdHMsXG4tLVxuZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9zbXAuYz0zNjA9c3RydWN0IG1kcDVfc21wICptZHA1X3NtcF9pbml0KHN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMsIGNvbnN0IHN0cnVjdCBtZHA1X3NtcF9ibG9jayAqY2ZnKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfc21wLmMtMzc4LVx0Lyogc3RhdGljYWxseSB0aWVkIE1NQnMgY2Fubm90IGJlIHJlLWFsbG9jYXRlZDogKi9cbmRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfc21wLmM6Mzc5Olx0Yml0bWFwX2NvcHkoc3RhdGUtXHUwMDNlc3RhdGUsIGNmZy1cdTAwM2VyZXNlcnZlZF9zdGF0ZSwgc21wLVx1MDAzZWJsa19jbnQpO1xuZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9zbXAuYy0zODAtXHRtZW1jcHkoc21wLVx1MDAzZXJlc2VydmVkLCBjZmctXHUwMDNlcmVzZXJ2ZWQsIHNpemVvZihzbXAtXHUwMDNlcmVzZXJ2ZWQpKTtcbi0tXG5kcml2ZXJzL2h3bW9uL3BlY2kvZGltbXRlbXAuYz0yMTM9c3RhdGljIGludCBjaGVja19wb3B1bGF0ZWRfZGltbXMoc3RydWN0IHBlY2lfZGltbXRlbXAgKnByaXYpXG4tLVxuZHJpdmVycy9od21vbi9wZWNpL2RpbW10ZW1wLmMtMjgyLVxuZHJpdmVycy9od21vbi9wZWNpL2RpbW10ZW1wLmM6MjgzOlx0Yml0bWFwX2NvcHkocHJpdi1cdTAwM2VkaW1tX21hc2ssIGRpbW1fbWFzaywgRElNTV9OVU1TX01BWCk7XG5kcml2ZXJzL2h3bW9uL3BlY2kvZGltbXRlbXAuYy0yODQtXG4tLVxuZHJpdmVycy9paW8vYWRjL21heDEzNjMuYz0xNDUzPXN0YXRpYyBpbnQgbWF4MTM2M19hbGxvY19zY2FuX21hc2tzKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYpXG4tLVxuZHJpdmVycy9paW8vYWRjL21heDEzNjMuYy0xNDY3LVx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3QtXHUwMDNlY2hpcF9pbmZvLVx1MDAzZW51bV9tb2RlczsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL2lpby9hZGMvbWF4MTM2My5jOjE0Njg6XHRcdGJpdG1hcF9jb3B5KG1hc2tzICYjNDM7IEJJVFNfVE9fTE9OR1MoTUFYMTM2M19NQVhfQ0hBTk5FTFMpKmksXG5kcml2ZXJzL2lpby9hZGMvbWF4MTM2My5jLTE0NjktXHRcdFx0ICAgIG1heDEzNjNfbW9kZV90YWJsZVtzdC1cdTAwM2VjaGlwX2luZm8tXHUwMDNlbW9kZV9saXN0W2ldXVxuLS1cbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1idWZmZXIuYz01MTA9c3RhdGljIGludCBpaW9fc2Nhbl9tYXNrX3NldChzdHJ1Y3QgaWlvX2RldiAqaW5kaW9fZGV2LFxuLS1cbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1idWZmZXIuYy01MjQtXHRcdHJldHVybiAtRU5PTUVNO1xuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jOjUyNTpcdGJpdG1hcF9jb3B5KHRyaWFsbWFzaywgYnVmZmVyLVx1MDAzZXNjYW5fbWFzaywgbWFza2xlbmd0aCk7XG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tYnVmZmVyLmMtNTI2LVx0c2V0X2JpdChiaXQsIHRyaWFsbWFzayk7XG4tLVxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jLTUzNi1cdH1cbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1idWZmZXIuYzo1Mzc6XHRiaXRtYXBfY29weShidWZmZXItXHUwMDNlc2Nhbl9tYXNrLCB0cmlhbG1hc2ssIG1hc2tsZW5ndGgpO1xuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jLTUzOC1cbi0tXG5kcml2ZXJzL2lpby9wcm94aW1pdHkvZDMzMjNhYS5jPTIyMj1zdGF0aWMgaW50IGQzMzIzYWFfd3JpdGVfc2V0dGluZ3Moc3RydWN0IGlpb19kZXYgKmluZGlvX2Rldixcbi0tXG5kcml2ZXJzL2lpby9wcm94aW1pdHkvZDMzMjNhYS5jLTI3My1cbmRyaXZlcnMvaWlvL3Byb3hpbWl0eS9kMzMyM2FhLmM6Mjc0Olx0Yml0bWFwX2NvcHkod3JpdHRlbl9yZWdiaXRtYXAsIHJlZ2JpdG1hcCwgRDMzMjNBQV9SRUdfTlJfQklUUyk7XG5kcml2ZXJzL2lpby9wcm94aW1pdHkvZDMzMjNhYS5jLTI3NS1cbi0tXG5kcml2ZXJzL2lucHV0L2V2ZGV2LmM9ODg0PXN0YXRpYyBpbnQgZXZkZXZfaGFuZGxlX2dldF92YWwoc3RydWN0IGV2ZGV2X2NsaWVudCAqY2xpZW50LFxuLS1cbmRyaXZlcnMvaW5wdXQvZXZkZXYuYy04OTktXG5kcml2ZXJzL2lucHV0L2V2ZGV2LmM6OTAwOlx0Yml0bWFwX2NvcHkobWVtLCBiaXRzLCBtYXhiaXQpO1xuZHJpdmVycy9pbnB1dC9ldmRldi5jLTkwMS1cbi0tXG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYz00OD1zdGF0aWMgaXJxcmV0dXJuX3QgbXQ2Nzc5X2tleXBhZF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9pbnB1dC9rZXlib2FyZC9tdDY3Nzkta2V5cGFkLmMtODktXG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYzo5MDpcdGJpdG1hcF9jb3B5KGtleXBhZC1cdTAwM2VrZXltYXBfc3RhdGUsIG5ld19zdGF0ZSwgTVRLX0tQRF9OVU1fQklUUyk7XG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYy05MS1cbi0tXG5kcml2ZXJzL2lucHV0L3JtaTQvcm1pX2RyaXZlci5jPTM3Mj1zdGF0aWMgaW50IHJtaV9kcml2ZXJfc2V0X2lycV9iaXRzKHN0cnVjdCBybWlfZGV2aWNlICpybWlfZGV2LFxuLS1cbmRyaXZlcnMvaW5wdXQvcm1pNC9ybWlfZHJpdmVyLmMtMzkxLVxuZHJpdmVycy9pbnB1dC9ybWk0L3JtaV9kcml2ZXIuYzozOTI6XHRiaXRtYXBfY29weShkYXRhLVx1MDAzZWN1cnJlbnRfaXJxX21hc2ssIGRhdGEtXHUwMDNlbmV3X2lycV9tYXNrLCBkYXRhLVx1MDAzZWlycV9jb3VudCk7XG5kcml2ZXJzL2lucHV0L3JtaTQvcm1pX2RyaXZlci5jLTM5My1cdGJpdG1hcF9vcihkYXRhLVx1MDAzZWZuX2lycV9iaXRzLCBkYXRhLVx1MDAzZWZuX2lycV9iaXRzLCBtYXNrLCBkYXRhLVx1MDAzZWlycV9jb3VudCk7XG4tLVxuZHJpdmVycy9pbnB1dC9ybWk0L3JtaV9kcml2ZXIuYz00MDA9c3RhdGljIGludCBybWlfZHJpdmVyX2NsZWFyX2lycV9iaXRzKHN0cnVjdCBybWlfZGV2aWNlICpybWlfZGV2LFxuLS1cbmRyaXZlcnMvaW5wdXQvcm1pNC9ybWlfZHJpdmVyLmMtNDIxLVxuZHJpdmVycy9pbnB1dC9ybWk0L3JtaV9kcml2ZXIuYzo0MjI6XHRiaXRtYXBfY29weShkYXRhLVx1MDAzZWN1cnJlbnRfaXJxX21hc2ssIGRhdGEtXHUwMDNlbmV3X2lycV9tYXNrLCBkYXRhLVx1MDAzZWlycV9jb3VudCk7XG5kcml2ZXJzL2lucHV0L3JtaTQvcm1pX2RyaXZlci5jLTQyMy1cbi0tXG5kcml2ZXJzL2lycWNoaXAvaXJxLW1pcHMtZ2ljLmM9ODQzPXN0YXRpYyBpbnQgZ2ljX3JlZ2lzdGVyX2lwaV9kb21haW4oc3RydWN0IGRldmljZV9ub2RlICpub2RlKVxuLS1cbmRyaXZlcnMvaXJxY2hpcC9pcnEtbWlwcy1naWMuYy04NzAtXG5kcml2ZXJzL2lycWNoaXAvaXJxLW1pcHMtZ2ljLmM6ODcxOlx0Yml0bWFwX2NvcHkoaXBpX2F2YWlsYWJsZSwgaXBpX3Jlc3J2LCBHSUNfTUFYX0lOVFJTKTtcbmRyaXZlcnMvaXJxY2hpcC9pcnEtbWlwcy1naWMuYy04NzItXG4tLVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYz01ODU9c3RhdGljIGJvb2wgYmxvY2tfYml0bWFwX29wKHN0cnVjdCBkbV9pbnRlZ3JpdHlfYyAqaWMsIHN0cnVjdCBwYWdlX2xpc3QgKmJpdG1hcCxcbi0tXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jLTY5MC1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6NjkxOnN0YXRpYyB2b2lkIGJsb2NrX2JpdG1hcF9jb3B5KHN0cnVjdCBkbV9pbnRlZ3JpdHlfYyAqaWMsIHN0cnVjdCBwYWdlX2xpc3QgKmRzdCwgc3RydWN0IHBhZ2VfbGlzdCAqc3JjKVxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy02OTIte1xuLS1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM9Mzc4Mz1zdGF0aWMgdm9pZCBkbV9pbnRlZ3JpdHlfcmVzdW1lKHN0cnVjdCBkbV90YXJnZXQgKnRpKVxuLS1cbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtMzgzMC1cdFx0XHQgICAgIWljLVx1MDAzZXJlc2V0X3JlY2FsY3VsYXRlX2ZsYWcpIHtcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6MzgzMTpcdFx0XHRcdGJsb2NrX2JpdG1hcF9jb3B5KGljLCBpYy1cdTAwM2VyZWNhbGNfYml0bWFwLCBpYy1cdTAwM2Vqb3VybmFsKTtcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6MzgzMjpcdFx0XHRcdGJsb2NrX2JpdG1hcF9jb3B5KGljLCBpYy1cdTAwM2VtYXlfd3JpdGVfYml0bWFwLCBpYy1cdTAwM2Vqb3VybmFsKTtcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtMzgzMy1cdFx0XHRcdGlmICghYmxvY2tfYml0bWFwX29wKGljLCBpYy1cdTAwM2Vqb3VybmFsLCAwLCBpYy1cdTAwM2Vwcm92aWRlZF9kYXRhX3NlY3RvcnMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS5oLTI1MS0jZGVmaW5lIFhHQkVfTE1fQ09QWShfZHN0LCBfZG5hbWUsIF9zcmMsIF9zbmFtZSlcdFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLmg6MjUyOlx0Yml0bWFwX2NvcHkoKF9kc3QpLVx1MDAzZWxpbmtfbW9kZXMuX2RuYW1lLFx0XHRcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS5oLTI1My1cdFx0ICAgIChfc3JjKS1cdTAwM2VsaW5rX21vZGVzLl9zbmFtZSxcdFx0XFxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuYz0zNDI1PXN0YXRpYyBzc2l6ZV90IGJsb2NrZWRfZmxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTM0NDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuYzozNDQyOlx0Yml0bWFwX2NvcHkoYWRhcC1cdTAwM2VzZ2UuYmxvY2tlZF9mbCwgdCwgYWRhcC1cdTAwM2VzZ2UuZWdyX3N6KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTM0NDMtXHRiaXRtYXBfZnJlZSh0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jPTE3MzI9c3RhdGljIGludCBoY2xnZV92cG9ydF9zZXR1cChzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0LCB1MTYgbnVtX3RxcHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0xNzM5LVx0bmljLVx1MDAzZWFlX2FsZ28gPSBcdTAwMjZhZV9hbGdvO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzoxNzQwOlx0Yml0bWFwX2NvcHkobmljLVx1MDAzZW51bWFfbm9kZV9tYXNrLmJpdHMsIGhkZXYtXHUwMDNlbnVtYV9ub2RlX21hc2suYml0cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMTc0MS1cdFx0ICAgIE1BWF9OVU1OT0RFUyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYz0yNDE0PXN0YXRpYyBpbnQgaGNsZ2VfaW5pdF9yb2NlX2Jhc2VfaW5mbyhzdHJ1Y3QgaGNsZ2VfdnBvcnQgKnZwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMjQzMi1cdHJvY2UtXHUwMDNlYWVfYWxnbyA9IG5pYy1cdTAwM2VhZV9hbGdvO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYzoyNDMzOlx0Yml0bWFwX2NvcHkocm9jZS1cdTAwM2VudW1hX25vZGVfbWFzay5iaXRzLCBuaWMtXHUwMDNlbnVtYV9ub2RlX21hc2suYml0cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMjQzNC1cdFx0ICAgIE1BWF9OVU1OT0RFUyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jPTQ0Nz1zdGF0aWMgaW50IGhjbGdldmZfc2V0X2hhbmRsZV9pbmZvKHN0cnVjdCBoY2xnZXZmX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtNDUzLVx0bmljLVx1MDAzZXBkZXYgPSBoZGV2LVx1MDAzZXBkZXY7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM6NDU0Olx0Yml0bWFwX2NvcHkobmljLVx1MDAzZW51bWFfbm9kZV9tYXNrLmJpdHMsIGhkZXYtXHUwMDNlbnVtYV9ub2RlX21hc2suYml0cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy00NTUtXHRcdCAgICBNQVhfTlVNTk9ERVMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYz0yMTQ0PXN0YXRpYyBpbnQgaGNsZ2V2Zl9pbml0X3JvY2VfYmFzZV9pbmZvKHN0cnVjdCBoY2xnZXZmX2RldiAqaGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtMjE2Mi1cdHJvY2UtXHUwMDNlYWVfYWxnbyA9IG5pYy1cdTAwM2VhZV9hbGdvO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jOjIxNjM6XHRiaXRtYXBfY29weShyb2NlLVx1MDAzZW51bWFfbm9kZV9tYXNrLmJpdHMsIG5pYy1cdTAwM2VudW1hX25vZGVfbWFzay5iaXRzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTIxNjQtXHRcdCAgICBNQVhfTlVNTk9ERVMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYz0zODU9aGluaWMzX2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYy0zOTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmM6Mzk5Olx0Yml0bWFwX2NvcHkobGlua19zZXR0aW5ncy1cdTAwM2VsaW5rX21vZGVzLnN1cHBvcnRlZCwgc2V0dGluZ3Muc3VwcG9ydGVkLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jLTQwMC1cdFx0ICAgIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmM6NDAxOlx0Yml0bWFwX2NvcHkobGlua19zZXR0aW5ncy1cdTAwM2VsaW5rX21vZGVzLmFkdmVydGlzaW5nLCBzZXR0aW5ncy5hZHZlcnRpc2luZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYy00MDItXHRcdCAgICBfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmM9NTIzOD1zdGF0aWMgaW50IGk0MGVfc2V0X3ByaXZfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGZsYWdzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMtNTI1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmM6NTI1MTpcdGJpdG1hcF9jb3B5KG9yaWdfZmxhZ3MsIHBmLVx1MDAzZWZsYWdzLCBJNDBFX1BGX0ZMQUdTX05CSVRTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmM6NTI1MjpcdGJpdG1hcF9jb3B5KG5ld19mbGFncywgcGYtXHUwMDNlZmxhZ3MsIEk0MEVfUEZfRkxBR1NfTkJJVFMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYy01MjUzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMtNTQ2MC1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYzo1NDYxOlx0Yml0bWFwX2NvcHkocGYtXHUwMDNlZmxhZ3MsIG5ld19mbGFncywgSTQwRV9QRl9GTEFHU19OQklUUyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jLTU0NjItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmM9MTczOT1zdGF0aWMgaW50IGljZV9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZmxhZ3MpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMtMTc1NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jOjE3NTY6XHRiaXRtYXBfY29weShvcmlnX2ZsYWdzLCBwZi1cdTAwM2VmbGFncywgSUNFX1BGX0ZMQUdTX05CSVRTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jLTE3NTctXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJQ0VfUFJJVl9GTEFHX0FSUkFZX1NJWkU7IGkmIzQzOyYjNDM7KSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zY2hlZC5jPTI2MTc9aWNlX3NhdmVfYWdnX3RjX2JpdG1hcChzdHJ1Y3QgaWNlX3BvcnRfaW5mbyAqcGksIHUzMiBhZ2dfaWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zY2hlZC5jLTI2MjQtXHRcdHJldHVybiAtRUlOVkFMO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zY2hlZC5jOjI2MjU6XHRiaXRtYXBfY29weShhZ2dfaW5mby1cdTAwM2VyZXBsYXlfdGNfYml0bWFwLCB0Y19iaXRtYXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmMtMjYyNi1cdFx0ICAgIElDRV9NQVhfVFJBRkZJQ19DTEFTUyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zY2hlZC5jPTI4NjE9aWNlX3NhdmVfYWdnX3ZzaV90Y19iaXRtYXAoc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCB1MzIgYWdnX2lkLCB1MTYgdnNpX2hhbmRsZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmMtMjg3My1cdFx0cmV0dXJuIC1FSU5WQUw7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmM6Mjg3NDpcdGJpdG1hcF9jb3B5KGFnZ192c2lfaW5mby1cdTAwM2VyZXBsYXlfdGNfYml0bWFwLCB0Y19iaXRtYXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmMtMjg3NS1cdFx0ICAgIElDRV9NQVhfVFJBRkZJQ19DTEFTUyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYz0yMjgxPXN0YXRpYyB2b2lkIGljZV9nZXRfcmVjcF90b19wcm9mX21hcChzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jLTIyOTQtXHRcdGJpdG1hcF9mcm9tX2FycjY0KHJfYml0bWFwLCBcdTAwMjZyZWNwX2Fzc29jLCBJQ0VfTUFYX05VTV9SRUNJUEVTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmM6MjI5NTpcdFx0Yml0bWFwX2NvcHkocHJvZmlsZV90b19yZWNpcGVbaV0sIHJfYml0bWFwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYy0yMjk2LVx0XHRcdCAgICBJQ0VfTUFYX05VTV9SRUNJUEVTKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jPTIzMTU9aWNlX2dldF9yZWNwX2ZybV9mdyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9zd19yZWNpcGUgKnJlY3BzLCB1OCByaWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYy0yNDMyLVx0LyogQ29weSByZXN1bHQgaW5kZXhlcyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYzoyNDMzOlx0Yml0bWFwX2NvcHkocmVjcHNbcmlkXS5yZXNfaWR4cywgcmVzdWx0X2JtLCBJQ0VfTUFYX0ZWX1dPUkRTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMtMjQzNC1cdGlmIChpc19hZGQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYz01MzA5PWljZV9hZGRfYWR2X3JlY2lwZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9hZHZfbGt1cF9lbGVtICpsa3Vwcyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jLTU0MzctXHRcdC8qIFVwZGF0ZSBwcm9maWxlIHRvIHJlY2lwZSBiaXRtYXAgYXJyYXkgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmM6NTQzODpcdFx0Yml0bWFwX2NvcHkocHJvZmlsZV90b19yZWNpcGVbZnZpdC1cdTAwM2Vwcm9maWxlX2lkXSwgcl9iaXRtYXAsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jLTU0MzktXHRcdFx0ICAgIElDRV9NQVhfTlVNX1JFQ0lQRVMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L2NvcmVfYWNsX2ZsZXhfa2V5cy5jPTI1NT1zdGF0aWMgaW50IG1seHN3X2Fma19waWNrZXIoc3RydWN0IG1seHN3X2FmayAqbWx4c3dfYWZrLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L2NvcmVfYWNsX2ZsZXhfa2V5cy5jLTMwMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L2NvcmVfYWNsX2ZsZXhfa2V5cy5jOjMwMjpcdFx0Yml0bWFwX2NvcHkocGlja2VyW2Jsb2NrX2luZGV4XS5jaG9zZW5fZWxlbWVudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L2NvcmVfYWNsX2ZsZXhfa2V5cy5jLTMwMy1cdFx0XHQgICAgcGlja2VyW2Jsb2NrX2luZGV4XS5lbGVtZW50LCBNTFhTV19BRktfRUxFTUVOVF9NQVgpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X3ZsYW4uYz0xNjE9dm9pZCBzcGFyeDVfdXBkYXRlX2Z3ZChzdHJ1Y3Qgc3Bhcng1ICpzcGFyeDUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfdmxhbi5jLTE3My1cdFx0XHQvKiBBbGxvdyB0byBzZW5kIHRvIGFsbCBicmlkZ2VkIGJ1dCBzZWxmICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV92bGFuLmM6MTc0Olx0XHRcdGJpdG1hcF9jb3B5KHdvcmttYXNrLCBzcGFyeDUtXHUwMDNlYnJpZGdlX2Z3ZF9tYXNrLCBTUFg1X1BPUlRTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X3ZsYW4uYy0xNzUtXHRcdFx0Y2xlYXJfYml0KHBvcnQsIHdvcmttYXNrKTtcbi0tXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYz0zMTg9c3RhdGljIHZvaWQgaXB2bGFuX3NldF9tdWx0aWNhc3RfbWFjX2ZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jLTMzNy1cbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jOjMzODpcdFx0Yml0bWFwX2NvcHkoaXB2bGFuLVx1MDAzZW1hY19maWx0ZXJzLCBtY19maWx0ZXJzLFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtMzM5LVx0XHRcdCAgICBJUFZMQU5fTUFDX0ZJTFRFUl9TSVpFKTtcbi0tXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM9ODEwPXN0YXRpYyB2b2lkIG1hY3ZsYW5fY29tcHV0ZV9maWx0ZXIodW5zaWduZWQgbG9uZyAqbWNfZmlsdGVyLFxuLS1cbmRyaXZlcnMvbmV0L21hY3ZsYW4uYy04MjktXG5kcml2ZXJzL25ldC9tYWN2bGFuLmM6ODMwOlx0XHRiaXRtYXBfY29weShtY19maWx0ZXIsIGZpbHRlciwgTUFDVkxBTl9NQ19GSUxURVJfU1opO1xuZHJpdmVycy9uZXQvbWFjdmxhbi5jLTgzMS1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jPTUyNj1zdGF0aWMgaW50IGF0aDExa19wdWxsX3NlcnZpY2VfcmVhZHlfdGx2KHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYy01NjItICovXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jOjU2MzpzdGF0aWMgdm9pZCBhdGgxMWtfd21pX3NlcnZpY2VfYml0bWFwX2NvcHkoc3RydWN0IGF0aDExa19wZGV2X3dtaSAqd21pLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYy01NjQtXHRcdFx0XHRcdCAgIGNvbnN0IHUzMiAqd21pX3N2Y19ibSlcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jPTU3Nj1zdGF0aWMgaW50IGF0aDExa193bWlfdGx2X3N2Y19yZHlfcGFyc2Uoc3RydWN0IGF0aDExa19iYXNlICphYiwgdTE2IHRhZywgdTE2IGxlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jLTU5Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmM6NTk4Olx0XHRcdGF0aDExa193bWlfc2VydmljZV9iaXRtYXBfY29weSh3bWlfaGFuZGxlLCBwdHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYy01OTktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYz02NDY9c3RhdGljIGludCBhdGgxMmtfcHVsbF9zZXJ2aWNlX3JlYWR5X3RsdihzdHJ1Y3QgYXRoMTJrX2Jhc2UgKmFiLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMtNjgyLSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYzo2ODM6c3RhdGljIHZvaWQgYXRoMTJrX3dtaV9zZXJ2aWNlX2JpdG1hcF9jb3B5KHN0cnVjdCBhdGgxMmtfd21pX3BkZXYgKndtaSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMtNjg0LVx0XHRcdFx0XHQgICBjb25zdCB1MzIgKndtaV9zdmNfYm0pXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYz02OTY9c3RhdGljIGludCBhdGgxMmtfd21pX3N2Y19yZHlfcGFyc2Uoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTE2IHRhZywgdTE2IGxlbixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJrL3dtaS5jLTcxNy1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmM6NzE4Olx0XHRcdGF0aDEya193bWlfc2VydmljZV9iaXRtYXBfY29weSh3bWlfaGFuZGxlLCBwdHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYy03MTktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jaGFuLmM9NTkzPWVudW0gcnR3ODlfZW50aXR5X21vZGUgcnR3ODlfZW50aXR5X3JlY2FsYyhzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jaGFuLmMtNjA0LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jaGFuLmM6NjA1Olx0Yml0bWFwX2NvcHkocmVjYWxjX21hcCwgaGFsLVx1MDAzZWVudGl0eV9tYXAsIE5VTV9PRl9SVFc4OV9DSEFOQ1RYKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY2hhbi5jLTYwNi1cbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2FsaWVud2FyZS13bWktd21heC5jPTExMTk9c3RhdGljIGludCBhd2NjX2h3bW9uX2ZhbnNfaW5pdChzdHJ1Y3Qgd21pX2RldmljZSAqd2Rldilcbi0tXG5kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsL2FsaWVud2FyZS13bWktd21heC5jLTExNzItXHRcdGJpdG1hcF9nYXRoZXIoZ2F0aGVyLCBmYW5fdGVtcHMsIHByaXYtXHUwMDNldGVtcF9zZW5zb3JzLCBBV0NDX0lEX0JJVE1BUF9TSVpFKTtcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmM6MTE3MzpcdFx0Yml0bWFwX2NvcHkoXHUwMDI2ZmFuX2RhdGEtXHUwMDNlYXV0b19jaGFubmVsc190ZW1wLCBnYXRoZXIsIEJJVFNfUEVSX0xPTkcpO1xuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLXdtYXguYy0xMTc0LVx0XHRwcml2LVx1MDAzZWZhbl9kYXRhW2ldID0gZmFuX2RhdGE7XG4tLVxuZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYz00MTA9c3RhdGljIHZvaWQgX19pbml0IGlzYXBucF9wYXJzZV9pcnFfcmVzb3VyY2Uoc3RydWN0IHBucF9kZXYgKmRldixcbi0tXG5kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jLTQyMi1cdGJpdG1hcF96ZXJvKG1hcC5iaXRzLCBQTlBfSVJRX05SKTtcbmRyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmM6NDIzOlx0Yml0bWFwX2NvcHkobWFwLmJpdHMsIFx1MDAyNmJpdHMsIDE2KTtcbmRyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMtNDI0LVxuLS1cbmRyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYz0yNjI9c3RhdGljIF9faW5pdCB2b2lkIHBucGJpb3NfcGFyc2VfaXJxX29wdGlvbihzdHJ1Y3QgcG5wX2RldiAqZGV2LFxuLS1cbmRyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYy0yNzItXHRiaXRtYXBfemVybyhtYXAuYml0cywgUE5QX0lSUV9OUik7XG5kcml2ZXJzL3BucC9wbnBiaW9zL3JzcGFyc2VyLmM6MjczOlx0Yml0bWFwX2NvcHkobWFwLmJpdHMsIFx1MDAyNmJpdHMsIDE2KTtcbmRyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYy0yNzQtXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTY3MT1zdGF0aWMgYm9vbCB2ZmlvX2FwX21kZXZfZmlsdGVyX2Nkb21zKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXG4tLVxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jLTY3NC1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDczOAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIENvZGU6IFVuZGVyc3RhbmRpbmcgYGJpdG1hcF9jb3B5YCoqCgpPa2F5LCBzbyBJIHNlZSBgYml0bWFwX2NvcHlgIGFuZCBpbW1lZGlhdGVseSByZWdpc3RlciB0aGF0IGl0JiMzOTtzIGxpa2VseSBhIG1hY3JvIG9yIGlubGluZSBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGtlcm5lbCBjb2RlLCB0aGF0JiMzOTtzIGFsbW9zdCBhIGNlcnRhaW50eS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpkb2VzKi4gVGltZSB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBUaGUgbmF0dXJhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGlzIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYC4gVGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uLCBhbG9uZyB3aXRoIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uIGFuZCwgb2YgY291cnNlLCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHRoYXQgSSYjMzk7bGwgbmVlZCB0byBhbmFseXplLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX2NvcHlcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDk0OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDExMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFsaXppbmcgdGhlIE9idmlvdXMqKgoKSG9sZCBvbiBhIHNlY29uZC4uLiBkaWRuJiMzOTt0IEkganVzdCBzZWUgc29tZXRoaW5nIGFib3V0IGBiaXRtYXBfY29weWAgaW4gdGhlIG91dHB1dCBmcm9tIHRoZSBwcmV2aW91cyBzZWFyY2g/IEFoLCB5ZXMsIHRoZXJlIGl0IGlzIGluIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYDogc3BlY2lmaWNhbGx5IHRoZSBkZWZpbml0aW9uIG9mIGBiaXRtYXBfY29weV9hbmRfZXh0ZW5kYC4gT2theSwgSSB3YXMgdG9vIGhhc3R5LiBMZXQmIzM5O3Mgbm90IHJlaW52ZW50IHRoZSB3aGVlbCBoZXJlLiBMZXQmIzM5O3MgZ28gYmFjayBhbmQgZ3JlcCBzcGVjaWZpY2FsbHkgZm9yIHRoYXQgZnVuY3Rpb24gbmFtZSwgYGJpdG1hcF9jb3B5YCwgd2l0aGluIHRoYXQgc2FtZSBoZWFkZXIgZmlsZSwgYGluY2x1ZGUvbGludXgvYml0bWFwLmhgLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhhdCBmdW5jdGlvbi4gSXQmIzM5O3MgcHJvYmFibHkgYWxyZWFkeSB0aGVyZSBhbmQgSSBqdXN0IG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGVyZSBpdCBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Yml0bWFwX2NvcHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2JpdG1hcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYml0bWFwLmg9MTc9c3RydWN0IGRldmljZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTQ0LSAqICBiaXRtYXBfZmlsbChkc3QsIG5iaXRzKSAgICAgICAgICAgICAgICAgICAgICpkc3QgPSB+MFVMXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjQ1OiAqICBiaXRtYXBfY29weShkc3QsIHNyYywgbmJpdHMpICAgICAgICAgICAgICAgICpkc3QgPSAqc3JjXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTQ2LSAqICBiaXRtYXBfYW5kKGRzdCwgc3JjMSwgc3JjMiwgbmJpdHMpICAgICAgICAgICpkc3QgPSAqc3JjMSBcdTAwMjYgKnNyYzJcbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oPTI1OD1zdGF0aWMgX19hbHdheXNfaW5saW5lXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI1OTp2b2lkIGJpdG1hcF9jb3B5KHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCB1bnNpZ25lZCBpbnQgbmJpdHMpXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI2MC17XG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD0yNzI9c3RhdGljIF9fYWx3YXlzX2lubGluZVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaDoyNzM6dm9pZCBiaXRtYXBfY29weV9jbGVhcl90YWlsKHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCB1bnNpZ25lZCBpbnQgbmJpdHMpXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI3NC17XG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI3NTpcdGJpdG1hcF9jb3B5KGRzdCwgc3JjLCBuYml0cyk7XG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI3Ni1cdGlmIChuYml0cyAlIEJJVFNfUEVSX0xPTkcpXG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNzktXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI4MDpzdGF0aWMgaW5saW5lIHZvaWQgYml0bWFwX2NvcHlfYW5kX2V4dGVuZCh1bnNpZ25lZCBsb25nICp0byxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMjgxLVx0XHRcdFx0XHQgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb20sXG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yOTUtICogSW4gYm90aCBjYXNlcyBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQgd2hlbiBjb3B5aW5nIGRhdGEgZnJvbS90byBhcnJheXMgb2ZcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6Mjk2OiAqIHUzMi4gQnV0IGluIExFNjQgY2FzZSwgdHlwZWNhc3QgaW4gYml0bWFwX2NvcHlfY2xlYXJfdGFpbCgpIG1heSBsZWFkXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI5Ny0gKiB0byBvdXQtb2YtYm91bmQgYWNjZXNzLiBUbyBhdm9pZCB0aGF0LCBib3RoIExFIGFuZCBCRSB2YXJpYW50cyBvZiA2NC1iaXRcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6Mjk4OiAqIGFyY2hpdGVjdHVyZXMgYXJlIG5vdCB1c2luZyBiaXRtYXBfY29weV9jbGVhcl90YWlsKCkuXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI5OS0gKi9cbi0tXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oPTMwMz12b2lkIGJpdG1hcF90b19hcnIzMih1MzIgKmJ1ZiwgY29uc3QgdW5zaWduZWQgbG9uZyAqYml0bWFwLFxuLS1cbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMzA2LSNkZWZpbmUgYml0bWFwX2Zyb21fYXJyMzIoYml0bWFwLCBidWYsIG5iaXRzKVx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjMwNzpcdGJpdG1hcF9jb3B5X2NsZWFyX3RhaWwoKHVuc2lnbmVkIGxvbmcgKikgKGJpdG1hcCksXHRcXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0zMDgtXHRcdFx0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKikgKGJ1ZiksIChuYml0cykpXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTMwOS0jZGVmaW5lIGJpdG1hcF90b19hcnIzMihidWYsIGJpdG1hcCwgbmJpdHMpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6MzEwOlx0Yml0bWFwX2NvcHlfY2xlYXJfdGFpbCgodW5zaWduZWQgbG9uZyAqKSAoYnVmKSxcdFx0XFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMzExLVx0XHRcdChjb25zdCB1bnNpZ25lZCBsb25nICopIChiaXRtYXApLCAobmJpdHMpKVxuLS1cbmluY2x1ZGUvbGludXgvYml0bWFwLmg9MzIwPXZvaWQgYml0bWFwX3RvX2FycjY0KHU2NCAqYnVmLCBjb25zdCB1bnNpZ25lZCBsb25nICpiaXRtYXAsIHVuc2lnbmVkIGludCBuYml0cyk7XG4tLVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0zMjItI2RlZmluZSBiaXRtYXBfZnJvbV9hcnI2NChiaXRtYXAsIGJ1ZiwgbmJpdHMpXHRcdFx0XFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6MzIzOlx0Yml0bWFwX2NvcHlfY2xlYXJfdGFpbCgodW5zaWduZWQgbG9uZyAqKShiaXRtYXApLCAoY29uc3QgdW5zaWduZWQgbG9uZyAqKShidWYpLCAobmJpdHMpKVxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0zMjQtI2RlZmluZSBiaXRtYXBfdG9fYXJyNjQoYnVmLCBiaXRtYXAsIG5iaXRzKVx0XHRcdFxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjMyNTpcdGJpdG1hcF9jb3B5X2NsZWFyX3RhaWwoKHVuc2lnbmVkIGxvbmcgKikoYnVmKSwgKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikoYml0bWFwKSwgKG5iaXRzKSlcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMzI2LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjE3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGJpdG1hcF9jb3B5YCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0aG9yb3VnaGx5LCBlc3BlY2lhbGx5IGdpdmVuIG15IGJhY2tncm91bmQuIEkgbmVlZCB0byBzZWUgZXhhY3RseSBob3cgdGhpcyBpcyBpbXBsZW1lbnRlZC4gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IHRoZSBjb2RlLCBjb25zaWRlciB0aGUgY29uc3RyYWludHMsIGFuZCB0aGUgZXhwZWN0ZWQgcGVyZm9ybWFuY2UuIEkgd2FudCB0byBpZGVudGlmeSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG1lbW9yeSBhY2Nlc3MgcGF0dGVybnMsIGFuZCBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMgdXNlZC4gSSYjMzk7bGwgbmVlZCB0byBhc3Nlc3MgaXRzIGVmZmljaWVuY3kgYW5kIG1ha2Ugc3VyZSBpdCBhbGlnbnMgd2l0aCBiZXN0IHByYWN0aWNlcyBmb3IgbXkgYXJlYSBvZiBleHBlcnRpc2UuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvc3NpYmxlIGVkZ2UgY2FzZXMgb3Igc2NlbmFyaW9zIHRoYXQgbWlnaHQgY2F1c2UgaXNzdWVzLiBJJiMzOTtsbCBzdGFydCBieSBtYWtpbmcgc3VyZSBpdCYjMzk7cyBjb3JyZWN0IGFuZCB0aGVuIG1vdmUgb24gdG8gb3B0aW1pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMiAxNjoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYml0bWFwLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1ODpcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcbiAyNTk6XHR2b2lkIGJpdG1hcF9jb3B5KHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCB1bnNpZ25lZCBpbnQgbmJpdHMpXG4gMjYwOlx0e1xuIDI2MTpcdFx0dW5zaWduZWQgaW50IGxlbiA9IGJpdG1hcF9zaXplKG5iaXRzKTtcbiAyNjI6XHRcbiAyNjM6XHRcdGlmIChzbWFsbF9jb25zdF9uYml0cyhuYml0cykpXG4gMjY0Olx0XHRcdCpkc3QgPSAqc3JjO1xuIDI2NTpcdFx0ZWxzZVxuIDI2NjpcdFx0XHRtZW1jcHkoZHN0LCBzcmMsIGxlbik7XG4gMjY3Olx0fVxuIDI2ODpcdFxuIDI2OTpcdC8qXG4gMjcwOlx0ICogQ29weSBiaXRtYXAgYW5kIGNsZWFyIHRhaWwgYml0cyBpbiBsYXN0IHdvcmQuXG4gMjcxOlx0ICovXG4gMjcyOlx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxuIDI3MzpcdHZvaWQgYml0bWFwX2NvcHlfY2xlYXJfdGFpbCh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgdW5zaWduZWQgaW50IG5iaXRzKVxuIDI3NDpcdHtcbiAyNzU6XHRcdGJpdG1hcF9jb3B5KGRzdCwgc3JjLCBuYml0cyk7XG4gMjc2Olx0XHRpZiAobmJpdHMgJSBCSVRTX1BFUl9MT05HKVxuIDI3NzpcdFx0XHRkc3RbbmJpdHMgLyBCSVRTX1BFUl9MT05HXSBcdTAwMjY9IEJJVE1BUF9MQVNUX1dPUkRfTUFTSyhuYml0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjYwCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGF0YSBDb3B5aW5nIExvZ2ljKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBiaXRtYXBfc2l6ZWAgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJpdHMgKGBuYml0c2ApIGFuZCBpcyB0aGVuIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IGB1bnNpZ25lZCBsb25nYCBlbGVtZW50cyBhcmUgaW4gdGhlIGJpdG1hcCwgdGFraW5nIGludG8gYWNjb3VudCB0aGVpciBzaXplLiBUaGUgYGJpdG1hcF9jb3B5YCBmdW5jdGlvbiwgdGhlcmVmb3JlLCB3b3JrcyBhdCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhvc2UgZnVsbCBgdW5zaWduZWQgbG9uZ2BzLgoKVGhpcyBpcyBpbW1lZGlhdGVseSByZWxldmFudCBiZWNhdXNlIEkgc2VlIGBJUF9UVU5ORUxfREVDTEFSRV9GTEFHU2AgaXMgZGVjbGFyaW5nIGFuIGFycmF5IG9mIGB1bnNpZ25lZCBsb25nYC4gSWYgdGhlIG1hY3JvIGp1c3QgZGVjbGFyZXMgdGhlIGFycmF5LCB0aGUgY29weSBvcGVyYXRpb24gdXNlcyBhIHNpemUgbGFyZ2UgZW5vdWdoIHRvIGNvcHkgdGhpcyBlbnRpcmUgYXJyYXkgdXNpbmcgYGJpdG1hcF9jb3B5YC4KCk5vdyB0aGUgaW50ZXJlc3RpbmcgcG9pbnQ6IFdoYXQgaWYgdGhlIGRlY2xhcmF0aW9uIHdpdGggYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpYCBpcyAqbm90KiBpbml0aWFsaXppbmcgdGhlIGFycmF5PyBUaGUgY29weSBpcyBmcm9tIGBwLSZndDtvX2ZsYWdzYCB0byBgb19mbGFnc2AsIGFuZCBpZiBgcC0mZ3Q7b19mbGFnc2AgaXMgKmFsc28qIGFuIGFycmF5IG9mIGB1bnNpZ25lZCBsb25nYCwgYW5kIHNpbmNlIHRoZSBgYml0bWFwX2NvcHlgIGlzIGNvbmZpZ3VyZWQgdG8gY29weSB0aGUgZW50aXJlIGFycmF5IGluIGEgYmxvY2sgdXNpbmcgYEJJVFNfVE9fTE9OR1MobmJpdHMpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpYCwgdGhlIGVudGlyZSBkZXN0aW5hdGlvbiBhcnJheSB3aWxsIGJlIHBvcHVsYXRlZCBpbiB0aGUgY29weS4KClRodXMsIHRoZSBjb3B5IG9wZXJhdGlvbiB3aXRoaW4gYGlwX3R1bm5lbF9mbGFnc19jb3B5YCBlbnN1cmVzIHRoYXQgYG9fZmxhZ3NgIHdpbGwgYmUgKmZ1bGx5KiBpbml0aWFsaXplZCBhcyBhIHNpZGUgZWZmZWN0IG9mIHRoZSBiaXR3aXNlIGNvcHkuIEZvbGxvd2luZyB0aGF0LCB3ZSBoYXZlIGBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhvX2ZsYWdzKWAuIFNvIHRoaXMgZXhwbGFpbnMgaG93IHRoZSBmbGFncyBhcmUgdGhlbiBjb252ZXJ0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ3JlLmM9Mjc9c3RhdGljIGludCBtbHg1ZV9nZW5faXBfdHVubmVsX2hlYWRlcl9ncmV0YXAoY2hhciBidWZbXSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dyZS5jLTQ5LVx0aGRyX2xlblx0PSBtbHg1ZV90Y190dW5fY2FsY19obGVuX2dyZXRhcChlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ3JlLmM6NTA6XHRncmVoLVx1MDAzZWZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3ModHVuX2tleS1cdTAwM2V0dW5fZmxhZ3MpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuL3RjX3R1bl9ncmUuYy01MS1cdGlmICh0ZXN0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgdHVuX2tleS1cdTAwM2V0dW5fZmxhZ3MpKSB7XG4tLVxuaW5jbHVkZS9uZXQvZ3JlLmg9NjM9c3RhdGljIGlubGluZSB2b2lkIGdyZV9mbGFnc190b190bmxfZmxhZ3ModW5zaWduZWQgbG9uZyAqZHN0LCBfX2JlMTYgZmxhZ3MpXG4tLVxuaW5jbHVkZS9uZXQvZ3JlLmgtNzctXG5pbmNsdWRlL25ldC9ncmUuaDo3ODpzdGF0aWMgaW5saW5lIF9fYmUxNiBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhjb25zdCB1bnNpZ25lZCBsb25nICp0ZmxhZ3MpXG5pbmNsdWRlL25ldC9ncmUuaC03OS17XG4tLVxuaW5jbHVkZS9uZXQvZ3JlLmg9MTAwPXN0YXRpYyBpbmxpbmUgdm9pZCBncmVfYnVpbGRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfbGVuLFxuLS1cbmluY2x1ZGUvbmV0L2dyZS5oLTExMS1cdGdyZWggPSAoc3RydWN0IGdyZV9iYXNlX2hkciAqKXNrYi1cdTAwM2VkYXRhO1xuaW5jbHVkZS9uZXQvZ3JlLmg6MTEyOlx0Z3JlaC1cdTAwM2VmbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKGZsYWdzKTtcbmluY2x1ZGUvbmV0L2dyZS5oLTExMy1cdGdyZWgtXHUwMDNlcHJvdG9jb2wgPSBwcm90bztcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz04MjE9c3RhdGljIGludCBpcGdyZV90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaXBfZ3JlLmMtODU4LVxubmV0L2lwdjQvaXBfZ3JlLmM6ODU5Olx0aV9mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlaV9mbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYy04NjAtXHRpcF90dW5uZWxfZmxhZ3NfZnJvbV9iZTE2KHAtXHUwMDNlaV9mbGFncywgaV9mbGFncyk7XG5uZXQvaXB2NC9pcF9ncmUuYzo4NjE6XHRvX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cdTAwM2VvX2ZsYWdzKTtcbm5ldC9pcHY0L2lwX2dyZS5jLTg2Mi1cdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYocC1cdTAwM2VvX2ZsYWdzLCBvX2ZsYWdzKTtcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYz04OTQ9c3RhdGljIGludCBpcGdyZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy05MTAtXHRncmVoID0gKHN0cnVjdCBncmVfYmFzZV9oZHIgKikoaXBoJiM0MzsxKTtcbm5ldC9pcHY0L2lwX2dyZS5jOjkxMTpcdGdyZWgtXHUwMDNlZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyh0LVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xubmV0L2lwdjQvaXBfZ3JlLmMtOTEyLVx0Z3JlaC1cdTAwM2Vwcm90b2NvbCA9IGh0b25zKHR5cGUpO1xuLS1cbm5ldC9pcHY0L2lwX2dyZS5jPTE1NjU9c3RhdGljIGludCBpcGdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTc3LVx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX0lGTEFHUyxcbm5ldC9pcHY0L2lwX2dyZS5jOjE1Nzg6XHRcdFx0IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlaV9mbGFncykpIHx8XG5uZXQvaXB2NC9pcF9ncmUuYy0xNTc5LVx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX09GTEFHUyxcbm5ldC9pcHY0L2lwX2dyZS5jOjE1ODA6XHRcdFx0IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKG9fZmxhZ3MpKSB8fFxubmV0L2lwdjQvaXBfZ3JlLmMtMTU4MS1cdCAgICBubGFfcHV0X2JlMzIoc2tiLCBJRkxBX0dSRV9JS0VZLCBwLVx1MDAzZWlfa2V5KSB8fFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0xMjM1PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfcGFybV90b191c2VyKHN0cnVjdCBpcDZfdG5sX3Bhcm0yICp1LFxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0xMjQ3LVx0dS1cdTAwM2VvX2tleSA9IHAtXHUwMDNlb19rZXk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTI0ODpcdHUtXHUwMDNlaV9mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlaV9mbGFncyk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTI0OTpcdHUtXHUwMDNlb19mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlb19mbGFncyk7XG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTI1MC1cdG1lbWNweSh1LVx1MDAzZW5hbWUsIHAtXHUwMDNlbmFtZSwgc2l6ZW9mKHUtXHUwMDNlbmFtZSkpO1xuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYz0yMTE1PXN0YXRpYyBpbnQgaXA2Z3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9pcHY2L2lwNl9ncmUuYy0yMTQyLVx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX0lGTEFHUyxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMTQzOlx0XHRcdCBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVx1MDAzZWlfZmxhZ3MpKSB8fFxubmV0L2lwdjYvaXA2X2dyZS5jLTIxNDQtXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HUkVfT0ZMQUdTLFxubmV0L2lwdjYvaXA2X2dyZS5jOjIxNDU6XHRcdFx0IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKG9fZmxhZ3MpKSB8fFxubmV0L2lwdjYvaXA2X2dyZS5jLTIxNDYtXHQgICAgbmxhX3B1dF9iZTMyKHNrYiwgSUZMQV9HUkVfSUtFWSwgcC1cdTAwM2VpX2tleSkgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTIgMTY6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ3MzIKCQkJCQkJCW91dHB1dDogMjEwCgkJCQkJCQl0aG91Z2h0czogOTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBHUkUgVHVubmVsIEZsYWcgSGFuZGxpbmcgYW5kIENvbmN1cnJlbmN5IEZpeCoqCgpPa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHJlZ2FyZGluZyBgZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3NgIGlzIGNvbmZpcm1lZDogaXQmIzM5O3MgYSBzaW1wbGUgYml0bWFwIGNvbnZlcnNpb24gdG8gYF9fYmUxNmAuIFRoZSBmdW5jdGlvbiBjaGVja3Mgc3BlY2lmaWMgYml0cywgc28gdGhlcmUmIzM5O3Mgbm8gd2F5IGZvciBpdCB0byBjYXVzZSBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsuIFRoaXMgY29uZmlybXMgdGhhdCBLTVNBTiBpc24mIzM5O3QgdGhlIHJpZ2h0IHRvb2wgaGVyZS4gVGhlIGNvcmUgcHJvYmxlbSBpcyBhIGNvbmN1cnJlbmN5IGlzc3VlIG9yIGEgbG9naWMgZXJyb3IgcmVsYXRlZCB0byB0aGUgdHVubmVsIHBhcmFtZXRlcnMsIHNwZWNpZmljYWxseSB0aGUgYG9fZmxhZ3NgIGZpZWxkIGluIGB0dW5uZWwtJmd0O3Bhcm1zYC4KClRoZSBjcnV4IG9mIHRoZSBpc3N1ZSBpcyB0aGUgbW9kaWZpY2F0aW9uIG9mIGB0LSZndDtwYXJtcy5vX2ZsYWdzYCBlaXRoZXIgZHVyaW5nIHRyYW5zbWlzc2lvbiAoYGVyc3Bhbl94bWl0YCwgYGlwZ3JlX3htaXRgKSBvciBkdXJpbmcgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2ApLiBUaGlzIGlzIGluaGVyZW50bHkgZmxhd2VkIGJlY2F1c2UgYHQtJmd0O3Bhcm1zYCBob2xkcyB0aGUgKmNvbmZpZ3VyZWQqIHN0YXRlIG9mIHRoZSB0dW5uZWwuIElmIHdlJiMzOTtyZSBtb2RpZnlpbmcgaXQgZGlyZWN0bHkgZHVyaW5nIHBhY2tldCBwcm9jZXNzaW5nIG9yIGR1bXAgb3BlcmF0aW9ucywgd2UmIzM5O3JlIGludHJvZHVjaW5nIGEgZGF0YSByYWNlLiBTdWJzZXF1ZW50IHBhY2tldHMgb3IgZHVtcHMgbWlnaHQgcmVhZCB0aGlzIG1vZGlmaWVkIChhbmQgcG90ZW50aWFsbHkgaW5jb25zaXN0ZW50KSBzdGF0ZSwgd2hpY2gsIHdoaWxlIGxlYWRpbmcgdG8gaW5jb3JyZWN0IGJlaGF2aW9yLCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gVGhlIHByb2JsZW0gaXMgYSBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYF9fZ3JlX3htaXRgIGNoYW5nZXMuIEFoLCB0aGUgb2xkIHZlcnNpb24gY29waWVkIGB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3NgIHRvIGBmbGFnc2AgYW5kIHBhc3NlZCB0aGF0IHRvIGBncmVfYnVpbGRfaGVhZGVyYC4gQnV0IGBpcGdyZV94bWl0YCBhbmQgYGVyc3Bhbl94bWl0YCB3ZXJlIG1vZGlmeWluZyB0aGUgb3JpZ2luYWwgYHR1bm5lbC0mZ3Q7cGFybXMub19mbGFnc2AgYmVmb3JlIGNhbGxpbmcgYF9fZ3JlX3htaXRgLiBUaGUgZml4IG5vdyBjb3BpZXMgYHR1bm5lbC0mZ3Q7cGFybXMub19mbGFnc2AgdG8gYSBsb2NhbCBgZmxhZ3NgIHZhcmlhYmxlICpiZWZvcmUqIG1vZGlmaWNhdGlvbiwgYW5kIHBhc3NlcyAqdGhhdCogdG8gYF9fZ3JlX3htaXRgLiBUaGlzIGlzIGEgcHJldHR5IHNvbGlkIGZpeC4gSXQgcHJldmVudHMgbW9kaWZpY2F0aW9uIG9mIHRoZSBzaGFyZWQgYHR1bm5lbC0mZ3Q7cGFybXMub19mbGFnc2AuCgpMZXQmIzM5O3MgcXVpY2tseSBjb25maXJtIHRoYXQgYGZsYWdzYCBpcyBpbml0aWFsaXplZCBpbiBgaXBncmVfeG1pdGA6IGBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncylgIGRlY2xhcmVzIHRoZSBhcnJheSBhbmQgYGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtJmd0O3Bhcm1zLm9fZmxhZ3MpYCBkb2VzIHRoZSBjb3B5aW5nLiBBbmQgd2Uga25vdyB0aGF0IGBiaXRtYXBfY29weWAgZG9lcyB0aGUgcmlnaHQgdGhpbmcsIGNvcHlpbmcgdGhlIGZ1bGwgYXJyYXkuIFNvLCB0aGUgbG9jYWwgYGZsYWdzYCB2YXJpYWJsZSAqaXMqIGZ1bGx5IGluaXRpYWxpemVkLiBTYW1lIGdvZXMgZm9yIGBpcGdyZV9maWxsX2luZm9gIC0gaXQgZGVjbGFyZXMgYW5kIGluaXRpYWxpemVzIHRoZSBsb2NhbCBgb19mbGFnc2AgaW4gdGhlIHNhbWUgd2F5LgoKVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSBhcmUgdGFsa2luZyBhYm91dCBhIGNvbmN1cnJlbmN5L2xvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgcmVhZC4gVGhlIGNvcnJlY3QgYXBwcm9hY2ggaGVyZSBpcyB0byB1c2UgS0FTQU4gKG9yIHN0YW5kYXJkIHRlc3RpbmcpIHRvIGNhdGNoIHJhY2UgY29uZGl0aW9ucyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLiBLTVNBTiwgd2hpY2ggaXMgZm9yIGRldGVjdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgaXMgbm90IG5lZWRlZC4gVGhpcyBpcyBhIGZpeCBmb3IgZGF0YSByYWNlcyBhbmQgbG9naWNhbCBlcnJvcnMsIG5vdCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEyIDE2OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgY29uY3VycmVuY3kgYW5kIGxvZ2ljIGJ1ZyB3aGVyZSBzaGFyZWQgdHVubmVsIHBhcmFtZXRlcnMgKGB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgaW5jb3JyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gKGBlcnNwYW5feG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgKSBhbmQgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCkuIFRoaXMgY291bGQgbGVhZCB0byBkYXRhIHJhY2VzIGFuZCBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLiBUaGUgZml4IGludHJvZHVjZXMgbG9jYWwgY29waWVzIG9mIHRoZSBmbGFncyAoYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCkgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgaXBfdHVubmVsX2ZsYWdzX2NvcHkoKWAgKHdoaWNoIHVzZXMgYGJpdG1hcF9jb3B5KClgIHRvIGNvcHkgdGhlIGVudGlyZSBgdW5zaWduZWQgbG9uZ2AgYXJyYXkpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOL0tDU0FOIGFuZCBsb2dpYyB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGRhdGEgcmFjZXMgYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9naWMgYnVnIHdoZXJlIHNoYXJlZCB0dW5uZWwgcGFyYW1ldGVycyAoYHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzYCkgd2VyZSBiZWluZyBpbmNvcnJlY3RseSBtb2RpZmllZCBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiAoYGVyc3Bhbl94bWl0YCwgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGApIGFuZCBuZXRsaW5rIGR1bXBzIChgaXBncmVfZmlsbF9pbmZvYCwgYGVyc3Bhbl9maWxsX2luZm9gKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGRhdGEgcmFjZXMgYW5kIGNvcnJ1cHRlZCB0dW5uZWwgc3RhdGUuIFRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBjb3BpZXMgb2YgdGhlIGZsYWdzIChgSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1NgKSB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBpcF90dW5uZWxfZmxhZ3NfY29weSgpYCAod2hpY2ggdXNlcyBgYml0bWFwX2NvcHkoKWAgdG8gY29weSB0aGUgZW50aXJlIGB1bnNpZ25lZCBsb25nYCBhcnJheSkuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGFueSByaXNrIG9mIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4vS0NTQU4gYW5kIGxvZ2ljIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggZGF0YSByYWNlcyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEwOjIwLjY5MjIzODU3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjYyNTQzNTgxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfSVBHUkVcIixcbiAgICBcIk5FVF9JUEdSRV9ERU1VWFwiLFxuICAgIFwiSVBWNl9HUkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcGdyZV94bWl0XCIsXG4gICAgXCJlcnNwYW5feG1pdFwiLFxuICAgIFwiZ3JlX3RhcF94bWl0XCIsXG4gICAgXCJpcDZlcnNwYW5fdHVubmVsX3htaXRcIixcbiAgICBcImlwZ3JlX2ZpbGxfaW5mb1wiLFxuICAgIFwiZXJzcGFuX2ZpbGxfaW5mb1wiLFxuICAgIFwiaXA2Z3JlX2ZpbGxfaW5mb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9naWMgYnVnIHdoZXJlIHNoYXJlZCB0dW5uZWwgcGFyYW1ldGVycyAoYHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgaW5jb3JyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gKGBlcnNwYW5feG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgKSBhbmQgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCkuIFRoaXMgY291bGQgbGVhZCB0byBkYXRhIHJhY2VzIGFuZCBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLiBUaGUgZml4IGludHJvZHVjZXMgbG9jYWwgY29waWVzIG9mIHRoZSBmbGFncyAoYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCkgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgaXBfdHVubmVsX2ZsYWdzX2NvcHkoKWAgKHdoaWNoIHVzZXMgYGJpdG1hcF9jb3B5KClgIHRvIGNvcHkgdGhlIGVudGlyZSBgdW5zaWduZWQgbG9uZ2AgYXJyYXkpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOL0tDU0FOIGFuZCBsb2dpYyB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGRhdGEgcmFjZXMgYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSB0cmFuc21pc3Npb24gYW5kIG5ldGxpbmsgaW5mbyBkdW1waW5nIHBhdGhzIGZvciBHUkUgYW5kIEVSU1BBTiB0dW5uZWxzIG92ZXIgSVB2NCBhbmQgSVB2Ni4gSXQgZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlIHR1bm5lbCdzIG91dHB1dCBmbGFncyAoYHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgbW9kaWZpZWQgZHVyaW5nIHRyYW5zbWlzc2lvbiBvciBuZXRsaW5rIGR1bXBzLCB3aGljaCBjb3VsZCBsZWFkIHRvIHJhY2UgY29uZGl0aW9ucyBvciB1bmludGVuZGVkIHN0YXRlIGNoYW5nZXMuIFRoZXNlIGFyZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25zIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbmV0d29yayB0cmFmZmljIGFuZCBuZXRsaW5rIGNvbmZpZ3VyYXRpb24sIHNvIHRoZXkgYXJlIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEwOjIwLjY5MjI0NTg1NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5NzMyNjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjE5ZWIxNTc4MTczNDEwMzljMTVjYjY5NzdmNDM4OGUyYmZhNWRlMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjoxMDoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jXFxuaW5kZXggNmE5MjYwNzQwMWU4YS4uODIzMDllZmQ0MTdlMCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcF9ncmUuY1xcbisrKyBiL25ldC9pcHY0L2lwX2dyZS5jXFxuQEAgLTQ3NSwxMiArNDc1LDkgQEAgc3RhdGljIGludCBncmVfcmN2KHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcbiBzdGF0aWMgdm9pZCBfX2dyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaXBoZHIgKnRubF9wYXJhbXMsXFxuLVxcdFxcdCAgICAgICBfX2JlMTYgcHJvdG8pXFxuK1xcdFxcdCAgICAgICBfX2JlMTYgcHJvdG8sIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XFxuLVxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcXG4tXFxuLVxcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbiBcXG4gXFx0LyogUHVzaCBHUkUgaGVhZGVyLiAqL1xcbiBcXHRncmVfYnVpbGRfaGVhZGVyKHNrYiwgdHVubmVsLVxcdTAwM2V0dW5faGxlbixcXG5AQCAtNjUzLDYgKzY1MCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpcGdyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xcbiBcXHRjb25zdCBzdHJ1Y3QgaXBoZHIgKnRubF9wYXJhbXM7XFxuIFxcbiBcXHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKVxcbkBAIC02ODgsMTEgKzY4NiwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHR0bmxfcGFyYW1zID0gXFx1MDAyNnR1bm5lbC1cXHUwMDNlcGFybXMuaXBoO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzKSkpXFxuK1xcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbitcXG4rXFx0aWYgKGdyZV9oYW5kbGVfb2ZmbG9hZHMoc2tiLCB0ZXN0X2JpdChJUF9UVU5ORUxfQ1NVTV9CSVQsIGZsYWdzKSkpXFxuIFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuIFxcbi1cXHRfX2dyZV94bWl0KHNrYiwgZGV2LCB0bmxfcGFyYW1zLCBza2ItXFx1MDAzZXByb3RvY29sKTtcXG4rXFx0X19ncmVfeG1pdChza2IsIGRldiwgdG5sX3BhcmFtcywgc2tiLVxcdTAwM2Vwcm90b2NvbCwgZmxhZ3MpO1xcbiBcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiBcXG4gZnJlZV9za2I6XFxuQEAgLTcwNSw2ICs3MDQsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xcbiBcXHRib29sIHRydW5jYXRlID0gZmFsc2U7XFxuIFxcdF9fYmUxNiBwcm90bztcXG4gXFxuQEAgLTcyOCwxMCArNzI4LDEyIEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHR0cnVuY2F0ZSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuK1xcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbitcXG4gXFx0LyogUHVzaCBFUlNQQU4gaGVhZGVyICovXFxuIFxcdGlmICh0dW5uZWwtXFx1MDAzZWVyc3Bhbl92ZXIgPT0gMCkge1xcbiBcXHRcXHRwcm90byA9IGh0b25zKEVUSF9QX0VSU1BBTik7XFxuLVxcdFxcdF9fY2xlYXJfYml0KElQX1RVTk5FTF9TRVFfQklULCB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbitcXHRcXHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgZmxhZ3MpO1xcbiBcXHR9IGVsc2UgaWYgKHR1bm5lbC1cXHUwMDNlZXJzcGFuX3ZlciA9PSAxKSB7XFxuIFxcdFxcdGVyc3Bhbl9idWlsZF9oZWFkZXIoc2tiLCBudG9obCh0dW5uZWwtXFx1MDAzZXBhcm1zLm9fa2V5KSxcXG4gXFx0XFx0XFx0XFx0ICAgIHR1bm5lbC1cXHUwMDNlaW5kZXgsXFxuQEAgLTc0Niw4ICs3NDgsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0Z290byBmcmVlX3NrYjtcXG4gXFx0fVxcbiBcXG4tXFx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFncyk7XFxuLVxcdF9fZ3JlX3htaXQoc2tiLCBkZXYsIFxcdTAwMjZ0dW5uZWwtXFx1MDAzZXBhcm1zLmlwaCwgcHJvdG8pO1xcbitcXHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgZmxhZ3MpO1xcbitcXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcXHUwMDI2dHVubmVsLVxcdTAwM2VwYXJtcy5pcGgsIHByb3RvLCBmbGFncyk7XFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIFxcbiBmcmVlX3NrYjpcXG5AQCAtNzYwLDYgKzc2Miw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBncmVfdGFwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XFxuIFxcbiBcXHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKVxcbiBcXHRcXHRnb3RvIGZyZWVfc2tiO1xcbkBAIC03NjksMTQgKzc3MiwxNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgICB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpKSlcXG4rXFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFncyk7XFxuK1xcbitcXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgZmxhZ3MpKSlcXG4gXFx0XFx0Z290byBmcmVlX3NrYjtcXG4gXFxuIFxcdGlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbSkpXFxuIFxcdFxcdGdvdG8gZnJlZV9za2I7XFxuIFxcbi1cXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcXHUwMDI2dHVubmVsLVxcdTAwM2VwYXJtcy5pcGgsIGh0b25zKEVUSF9QX1RFQikpO1xcbitcXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcXHUwMDI2dHVubmVsLVxcdTAwM2VwYXJtcy5pcGgsIGh0b25zKEVUSF9QX1RFQiksIGZsYWdzKTtcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gXFxuIGZyZWVfc2tiOlxcbkBAIC0xNTYwLDEyICsxNTY0LDE1IEBAIHN0YXRpYyBzaXplX3QgaXBncmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIHN0YXRpYyBpbnQgaXBncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4tXFx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxuLVxcdHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwID0gXFx1MDAyNnQtXFx1MDAzZXBhcm1zO1xcbitcXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAgPSBcXHUwMDI2dC1cXHUwMDNlcGFybXM7XFxuIFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpO1xcbiBcXG4gXFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkob19mbGFncywgcC1cXHUwMDNlb19mbGFncyk7XFxuIFxcbitcXHRpZiAodC1cXHUwMDNlZXJzcGFuX3ZlciAhPSAwIFxcdTAwMjZcXHUwMDI2ICF0LVxcdTAwM2Vjb2xsZWN0X21kKVxcbitcXHRcXHRfX3NldF9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIG9fZmxhZ3MpO1xcbitcXG4gXFx0aWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9HUkVfTElOSywgcC1cXHUwMDNlbGluaykgfHxcXG4gXFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX0lGTEFHUyxcXG4gXFx0XFx0XFx0IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXFx1MDAzZWlfZmxhZ3MpKSB8fFxcbkBAIC0xNjA4LDEyICsxNjE1LDkgQEAgc3RhdGljIGludCBpcGdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIHN0YXRpYyBpbnQgZXJzcGFuX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuLVxcdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFxuIFxcdGlmICh0LVxcdTAwM2VlcnNwYW5fdmVyIFxcdTAwM2M9IDIpIHtcXG4tXFx0XFx0aWYgKHQtXFx1MDAzZWVyc3Bhbl92ZXIgIT0gMCBcXHUwMDI2XFx1MDAyNiAhdC1cXHUwMDNlY29sbGVjdF9tZClcXG4tXFx0XFx0XFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCB0LVxcdTAwM2VwYXJtcy5vX2ZsYWdzKTtcXG4tXFxuIFxcdFxcdGlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HUkVfRVJTUEFOX1ZFUiwgdC1cXHUwMDNlZXJzcGFuX3ZlcikpXFxuIFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jXFxuaW5kZXggYjg0MzExNmU5YjcwMy4uMGIzZjM4NmI1MWEyZCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9pcDZfZ3JlLmNcXG4rKysgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcXG5AQCAtOTY0LDcgKzk2NCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIGRldi1cXHUwMDNlbmVlZGVkX2hlYWRyb29tID86IHQtXFx1MDAzZWhsZW4pKVxcbiBcXHRcXHRnb3RvIHR4X2VycjtcXG4gXFxuLVxcdF9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCB0LVxcdTAwM2VwYXJtcy5vX2ZsYWdzKTtcXG4gXFx0SVBDQihza2IpLVxcdTAwM2VmbGFncyA9IDA7XFxuIFxcbiBcXHQvKiBGb3IgY29sbGVjdF9tZCBtb2RlLCBkZXJpdmUgZmw2IGZyb20gdGhlIHR1bm5lbCBrZXksXFxuQEAgLTIxMTUsOCArMjExNCw4IEBAIHN0YXRpYyBzaXplX3QgaXA2Z3JlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiBzdGF0aWMgaW50IGlwNmdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbi1cXHRzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7XFxuLVxcdHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCA9IFxcdTAwMjZ0LVxcdTAwM2VwYXJtcztcXG4rXFx0Y29uc3Qgc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnAgPSBcXHUwMDI2dC1cXHUwMDNlcGFybXM7XFxuIFxcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpO1xcbiBcXG4gXFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkob19mbGFncywgcC1cXHUwMDNlb19mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEwOjIxLjIxMjk3MTg2OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU1ODQ2NzM1NDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiTkVUX0lQR1JFX0RFTVVYXCIsXG4gICAgXCJJUFY2X0dSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwZ3JlX3htaXRcIixcbiAgICBcImVyc3Bhbl94bWl0XCIsXG4gICAgXCJncmVfdGFwX3htaXRcIixcbiAgICBcImlwNmVyc3Bhbl90dW5uZWxfeG1pdFwiLFxuICAgIFwiaXBncmVfZmlsbF9pbmZvXCIsXG4gICAgXCJlcnNwYW5fZmlsbF9pbmZvXCIsXG4gICAgXCJpcDZncmVfZmlsbF9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRyYW5zbWlzc2lvbiBhbmQgbmV0bGluayBpbmZvIGR1bXBpbmcgcGF0aHMgZm9yIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMgb3ZlciBJUHY0IGFuZCBJUHY2LiBJdCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSB0aGUgdHVubmVsJ3Mgb3V0cHV0IGZsYWdzIChgdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzYCkgd2VyZSBiZWluZyBtb2RpZmllZCBkdXJpbmcgdHJhbnNtaXNzaW9uIG9yIG5ldGxpbmsgZHVtcHMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmFjZSBjb25kaXRpb25zIG9yIHVuaW50ZW5kZWQgc3RhdGUgY2hhbmdlcy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbiwgc28gdGhleSBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjE5ZWIxNTc4MTczNDEwMzljMTVjYjY5NzdmNDM4OGUyYmZhNWRlMVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDEyIDE2OjEwOjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuY1xuaW5kZXggNmE5MjYwNzQwMWU4YS4uODIzMDllZmQ0MTdlMCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwX2dyZS5jXG4rKysgYi9uZXQvaXB2NC9pcF9ncmUuY1xuQEAgLTQ3NSwxMiArNDc1LDkgQEAgc3RhdGljIGludCBncmVfcmN2KHN0cnVjdCBza19idWZmICpza2IpXG4gXG4gc3RhdGljIHZvaWQgX19ncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGlwaGRyICp0bmxfcGFyYW1zLFxuLVx0XHQgICAgICAgX19iZTE2IHByb3RvKVxuK1x0XHQgICAgICAgX19iZTE2IHByb3RvLCBjb25zdCB1bnNpZ25lZCBsb25nICpmbGFncylcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xuLVxuLVx0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbiBcbiBcdC8qIFB1c2ggR1JFIGhlYWRlci4gKi9cbiBcdGdyZV9idWlsZF9oZWFkZXIoc2tiLCB0dW5uZWwtXHUwMDNldHVuX2hsZW4sXG5AQCAtNjUzLDYgKzY1MCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBpcGdyZV94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xuIFx0Y29uc3Qgc3RydWN0IGlwaGRyICp0bmxfcGFyYW1zO1xuIFxuIFx0aWYgKCFwc2tiX2luZXRfbWF5X3B1bGwoc2tiKSlcbkBAIC02ODgsMTEgKzY4NiwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHR0bmxfcGFyYW1zID0gXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaDtcbiBcdH1cbiBcbi1cdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULFxuLVx0XHRcdFx0XHQgICAgICB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncykpKVxuK1x0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbitcbitcdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBmbGFncykpKVxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuIFxuLVx0X19ncmVfeG1pdChza2IsIGRldiwgdG5sX3BhcmFtcywgc2tiLVx1MDAzZXByb3RvY29sKTtcbitcdF9fZ3JlX3htaXQoc2tiLCBkZXYsIHRubF9wYXJhbXMsIHNrYi1cdTAwM2Vwcm90b2NvbCwgZmxhZ3MpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbiBmcmVlX3NrYjpcbkBAIC03MDUsNiArNzA0LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcbiBcdGJvb2wgdHJ1bmNhdGUgPSBmYWxzZTtcbiBcdF9fYmUxNiBwcm90bztcbiBcbkBAIC03MjgsMTAgKzcyOCwxMiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0dHJ1bmNhdGUgPSB0cnVlO1xuIFx0fVxuIFxuK1x0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbitcbiBcdC8qIFB1c2ggRVJTUEFOIGhlYWRlciAqL1xuIFx0aWYgKHR1bm5lbC1cdTAwM2VlcnNwYW5fdmVyID09IDApIHtcbiBcdFx0cHJvdG8gPSBodG9ucyhFVEhfUF9FUlNQQU4pO1xuLVx0XHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuK1x0XHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfU0VRX0JJVCwgZmxhZ3MpO1xuIFx0fSBlbHNlIGlmICh0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciA9PSAxKSB7XG4gXHRcdGVyc3Bhbl9idWlsZF9oZWFkZXIoc2tiLCBudG9obCh0dW5uZWwtXHUwMDNlcGFybXMub19rZXkpLFxuIFx0XHRcdFx0ICAgIHR1bm5lbC1cdTAwM2VpbmRleCxcbkBAIC03NDYsOCArNzQ4LDggQEAgc3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdGdvdG8gZnJlZV9za2I7XG4gXHR9XG4gXG4tXHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuLVx0X19ncmVfeG1pdChza2IsIGRldiwgXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaCwgcHJvdG8pO1xuK1x0X19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIGZsYWdzKTtcbitcdF9fZ3JlX3htaXQoc2tiLCBkZXYsIFx1MDAyNnR1bm5lbC1cdTAwM2VwYXJtcy5pcGgsIHByb3RvLCBmbGFncyk7XG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuIGZyZWVfc2tiOlxuQEAgLTc2MCw2ICs3NjIsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4gXG4gXHRpZiAoIXBza2JfaW5ldF9tYXlfcHVsbChza2IpKVxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuQEAgLTc2OSwxNCArNzcyLDE1IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBncmVfdGFwX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcdH1cbiBcbi1cdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULFxuLVx0XHRcdFx0XHQgICAgICB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncykpKVxuK1x0aXBfdHVubmVsX2ZsYWdzX2NvcHkoZmxhZ3MsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbitcbitcdGlmIChncmVfaGFuZGxlX29mZmxvYWRzKHNrYiwgdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBmbGFncykpKVxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuIFxuIFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20pKVxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuIFxuLVx0X19ncmVfeG1pdChza2IsIGRldiwgXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaCwgaHRvbnMoRVRIX1BfVEVCKSk7XG4rXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoLCBodG9ucyhFVEhfUF9URUIpLCBmbGFncyk7XG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuIGZyZWVfc2tiOlxuQEAgLTE1NjAsMTIgKzE1NjQsMTUgQEAgc3RhdGljIHNpemVfdCBpcGdyZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHN0YXRpYyBpbnQgaXBncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCA9IFx1MDAyNnQtXHUwMDNlcGFybXM7XG4rXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwID0gXHUwMDI2dC1cdTAwM2VwYXJtcztcbiBcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpO1xuIFxuIFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkob19mbGFncywgcC1cdTAwM2VvX2ZsYWdzKTtcbiBcbitcdGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgIT0gMCBcdTAwMjZcdTAwMjYgIXQtXHUwMDNlY29sbGVjdF9tZClcbitcdFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCBvX2ZsYWdzKTtcbitcbiBcdGlmIChubGFfcHV0X3UzMihza2IsIElGTEFfR1JFX0xJTkssIHAtXHUwMDNlbGluaykgfHxcbiBcdCAgICBubGFfcHV0X2JlMTYoc2tiLCBJRkxBX0dSRV9JRkxBR1MsXG4gXHRcdFx0IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXHUwMDNlaV9mbGFncykpIHx8XG5AQCAtMTYwOCwxMiArMTYxNSw5IEBAIHN0YXRpYyBpbnQgaXBncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gc3RhdGljIGludCBlcnNwYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbiBcdGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgXHUwMDNjPSAyKSB7XG4tXHRcdGlmICh0LVx1MDAzZWVyc3Bhbl92ZXIgIT0gMCBcdTAwMjZcdTAwMjYgIXQtXHUwMDNlY29sbGVjdF9tZClcbi1cdFx0XHRfX3NldF9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHQtXHUwMDNlcGFybXMub19mbGFncyk7XG4tXG4gXHRcdGlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HUkVfRVJTUEFOX1ZFUiwgdC1cdTAwM2VlcnNwYW5fdmVyKSlcbiBcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZ3JlLmMgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbmluZGV4IGI4NDMxMTZlOWI3MDMuLjBiM2YzODZiNTFhMmQgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfZ3JlLmNcbisrKyBiL25ldC9pcHY2L2lwNl9ncmUuY1xuQEAgLTk2NCw3ICs5NjQsNiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXA2ZXJzcGFuX3R1bm5lbF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoc2tiX2Nvd19oZWFkKHNrYiwgZGV2LVx1MDAzZW5lZWRlZF9oZWFkcm9vbSA/OiB0LVx1MDAzZWhsZW4pKVxuIFx0XHRnb3RvIHR4X2VycjtcbiBcbi1cdF9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCB0LVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuIFx0SVBDQihza2IpLVx1MDAzZWZsYWdzID0gMDtcbiBcbiBcdC8qIEZvciBjb2xsZWN0X21kIG1vZGUsIGRlcml2ZSBmbDYgZnJvbSB0aGUgdHVubmVsIGtleSxcbkBAIC0yMTE1LDggKzIxMTQsOCBAQCBzdGF0aWMgc2l6ZV90IGlwNmdyZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHN0YXRpYyBpbnQgaXA2Z3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdHN0cnVjdCBpcDZfdG5sICp0ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBfX2lwNl90bmxfcGFybSAqcCA9IFx1MDAyNnQtXHUwMDNlcGFybXM7XG4rXHRjb25zdCBzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnAgPSBcdTAwMjZ0LVx1MDAzZXBhcm1zO1xuIFx0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1Mob19mbGFncyk7XG4gXG4gXHRpcF90dW5uZWxfZmxhZ3NfY29weShvX2ZsYWdzLCBwLVx1MDAzZW9fZmxhZ3MpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTA6MjEuMjEyOTc2MzQ4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMjEwMTY3NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgR1JFL0VSU1BBTiBUdW5uZWwgRmxhZyBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdGFyZ2V0ZWQgYXQgYG5ldC9pcHY0L2lwX2dyZS5jYCBhbmQgYG5ldC9pcHY2L2lwNl9ncmUuY2AsIHNwZWNpZmljYWxseSBob3cgdHVubmVsIGZsYWdzIGFyZSBoYW5kbGVkIGluIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYWJvdXQgYXZvaWRpbmcgbW9kaWZpY2F0aW9ucyB0byBgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgIGR1cmluZyBjcml0aWNhbCB0cmFuc21pc3Npb24gcGhhc2VzLCBuYW1lbHkgaW4gYGVyc3Bhbl94bWl0YCBhbmQgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGAuIEluc3RlYWQgb2YgZGlyZWN0bHkgbWVzc2luZyB3aXRoIHRoYXQgZ2xvYmFsLCB0aGV5J3JlIHVzaW5nIGEgbG9jYWwgYGZsYWdzYCBjb3B5IHdoaWNoIGdldHMgcGFzc2VkIHRvIGBfX2dyZV94bWl0YC4gU21hcnQuIFRoaXMgYWxzbyBpbnZvbHZlcyBmaXhpbmcgYGVyc3Bhbl9maWxsX2luZm9gIGFuZCBgaXBncmVfZmlsbF9pbmZvYCB0byBlbnN1cmUgdGhleSBkb24ndCBjb3JydXB0IGB0LVx1MDAzZXBhcm1zLm9fZmxhZ3NgIHdoZW4gZHVtcGluZyBuZXRsaW5rIGluZm8uXG5cbkZ1bmN0aW9uYWxseSwgdGhpcyBzbWVsbHMgbGlrZSBhIHJhY2UgY29uZGl0aW9uIHByZXZlbnRpb24gb3IgYSBmaXggZm9yIHVuaW50ZW5kZWQgc3RhdGUgY2hhbmdlcyBpbiBgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgLiBUaGF0J3MgZGVmaW5pdGVseSB3b3J0aCBwYXlpbmcgYXR0ZW50aW9uIHRvLiBMZXQncyBsaXN0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gYmUgc3VyZTpcblxuSW4gYG5ldC9pcHY0L2lwX2dyZS5jYDogYF9fZ3JlX3htaXRgLCBgaXBncmVfeG1pdGAsIGBlcnNwYW5feG1pdGAsIGBncmVfdGFwX3htaXRgLCBgaXBncmVfZmlsbF9pbmZvYCwgYW5kIGBlcnNwYW5fZmlsbF9pbmZvYC5cblxuQW5kIGluIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgOiBgaXA2ZXJzcGFuX3R1bm5lbF94bWl0YCBhbmQgYGlwNmdyZV9maWxsX2luZm9gLlxuXG5ZZXAsIHRoZXNlIGFyZSBhbGwgcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMsIGNvbmNlcm5pbmcgR1JFIGFuZCBFUlNQQU4gdHVubmVscy4gSSdkIGNvbnNpZGVyIHRoaXMgc2lnbmlmaWNhbnQgZW5vdWdoIHRvIGZsYWcgaXQgYXMgcG90ZW50aWFsbHkgdnVsbmVyYWJsZS4gTXkgaW1tZWRpYXRlIGluY2xpbmF0aW9uIGlzIHRvIGFzc2lnbiBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5MZXQncyBrZWVwIHRoZXNlIHN5bWJvbHMgaW4gZm9jdXM6IGBpcGdyZV94bWl0YCwgYGVyc3Bhbl94bWl0YCwgYGdyZV90YXBfeG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgLCBgaXBncmVfZmlsbF9pbmZvYCwgYGVyc3Bhbl9maWxsX2luZm9gLCBhbmQgYGlwNmdyZV9maWxsX2luZm9gLlxuXG5Ob3csIGJlZm9yZSBJIGdyZWVuLWxpZ2h0IHRoaXMgZnVsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIGBuZXQvaXB2NC9pcF9ncmUuY2AgaXMgY29tcGlsZWQgd2hlbiBgQ09ORklHX05FVF9JUEdSRWAgaXMgZW5hYmxlZCwgYW5kIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgIG5lZWRzIGBDT05GSUdfSVBWNl9HUkVgLiBPa2F5LCBJIG5lZWQgdG8gdmVyaWZ5IHRob3NlIGNvbmZpZyBvcHRpb25zIGFyZSBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMjAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMDozMS40MzM5OTY5MDhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU5ODQ1MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVUX0lQR1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9LY29uZmlnPTE2Mj1jb25maWcgTkVUX0lQSVBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMTc5LVxcbm5ldC9pcHY0L0tjb25maWc6MTgwOmNvbmZpZyBORVRfSVBHUkVfREVNVVhcXG5uZXQvaXB2NC9LY29uZmlnLTE4MS1cXHR0cmlzdGF0ZSBcXFwiSVA6IEdSRSBkZW11bHRpcGxleGVyXFxcIlxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZz0xODY9Y29uZmlnIE5FVF9JUF9UVU5ORUxcXG4tLVxcbm5ldC9pcHY0L0tjb25maWctMTkxLVxcbm5ldC9pcHY0L0tjb25maWc6MTkyOmNvbmZpZyBORVRfSVBHUkVcXG5uZXQvaXB2NC9LY29uZmlnLTE5My1cXHR0cmlzdGF0ZSBcXFwiSVA6IEdSRSB0dW5uZWxzIG92ZXIgSVBcXFwiXFxubmV0L2lwdjQvS2NvbmZpZzoxOTQ6XFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcXG5uZXQvaXB2NC9LY29uZmlnLTE5NS1cXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbi0tXFxubmV0L2lwdjQvS2NvbmZpZy0yMDYtXFxubmV0L2lwdjQvS2NvbmZpZzoyMDc6Y29uZmlnIE5FVF9JUEdSRV9CUk9BRENBU1RcXG5uZXQvaXB2NC9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJJUDogYnJvYWRjYXN0IEdSRSBvdmVyIElQXFxcIlxcbm5ldC9pcHY0L0tjb25maWc6MjA5OlxcdGRlcGVuZHMgb24gSVBfTVVMVElDQVNUIFxcdTAwMjZcXHUwMDI2IE5FVF9JUEdSRVxcbm5ldC9pcHY0L0tjb25maWctMjEwLVxcdGhlbHBcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MzMwPWNvbmZpZyBORVRfRk9VX0lQX1RVTk5FTFNcXG5uZXQvaXB2NC9LY29uZmlnLTMzMS1cXHRib29sIFxcXCJJUDogRk9VIGVuY2Fwc3VsYXRpb24gb2YgSVAgdHVubmVsc1xcXCJcXG5uZXQvaXB2NC9LY29uZmlnOjMzMjpcXHRkZXBlbmRzIG9uIE5FVF9JUElQIHx8IE5FVF9JUEdSRSB8fCBJUFY2X1NJVFxcbm5ldC9pcHY0L0tjb25maWctMzMzLVxcdHNlbGVjdCBORVRfRk9VXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZT0yOD1vYmotJChDT05GSUdfTkVUX0ZPVSkgKz0gZm91Lm9cXG5uZXQvaXB2NC9NYWtlZmlsZToyOTpvYmotJChDT05GSUdfTkVUX0lQR1JFX0RFTVVYKSArPSBncmUub1xcbm5ldC9pcHY0L01ha2VmaWxlOjMwOm9iai0kKENPTkZJR19ORVRfSVBHUkUpICs9IGlwX2dyZS5vXFxubmV0L2lwdjQvTWFrZWZpbGUtMzEtdWRwX3R1bm5lbC15IDo9IHVkcF90dW5uZWxfY29yZS5vIHVkcF90dW5uZWxfbmljLm9cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTQ0MD1zdGF0aWMgaW50IGdyZV9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTQ0NS1cXG5uZXQvaXB2NC9pcF9ncmUuYzo0NDY6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvaXBfZ3JlLmMtNDQ3LVxcdGlmIChpcHY0X2lzX211bHRpY2FzdChpcF9oZHIoc2tiKS1cXHUwMDNlZGFkZHIpKSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz05MzU9c3RhdGljIGNvbnN0IHN0cnVjdCBoZWFkZXJfb3BzIGlwZ3JlX2hlYWRlcl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05MzktXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTQwOiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk0MS1zdGF0aWMgaW50IGlwZ3JlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTk4ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05ODYtXFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTg3OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX2dyZS5jLTk4OC1cXHQubmRvX29wZW5cXHRcXHQ9IGlwZ3JlX29wZW4sXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz0xMDQwPXN0YXRpYyBpbnQgaXBncmVfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEwNTQtXFx0aWYgKGlwaC1cXHUwMDNlZGFkZHIgXFx1MDAyNlxcdTAwMjYgIXR1bm5lbC1cXHUwMDNlY29sbGVjdF9tZCkge1xcbm5ldC9pcHY0L2lwX2dyZS5jOjEwNTU6I2lmZGVmIENPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTA1Ni1cXHRcXHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBoLVxcdTAwM2VkYWRkcikpIHtcXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTM3Nz1pbnQgaXBfdHVubmVsX3JjdihzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy0zODMtXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6Mzg0OiNpZmRlZiBDT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVFxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTM4NS1cXHRpZiAoaXB2NF9pc19tdWx0aWNhc3QoaXBoLVxcdTAwM2VkYWRkcikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTA6MzEuNTA5OTg5Mzc2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA0NTk1NjQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgbmV0d29ya2luZyBjb25maWd1cmF0aW9uczpcblxuKipBbmFseXppbmcgTmV0d29yayBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgcmVxdWlyZXMgYm90aCBgTkVUX0lQR1JFYCBhbmQgYE5FVF9JUEdSRV9ERU1VWGAuIFRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIHF1ZXN0aW9uIG5vdyBiZWNvbWVzOiBEbyB3ZSBuZWVkIHRvIGNvbnNpZGVyIElQdjYgR1JFIGFzIHdlbGw/IFNvLCBsZXQncyBqdXN0IGNvbmZpcm0gaWYgYElQVjZfR1JFYCBpcyByZWxldmFudCB0byB0aGUgc29sdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNjMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMDozNC41NTU5NDg5NjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTM1NTA3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBWNl9HUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MTk5PWNvbmZpZyBJUFY2X1RVTk5FTFxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZy0yMDktXFxubmV0L2lwdjYvS2NvbmZpZzoyMTA6Y29uZmlnIElQVjZfR1JFXFxubmV0L2lwdjYvS2NvbmZpZy0yMTEtXFx0dHJpc3RhdGUgXFxcIklQdjY6IEdSRSB0dW5uZWxcXFwiXFxuLS1cXG5uZXQvaXB2Ni9NYWtlZmlsZT00Mj1vYmotJChDT05GSUdfSVBWNl9UVU5ORUwpICs9IGlwNl90dW5uZWwub1xcbm5ldC9pcHY2L01ha2VmaWxlOjQzOm9iai0kKENPTkZJR19JUFY2X0dSRSkgKz0gaXA2X2dyZS5vXFxubmV0L2lwdjYvTWFrZWZpbGUtNDQtb2JqLSQoQ09ORklHX0lQVjZfRk9VKSArPSBmb3U2Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTA6MzQuNjQ5NTExMTMxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM4MDY3NjkxNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEdSRSBhbmQgRVJTUEFOIFR1bm5lbCBUcmFuc21pc3Npb24gYW5kIE5ldGxpbmsgSW5mbyBQYXRocyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBhZGRyZXNzIHRoZSBgSVBWNl9HUkVgIGNvbmZpZ3VyYXRpb24gaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zOiBgaXBncmVfeG1pdGAsIGBlcnNwYW5feG1pdGAsIGBncmVfdGFwX3htaXRgLCBgaXA2ZXJzcGFuX3R1bm5lbF94bWl0YCwgYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCwgYW5kIGBpcDZncmVfZmlsbF9pbmZvYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBrZXkgZW50cnkgcG9pbnRzIGZvciB0cmFuc21pc3Npb24gYW5kIG5ldGxpbmsgaW5mbyBkdW1waW5nIHdpdGhpbiB0aGUgR1JFIGFuZCBFUlNQQU4gdHVubmVsIGltcGxlbWVudGF0aW9ucy5cblxuSSBxdWlja2x5IGNoZWNrZWQgaWYgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdGF0aWMsIHdoaWNoIHRoZXkgYXJlLCBidXQgdGhleSBhcmUgYXNzaWduZWQgdG8gZnVuY3Rpb24gcG9pbnRlcnMgbGlrZSBgbmRvX3N0YXJ0X3htaXRgIGFuZCBgcnRubF9saW5rX29wcy1cdTAwM2VmaWxsX2luZm9gLiBHaXZlbiB0aGUgaW5zdHJ1Y3Rpb25zLCBJIHdhbnRlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgYXJlbid0IGlubGluZWQgYmVjYXVzZSBpbmxpbmVkIGZ1bmN0aW9ucyBkb24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMsIGFuZCB0aGF0J3Mgbm90IGlkZWFsIGZvciB3aGF0IEkgYW0gdHJ5aW5nIHRvIGRvIGhlcmUuXG5cbk9rYXksIGBpcGdyZV94bWl0YCwgYGVyc3Bhbl94bWl0YCwgYGdyZV90YXBfeG1pdGAsIGFuZCBgaXA2ZXJzcGFuX3R1bm5lbF94bWl0YCBhcmUgYWxsIGFzc2lnbmVkIHRvIGAubmRvX3N0YXJ0X3htaXRgIGluIHRoZWlyIHJlc3BlY3RpdmUgbmV0ZGV2X29wcyBzdHJ1Y3R1cmVzLiBMaWtld2lzZSwgYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCwgYW5kIGBpcDZncmVfZmlsbF9pbmZvYCBhcmUgYXNzaWduZWQgdG8gYC5maWxsX2luZm9gIHdpdGhpbiB0aGUgY29ycmVzcG9uZGluZyBsaW5rX29wcyBzdHJ1Y3R1cmVzLiBHaXZlbiB0aGVzZSBhc3NpZ25tZW50cyB0byBmdW5jdGlvbiBwb2ludGVycywgSSBjYW4gYmUgY29uZmlkZW50IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSAqbm90KiBpbmxpbmVkIGFuZCBkbyBpbmRlZWQgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzLiBQZXJmZWN0OyB0aGF0J3MgZXhhY3RseSB3aGF0IEknbSBsb29raW5nIGZvci5cblxuSSdsbCBhbHNvIG1ha2Ugc3VyZSB0byBjb3ZlciB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYE5FVF9JUEdSRWAgZGVwZW5kcyBvbiBgTkVUX0lQR1JFX0RFTVVYYCwgYW5kIGBJUFY2X0dSRWAgaXMgY29udGluZ2VudCBvbiBgSVBWNmAuIFNvLCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3MgYXJlOiBgTkVUX0lQR1JFYCwgYE5FVF9JUEdSRV9ERU1VWGAsIGFuZCBgSVBWNl9HUkVgLlxuXG5JIHdhbnRlZCB0byBlbnN1cmUgSSBkaWRuJ3QgbWlzcyBhbnl0aGluZy4gSSBzcG90dGVkIGBfX2dyZV94bWl0YCwgd2hpY2ggKmlzKiBzdGF0aWMgYW5kIGNhbGxlZCBieSB0aGUgYHhtaXRgIGZ1bmN0aW9ucy4gQmVjYXVzZSBpdCBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlIGlubGluZWQsIEknbSBnb2luZyB0byBleGNsdWRlIHRoYXQgZnJvbSBteSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuXG5cblNvLCBoZXJlJ3MgbXkgcmVhc29uaW5nLiBUaGUgbWFpbiBpc3N1ZSBhcHBlYXJzIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgdHVubmVsJ3Mgb3V0cHV0IGZsYWdzIChgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgKSBkdXJpbmcgdHJhbnNtaXNzaW9uIG9yIG5ldGxpbmsgZHVtcHMuIFRoYXQncyBhIGNsYXNzaWMgY29uY3VycmVuY3kgaXNzdWUgdGhhdCdzIGxpa2VseSB0byBjYXVzZSBhbGwgc29ydHMgb2YgcHJvYmxlbXMuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZm9yIG5ldHdvcmsgdHJhbnNtaXNzaW9uIGFuZCBjb25maWd1cmF0aW9uLCBtYWtpbmcgdGhlbSBwcmltZSB0YXJnZXRzIGZvciBmdXp6aW5nLiBUaGV5IHJlcHJlc2VudCB0aGUgbWFpbiBhdmVudWVzIGZvciBkYXRhIGVudGVyaW5nIG9yIGV4aXRpbmcgdGhlc2UgR1JFIGFuZCBFUlNQQU4gdHVubmVscy5cblxuSW4gc3VtbWFyeSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOlxuKiAgIGBpcGdyZV94bWl0YFxuKiAgIGBlcnNwYW5feG1pdGBcbiogICBgZ3JlX3RhcF94bWl0YFxuKiAgIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgXG4qICAgYGlwZ3JlX2ZpbGxfaW5mb2BcbiogICBgZXJzcGFuX2ZpbGxfaW5mb2BcbiogICBgaXA2Z3JlX2ZpbGxfaW5mb2BcblxuQW5kIEknbGwgbmVlZCB0aGVzZSBjb25maWd1cmF0aW9uczpcbiogICBgTkVUX0lQR1JFYFxuKiAgIGBORVRfSVBHUkVfREVNVVhgXG4qICAgYElQVjZfR1JFYFxuXG5Ob3cgSSBzaG91bGQgZ28gYW5kIGNoZWNrIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgIGluIGBuZXQvaXB2Ni9pcDZfZ3JlLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njg3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEwOjQ4LjQ1NjI4MjU5MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDYwODk4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcDZlcnNwYW5fdHVubmVsX3htaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz04Nzg9c3RhdGljIG5ldGRldl90eF90IGlwNmdyZV90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTkxNi1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6OTE3OnN0YXRpYyBuZXRkZXZfdHhfdCBpcDZlcnNwYW5fdHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtOTE4LVxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTE4ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZlcnNwYW5fbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYy0xODg1LVxcdC5uZG9fdW5pbml0ID1cXHRcXHRpcDZlcnNwYW5fdHVubmVsX3VuaW5pdCxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTg4NjpcXHQubmRvX3N0YXJ0X3htaXQgPVxcdGlwNmVyc3Bhbl90dW5uZWxfeG1pdCxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMTg4Ny1cXHQubmRvX3NldF9tYWNfYWRkcmVzcyA9XFx0ZXRoX21hY19hZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMDo0OC41MzA4OTgxOFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0Mzc2MzA4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERhdGEgVHJhbnNtaXNzaW9uIFBhdGgqKlxuXG5SaWdodCwgc28gdGhlIHRyYWNlIHBvaW50cyB0byBgLm5kb19zdGFydF94bWl0YC4gVGhhdCdzIHdoZXJlIHRoZSBwYWNrZXQgdHJhbnNtaXNzaW9uIGJlZ2lucywgc28gdGhhdOKAmXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaGFuZGxlZCwgSSBuZWVkIHRvIGRpZyBpbnRvIGBpcGdyZV94bWl0YCB3aXRoaW4gYG5ldC9pcHY0L2lwX2dyZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IEdSRSBlbmNhcHN1bGF0aW9uIGlzIGhhcHBlbmluZyBhbmQgd2hlcmUgdGhpcyBwYWNrZXQgaXMgaW4gdGhlIHRyYW5zbWlzc2lvbiBxdWV1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODYwMywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEwOjUxLjk2ODUzMjM1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAyMDYxOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBncmVfeG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF9ncmUuYz02MjU9c3RhdGljIGludCBncmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTY0OC1cXG5uZXQvaXB2NC9pcF9ncmUuYzo2NDk6c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvaXB2NC9pcF9ncmUuYy02NTAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTk4ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwZ3JlX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy05OTAtI2VuZGlmXFxubmV0L2lwdjQvaXBfZ3JlLmM6OTkxOlxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gaXBncmVfeG1pdCxcXG5uZXQvaXB2NC9pcF9ncmUuYy05OTItXFx0Lm5kb19zaW9jZGV2cHJpdmF0ZVxcdD0gaXBfdHVubmVsX3Npb2NkZXZwcml2YXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMDo1Mi4wNDg3NDMzNTNaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNjYwODQwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBhIE5ldHdvcmsgVHJhbnNtaXNzaW9uIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgc28gSSdtIG9uIGAubmRvX3N0YXJ0X3htaXRgLiBHb29kLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCB3aGVyZSB0aGUga2VybmVsIGhhbmRzIG9mZiBwYWNrZXRzIGZvciB0cmFuc21pc3Npb24uIE5vdywgd2hlcmUgYXJlIHdlIHNlbmRpbmcgdGhpcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldHdvcmsgcGF0aC4gTGV0J3Mgc2VlLi4uIG15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgYGVyc3Bhbl94bWl0YCBpbiBgbmV0L2lwdjQvaXBfZ3JlLmNgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBFUlNQQU4gZW5jYXBzdWxhdGlvbiBjb2RlLiBJJ20gZ3Vlc3NpbmcgdGhhdCdzIGludm9sdmVkIGhlcmUgZ2l2ZW4gdGhlIGNvbnRleHQsIGFuZCBpdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIHBhY2tldCBoYW5kbGluZyBmbG93LiBMZXQncyB0cmFjZSB0aGlzIGZ1bmN0aW9uIGFuZCBzZWUgaG93IHRoZSBwYWNrZXQgaXMgYmVpbmcgZm9ybWF0dGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDUxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTA6NTUuNjg1MzU0NzgxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDc2MDMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlcnNwYW5feG1pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9pcF9ncmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pcF9ncmUuYz02NDk9c3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTcwMi1cXG5uZXQvaXB2NC9pcF9ncmUuYzo3MDM6c3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjQvaXBfZ3JlLmMtNzA0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTM3NT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGVyc3Bhbl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3Ny1cXHQubmRvX3VuaW5pdFxcdFxcdD0gaXBfdHVubmVsX3VuaW5pdCxcXG5uZXQvaXB2NC9pcF9ncmUuYzoxMzc4OlxcdC5uZG9fc3RhcnRfeG1pdFxcdFxcdD0gZXJzcGFuX3htaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTM3OS1cXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gZXRoX21hY19hZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMDo1NS43NTYxMjUwMDlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4MTI4Mzg0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGBncmVfdGFwX3htaXRgIGluIGBuZXQvaXB2NC9pcF9ncmUuY2AqKlxuXG5ZZXMsIHRoYXQncyB3aGF0IEkgd2FudCB0byBmb2N1cyBvbi4gUmlnaHQsIGxldCdzIGRyaWxsIGRvd24gaW50byBgZ3JlX3RhcF94bWl0YC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB3b3JraW5ncyBvZiB0aGlzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgR1JFIChHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbikgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGUgdGFwIGludGVyZmFjZSB0cmFuc21pdHMgcGFja2V0cy4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgcHJvYmFibHkgcmVsYXRlZCB0byBhIHJlY2VudCBpc3N1ZSBJIGhhdmUgYmVlbiB3b3JraW5nIG9uIHRoYXQgcmVxdWlyZWQgbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEwOjU4LjczNzQxMjM3OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODc0ODQyNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3JlX3RhcF94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwX2dyZS5jPTcwMz1zdGF0aWMgbmV0ZGV2X3R4X3QgZXJzcGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTc2MC1cXG5uZXQvaXB2NC9pcF9ncmUuYzo3NjE6c3RhdGljIG5ldGRldl90eF90IGdyZV90YXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTc2Mi1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTM0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGdyZV90YXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTEzNDQtXFx0Lm5kb191bmluaXRcXHRcXHQ9IGlwX3R1bm5lbF91bmluaXQsXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTM0NTpcXHQubmRvX3N0YXJ0X3htaXRcXHRcXHQ9IGdyZV90YXBfeG1pdCxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xMzQ2LVxcdC5uZG9fc2V0X21hY19hZGRyZXNzIFxcdD0gZXRoX21hY19hZGRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMDo1OC44MjQ5MDIwNDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg2OTEzOTYyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBHUkUgVHVubmVsIEZpbGwgSW5mb3JtYXRpb24gRnVuY3Rpb24qKlxuXG5ZZXMsIHRoYXQgZmVlbHMgcmlnaHQsIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gYmUuIExldCdzIGRpZyBpbnRvIHRoZSBgaXBncmVfZmlsbF9pbmZvYCBmdW5jdGlvbiB3aXRoaW4gdGhlIGBuZXQvaXB2NC9pcF9ncmUuY2AgZmlsZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggdGhlIGZpbGwgaW5mbyBzZWN0aW9uIGFzIEkgc3VzcGVjdCB0aGVyZSBhcmUgc29tZSBwYXJhbWV0ZXJzIHRoYXQgSSBjb3VsZCBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJJ20gbG9va2luZyBmb3Igd2hlcmUgd2UncmUgcG9wdWxhdGluZyB0aGUgR1JFIHR1bm5lbCBpbmZvcm1hdGlvbi4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgYXJlYXMgdGhhdCBjb3VsZCBiZSBpbmZsdWVuY2luZyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBzeXN0ZW0uIEknbGwgbWFrZSBzdXJlIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIGJlaW5nIHVzZWQgYXJlIGNvcnJlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDI0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6MDIuNjk0MDQ1NzU3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mjc5NzMyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGdyZV9maWxsX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9MTUxNz1zdGF0aWMgc2l6ZV90IGlwZ3JlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTY0LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE1NjU6c3RhdGljIGludCBpcGdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTY2LXtcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE2MTY9c3RhdGljIGludCBlcnNwYW5fZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjM0LVxcbm5ldC9pcHY0L2lwX2dyZS5jOjE2MzU6XFx0cmV0dXJuIGlwZ3JlX2ZpbGxfaW5mbyhza2IsIGRldik7XFxubmV0L2lwdjQvaXBfZ3JlLmMtMTYzNi1cXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTE2Nzg9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwZ3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNjg4LVxcdC5nZXRfc2l6ZVxcdD0gaXBncmVfZ2V0X3NpemUsXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTY4OTpcXHQuZmlsbF9pbmZvXFx0PSBpcGdyZV9maWxsX2luZm8sXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTY5MC1cXHQuZ2V0X2xpbmtfbmV0XFx0PSBpcF90dW5uZWxfZ2V0X2xpbmtfbmV0LFxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTY5Mz1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXBncmVfdGFwX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTcwMy1cXHQuZ2V0X3NpemVcXHQ9IGlwZ3JlX2dldF9zaXplLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjE3MDQ6XFx0LmZpbGxfaW5mb1xcdD0gaXBncmVfZmlsbF9pbmZvLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3MDUtXFx0LmdldF9saW5rX25ldFxcdD0gaXBfdHVubmVsX2dldF9saW5rX25ldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6MDIuNzU2ODQ3Mzk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MTE0NTA0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgZXJzcGFuX2ZpbGxfaW5mb2AgaW4gYG5ldC9pcHY0L2lwX2dyZS5jYCoqXG5cblllcy4gT2theSwgdGhhdCdzIHdoYXQgSSdtIHRoaW5raW5nIHRvby4gTGV0J3MgZGlnIGludG8gdGhhdCBgZXJzcGFuX2ZpbGxfaW5mb2AgZnVuY3Rpb24gd2l0aGluIHRoZSBJUHY0IEdSRSBpbXBsZW1lbnRhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCdzIHdvcmtpbmcuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIG51YW5jZXMgb2YgaG93IHRoZSBFUlNQQU4gaGVhZGVyIGlzIHBvcHVsYXRlZC4gSXMgaXQgZWZmaWNpZW50PyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIHdpdGggZGlmZmVyZW50IEVSU1BBTiBtb2RlcyBvciBjb25maWd1cmF0aW9ucz8gSSdtIGFudGljaXBhdGluZyBzb21lIGludHJpY2F0ZSBiaXQgbWFuaXB1bGF0aW9uIGluIHRoZXJlLCBkZWFsaW5nIHdpdGggdGhlIFR5cGUgSUlJIEVSU1BBTiBoZWFkZXIsIG9yIHBlcmhhcHMgc29tZSBsZXNzLXRoYW4tb2J2aW91cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgdW5kZXJseWluZyBuZXR3b3JrIGludGVyZmFjZXMuIEknbGwgYmUgbG9va2luZyBmb3IgaG93IGl0IGhhbmRsZXMgdGhlIGZsb3ctSUQsIHNlc3Npb24tSUQsIGFuZCBvdGhlciBtZXRhZGF0YSBmaWVsZHMuIEl0J3MgdGltZSB0byBzZWUgd2hhdOKAmXMgZ29pbmcgb24gdW5kZXIgdGhlIGhvb2QgYW5kIGFzc2VzcyB0aGUgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzU1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6MDcuMTY4MzAwMTVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMTY5NzI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVyc3Bhbl9maWxsX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvaXBfZ3JlLmM9MTU2NT1zdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTYxNS1cXG5uZXQvaXB2NC9pcF9ncmUuYzoxNjE2OnN0YXRpYyBpbnQgZXJzcGFuX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbm5ldC9pcHY0L2lwX2dyZS5jLTE2MTcte1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTcwOD1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZXJzcGFuX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYy0xNzE4LVxcdC5nZXRfc2l6ZVxcdD0gaXBncmVfZ2V0X3NpemUsXFxubmV0L2lwdjQvaXBfZ3JlLmM6MTcxOTpcXHQuZmlsbF9pbmZvXFx0PSBlcnNwYW5fZmlsbF9pbmZvLFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE3MjAtXFx0LmdldF9saW5rX25ldFxcdD0gaXBfdHVubmVsX2dldF9saW5rX25ldCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6MDcuMjU4NDc3MTQ3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTU5MzkyMDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSVB2NiBHUkUgSW5mb3JtYXRpb24gRmlsbGluZyBGdW5jdGlvbioqXG5cblllcywgdGhhdCBmZWVscyByaWdodC4gTXkgZ3V0IHNheXMgd2UgbmVlZCB0byBkZWx2ZSBpbnRvIGBpcDZncmVfZmlsbF9pbmZvYCBpbiBgbmV0L2lwdjYvaXA2X2dyZS5jYC4gTGV0J3MgY29uZmlybSBteSBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIGNvbnRyb2wgcGF0aCBvciBhIHNwZWNpZmljIGRhdGEgc3RydWN0dXJlLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIEdSRSB0dW5uZWwgaW5mb3JtYXRpb24gaXMgYmVpbmcgcG9wdWxhdGVkIHdpdGggSVB2NiBkYXRhLCBzcGVjaWZpY2FsbHkgdGhlIG51YW5jZXMgb2YgdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgYnJvYWRlciBHUkUgaW5mcmFzdHJ1Y3R1cmUuIEkgYW0gZm9jdXNlZCBvbiB0aGUgc3BlY2lmaWNzIGluIHRoaXMgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyOTMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMToxMC41MTQ0MjA2NThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MjY3NzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNmdyZV9maWxsX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvaXA2X2dyZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2lwNl9ncmUuYz0yMDczPXN0YXRpYyBzaXplX3QgaXA2Z3JlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjExNC1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjExNTpzdGF0aWMgaW50IGlwNmdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjExNi17XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmM9MjI4OD1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjI5OC1cXHQuZ2V0X3NpemVcXHQ9IGlwNmdyZV9nZXRfc2l6ZSxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjI5OTpcXHQuZmlsbF9pbmZvXFx0PSBpcDZncmVfZmlsbF9pbmZvLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzAwLVxcdC5nZXRfbGlua19uZXRcXHQ9IGlwNl90bmxfZ2V0X2xpbmtfbmV0LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIzMDM9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMxMi1cXHQuZ2V0X3NpemVcXHQ9IGlwNmdyZV9nZXRfc2l6ZSxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjMxMzpcXHQuZmlsbF9pbmZvXFx0PSBpcDZncmVfZmlsbF9pbmZvLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzE0LVxcdC5nZXRfbGlua19uZXRcXHQ9IGlwNl90bmxfZ2V0X2xpbmtfbmV0LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIzMTc9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGlwNmVyc3Bhbl90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjMyNi1cXHQuZ2V0X3NpemVcXHQ9IGlwNmdyZV9nZXRfc2l6ZSxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MjMyNzpcXHQuZmlsbF9pbmZvXFx0PSBpcDZncmVfZmlsbF9pbmZvLFxcbm5ldC9pcHY2L2lwNl9ncmUuYy0yMzI4LVxcdC5nZXRfbGlua19uZXRcXHQ9IGlwNl90bmxfZ2V0X2xpbmtfbmV0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMToxMC41Njk2OTQ2NDZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM1MDAwMTExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipPcGVyYXRpb25hbGl6aW5nIHRoZSBHUkUgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LiBDb25maXJtZWQsIGFsbCB0aGUgZm9jdXMgc3ltYm9scywgYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dCwgYXJlIHZhbGlkIG9wdGlvbnMgdG8gd29yayB3aXRoLiBTcGVjaWZpY2FsbHksIEknbSBub3RpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi4gSSBzZWUgdGhhdCBgTkVUX0lQR1JFYCwgYE5FVF9JUEdSRV9ERU1VWGAsIGFuZCBgSVBWNl9HUkVgIGFyZSBlbmFibGVkLiBUaGlzIHNpZ25hbHMgYSBzZXR1cCBnZWFyZWQgdG93YXJkcyBlbmNhcHN1bGF0aW5nIHRyYWZmaWMgd2l0aCBHUkUsIHBvdGVudGlhbGx5IGZvciB0dW5uZWxpbmcgSVB2NCBhbmQgSVB2Ni4gR2l2ZW4gdGhlIGN1cnJlbnQgaW5mb3JtYXRpb24sIHRoZXJlJ3Mgbm8gaW5oZXJlbnQgY29uZmxpY3QgaW4gdXNpbmcgdGhlc2UsIHNvIEknbGwgZXhlY3V0ZSB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAuIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDY0LCJPdXRwdXRUb2tlbnMiOjIwNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjExOjE2LjkxOTcwMjkwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDAwMTM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX0lQR1JFXCIsXG4gICAgXCJORVRfSVBHUkVfREVNVVhcIixcbiAgICBcIklQVjZfR1JFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBncmVfeG1pdFwiLFxuICAgIFwiZXJzcGFuX3htaXRcIixcbiAgICBcImdyZV90YXBfeG1pdFwiLFxuICAgIFwiaXA2ZXJzcGFuX3R1bm5lbF94bWl0XCIsXG4gICAgXCJpcGdyZV9maWxsX2luZm9cIixcbiAgICBcImVyc3Bhbl9maWxsX2luZm9cIixcbiAgICBcImlwNmdyZV9maWxsX2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgdHJhbnNtaXNzaW9uIGFuZCBuZXRsaW5rIGluZm8gZHVtcGluZyBwYXRocyBmb3IgR1JFIGFuZCBFUlNQQU4gdHVubmVscyBvdmVyIElQdjQgYW5kIElQdjYuIEl0IGZpeGVzIGFuIGlzc3VlIHdoZXJlIHRoZSB0dW5uZWwncyBvdXRwdXQgZmxhZ3MgKGB0dW5uZWwtXFx1MDAzZXBhcm1zLm9fZmxhZ3NgKSB3ZXJlIGJlaW5nIG1vZGlmaWVkIGR1cmluZyB0cmFuc21pc3Npb24gb3IgbmV0bGluayBkdW1wcywgd2hpY2ggY291bGQgbGVhZCB0byByYWNlIGNvbmRpdGlvbnMgb3IgdW5pbnRlbmRlZCBzdGF0ZSBjaGFuZ2VzLiBUaGVzZSBhcmUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIG5ldHdvcmsgdHJhZmZpYyBhbmQgbmV0bGluayBjb25maWd1cmF0aW9uLCBzbyB0aGV5IGFyZSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9JUEdSRVwiLFxuICAgIFwiTkVUX0lQR1JFX0RFTVVYXCIsXG4gICAgXCJJUFY2X0dSRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwZ3JlX3htaXRcIixcbiAgICBcImVyc3Bhbl94bWl0XCIsXG4gICAgXCJncmVfdGFwX3htaXRcIixcbiAgICBcImlwNmVyc3Bhbl90dW5uZWxfeG1pdFwiLFxuICAgIFwiaXBncmVfZmlsbF9pbmZvXCIsXG4gICAgXCJlcnNwYW5fZmlsbF9pbmZvXCIsXG4gICAgXCJpcDZncmVfZmlsbF9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHRyYW5zbWlzc2lvbiBhbmQgbmV0bGluayBpbmZvIGR1bXBpbmcgcGF0aHMgZm9yIEdSRSBhbmQgRVJTUEFOIHR1bm5lbHMgb3ZlciBJUHY0IGFuZCBJUHY2LiBJdCBmaXhlcyBhbiBpc3N1ZSB3aGVyZSB0aGUgdHVubmVsJ3Mgb3V0cHV0IGZsYWdzIChgdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzYCkgd2VyZSBiZWluZyBtb2RpZmllZCBkdXJpbmcgdHJhbnNtaXNzaW9uIG9yIG5ldGxpbmsgZHVtcHMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmFjZSBjb25kaXRpb25zIG9yIHVuaW50ZW5kZWQgc3RhdGUgY2hhbmdlcy4gVGhlc2UgYXJlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBuZXR3b3JrIHRyYWZmaWMgYW5kIG5ldGxpbmsgY29uZmlndXJhdGlvbiwgc28gdGhleSBhcmUgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6MTcuMDU5NzExMjk3WiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MDI1Nzk0NjIzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjExOjE3LjA2MDI4MDQ2OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MDI1NzM3MDg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9naWMgYnVnIHdoZXJlIHNoYXJlZCB0dW5uZWwgcGFyYW1ldGVycyAoYHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgaW5jb3JyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gKGBlcnNwYW5feG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgKSBhbmQgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCkuIFRoaXMgY291bGQgbGVhZCB0byBkYXRhIHJhY2VzIGFuZCBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLiBUaGUgZml4IGludHJvZHVjZXMgbG9jYWwgY29waWVzIG9mIHRoZSBmbGFncyAoYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCkgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgaXBfdHVubmVsX2ZsYWdzX2NvcHkoKWAgKHdoaWNoIHVzZXMgYGJpdG1hcF9jb3B5KClgIHRvIGNvcHkgdGhlIGVudGlyZSBgdW5zaWduZWQgbG9uZ2AgYXJyYXkpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOL0tDU0FOIGFuZCBsb2dpYyB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGRhdGEgcmFjZXMgYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxOWViMTU3ODE3MzQxMDM5YzE1Y2I2OTc3ZjQzODhlMmJmYTVkZTFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyAxMiAxNjoxMDoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmNcbmluZGV4IDZhOTI2MDc0MDFlOGEuLjgyMzA5ZWZkNDE3ZTAgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pcF9ncmUuY1xuKysrIGIvbmV0L2lwdjQvaXBfZ3JlLmNcbkBAIC00NzUsMTIgKzQ3NSw5IEBAIHN0YXRpYyBpbnQgZ3JlX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIHN0YXRpYyB2b2lkIF9fZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpcGhkciAqdG5sX3BhcmFtcyxcbi1cdFx0ICAgICAgIF9fYmUxNiBwcm90bylcbitcdFx0ICAgICAgIF9fYmUxNiBwcm90bywgY29uc3QgdW5zaWduZWQgbG9uZyAqZmxhZ3MpXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcbi1cbi1cdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4gXG4gXHQvKiBQdXNoIEdSRSBoZWFkZXIuICovXG4gXHRncmVfYnVpbGRfaGVhZGVyKHNrYiwgdHVubmVsLVx1MDAzZXR1bl9obGVuLFxuQEAgLTY1Myw2ICs2NTAsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgaXBncmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKGZsYWdzKTtcbiBcdGNvbnN0IHN0cnVjdCBpcGhkciAqdG5sX3BhcmFtcztcbiBcbiBcdGlmICghcHNrYl9pbmV0X21heV9wdWxsKHNrYikpXG5AQCAtNjg4LDExICs2ODYsMTIgQEAgc3RhdGljIG5ldGRldl90eF90IGlwZ3JlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0dG5sX3BhcmFtcyA9IFx1MDAyNnR1bm5lbC1cdTAwM2VwYXJtcy5pcGg7XG4gXHR9XG4gXG4tXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCxcbi1cdFx0XHRcdFx0ICAgICAgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpKSlcbitcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4rXG4rXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgZmxhZ3MpKSlcbiBcdFx0Z290byBmcmVlX3NrYjtcbiBcbi1cdF9fZ3JlX3htaXQoc2tiLCBkZXYsIHRubF9wYXJhbXMsIHNrYi1cdTAwM2Vwcm90b2NvbCk7XG4rXHRfX2dyZV94bWl0KHNrYiwgZGV2LCB0bmxfcGFyYW1zLCBza2ItXHUwMDNlcHJvdG9jb2wsIGZsYWdzKTtcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG4gZnJlZV9za2I6XG5AQCAtNzA1LDYgKzcwNCw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBpcF90dW5uZWwgKnR1bm5lbCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhmbGFncyk7XG4gXHRib29sIHRydW5jYXRlID0gZmFsc2U7XG4gXHRfX2JlMTYgcHJvdG87XG4gXG5AQCAtNzI4LDEwICs3MjgsMTIgQEAgc3RhdGljIG5ldGRldl90eF90IGVyc3Bhbl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHRydW5jYXRlID0gdHJ1ZTtcbiBcdH1cbiBcbitcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4rXG4gXHQvKiBQdXNoIEVSU1BBTiBoZWFkZXIgKi9cbiBcdGlmICh0dW5uZWwtXHUwMDNlZXJzcGFuX3ZlciA9PSAwKSB7XG4gXHRcdHByb3RvID0gaHRvbnMoRVRIX1BfRVJTUEFOKTtcbi1cdFx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbitcdFx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX1NFUV9CSVQsIGZsYWdzKTtcbiBcdH0gZWxzZSBpZiAodHVubmVsLVx1MDAzZWVyc3Bhbl92ZXIgPT0gMSkge1xuIFx0XHRlcnNwYW5fYnVpbGRfaGVhZGVyKHNrYiwgbnRvaGwodHVubmVsLVx1MDAzZXBhcm1zLm9fa2V5KSxcbiBcdFx0XHRcdCAgICB0dW5uZWwtXHUwMDNlaW5kZXgsXG5AQCAtNzQ2LDggKzc0OCw4IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBlcnNwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRnb3RvIGZyZWVfc2tiO1xuIFx0fVxuIFxuLVx0X19jbGVhcl9iaXQoSVBfVFVOTkVMX0tFWV9CSVQsIHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbi1cdF9fZ3JlX3htaXQoc2tiLCBkZXYsIFx1MDAyNnR1bm5lbC1cdTAwM2VwYXJtcy5pcGgsIHByb3RvKTtcbitcdF9fY2xlYXJfYml0KElQX1RVTk5FTF9LRVlfQklULCBmbGFncyk7XG4rXHRfX2dyZV94bWl0KHNrYiwgZGV2LCBcdTAwMjZ0dW5uZWwtXHUwMDNlcGFybXMuaXBoLCBwcm90bywgZmxhZ3MpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbiBmcmVlX3NrYjpcbkBAIC03NjAsNiArNzYyLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGdyZV90YXBfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0SVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpO1xuIFxuIFx0aWYgKCFwc2tiX2luZXRfbWF5X3B1bGwoc2tiKSlcbiBcdFx0Z290byBmcmVlX3NrYjtcbkBAIC03NjksMTQgKzc3MiwxNSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JlX3RhcF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXHR9XG4gXG4tXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCxcbi1cdFx0XHRcdFx0ICAgICAgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpKSlcbitcdGlwX3R1bm5lbF9mbGFnc19jb3B5KGZsYWdzLCB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFncyk7XG4rXG4rXHRpZiAoZ3JlX2hhbmRsZV9vZmZsb2Fkcyhza2IsIHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgZmxhZ3MpKSlcbiBcdFx0Z290byBmcmVlX3NrYjtcbiBcbiBcdGlmIChza2JfY293X2hlYWQoc2tiLCBkZXYtXHUwMDNlbmVlZGVkX2hlYWRyb29tKSlcbiBcdFx0Z290byBmcmVlX3NrYjtcbiBcbi1cdF9fZ3JlX3htaXQoc2tiLCBkZXYsIFx1MDAyNnR1bm5lbC1cdTAwM2VwYXJtcy5pcGgsIGh0b25zKEVUSF9QX1RFQikpO1xuK1x0X19ncmVfeG1pdChza2IsIGRldiwgXHUwMDI2dHVubmVsLVx1MDAzZXBhcm1zLmlwaCwgaHRvbnMoRVRIX1BfVEVCKSwgZmxhZ3MpO1xuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcbiBmcmVlX3NrYjpcbkBAIC0xNTYwLDEyICsxNTY0LDE1IEBAIHN0YXRpYyBzaXplX3QgaXBncmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBzdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IGlwX3R1bm5lbF9wYXJtX2tlcm4gKnAgPSBcdTAwMjZ0LVx1MDAzZXBhcm1zO1xuK1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4rXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX3Bhcm1fa2VybiAqcCA9IFx1MDAyNnQtXHUwMDNlcGFybXM7XG4gXHRJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKTtcbiBcbiBcdGlwX3R1bm5lbF9mbGFnc19jb3B5KG9fZmxhZ3MsIHAtXHUwMDNlb19mbGFncyk7XG4gXG4rXHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyICE9IDAgXHUwMDI2XHUwMDI2ICF0LVx1MDAzZWNvbGxlY3RfbWQpXG4rXHRcdF9fc2V0X2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgb19mbGFncyk7XG4rXG4gXHRpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX0dSRV9MSU5LLCBwLVx1MDAzZWxpbmspIHx8XG4gXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HUkVfSUZMQUdTLFxuIFx0XHRcdCBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVx1MDAzZWlfZmxhZ3MpKSB8fFxuQEAgLTE2MDgsMTIgKzE2MTUsOSBAQCBzdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIHN0YXRpYyBpbnQgZXJzcGFuX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbi1cdHN0cnVjdCBpcF90dW5uZWwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4gXHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyIFx1MDAzYz0gMikge1xuLVx0XHRpZiAodC1cdTAwM2VlcnNwYW5fdmVyICE9IDAgXHUwMDI2XHUwMDI2ICF0LVx1MDAzZWNvbGxlY3RfbWQpXG4tXHRcdFx0X19zZXRfYml0KElQX1RVTk5FTF9LRVlfQklULCB0LVx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xuLVxuIFx0XHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR1JFX0VSU1BBTl9WRVIsIHQtXHUwMDNlZXJzcGFuX3ZlcikpXG4gXHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jXG5pbmRleCBiODQzMTE2ZTliNzAzLi4wYjNmMzg2YjUxYTJkIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X2dyZS5jXG4rKysgYi9uZXQvaXB2Ni9pcDZfZ3JlLmNcbkBAIC05NjQsNyArOTY0LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGlwNmVyc3Bhbl90dW5uZWxfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0aWYgKHNrYl9jb3dfaGVhZChza2IsIGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb20gPzogdC1cdTAwM2VobGVuKSlcbiBcdFx0Z290byB0eF9lcnI7XG4gXG4tXHRfX2NsZWFyX2JpdChJUF9UVU5ORUxfS0VZX0JJVCwgdC1cdTAwM2VwYXJtcy5vX2ZsYWdzKTtcbiBcdElQQ0Ioc2tiKS1cdTAwM2VmbGFncyA9IDA7XG4gXG4gXHQvKiBGb3IgY29sbGVjdF9tZCBtb2RlLCBkZXJpdmUgZmw2IGZyb20gdGhlIHR1bm5lbCBrZXksXG5AQCAtMjExNSw4ICsyMTE0LDggQEAgc3RhdGljIHNpemVfdCBpcDZncmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBzdGF0aWMgaW50IGlwNmdyZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRzdHJ1Y3QgX19pcDZfdG5sX3Bhcm0gKnAgPSBcdTAwMjZ0LVx1MDAzZXBhcm1zO1xuK1x0Y29uc3Qgc3RydWN0IGlwNl90bmwgKnQgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IF9faXA2X3RubF9wYXJtICpwID0gXHUwMDI2dC1cdTAwM2VwYXJtcztcbiBcdElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTKG9fZmxhZ3MpO1xuIFxuIFx0aXBfdHVubmVsX2ZsYWdzX2NvcHkob19mbGFncywgcC1cdTAwM2VvX2ZsYWdzKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjExOjE3LjA2MDI4MTY3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjU0NDYyMTE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBHUkUgVHVubmVsIEZsYWdzIEJ1ZyBGaXgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyB0b3VjaGluZyBgbmV0L2lwdjQvaXBfZ3JlLmNgIGFuZCBgbmV0L2lwdjYvaXA2X2dyZS5jYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCdzIGFsbCBhYm91dCBob3cgR1JFIHR1bm5lbCBmbGFncyBhcmUgaGFuZGxlZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBnb29kLCBmbGFnIGhhbmRsaW5nIGlzIGFsd2F5cyBhIHBvdGVudGlhbCBhcmVhIGZvciBzdWJ0bGUgY29uY3VycmVuY3kgYnVncy5cblxuU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIGBfX2dyZV94bWl0YCBub3cgZ2V0cyB0aGUgYGZsYWdzYCBwYXNzZWQgdG8gaXQgYXMgYW4gYXJndW1lbnQsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IHdheSB0byBkbyB0aGlzLiBCZWZvcmUsIGl0IHdhcyBwdWxsaW5nIHRoZSBmbGFncyBkaXJlY3RseSBmcm9tIGB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFnc2AuIE1ha2VzIHNlbnNlOyB0aGF0IGtlZXBzIHRoZSB0cmFuc21pc3Npb24gZnVuY3Rpb24gaXRzZWxmIGNsZWFuZXIgYW5kIG1vcmUgZm9jdXNlZC4gVGhlbiB0aGUgb3RoZXIgdHJhbnNtaXQgZnVuY3Rpb25zIChgaXBncmVfeG1pdGAsIGBlcnNwYW5feG1pdGAsIGBncmVfdGFwX3htaXRgKSBjb3B5IHRoZSBmbGFncyBmcm9tIGB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFnc2AgdG8gYSBsb2NhbCBgZmxhZ3NgIHZhcmlhYmxlLCBwb3RlbnRpYWxseSBtb2RpZnkgaXQsIGFuZCAqdGhlbiogcGFzcyBpdCB0byBgX19ncmVfeG1pdGAuIFJpZ2h0LiBVc2luZyBhIGxvY2FsIGNvcHkgaXMgYSBrZXkuXG5cblRoZSBtb3JlIGludGVyZXN0aW5nIHBhcnQgaXMgaW4gdGhlIGBmaWxsX2luZm9gIGZ1bmN0aW9ucyAoYGlwZ3JlX2ZpbGxfaW5mb2AgYW5kIGBlcnNwYW5fZmlsbF9pbmZvYCkuIEl0J3MgZml4aW5nIGEgYnVnIHdoZXJlIHdlIHdlcmUgbW9kaWZ5aW5nIGB0LVx1MDAzZXBhcm1zLm9fZmxhZ3NgIGR1cmluZyBhICpyZWFkKiBvcGVyYXRpb24g4oCTIGBmaWxsX2luZm9gIGlzIGZvciBuZXRsaW5rLCByaWdodD8gSXQgdXNlZCB0byBzZXQgdGhlIGBJUF9UVU5ORUxfS0VZX0JJVGAgZGlyZWN0bHkgb24gdGhlIHR1bm5lbCBwYXJhbWV0ZXJzIGR1cmluZyB0aGUgYGZpbGxfaW5mb2AgY2FsbCEgVGhhdCdzIGEgaHVnZSBwcm9ibGVtLiBUaGF0J3MgYSBjbGVhciBzdGF0ZSBjb3JydXB0aW9uIGJ1Zy5cblxuTm93LCBpdCBjb3BpZXMgdGhlIGZsYWdzIGludG8gYSBsb2NhbCBgb19mbGFnc2AgdmFyaWFibGU6IGBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKWAgYW5kIHRoZW4gYGlwX3R1bm5lbF9mbGFnc19jb3B5KG9fZmxhZ3MsIHAtXHUwMDNlb19mbGFncylgLiBOb3cgaXQncyBzYWZlIHRvIG1vZGlmeSBpdCB3aXRob3V0IHNpZGUtZWZmZWN0cy4gQWZ0ZXIgdGhlIGNvcHksIGl0IGNvbmRpdGlvbmFsbHkgc2V0cyBgSVBfVFVOTkVMX0tFWV9CSVRgIG9uICp0aGF0KiBsb2NhbCBjb3B5LCBgb19mbGFnc2AuIFRoYXQncyBzbWFydC4gVGhhdCBwcm90ZWN0cyBhZ2FpbnN0IHNvbWVvbmUgcXVlcnlpbmcgdGhlIHR1bm5lbCBpbmZvIGFuZCBjaGFuZ2luZyB0aGUgc3RhdGUgdW5kZXJuZWF0aCB5b3UuIFRoZSBzYW1lIGNoYW5nZSBhbHNvIHNob3dzIHVwIGluIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgLiBHb29kIHN0dWZmLlxuXG5TbywgdGhlIHVuZGVybHlpbmcgaXNzdWUgaXMgYSBjb25jdXJyZW5jeSBvciBzdGF0ZSBjb3JydXB0aW9uIGJ1Zy4gV2Ugd2VyZSBtb2RpZnlpbmcgc2hhcmVkIHR1bm5lbCBzdGF0ZSAoYHQtXHUwMDNlcGFybXMub19mbGFnc2ApIGR1cmluZyBib3RoIHRyYW5zbWl0IGFuZCBuZXRsaW5rIGR1bXBzICh3aGljaCBjb3VsZCBoYXBwZW4gY29uY3VycmVudGx5KSwgbGVhZGluZyB0byBkYXRhIHJhY2VzLiBUaGF0IGNhbiBjb3JydXB0IHRoZSB0dW5uZWwgc3RhdGUgaW4gc3VidGxlIHdheXMuIEl0J3Mgbm90IGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8gbGVha3MsIGJ1dCBpdCdzIGFib3V0IG1vZGlmeWluZyBzaGFyZWQgc3RhdGUgd2l0aG91dCBwcm9wZXIgbG9ja2luZy5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGBpcGdyZV9maWxsX2luZm9gIGFnYWluIHRvIGJlIHN1cmUuLi4gYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCBjcmVhdGVzIGEgYml0bWFwLCB0aGVuIHdlIGNvcHkgdGhlIGZsYWdzLCBhbmQgb25seSB0aGVuIGRvIHdlIG1vZGlmeSB0aGUgY29weSBiZWZvcmUgY29udmVydGluZyB0byBgX19iZTE2YCBhbmQgc2VuZGluZyBvdmVyIG5ldGxpbmsuIEkgZG9uJ3Qgc2VlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgaW4gdGhlIGNvZGUuIEl0J3MgYSBjbGVhbiBmaXggZm9yIGEgcHJldHR5IG5hc3R5IGJ1Zy4gR29vZCBjYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDIxNywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg5MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjExOjI5LjYwNDkwNzM1M1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NDYxOTIxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC01MS1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NTI6I2RlZmluZSBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyguLi4pXFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC01My1cXHRfX2lwdF9mbGFnX29wKERFQ0xBUkVfQklUTUFQLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6MzIuMjY5NTQyMjkxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MjQzOTg4OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIEZ1bmN0aW9uIENhbGwqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBmb2N1cyBoZXJlIGlzIG9uIHRoZSBmdW5jdGlvbiBjYWxsOiBgX19pcHRfZmxhZ19vcGAuIEhtbSwgaW50ZXJlc3RpbmcuIE15IGJyYWluIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEl0J3MgcHJlZml4ZWQgd2l0aCBhIGRvdWJsZSB1bmRlcnNjb3JlLCBzbyBpdCdzIGxpa2VseSBhbiBpbnRlcm5hbCBvciBrZXJuZWwtbGV2ZWwgZnVuY3Rpb24sIHdoaWNoIGltcGxpZXMgd2UncmUgZGVhbGluZyB3aXRoIGxvd2VyLWxldmVsIG5ldHdvcmtpbmcgb3BlcmF0aW9ucywgcG9zc2libHkgcmVsYXRlZCB0byBuZXRmaWx0ZXIsIGlwdGFibGVzLCBvciBhIHNpbWlsYXIgZmlyZXdhbGwvcGFja2V0IG1hbmlwdWxhdGlvbiBmcmFtZXdvcmsuIFRoZSBuYW1lIGl0c2VsZiwgYF9faXB0X2ZsYWdfb3BgLCBzdWdnZXN0cyBpdCdzIGludm9sdmVkIGluICpmbGFnKiBvcGVyYXRpb25zLCBhbmQgcHJvYmFibHkgYXQgYW4gKm9wZXJhdG9yKiBsZXZlbC4gVGhpcyB0ZWxscyBtZSB3ZSdyZSBsaWtlbHkgbWFuaXB1bGF0aW5nIG9yIHRlc3Rpbmcgc29tZSBraW5kIG9mIGZsYWcgd2l0aGluIHRoZSBjb250ZXh0IG9mIHBhY2tldCBtYXRjaGluZyBvciBydWxlIGFwcGxpY2F0aW9uLiBJIGltbWVkaWF0ZWx5IG5lZWQgbW9yZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgcHJlY2lzZWx5IHdoYXQgZmxhZ3MgYW5kIG9wZXJhdG9ycyBhcmUgaW4gcGxheS4gSXMgdGhpcyB3aXRoaW4gdGhlIGlwdGFibGVzIHN0cnVjdHVyZSBpdHNlbGYsIG9yIGlzIHRoaXMgcmVsYXRlZCB0byB1c2VyLXNwYWNlIGlwdGFibGVzIGludGVyYWN0aW9uPyBXaGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgcHJvYmFibHkgYmVpbmcgaGFuZGxlZCBhbmQgd2hlcmUgZG8gdGhleSBzaXQgaW4gdGhlIG1lbW9yeSBzcGFjZT8gTW9yZSBxdWVzdGlvbnMuIEkgbmVlZCBtb3JlIGluZm9ybWF0aW9uIHRvIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4NzgsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMTozNy4wOTM5NTQ0MDNaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODY5NjgyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2RlZmluZSBfX2lwdF9mbGFnX29wXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC00OC1cXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NDk6I2RlZmluZSBfX2lwdF9mbGFnX29wKG9wLCAuLi4pXFx0XFx0XFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC01MC1cXHRvcChfX1ZBX0FSR1NfXywgX19JUF9UVU5ORUxfRkxBR19OVU0pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjExOjM5LjM4MDk1MjgzM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODg2OTQ1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIFR1bm5lbCBGbGFnIERlY2xhcmF0aW9uIGFuZCBDb3B5IFByb2Nlc3MqKlxuXG5SaWdodCwgc28gSSdtIHNlZWluZyB0aGlzIGBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKWAgbWFjcm8uIEl0J3MgZXhwYW5kaW5nIHRvIGBERUNMQVJFX0JJVE1BUChvX2ZsYWdzLCBfX0lQX1RVTk5FTF9GTEFHX05VTSlgLiBUaGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBiaXQgZmxhZ3MsIHBhY2tlZCBpbnRvIGEgYml0bWFwLiBgREVDTEFSRV9CSVRNQVBgIGlzIGRlZmluaXRlbHkgZ29pbmcgdG8gcmVzb2x2ZSB0byBhbiBhcnJheSBvZiBgdW5zaWduZWQgbG9uZ2AgdmFsdWVzLiBUaGF0J3Mgc3RhbmRhcmQgcHJhY3RpY2UsIGVmZmljaWVudCBmb3IgYml0IG1hbmlwdWxhdGlvbi4gV2XigJlyZSB1c2luZyBsb25ncywgcHJvYmFibHkgYmVjYXVzZSB3ZeKAmXJlIHdvcmtpbmcgd2l0aCB0aGUgYXJjaGl0ZWN0dXJl4oCZcyBuYXRpdmUgd29yZCBzaXplIHRvIG1ha2UgdGhlIG9wZXJhdGlvbnMgYXMgZmFzdCBhcyBwb3NzaWJsZS4gVGhpcyBpcyBhIGNvbW1vbiBhbmQgcmVhc29uYWJsZSBhcHByb2FjaCB0byBtYW5hZ2luZyBhIHNldCBvZiBib29sZWFuIG9wdGlvbnMsIG9yIGZsYWdzLlxuXG5UaGVuLCB0aGVyZSdzIGBpcF90dW5uZWxfZmxhZ3NfY29weWAuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzICpoYXMqIHRvIGJlIGEgZnVuY3Rpb24gZGVzaWduZWQgc3BlY2lmaWNhbGx5IHRvIGNvcHkgdGhlc2UgYml0IGZsYWdzIGZyb20gb25lIGJpdG1hcCAoc291cmNlKSB0byBhbm90aGVyIChkZXN0aW5hdGlvbikuIEl04oCZcyBwcm9iYWJseSBpbXBsZW1lbnRlZCB1c2luZyBiaXR3aXNlIG9wZXJhdG9ycyBsaWtlIGBcdTAwMjZgLCBgfGAsIGB+YCAoQU5ELCBPUiwgTk9UKSB0byBzZWxlY3RpdmVseSBzZXQsIGNsZWFyLCBhbmQgY29weSB0aGUgaW5kaXZpZHVhbCBiaXRzIHdpdGhpbiB0aGUgYHVuc2lnbmVkIGxvbmdgIGFycmF5cyB0aGF0IGNvbXByaXNlIHRoZSBiaXRtYXBzLiBUaGUgZnVuY3Rpb24ncyBqb2IgaXMgc3RyYWlnaHRmb3J3YXJkOiBlbnN1cmUgdGhlIGZsYWdzIHJlcHJlc2VudGluZyB0aGUgdHVubmVsJ3MgY29uZmlndXJhdGlvbiBhcmUgY29ycmVjdGx5IHRyYW5zZmVycmVkLCBwcm9iYWJseSB3aGVuIHNldHRpbmcgdXAgb3IgbW9kaWZ5aW5nIGEgdHVubmVsLiBObyBzdXJwcmlzZXMgaGVyZSwganVzdCBlZmZpY2llbnQgYml0LWxldmVsIG1hbmlwdWxhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI0MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjExOjQ1LjI2NzkwMDM2NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE4MDA2NTAxMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGlwX3R1bm5lbF9mbGFnc19jb3B5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaC01NS0jZGVmaW5lIGlwX3R1bm5lbF9mbGFnc196ZXJvKC4uLilcXHRfX2lwdF9mbGFnX29wKGJpdG1hcF96ZXJvLCBfX1ZBX0FSR1NfXylcXG5pbmNsdWRlL25ldC9pcF90dW5uZWxzLmg6NTY6I2RlZmluZSBpcF90dW5uZWxfZmxhZ3NfY29weSguLi4pXFx0X19pcHRfZmxhZ19vcChiaXRtYXBfY29weSwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oLTU3LSNkZWZpbmUgaXBfdHVubmVsX2ZsYWdzX2FuZCguLi4pXFx0X19pcHRfZmxhZ19vcChiaXRtYXBfYW5kLCBfX1ZBX0FSR1NfXylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6NDcuNDQ3OTY5NTQ3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MTYwMTA1MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uY2VybiBSZWdhcmRpbmcgQml0bWFwIENvcHlpbmcgYW5kIFBvdGVudGlhbCBVbmluaXRpYWxpemVkIEJpdHMqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IGBiaXRtYXBfY29weWAgd29ya3MgaGVyZS4gSXQncyBzdXBwb3NlZCB0byBjb3B5IGFuIGV4YWN0IG51bWJlciBvZiBiaXRzLCB3aGljaCBpcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLiBIb3dldmVyLCBhIHBvdGVudGlhbCBpc3N1ZSBpcyBzdGFydGluZyB0byBuaWdnbGUgYXQgbWUuIElmIGBfX0lQX1RVTk5FTF9GTEFHX05VTWAgaXNuJ3QgYSBjbGVhbiBtdWx0aXBsZSBvZiBgQklUU19QRVJfTE9OR2Ag4oCTIHRoYXQgaXMsIGlmIHRoZXJlJ3MgYSByZW1haW5kZXIgd2hlbiB5b3UgZGl2aWRlIHRoZSBudW1iZXIgb2YgZmxhZ3MgYnkgdGhlIGJpdCB3aWR0aCBvZiBhbiBgdW5zaWduZWQgbG9uZ2Ag4oCTIHRoZW4gYGJpdG1hcF9jb3B5YCBtaWdodCBiZSBsZWF2aW5nIHRoZSB0cmFpbGluZyBiaXRzIG9mIHRoZSBsYXN0IGB1bnNpZ25lZCBsb25nYCBpbiB0aGUgZGVzdGluYXRpb24gdW5pbml0aWFsaXplZC4gV2UgY2FuJ3QgaGF2ZSB0aGF0OyBpdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IgbGF0ZXIgb24uIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGJpdG1hcF9jb3B5YCBoYW5kbGVzIHRoaXMgc2l0dWF0aW9uIGNvcnJlY3RseS4gTGV0J3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGNsb3NlIGxvb2sgYXQgaXRzIGltcGxlbWVudGF0aW9uLiBJJ20gZ29pbmcgdG8gY2hlY2sgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY3NjMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMTo1Mi4wNjM5ODI1NjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjA5OTEwNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSB2b2lkIGJpdG1hcF9jb3B5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYml0bWFwLmg9MjczPXZvaWQgYml0bWFwX2NvcHlfY2xlYXJfdGFpbCh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgdW5zaWduZWQgaW50IG5iaXRzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNzktXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaDoyODA6c3RhdGljIGlubGluZSB2b2lkIGJpdG1hcF9jb3B5X2FuZF9leHRlbmQodW5zaWduZWQgbG9uZyAqdG8sXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yODEtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCB1bnNpZ25lZCBsb25nICpmcm9tLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMTo1NC4xODQ5OTgyNTJaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2MTQ1MDcyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIGBiaXRtYXBfY29weWAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYGJpdG1hcF9jb3B5YCBtYWNybyBvciBmdW5jdGlvbi4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IGl0cyBkZWZpbml0aW9uLiBXaGF0J3MgdGhlIGltcGxlbWVudGF0aW9uIGxpa2U/IElzIGl0IGEgc3RyYWlnaHRmb3J3YXJkIGJpdHdpc2Ugb3BlcmF0aW9uLCBwb3RlbnRpYWxseSBvcHRpbWl6ZWQgd2l0aCBjb21waWxlciBpbnRyaW5zaWNzLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IHRoYXQgcmVsaWVzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGhhcmR3YXJlLXNwZWNpZmljIGluc3RydWN0aW9ucz8gSSdsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIGdvdGNoYXPigJRhbGlnbm1lbnQgaXNzdWVzLCBwb3RlbnRpYWwgZm9yIG9mZi1ieS1vbmUgZXJyb3JzIGluIGxvb3AgYm91bmRhcmllcywgb3IgYW55IGFzc3VtcHRpb25zIG1hZGUgYWJvdXQgdGhlIHVuZGVybHlpbmcgYml0bWFwIHJlcHJlc2VudGF0aW9uLiBVbmRlcnN0YW5kaW5nIHRoZXNlIGRldGFpbHMgd2lsbCBkaWN0YXRlIHdoZXRoZXIgaXQgaXMgYWN0dWFsbHkgd2hhdCBJJ20gbG9va2luZyBmb3IsIHBlcmZvcm1hbmNlIHdpc2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBgYml0bWFwX2NvcHlgIGlzIGRvaW5nIHdoYXQgSSBiZWxpZXZlIGl0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTYzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTE6NTcuODQ2NDUxNzU5WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTcxNTc4OTk0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIjZGVmaW5lIGJpdG1hcF9jb3B5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMjowMC4wMTgwNDA3ODJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5MjYyMTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlbHZpbmcgaW50byBCaXRtYXAgTWFuaXB1bGF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWNzIG9mIGBiaXRtYXBfY29weWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIG5hdmlnYXRlIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIExldCdzIHNlZS4uLiBgYml0bWFwX2NvcHlgLCByaWdodD8gVGhhdCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9iaXRtYXAuaGAuIEknbGwgb3BlbiB0aGF0IGZpbGUgYW5kIGNvbmZpcm0gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBleHBlY3RlZCBiZWhhdmlvciB1bmRlciB2YXJpb3VzIGNvbmRpdGlvbnMuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBmdW5jdGlvbiBpcyBvcHRpbWl6ZWQgYXMgSSdkIGV4cGVjdCBpdCB0byBiZSwgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGJpdHdpc2Ugb3BlcmF0aW9ucy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIHJlc2lkZS4gSSB3YW50IHRvIGNoZWNrIGZvciBlZGdlIGNhc2VzLCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCB3b3JkIHNpemVzICgzMi82NCBiaXQpLiBJJ2xsIGFsc28gZ2xhbmNlIGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBtb3N0IGNvbW1vbiB1c2FnZS4gSSB3aWxsIHdhbnQgdG8gc2VlIGlmIHRoaXMgY29weSByb3V0aW5lIHVzZXMgdW5yb2xsZWQgbG9vcHMsIHdoaWNoIGlzIG9mdGVuIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGhlcmUsIG9yIGlmIHRoZXJlJ3MgYW55IGNsZXZlciB0cmlja2VyeSB3aXRoIFNJTUQgaW5zdHJ1Y3Rpb25zICh0aG91Z2ggaW4gdGhlIGtlcm5lbCwgdGhhdCdzIGxlc3MgY29tbW9uLCBhZG1pdHRlZGx5KS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM4MywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEyOjA0LjYxMDY2OTM0MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA4MDM3NDI2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaXRtYXBfY29weVxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgODAxIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYz0xMDIzPXZvaWQgX19pbml0IHZlY19pbml0X3ZxX21hcChlbnVtIHZlY190eXBlIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYy0xMDI2LVxcdHZlY19wcm9iZV92cXMoaW5mbywgaW5mby1cXHUwMDNldnFfbWFwKTtcXG5hcmNoL2FybTY0L2tlcm5lbC9mcHNpbWQuYzoxMDI3OlxcdGJpdG1hcF9jb3B5KGluZm8tXFx1MDAzZXZxX3BhcnRpYWxfbWFwLCBpbmZvLVxcdTAwM2V2cV9tYXAsIFNWRV9WUV9NQVgpO1xcbmFyY2gvYXJtNjQva2VybmVsL2Zwc2ltZC5jLTEwMjgtfVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM9MTY2Mz1zdGF0aWMgaW50IF9fa3ZtX3ZjcHVfc2V0X3RhcmdldChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xNjc1LVxcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjE2NzY6XFx0Yml0bWFwX2NvcHkoa3ZtLVxcdTAwM2VhcmNoLnZjcHVfZmVhdHVyZXMsIFxcdTAwMjZmZWF0dXJlcywgS1ZNX1ZDUFVfTUFYX0ZFQVRVUkVTKTtcXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0xNjc3LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jPTMzOT1zdGF0aWMgdm9pZCBwa3ZtX2luaXRfZmVhdHVyZXNfZnJvbV9ob3N0KHN0cnVjdCBwa3ZtX2h5cF92bSAqaHlwX3ZtLCBjb25zdCBzdHJ1Y3Qga3ZtICpob3N0X2t2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3Brdm0uYy0zNTUtXFxuYXJjaC9hcm02NC9rdm0vaHlwL252aGUvcGt2bS5jOjM1NjpcXHRcXHRiaXRtYXBfY29weShrdm0tXFx1MDAzZWFyY2gudmNwdV9mZWF0dXJlcyxcXG5hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9wa3ZtLmMtMzU3LVxcdFxcdFxcdCAgICBob3N0X2t2bS1cXHUwMDNlYXJjaC52Y3B1X2ZlYXR1cmVzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmM9MzcwPXZvaWQgdmdpY192NV9mb2xkX3BwaV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYy00MDItXFx0ICovXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmM6NDAzOlxcdGJpdG1hcF9jb3B5KGNwdV9pZi1cXHUwMDNldmdpY19wcGlfYWN0aXZlciwgYWN0aXZlciwgVkdJQ19WNV9OUl9QUklWQVRFX0lSUVMpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NS5jLTQwNC19XFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYz00MDY9dm9pZCB2Z2ljX3Y1X2ZsdXNoX3BwaV9zdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjUuYy00MzctXFx0ICovXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmM6NDM4OlxcdGJpdG1hcF9jb3B5KGhvc3RfZGF0YV9wdHIodmdpY192NV9wcGlfc3RhdGUpLVxcdTAwM2VwZW5kciwgcGVuZHIsXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY1LmMtNDM5LVxcdFxcdCAgICBWR0lDX1Y1X05SX1BSSVZBVEVfSVJRUyk7XFxuLS1cXG5hcmNoL2FybTY0L21tL2NvbnRleHQuYz05MT1zdGF0aWMgdm9pZCBzZXRfcmVzZXJ2ZWRfYXNpZF9iaXRzKHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L21tL2NvbnRleHQuYy05My1cXHRpZiAocGlubmVkX2FzaWRfbWFwKVxcbmFyY2gvYXJtNjQvbW0vY29udGV4dC5jOjk0OlxcdFxcdGJpdG1hcF9jb3B5KGFzaWRfbWFwLCBwaW5uZWRfYXNpZF9tYXAsIE5VTV9VU0VSX0FTSURTKTtcXG5hcmNoL2FybTY0L21tL2NvbnRleHQuYy05NS1cXHRlbHNlIGlmIChhcm02NF9rZXJuZWxfdW5tYXBwZWRfYXRfZWwwKCkpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYz0zOTA9c3RhdGljIGlubGluZSB2b2lkIHNsaWNlX2NvcHlfbWFzayhzdHJ1Y3Qgc2xpY2VfbWFzayAqZHN0LFxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L3NsaWNlLmMtMzk1LVxcdFxcdHJldHVybjtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvc2xpY2UuYzozOTY6XFx0Yml0bWFwX2NvcHkoZHN0LVxcdTAwM2VoaWdoX3NsaWNlcywgc3JjLVxcdTAwM2VoaWdoX3NsaWNlcywgU0xJQ0VfTlVNX0hJR0gpO1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9zbGljZS5jLTM5Ny19XFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmM9NjI1PXN0YXRpYyB2b2lkIF9faW5pdCByaXNjdl9yZXNvbHZlX2lzYSh1bnNpZ25lZCBsb25nICpzb3VyY2VfaXNhLFxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTY0MC1cXHRcXHR9XFxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jOjY0MTpcXHRcXHRiaXRtYXBfY29weShwcmV2X3Jlc29sdmVkX2lzYSwgcmVzb2x2ZWRfaXNhLCBSSVNDVl9JU0FfRVhUX01BWCk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTY0Mi1cXHRcXHRmb3JfZWFjaF9zZXRfYml0KGJpdCwgc291cmNlX2lzYSwgUklTQ1ZfSVNBX0VYVF9NQVgpIHtcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYz04MzE9c3RhdGljIHZvaWQgX19pbml0IHJpc2N2X2ZpbGxfaHdjYXBfZnJvbV9pc2Ffc3RyaW5nKHVuc2lnbmVkIGxvbmcgKmlzYTJod2NhcClcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYy05MTQtXFx0XFx0aWYgKGJpdG1hcF9lbXB0eShyaXNjdl9pc2EsIFJJU0NWX0lTQV9FWFRfTUFYKSlcXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmM6OTE1OlxcdFxcdFxcdGJpdG1hcF9jb3B5KHJpc2N2X2lzYSwgaXNhaW5mby1cXHUwMDNlaXNhLCBSSVNDVl9JU0FfRVhUX01BWCk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTkxNi1cXHRcXHRlbHNlXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmM9OTU3PXN0YXRpYyB2b2lkIF9faW5pdCByaXNjdl9maWxsX3ZlbmRvcl9leHRfbGlzdChpbnQgY3B1KVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTk2NS1cXHRcXHRpZiAoIWV4dF9saXN0LVxcdTAwM2Vpc19pbml0aWFsaXplZCkge1xcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYzo5NjY6XFx0XFx0XFx0Yml0bWFwX2NvcHkoZXh0X2xpc3QtXFx1MDAzZWFsbF9oYXJ0c19pc2FfYml0bWFwLmlzYSxcXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMtOTY3LVxcdFxcdFxcdFxcdCAgICBleHRfbGlzdC1cXHUwMDNlcGVyX2hhcnRfaXNhX2JpdG1hcFtjcHVdLmlzYSxcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYz0xMDE5PXN0YXRpYyBpbnQgX19pbml0IHJpc2N2X2ZpbGxfaHdjYXBfZnJvbV9leHRfbGlzdCh1bnNpZ25lZCBsb25nICppc2EyaHdjYXApXFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9jcHVmZWF0dXJlLmMtMTA2NS1cXHRcXHRpZiAoYml0bWFwX2VtcHR5KHJpc2N2X2lzYSwgUklTQ1ZfSVNBX0VYVF9NQVgpKVxcbmFyY2gvcmlzY3Yva2VybmVsL2NwdWZlYXR1cmUuYzoxMDY2OlxcdFxcdFxcdGJpdG1hcF9jb3B5KHJpc2N2X2lzYSwgaXNhaW5mby1cXHUwMDNlaXNhLCBSSVNDVl9JU0FfRVhUX01BWCk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvY3B1ZmVhdHVyZS5jLTEwNjctXFx0XFx0ZWxzZVxcbi0tXFxuYXJjaC94ODYvZXZlbnRzL2ludGVsL2NvcmUuYz00NDk2PWludGVsX2dldF9ldmVudF9jb25zdHJhaW50cyhzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1YywgaW50IGlkeCxcXG4tLVxcbmFyY2gveDg2L2V2ZW50cy9pbnRlbC9jb3JlLmMtNDUxMC1cXHQgICAgICAgIFdBUk5fT05fT05DRSghKGMxLVxcdTAwM2VmbGFncyBcXHUwMDI2IFBFUkZfWDg2X0VWRU5UX0RZTkFNSUMpKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jOjQ1MTE6XFx0XFx0Yml0bWFwX2NvcHkoYzEtXFx1MDAzZWlkeG1zaywgYzItXFx1MDAzZWlkeG1zaywgWDg2X1BNQ19JRFhfTUFYKTtcXG5hcmNoL3g4Ni9ldmVudHMvaW50ZWwvY29yZS5jLTQ1MTItXFx0XFx0YzEtXFx1MDAzZXdlaWdodCA9IGMyLVxcdTAwM2V3ZWlnaHQ7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHNwZWMuaD03Mj1zdGF0aWMgaW5saW5lIHZvaWQgY29weV9waHlzX2NwdV9wcmVzZW50X21hcCh1bnNpZ25lZCBsb25nICpkc3QpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20vbXBzcGVjLmgtNzMte1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL21wc3BlYy5oOjc0OlxcdGJpdG1hcF9jb3B5KGRzdCwgcGh5c19jcHVfcHJlc2VudF9tYXAsIE1BWF9MT0NBTF9BUElDKTtcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcHNwZWMuaC03NS19XFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9NjQ5PXZvaWQga3ZtX3BtdV9oYW5kbGVfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTY1NS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM6NjU2OlxcdGJpdG1hcF9jb3B5KGJpdG1hcCwgcG11LVxcdTAwM2VyZXByb2dyYW1fcG1pLCBYODZfUE1DX0lEWF9NQVgpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy02NTctXFxuLS1cXG5hcmNoL3g4Ni9rdm0vcG11LmM9MTExOT1zdGF0aWMgdm9pZCBrdm1fcG11X3RyaWdnZXJfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC94ODYva3ZtL3BtdS5jLTExMzItXFx0aWYgKCFrdm1fcG11X2hhc19wZXJmX2dsb2JhbF9jdHJsKHBtdSkpXFxuYXJjaC94ODYva3ZtL3BtdS5jOjExMzM6XFx0XFx0Yml0bWFwX2NvcHkoYml0bWFwLCBldmVudF9wbWNzLCBYODZfUE1DX0lEWF9NQVgpO1xcbmFyY2gveDg2L2t2bS9wbXUuYy0xMTM0LVxcdGVsc2UgaWYgKCFiaXRtYXBfYW5kKGJpdG1hcCwgZXZlbnRfcG1jcyxcXG4tLVxcbmRyaXZlcnMvYW5kcm9pZC9kYml0bWFwLmg9NzA9ZGJpdG1hcF9yZXBsYWNlKHN0cnVjdCBkYml0bWFwICpkbWFwLCB1bnNpZ25lZCBsb25nICpuZXcsIHVuc2lnbmVkIGludCBuYml0cylcXG5kcml2ZXJzL2FuZHJvaWQvZGJpdG1hcC5oLTcxLXtcXG5kcml2ZXJzL2FuZHJvaWQvZGJpdG1hcC5oOjcyOlxcdGJpdG1hcF9jb3B5KG5ldywgZG1hcC1cXHUwMDNlbWFwLCBtaW4oZG1hcC1cXHUwMDNlbmJpdHMsIG5iaXRzKSk7XFxuZHJpdmVycy9hbmRyb2lkL2RiaXRtYXAuaC03My1cXHRrZnJlZShkbWFwLVxcdTAwM2VtYXApO1xcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYtdjUuYz02MDg9c3RhdGljIGludCBjY3BfZmluZF9hbmRfYXNzaWduX2xzYl90b19xKHN0cnVjdCBjY3BfZGV2aWNlICpjY3AsXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi12NS5jLTYzMi1cXHRcXHRpZiAocWxzYl93Z3QgPT0gbHNiX2NudCkge1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LXY1LmM6NjMzOlxcdFxcdFxcdGJpdG1hcF9jb3B5KHFsc2IsIGNtZF9xLVxcdTAwM2Vsc2JtYXNrLCBNQVhfTFNCX0NOVCk7XFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYtdjUuYy02MzQtXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9jY3AvY2NwLWRldi12NS5jPTY2NT1zdGF0aWMgaW50IGNjcF9hc3NpZ25fbHNicyhzdHJ1Y3QgY2NwX2RldmljZSAqY2NwKVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYtdjUuYy03MDctXFx0ICovXFxuZHJpdmVycy9jcnlwdG8vY2NwL2NjcC1kZXYtdjUuYzo3MDg6XFx0Yml0bWFwX2NvcHkocWxzYiwgbHNiX3B1YiwgTUFYX0xTQl9DTlQpO1xcbmRyaXZlcnMvY3J5cHRvL2NjcC9jY3AtZGV2LXY1LmMtNzA5LVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eC9vdHhfY3B0cGZfdWNvZGUuYz0xMDU4PXN0YXRpYyBpbnQgZW5nX2dycF91cGRhdGVfbWFza3Moc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eC9vdHhfY3B0cGZfdWNvZGUuYy0xMTAxLVxcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgvb3R4X2NwdHBmX3Vjb2RlLmM6MTEwMjpcXHRcXHRiaXRtYXBfY29weShlbmdzLVxcdTAwM2VibWFwLCB0bXBfYm1hcC5iaXRzLCBlbmdfZ3JwLVxcdTAwM2VnLVxcdTAwM2VlbmdzX251bSk7XFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eC9vdHhfY3B0cGZfdWNvZGUuYy0xMTAzLVxcdH1cXG4tLVxcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgvb3R4X2NwdHBmX3Vjb2RlLmMtMTExOS1cXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4L290eF9jcHRwZl91Y29kZS5jOjExMjA6XFx0XFx0Yml0bWFwX2NvcHkodG1wX2JtYXAuYml0cywgbWlycm9yZWRfZW5ncy1cXHUwMDNlYm1hcCxcXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4L290eF9jcHRwZl91Y29kZS5jLTExMjEtXFx0XFx0XFx0ICAgIGVuZ19ncnAtXFx1MDAzZWctXFx1MDAzZWVuZ3NfbnVtKTtcXG4tLVxcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgyL290eDJfY3B0cGZfdWNvZGUuYz04NTU9c3RhdGljIGludCBlbmdfZ3JwX3VwZGF0ZV9tYXNrcyhzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmMtOTAyLVxcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgyL290eDJfY3B0cGZfdWNvZGUuYzo5MDM6XFx0XFx0Yml0bWFwX2NvcHkoZW5ncy1cXHUwMDNlYm1hcCwgdG1wX2JtYXAuYml0cywgZW5nX2dycC1cXHUwMDNlZy1cXHUwMDNlZW5nc19udW0pO1xcbmRyaXZlcnMvY3J5cHRvL21hcnZlbGwvb2N0ZW9udHgyL290eDJfY3B0cGZfdWNvZGUuYy05MDQtXFx0fVxcbi0tXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eDIvb3R4Ml9jcHRwZl91Y29kZS5jLTkyMC1cXG5kcml2ZXJzL2NyeXB0by9tYXJ2ZWxsL29jdGVvbnR4Mi9vdHgyX2NwdHBmX3Vjb2RlLmM6OTIxOlxcdFxcdGJpdG1hcF9jb3B5KHRtcF9ibWFwLmJpdHMsIG1pcnJvcmVkX2VuZ3MtXFx1MDAzZWJtYXAsXFxuZHJpdmVycy9jcnlwdG8vbWFydmVsbC9vY3Rlb250eDIvb3R4Ml9jcHRwZl91Y29kZS5jLTkyMi1cXHRcXHRcXHQgICAgZW5nX2dycC1cXHUwMDNlZy1cXHUwMDNlZW5nc19udW0pO1xcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9kZXZpY2UuYz0zNzk9c3RhdGljIHZvaWQgaWR4ZF93cV9kaXNhYmxlX2NsZWFudXAoc3RydWN0IGlkeGRfd3EgKndxKVxcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9kZXZpY2UuYy0zOTQtXFx0aWYgKHdxLVxcdTAwM2VvcGNhcF9ibWFwKVxcbmRyaXZlcnMvZG1hL2lkeGQvZGV2aWNlLmM6Mzk1OlxcdFxcdGJpdG1hcF9jb3B5KHdxLVxcdTAwM2VvcGNhcF9ibWFwLCBpZHhkLVxcdTAwM2VvcGNhcF9ibWFwLCBJRFhEX01BWF9PUENBUF9CSVRTKTtcXG5kcml2ZXJzL2RtYS9pZHhkL2RldmljZS5jLTM5Ni19XFxuLS1cXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYz0xNzM9c3RhdGljIGludCBpZHhkX3NldHVwX3dxcyhzdHJ1Y3QgaWR4ZF9kZXZpY2UgKmlkeGQpXFxuLS1cXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy0yMzMtXFx0XFx0XFx0fVxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jOjIzNDpcXHRcXHRcXHRiaXRtYXBfY29weSh3cS1cXHUwMDNlb3BjYXBfYm1hcCwgaWR4ZC1cXHUwMDNlb3BjYXBfYm1hcCwgSURYRF9NQVhfT1BDQVBfQklUUyk7XFxuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmMtMjM1LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jPTgyMT1zdGF0aWMgaW50IGlkeGRfZGV2aWNlX2NvbmZpZ19zYXZlKHN0cnVjdCBpZHhkX2RldmljZSAqaWR4ZCxcXG4tLVxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jLTg5Mi1cXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYzo4OTM6XFx0Yml0bWFwX2NvcHkoc2F2ZWRfd3FfZW5hYmxlX21hcCwgaWR4ZC1cXHUwMDNld3FfZW5hYmxlX21hcCwgaWR4ZC1cXHUwMDNlbWF4X3dxcyk7XFxuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmMtODk0LVxcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9pbml0LmM9OTQyPXN0YXRpYyB2b2lkIGlkeGRfZGV2aWNlX2NvbmZpZ19yZXN0b3JlKHN0cnVjdCBpZHhkX2RldmljZSAqaWR4ZCxcXG4tLVxcbmRyaXZlcnMvZG1hL2lkeGQvaW5pdC5jLTk4MC1cXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYzo5ODE6XFx0Yml0bWFwX2NvcHkoaWR4ZC1cXHUwMDNld3FfZW5hYmxlX21hcCwgaWR4ZF9zYXZlZC1cXHUwMDNlc2F2ZWRfd3FfZW5hYmxlX21hcCxcXG5kcml2ZXJzL2RtYS9pZHhkL2luaXQuYy05ODItXFx0XFx0ICAgIGlkeGQtXFx1MDAzZW1heF93cXMpO1xcbi0tXFxuZHJpdmVycy9kbWEvaWR4ZC9zeXNmcy5jPTEyNTE9c3RhdGljIHNzaXplX3Qgd3Ffb3BfY29uZmlnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5kcml2ZXJzL2RtYS9pZHhkL3N5c2ZzLmMtMTI3My1cXG5kcml2ZXJzL2RtYS9pZHhkL3N5c2ZzLmM6MTI3NDpcXHRiaXRtYXBfY29weSh3cS1cXHUwMDNlb3BjYXBfYm1hcCwgb3BtYXNrLCBJRFhEX01BWF9PUENBUF9CSVRTKTtcXG5kcml2ZXJzL2RtYS9pZHhkL3N5c2ZzLmMtMTI3NS1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLWxqY2EuYz0yMzA9c3RhdGljIGludCBsamNhX2dwaW9faW5pdF92YWxpZF9tYXNrKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1samNhLmMtMjM2LVxcdFdBUk5fT05fT05DRShuZ3Bpb3MgIT0gbGpjYV9ncGlvLVxcdTAwM2VncGlvX2luZm8tXFx1MDAzZW51bSk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbGpjYS5jOjIzNzpcXHRiaXRtYXBfY29weSh2YWxpZF9tYXNrLCBsamNhX2dwaW8tXFx1MDAzZWdwaW9faW5mby1cXHUwMDNldmFsaWRfcGluX21hcCwgbmdwaW9zKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1samNhLmMtMjM4LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbHRjNDI4My5jPTE2MD1zdGF0aWMgaW50IGx0YzQyODNfaW5pdF92YWxpZF9tYXNrKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBsb25nICp2YWxpZF9tYXNrLFxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tbHRjNDI4My5jLTE2NC1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1sdGM0MjgzLmM6MTY1OlxcdGJpdG1hcF9jb3B5KHZhbGlkX21hc2ssIG1hc2ssIG5ncGlvcyk7XFxuZHJpdmVycy9ncGlvL2dwaW8tbHRjNDI4My5jLTE2Ni1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLXBjYTk1M3guYz05NTA9c3RhdGljIGJvb2wgcGNhOTUzeF9pcnFfcGVuZGluZyhzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwLCB1bnNpZ25lZCBsb25nICpwZW5kaW5nKVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jLTk4OC1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTN4LmM6OTg5OlxcdGJpdG1hcF9jb3B5KG9sZF9zdGF0LCBjaGlwLVxcdTAwM2VpcnFfc3RhdCwgZ2MtXFx1MDAzZW5ncGlvKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTN4LmMtOTkwLVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tcGNhOTUzeC5jLTk5NC1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTN4LmM6OTk1OlxcdGJpdG1hcF9jb3B5KGNoaXAtXFx1MDAzZWlycV9zdGF0LCBuZXdfc3RhdCwgZ2MtXFx1MDAzZW5ncGlvKTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby1wY2E5NTN4LmMtOTk2LVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tcmVnbWFwLmM9MjkxPXN0cnVjdCBncGlvX3JlZ21hcCAqZ3Bpb19yZWdtYXBfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IGdwaW9fcmVnbWFwX2NvbmZpZyAqY29uZmlnKVxcbi0tXFxuZHJpdmVycy9ncGlvL2dwaW8tcmVnbWFwLmMtMzYzLVxcdFxcdH1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1yZWdtYXAuYzozNjQ6XFx0XFx0Yml0bWFwX2NvcHkoZ3Bpby1cXHUwMDNlZml4ZWRfZGlyZWN0aW9uX21hc2ssXFxuZHJpdmVycy9ncGlvL2dwaW8tcmVnbWFwLmMtMzY1LVxcdFxcdFxcdCAgICBjb25maWctXFx1MDAzZWZpeGVkX2RpcmVjdGlvbl9tYXNrLCBjaGlwLVxcdTAwM2VuZ3Bpbyk7XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby1yZWdtYXAuYy0zNzQtXFx0XFx0fVxcbmRyaXZlcnMvZ3Bpby9ncGlvLXJlZ21hcC5jOjM3NTpcXHRcXHRiaXRtYXBfY29weShncGlvLVxcdTAwM2VmaXhlZF9kaXJlY3Rpb25fb3V0cHV0LFxcbmRyaXZlcnMvZ3Bpby9ncGlvLXJlZ21hcC5jLTM3Ni1cXHRcXHRcXHQgICAgY29uZmlnLVxcdTAwM2VmaXhlZF9kaXJlY3Rpb25fb3V0cHV0LCBjaGlwLVxcdTAwM2VuZ3Bpbyk7XFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby14aWxpbnguYz0xNzg9c3RhdGljIGludCB4Z3Bpb19zZXRfbXVsdGlwbGUoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGxvbmcgKm1hc2ssXFxuLS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby14aWxpbnguYy0xOTUtXFxuZHJpdmVycy9ncGlvL2dwaW8teGlsaW54LmM6MTk2OlxcdGJpdG1hcF9jb3B5KGNoaXAtXFx1MDAzZXN0YXRlLCBzdGF0ZSwgNjQpO1xcbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jLTE5Ny1cXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jPTQ3Nz1zdGF0aWMgdm9pZCB4Z3Bpb19pcnFoYW5kbGVyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYylcXG4tLVxcbmRyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jLTUwNS1cXG5kcml2ZXJzL2dwaW8vZ3Bpby14aWxpbnguYzo1MDY6XFx0Yml0bWFwX2NvcHkoY2hpcC1cXHUwMDNlbGFzdF9pcnFfcmVhZCwgaHcsIDY0KTtcXG5kcml2ZXJzL2dwaW8vZ3Bpby14aWxpbnguYy01MDctXFx0Yml0bWFwX29yKGh3LCByaXNpbmcsIGZhbGxpbmcsIDY0KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0zMjU9c3ZtX3JhbmdlICpzdm1fcmFuZ2VfbmV3KHN0cnVjdCBzdm1fcmFuZ2VfbGlzdCAqc3ZtcywgdWludDY0X3Qgc3RhcnQsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU5LVxcdGlmIChwLVxcdTAwM2V4bmFja19lbmFibGVkKVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNjA6XFx0XFx0Yml0bWFwX2NvcHkocHJhbmdlLVxcdTAwM2ViaXRtYXBfYWNjZXNzLCBzdm1zLVxcdTAwM2ViaXRtYXBfc3VwcG9ydGVkLFxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zNjEtXFx0XFx0XFx0ICAgIE1BWF9HUFVfSU5TVEFOQ0UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jPTEwNDc9c3ZtX3JhbmdlX3NwbGl0X2FkanVzdChzdHJ1Y3Qgc3ZtX3JhbmdlICpuZXcsIHN0cnVjdCBzdm1fcmFuZ2UgKm9sZCxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xMDc5LVxcdG5ldy1cXHUwMDNlbWFwcGVkX3RvX2dwdSA9IG9sZC1cXHUwMDNlbWFwcGVkX3RvX2dwdTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MTA4MDpcXHRiaXRtYXBfY29weShuZXctXFx1MDAzZWJpdG1hcF9hY2Nlc3MsIG9sZC1cXHUwMDNlYml0bWFwX2FjY2VzcywgTUFYX0dQVV9JTlNUQU5DRSk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jOjEwODE6XFx0Yml0bWFwX2NvcHkobmV3LVxcdTAwM2ViaXRtYXBfYWlwLCBvbGQtXFx1MDAzZWJpdG1hcF9haXAsIE1BWF9HUFVfSU5TVEFOQ0UpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xMDgyLVxcdGF0b21pY19zZXQoXFx1MDAyNm5ldy1cXHUwMDNlcXVldWVfcmVmY291bnQsIGF0b21pY19yZWFkKFxcdTAwMjZvbGQtXFx1MDAzZXF1ZXVlX3JlZmNvdW50KSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9MTY3OT1zdGF0aWMgaW50IHN2bV9yYW5nZV92YWxpZGF0ZV9hbmRfbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTE3MDEtXFx0fSBlbHNlIGlmIChjdHgtXFx1MDAzZXByb2Nlc3MtXFx1MDAzZXhuYWNrX2VuYWJsZWQpIHtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MTcwMjpcXHRcXHRiaXRtYXBfY29weShjdHgtXFx1MDAzZWJpdG1hcCwgcHJhbmdlLVxcdTAwM2ViaXRtYXBfYWlwLCBNQVhfR1BVX0lOU1RBTkNFKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMTcwMy1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xNzI3LVxcdFxcdFxcdCAgICBwcmFuZ2UtXFx1MDAzZWZsYWdzIFxcdTAwMjYgS0ZEX0lPQ1RMX1NWTV9GTEFHX0dQVV9BTFdBWVNfTUFQUEVEKVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzoxNzI4OlxcdFxcdFxcdFxcdGJpdG1hcF9jb3B5KGN0eC1cXHUwMDNlYml0bWFwLCBwcmFuZ2UtXFx1MDAzZWJpdG1hcF9hY2Nlc3MsIE1BWF9HUFVfSU5TVEFOQ0UpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0xNzI5LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0yMDkxPXN0YXRpYyBzdHJ1Y3Qgc3ZtX3JhbmdlICpzdm1fcmFuZ2VfY2xvbmUoc3RydWN0IHN2bV9yYW5nZSAqb2xkKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTIxMTYtXFx0bmV3LVxcdTAwM2V2cmFtX3BhZ2VzID0gb2xkLVxcdTAwM2V2cmFtX3BhZ2VzO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzoyMTE3OlxcdGJpdG1hcF9jb3B5KG5ldy1cXHUwMDNlYml0bWFwX2FjY2Vzcywgb2xkLVxcdTAwM2ViaXRtYXBfYWNjZXNzLCBNQVhfR1BVX0lOU1RBTkNFKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM6MjExODpcXHRiaXRtYXBfY29weShuZXctXFx1MDAzZWJpdG1hcF9haXAsIG9sZC1cXHUwMDNlYml0bWFwX2FpcCwgTUFYX0dQVV9JTlNUQU5DRSk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTIxMTktXFx0YXRvbWljX3NldChcXHUwMDI2bmV3LVxcdTAwM2VxdWV1ZV9yZWZjb3VudCwgYXRvbWljX3JlYWQoXFx1MDAyNm9sZC1cXHUwMDNlcXVldWVfcmVmY291bnQpKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYz0zNTE1PXN2bV9yYW5nZV9iZXN0X3ByZWZldGNoX2xvY2F0aW9uKHN0cnVjdCBzdm1fcmFuZ2UgKnByYW5nZSlcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zNTQxLVxcdGlmIChwLVxcdTAwM2V4bmFja19lbmFibGVkKVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozNTQyOlxcdFxcdGJpdG1hcF9jb3B5KGJpdG1hcCwgcHJhbmdlLVxcdTAwM2ViaXRtYXBfYWlwLCBNQVhfR1BVX0lOU1RBTkNFKTtcXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmMtMzU0My1cXHRlbHNlXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfc3ZtLmM9Mzg0Nz1zdm1fcmFuZ2VfZ2V0X2F0dHIoc3RydWN0IGtmZF9wcm9jZXNzICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zOTI3LVxcdFxcdGlmIChwLVxcdTAwM2V4bmFja19lbmFibGVkKVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozOTI4OlxcdFxcdFxcdGJpdG1hcF9jb3B5KGJpdG1hcF9hY2Nlc3MsIHN2bXMtXFx1MDAzZWJpdG1hcF9zdXBwb3J0ZWQsXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM5MjktXFx0XFx0XFx0XFx0ICAgIE1BWF9HUFVfSU5TVEFOQ0UpO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3N2bS5jLTM5MzQtXFx0fVxcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozOTM1OlxcdGJpdG1hcF9jb3B5KGJpdG1hcF9hY2Nlc3MsIHN2bXMtXFx1MDAzZWJpdG1hcF9zdXBwb3J0ZWQsIE1BWF9HUFVfSU5TVEFOQ0UpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYzozOTM2OlxcdGJpdG1hcF9jb3B5KGJpdG1hcF9haXAsIHN2bXMtXFx1MDAzZWJpdG1hcF9zdXBwb3J0ZWQsIE1BWF9HUFVfSU5TVEFOQ0UpO1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9zdm0uYy0zOTM3LVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9zd3NtdS9pbmMvYW1kZ3B1X3NtdS5oPTIwODU9c3RhdGljIGlubGluZSB2b2lkIHNtdV9mZWF0dXJlX2JpdHNfY29weShzdHJ1Y3Qgc211X2ZlYXR1cmVfYml0cyAqZHN0LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9zd3NtdS9pbmMvYW1kZ3B1X3NtdS5oLTIwODgte1xcbmRyaXZlcnMvZ3B1L2RybS9hbWQvcG0vc3dzbXUvaW5jL2FtZGdwdV9zbXUuaDoyMDg5OlxcdGJpdG1hcF9jb3B5KGRzdC1cXHUwMDNlYml0cywgc3JjLCBuYml0cyk7XFxuZHJpdmVycy9ncHUvZHJtL2FtZC9wbS9zd3NtdS9pbmMvYW1kZ3B1X3NtdS5oLTIwOTAtfVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmM9Njc2PWludGVsX2Rpc3BsYXlfcG93ZXJfcHV0X2FzeW5jX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMtNzA1LVxcdGlmICghYml0bWFwX2VtcHR5KHBvd2VyX2RvbWFpbnMtXFx1MDAzZWFzeW5jX3B1dF9kb21haW5zWzFdLmJpdHMsIFBPV0VSX0RPTUFJTl9OVU0pKSB7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmM6NzA2OlxcdFxcdGJpdG1hcF9jb3B5KHBvd2VyX2RvbWFpbnMtXFx1MDAzZWFzeW5jX3B1dF9kb21haW5zWzBdLmJpdHMsXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5X3Bvd2VyLmMtNzA3LVxcdFxcdFxcdCAgICBwb3dlcl9kb21haW5zLVxcdTAwM2Vhc3luY19wdXRfZG9tYWluc1sxXS5iaXRzLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9zbXAuYz0zNjA9c3RydWN0IG1kcDVfc21wICptZHA1X3NtcF9pbml0KHN0cnVjdCBtZHA1X2ttcyAqbWRwNV9rbXMsIGNvbnN0IHN0cnVjdCBtZHA1X3NtcF9ibG9jayAqY2ZnKVxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9zbXAuYy0zNzgtXFx0Lyogc3RhdGljYWxseSB0aWVkIE1NQnMgY2Fubm90IGJlIHJlLWFsbG9jYXRlZDogKi9cXG5kcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1X3NtcC5jOjM3OTpcXHRiaXRtYXBfY29weShzdGF0ZS1cXHUwMDNlc3RhdGUsIGNmZy1cXHUwMDNlcmVzZXJ2ZWRfc3RhdGUsIHNtcC1cXHUwMDNlYmxrX2NudCk7XFxuZHJpdmVycy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9zbXAuYy0zODAtXFx0bWVtY3B5KHNtcC1cXHUwMDNlcmVzZXJ2ZWQsIGNmZy1cXHUwMDNlcmVzZXJ2ZWQsIHNpemVvZihzbXAtXFx1MDAzZXJlc2VydmVkKSk7XFxuLS1cXG5kcml2ZXJzL2h3bW9uL3BlY2kvZGltbXRlbXAuYz0yMTM9c3RhdGljIGludCBjaGVja19wb3B1bGF0ZWRfZGltbXMoc3RydWN0IHBlY2lfZGltbXRlbXAgKnByaXYpXFxuLS1cXG5kcml2ZXJzL2h3bW9uL3BlY2kvZGltbXRlbXAuYy0yODItXFxuZHJpdmVycy9od21vbi9wZWNpL2RpbW10ZW1wLmM6MjgzOlxcdGJpdG1hcF9jb3B5KHByaXYtXFx1MDAzZWRpbW1fbWFzaywgZGltbV9tYXNrLCBESU1NX05VTVNfTUFYKTtcXG5kcml2ZXJzL2h3bW9uL3BlY2kvZGltbXRlbXAuYy0yODQtXFxuLS1cXG5kcml2ZXJzL2lpby9hZGMvbWF4MTM2My5jPTE0NTM9c3RhdGljIGludCBtYXgxMzYzX2FsbG9jX3NjYW5fbWFza3Moc3RydWN0IGlpb19kZXYgKmluZGlvX2RldilcXG4tLVxcbmRyaXZlcnMvaWlvL2FkYy9tYXgxMzYzLmMtMTQ2Ny1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgc3QtXFx1MDAzZWNoaXBfaW5mby1cXHUwMDNlbnVtX21vZGVzOyBpKyspXFxuZHJpdmVycy9paW8vYWRjL21heDEzNjMuYzoxNDY4OlxcdFxcdGJpdG1hcF9jb3B5KG1hc2tzICsgQklUU19UT19MT05HUyhNQVgxMzYzX01BWF9DSEFOTkVMUykqaSxcXG5kcml2ZXJzL2lpby9hZGMvbWF4MTM2My5jLTE0NjktXFx0XFx0XFx0ICAgIG1heDEzNjNfbW9kZV90YWJsZVtzdC1cXHUwMDNlY2hpcF9pbmZvLVxcdTAwM2Vtb2RlX2xpc3RbaV1dXFxuLS1cXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tYnVmZmVyLmM9NTEwPXN0YXRpYyBpbnQgaWlvX3NjYW5fbWFza19zZXQoc3RydWN0IGlpb19kZXYgKmluZGlvX2RldixcXG4tLVxcbmRyaXZlcnMvaWlvL2luZHVzdHJpYWxpby1idWZmZXIuYy01MjQtXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jOjUyNTpcXHRiaXRtYXBfY29weSh0cmlhbG1hc2ssIGJ1ZmZlci1cXHUwMDNlc2Nhbl9tYXNrLCBtYXNrbGVuZ3RoKTtcXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tYnVmZmVyLmMtNTI2LVxcdHNldF9iaXQoYml0LCB0cmlhbG1hc2spO1xcbi0tXFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jLTUzNi1cXHR9XFxuZHJpdmVycy9paW8vaW5kdXN0cmlhbGlvLWJ1ZmZlci5jOjUzNzpcXHRiaXRtYXBfY29weShidWZmZXItXFx1MDAzZXNjYW5fbWFzaywgdHJpYWxtYXNrLCBtYXNrbGVuZ3RoKTtcXG5kcml2ZXJzL2lpby9pbmR1c3RyaWFsaW8tYnVmZmVyLmMtNTM4LVxcbi0tXFxuZHJpdmVycy9paW8vcHJveGltaXR5L2QzMzIzYWEuYz0yMjI9c3RhdGljIGludCBkMzMyM2FhX3dyaXRlX3NldHRpbmdzKHN0cnVjdCBpaW9fZGV2ICppbmRpb19kZXYsXFxuLS1cXG5kcml2ZXJzL2lpby9wcm94aW1pdHkvZDMzMjNhYS5jLTI3My1cXG5kcml2ZXJzL2lpby9wcm94aW1pdHkvZDMzMjNhYS5jOjI3NDpcXHRiaXRtYXBfY29weSh3cml0dGVuX3JlZ2JpdG1hcCwgcmVnYml0bWFwLCBEMzMyM0FBX1JFR19OUl9CSVRTKTtcXG5kcml2ZXJzL2lpby9wcm94aW1pdHkvZDMzMjNhYS5jLTI3NS1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvZXZkZXYuYz04ODQ9c3RhdGljIGludCBldmRldl9oYW5kbGVfZ2V0X3ZhbChzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQsXFxuLS1cXG5kcml2ZXJzL2lucHV0L2V2ZGV2LmMtODk5LVxcbmRyaXZlcnMvaW5wdXQvZXZkZXYuYzo5MDA6XFx0Yml0bWFwX2NvcHkobWVtLCBiaXRzLCBtYXhiaXQpO1xcbmRyaXZlcnMvaW5wdXQvZXZkZXYuYy05MDEtXFxuLS1cXG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYz00OD1zdGF0aWMgaXJxcmV0dXJuX3QgbXQ2Nzc5X2tleXBhZF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYy04OS1cXG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYzo5MDpcXHRiaXRtYXBfY29weShrZXlwYWQtXFx1MDAzZWtleW1hcF9zdGF0ZSwgbmV3X3N0YXRlLCBNVEtfS1BEX05VTV9CSVRTKTtcXG5kcml2ZXJzL2lucHV0L2tleWJvYXJkL210Njc3OS1rZXlwYWQuYy05MS1cXG4tLVxcbmRyaXZlcnMvaW5wdXQvcm1pNC9ybWlfZHJpdmVyLmM9MzcyPXN0YXRpYyBpbnQgcm1pX2RyaXZlcl9zZXRfaXJxX2JpdHMoc3RydWN0IHJtaV9kZXZpY2UgKnJtaV9kZXYsXFxuLS1cXG5kcml2ZXJzL2lucHV0L3JtaTQvcm1pX2RyaXZlci5jLTM5MS1cXG5kcml2ZXJzL2lucHV0L3JtaTQvcm1pX2RyaXZlci5jOjM5MjpcXHRiaXRtYXBfY29weShkYXRhLVxcdTAwM2VjdXJyZW50X2lycV9tYXNrLCBkYXRhLVxcdTAwM2VuZXdfaXJxX21hc2ssIGRhdGEtXFx1MDAzZWlycV9jb3VudCk7XFxuZHJpdmVycy9pbnB1dC9ybWk0L3JtaV9kcml2ZXIuYy0zOTMtXFx0Yml0bWFwX29yKGRhdGEtXFx1MDAzZWZuX2lycV9iaXRzLCBkYXRhLVxcdTAwM2Vmbl9pcnFfYml0cywgbWFzaywgZGF0YS1cXHUwMDNlaXJxX2NvdW50KTtcXG4tLVxcbmRyaXZlcnMvaW5wdXQvcm1pNC9ybWlfZHJpdmVyLmM9NDAwPXN0YXRpYyBpbnQgcm1pX2RyaXZlcl9jbGVhcl9pcnFfYml0cyhzdHJ1Y3Qgcm1pX2RldmljZSAqcm1pX2RldixcXG4tLVxcbmRyaXZlcnMvaW5wdXQvcm1pNC9ybWlfZHJpdmVyLmMtNDIxLVxcbmRyaXZlcnMvaW5wdXQvcm1pNC9ybWlfZHJpdmVyLmM6NDIyOlxcdGJpdG1hcF9jb3B5KGRhdGEtXFx1MDAzZWN1cnJlbnRfaXJxX21hc2ssIGRhdGEtXFx1MDAzZW5ld19pcnFfbWFzaywgZGF0YS1cXHUwMDNlaXJxX2NvdW50KTtcXG5kcml2ZXJzL2lucHV0L3JtaTQvcm1pX2RyaXZlci5jLTQyMy1cXG4tLVxcbmRyaXZlcnMvaXJxY2hpcC9pcnEtbWlwcy1naWMuYz04NDM9c3RhdGljIGludCBnaWNfcmVnaXN0ZXJfaXBpX2RvbWFpbihzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpXFxuLS1cXG5kcml2ZXJzL2lycWNoaXAvaXJxLW1pcHMtZ2ljLmMtODcwLVxcbmRyaXZlcnMvaXJxY2hpcC9pcnEtbWlwcy1naWMuYzo4NzE6XFx0Yml0bWFwX2NvcHkoaXBpX2F2YWlsYWJsZSwgaXBpX3Jlc3J2LCBHSUNfTUFYX0lOVFJTKTtcXG5kcml2ZXJzL2lycWNoaXAvaXJxLW1pcHMtZ2ljLmMtODcyLVxcbi0tXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYz01ODU9c3RhdGljIGJvb2wgYmxvY2tfYml0bWFwX29wKHN0cnVjdCBkbV9pbnRlZ3JpdHlfYyAqaWMsIHN0cnVjdCBwYWdlX2xpc3QgKmJpdG1hcCxcXG4tLVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNjkwLVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM6NjkxOnN0YXRpYyB2b2lkIGJsb2NrX2JpdG1hcF9jb3B5KHN0cnVjdCBkbV9pbnRlZ3JpdHlfYyAqaWMsIHN0cnVjdCBwYWdlX2xpc3QgKmRzdCwgc3RydWN0IHBhZ2VfbGlzdCAqc3JjKVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtNjkyLXtcXG4tLVxcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmM9Mzc4Mz1zdGF0aWMgdm9pZCBkbV9pbnRlZ3JpdHlfcmVzdW1lKHN0cnVjdCBkbV90YXJnZXQgKnRpKVxcbi0tXFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYy0zODMwLVxcdFxcdFxcdCAgICAhaWMtXFx1MDAzZXJlc2V0X3JlY2FsY3VsYXRlX2ZsYWcpIHtcXG5kcml2ZXJzL21kL2RtLWludGVncml0eS5jOjM4MzE6XFx0XFx0XFx0XFx0YmxvY2tfYml0bWFwX2NvcHkoaWMsIGljLVxcdTAwM2VyZWNhbGNfYml0bWFwLCBpYy1cXHUwMDNlam91cm5hbCk7XFxuZHJpdmVycy9tZC9kbS1pbnRlZ3JpdHkuYzozODMyOlxcdFxcdFxcdFxcdGJsb2NrX2JpdG1hcF9jb3B5KGljLCBpYy1cXHUwMDNlbWF5X3dyaXRlX2JpdG1hcCwgaWMtXFx1MDAzZWpvdXJuYWwpO1xcbmRyaXZlcnMvbWQvZG0taW50ZWdyaXR5LmMtMzgzMy1cXHRcXHRcXHRcXHRpZiAoIWJsb2NrX2JpdG1hcF9vcChpYywgaWMtXFx1MDAzZWpvdXJuYWwsIDAsIGljLVxcdTAwM2Vwcm92aWRlZF9kYXRhX3NlY3RvcnMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLmgtMjUxLSNkZWZpbmUgWEdCRV9MTV9DT1BZKF9kc3QsIF9kbmFtZSwgX3NyYywgX3NuYW1lKVxcdFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLmg6MjUyOlxcdGJpdG1hcF9jb3B5KChfZHN0KS1cXHUwMDNlbGlua19tb2Rlcy5fZG5hbWUsXFx0XFx0XFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUuaC0yNTMtXFx0XFx0ICAgIChfc3JjKS1cXHUwMDNlbGlua19tb2Rlcy5fc25hbWUsXFx0XFx0XFxcXFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmM9MzQyNT1zdGF0aWMgc3NpemVfdCBibG9ja2VkX2ZsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqdWJ1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jLTM0NDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmM6MzQ0MjpcXHRiaXRtYXBfY29weShhZGFwLVxcdTAwM2VzZ2UuYmxvY2tlZF9mbCwgdCwgYWRhcC1cXHUwMDNlc2dlLmVncl9zeik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmMtMzQ0My1cXHRiaXRtYXBfZnJlZSh0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MTczMj1zdGF0aWMgaW50IGhjbGdlX3Zwb3J0X3NldHVwKHN0cnVjdCBoY2xnZV92cG9ydCAqdnBvcnQsIHUxNiBudW1fdHFwcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMTczOS1cXHRuaWMtXFx1MDAzZWFlX2FsZ28gPSBcXHUwMDI2YWVfYWxnbztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzcGYvaGNsZ2VfbWFpbi5jOjE3NDA6XFx0Yml0bWFwX2NvcHkobmljLVxcdTAwM2VudW1hX25vZGVfbWFzay5iaXRzLCBoZGV2LVxcdTAwM2VudW1hX25vZGVfbWFzay5iaXRzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMTc0MS1cXHRcXHQgICAgTUFYX05VTU5PREVTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM9MjQxND1zdGF0aWMgaW50IGhjbGdlX2luaXRfcm9jZV9iYXNlX2luZm8oc3RydWN0IGhjbGdlX3Zwb3J0ICp2cG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmMtMjQzMi1cXHRyb2NlLVxcdTAwM2VhZV9hbGdvID0gbmljLVxcdTAwM2VhZV9hbGdvO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczNwZi9oY2xnZV9tYWluLmM6MjQzMzpcXHRiaXRtYXBfY29weShyb2NlLVxcdTAwM2VudW1hX25vZGVfbWFzay5iaXRzLCBuaWMtXFx1MDAzZW51bWFfbm9kZV9tYXNrLmJpdHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3BmL2hjbGdlX21haW4uYy0yNDM0LVxcdFxcdCAgICBNQVhfTlVNTk9ERVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jPTQ0Nz1zdGF0aWMgaW50IGhjbGdldmZfc2V0X2hhbmRsZV9pbmZvKHN0cnVjdCBoY2xnZXZmX2RldiAqaGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMzL2huczN2Zi9oY2xnZXZmX21haW4uYy00NTMtXFx0bmljLVxcdTAwM2VwZGV2ID0gaGRldi1cXHUwMDNlcGRldjtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM6NDU0OlxcdGJpdG1hcF9jb3B5KG5pYy1cXHUwMDNlbnVtYV9ub2RlX21hc2suYml0cywgaGRldi1cXHUwMDNlbnVtYV9ub2RlX21hc2suYml0cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmMtNDU1LVxcdFxcdCAgICBNQVhfTlVNTk9ERVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jPTIxNDQ9c3RhdGljIGludCBoY2xnZXZmX2luaXRfcm9jZV9iYXNlX2luZm8oc3RydWN0IGhjbGdldmZfZGV2ICpoZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTIxNjItXFx0cm9jZS1cXHUwMDNlYWVfYWxnbyA9IG5pYy1cXHUwMDNlYWVfYWxnbztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zMy9obnMzdmYvaGNsZ2V2Zl9tYWluLmM6MjE2MzpcXHRiaXRtYXBfY29weShyb2NlLVxcdTAwM2VudW1hX25vZGVfbWFzay5iaXRzLCBuaWMtXFx1MDAzZW51bWFfbm9kZV9tYXNrLmJpdHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2huczMvaG5zM3ZmL2hjbGdldmZfbWFpbi5jLTIxNjQtXFx0XFx0ICAgIE1BWF9OVU1OT0RFUyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmM9Mzg1PWhpbmljM19nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYy0zOTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jOjM5OTpcXHRiaXRtYXBfY29weShsaW5rX3NldHRpbmdzLVxcdTAwM2VsaW5rX21vZGVzLnN1cHBvcnRlZCwgc2V0dGluZ3Muc3VwcG9ydGVkLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvaGluaWMzX2V0aHRvb2wuYy00MDAtXFx0XFx0ICAgIF9fRVRIVE9PTF9MSU5LX01PREVfTUFTS19OQklUUyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9oaW5pYzNfZXRodG9vbC5jOjQwMTpcXHRiaXRtYXBfY29weShsaW5rX3NldHRpbmdzLVxcdTAwM2VsaW5rX21vZGVzLmFkdmVydGlzaW5nLCBzZXR0aW5ncy5hZHZlcnRpc2luZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL2hpbmljM19ldGh0b29sLmMtNDAyLVxcdFxcdCAgICBfX0VUSFRPT0xfTElOS19NT0RFX01BU0tfTkJJVFMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYz01MjM4PXN0YXRpYyBpbnQgaTQwZV9zZXRfcHJpdl9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZmxhZ3MpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jLTUyNTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYzo1MjUxOlxcdGJpdG1hcF9jb3B5KG9yaWdfZmxhZ3MsIHBmLVxcdTAwM2VmbGFncywgSTQwRV9QRl9GTEFHU19OQklUUyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYzo1MjUyOlxcdGJpdG1hcF9jb3B5KG5ld19mbGFncywgcGYtXFx1MDAzZWZsYWdzLCBJNDBFX1BGX0ZMQUdTX05CSVRTKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jLTUyNTMtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jLTU0NjAtXFx0ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYzo1NDYxOlxcdGJpdG1hcF9jb3B5KHBmLVxcdTAwM2VmbGFncywgbmV3X2ZsYWdzLCBJNDBFX1BGX0ZMQUdTX05CSVRTKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jLTU0NjItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYz0xNzM5PXN0YXRpYyBpbnQgaWNlX3NldF9wcml2X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBmbGFncylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jLTE3NTUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmM6MTc1NjpcXHRiaXRtYXBfY29weShvcmlnX2ZsYWdzLCBwZi1cXHUwMDNlZmxhZ3MsIElDRV9QRl9GTEFHU19OQklUUyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMtMTc1Ny1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSUNFX1BSSVZfRkxBR19BUlJBWV9TSVpFOyBpKyspIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc2NoZWQuYz0yNjE3PWljZV9zYXZlX2FnZ190Y19iaXRtYXAoc3RydWN0IGljZV9wb3J0X2luZm8gKnBpLCB1MzIgYWdnX2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zY2hlZC5jLTI2MjQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zY2hlZC5jOjI2MjU6XFx0Yml0bWFwX2NvcHkoYWdnX2luZm8tXFx1MDAzZXJlcGxheV90Y19iaXRtYXAsIHRjX2JpdG1hcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmMtMjYyNi1cXHRcXHQgICAgSUNFX01BWF9UUkFGRklDX0NMQVNTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc2NoZWQuYz0yODYxPWljZV9zYXZlX2FnZ192c2lfdGNfYml0bWFwKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSwgdTMyIGFnZ19pZCwgdTE2IHZzaV9oYW5kbGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmMtMjg3My1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmM6Mjg3NDpcXHRiaXRtYXBfY29weShhZ2dfdnNpX2luZm8tXFx1MDAzZXJlcGxheV90Y19iaXRtYXAsIHRjX2JpdG1hcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3NjaGVkLmMtMjg3NS1cXHRcXHQgICAgSUNFX01BWF9UUkFGRklDX0NMQVNTKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmM9MjI4MT1zdGF0aWMgdm9pZCBpY2VfZ2V0X3JlY3BfdG9fcHJvZl9tYXAoc3RydWN0IGljZV9odyAqaHcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jLTIyOTQtXFx0XFx0Yml0bWFwX2Zyb21fYXJyNjQocl9iaXRtYXAsIFxcdTAwMjZyZWNwX2Fzc29jLCBJQ0VfTUFYX05VTV9SRUNJUEVTKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jOjIyOTU6XFx0XFx0Yml0bWFwX2NvcHkocHJvZmlsZV90b19yZWNpcGVbaV0sIHJfYml0bWFwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMtMjI5Ni1cXHRcXHRcXHQgICAgSUNFX01BWF9OVU1fUkVDSVBFUyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jPTIzMTU9aWNlX2dldF9yZWNwX2ZybV9mdyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9zd19yZWNpcGUgKnJlY3BzLCB1OCByaWQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jLTI0MzItXFx0LyogQ29weSByZXN1bHQgaW5kZXhlcyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmM6MjQzMzpcXHRiaXRtYXBfY29weShyZWNwc1tyaWRdLnJlc19pZHhzLCByZXN1bHRfYm0sIElDRV9NQVhfRlZfV09SRFMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMtMjQzNC1cXHRpZiAoaXNfYWRkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYz01MzA5PWljZV9hZGRfYWR2X3JlY2lwZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9hZHZfbGt1cF9lbGVtICpsa3VwcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2Vfc3dpdGNoLmMtNTQzNy1cXHRcXHQvKiBVcGRhdGUgcHJvZmlsZSB0byByZWNpcGUgYml0bWFwIGFycmF5ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9zd2l0Y2guYzo1NDM4OlxcdFxcdGJpdG1hcF9jb3B5KHByb2ZpbGVfdG9fcmVjaXBlW2Z2aXQtXFx1MDAzZXByb2ZpbGVfaWRdLCByX2JpdG1hcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3N3aXRjaC5jLTU0MzktXFx0XFx0XFx0ICAgIElDRV9NQVhfTlVNX1JFQ0lQRVMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvY29yZV9hY2xfZmxleF9rZXlzLmM9MjU1PXN0YXRpYyBpbnQgbWx4c3dfYWZrX3BpY2tlcihzdHJ1Y3QgbWx4c3dfYWZrICptbHhzd19hZmssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9jb3JlX2FjbF9mbGV4X2tleXMuYy0zMDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvY29yZV9hY2xfZmxleF9rZXlzLmM6MzAyOlxcdFxcdGJpdG1hcF9jb3B5KHBpY2tlcltibG9ja19pbmRleF0uY2hvc2VuX2VsZW1lbnQsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvY29yZV9hY2xfZmxleF9rZXlzLmMtMzAzLVxcdFxcdFxcdCAgICBwaWNrZXJbYmxvY2tfaW5kZXhdLmVsZW1lbnQsIE1MWFNXX0FGS19FTEVNRU5UX01BWCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L3NwYXJ4NV92bGFuLmM9MTYxPXZvaWQgc3Bhcng1X3VwZGF0ZV9md2Qoc3RydWN0IHNwYXJ4NSAqc3Bhcng1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfdmxhbi5jLTE3My1cXHRcXHRcXHQvKiBBbGxvdyB0byBzZW5kIHRvIGFsbCBicmlkZ2VkIGJ1dCBzZWxmICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9zcGFyeDVfdmxhbi5jOjE3NDpcXHRcXHRcXHRiaXRtYXBfY29weSh3b3JrbWFzaywgc3Bhcng1LVxcdTAwM2VicmlkZ2VfZndkX21hc2ssIFNQWDVfUE9SVFMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvc3Bhcng1X3ZsYW4uYy0xNzUtXFx0XFx0XFx0Y2xlYXJfYml0KHBvcnQsIHdvcmttYXNrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fbWFpbi5jPTMxOD1zdGF0aWMgdm9pZCBpcHZsYW5fc2V0X211bHRpY2FzdF9tYWNfZmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9pcHZsYW4vaXB2bGFuX21haW4uYy0zMzctXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmM6MzM4OlxcdFxcdGJpdG1hcF9jb3B5KGlwdmxhbi1cXHUwMDNlbWFjX2ZpbHRlcnMsIG1jX2ZpbHRlcnMsXFxuZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9tYWluLmMtMzM5LVxcdFxcdFxcdCAgICBJUFZMQU5fTUFDX0ZJTFRFUl9TSVpFKTtcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYz04MTA9c3RhdGljIHZvaWQgbWFjdmxhbl9jb21wdXRlX2ZpbHRlcih1bnNpZ25lZCBsb25nICptY19maWx0ZXIsXFxuLS1cXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtODI5LVxcbmRyaXZlcnMvbmV0L21hY3ZsYW4uYzo4MzA6XFx0XFx0Yml0bWFwX2NvcHkobWNfZmlsdGVyLCBmaWx0ZXIsIE1BQ1ZMQU5fTUNfRklMVEVSX1NaKTtcXG5kcml2ZXJzL25ldC9tYWN2bGFuLmMtODMxLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmM9NTI2PXN0YXRpYyBpbnQgYXRoMTFrX3B1bGxfc2VydmljZV9yZWFkeV90bHYoc3RydWN0IGF0aDExa19iYXNlICphYixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmMtNTYyLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMWsvd21pLmM6NTYzOnN0YXRpYyB2b2lkIGF0aDExa193bWlfc2VydmljZV9iaXRtYXBfY29weShzdHJ1Y3QgYXRoMTFrX3BkZXZfd21pICp3bWksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYy01NjQtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgdTMyICp3bWlfc3ZjX2JtKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDExay93bWkuYz01NzY9c3RhdGljIGludCBhdGgxMWtfd21pX3Rsdl9zdmNfcmR5X3BhcnNlKHN0cnVjdCBhdGgxMWtfYmFzZSAqYWIsIHUxNiB0YWcsIHUxNiBsZW4sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jLTU5Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jOjU5ODpcXHRcXHRcXHRhdGgxMWtfd21pX3NlcnZpY2VfYml0bWFwX2NvcHkod21pX2hhbmRsZSwgcHRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTFrL3dtaS5jLTU5OS1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmM9NjQ2PXN0YXRpYyBpbnQgYXRoMTJrX3B1bGxfc2VydmljZV9yZWFkeV90bHYoc3RydWN0IGF0aDEya19iYXNlICphYixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMtNjgyLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmM6NjgzOnN0YXRpYyB2b2lkIGF0aDEya193bWlfc2VydmljZV9iaXRtYXBfY29weShzdHJ1Y3QgYXRoMTJrX3dtaV9wZGV2ICp3bWksXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYy02ODQtXFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgdTMyICp3bWlfc3ZjX2JtKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEyay93bWkuYz02OTY9c3RhdGljIGludCBhdGgxMmtfd21pX3N2Y19yZHlfcGFyc2Uoc3RydWN0IGF0aDEya19iYXNlICphYiwgdTE2IHRhZywgdTE2IGxlbixcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMtNzE3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmM6NzE4OlxcdFxcdFxcdGF0aDEya193bWlfc2VydmljZV9iaXRtYXBfY29weSh3bWlfaGFuZGxlLCBwdHIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMmsvd21pLmMtNzE5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jaGFuLmM9NTkzPWVudW0gcnR3ODlfZW50aXR5X21vZGUgcnR3ODlfZW50aXR5X3JlY2FsYyhzdHJ1Y3QgcnR3ODlfZGV2ICpydHdkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg5L2NoYW4uYy02MDQtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OS9jaGFuLmM6NjA1OlxcdGJpdG1hcF9jb3B5KHJlY2FsY19tYXAsIGhhbC1cXHUwMDNlZW50aXR5X21hcCwgTlVNX09GX1JUVzg5X0NIQU5DVFgpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODkvY2hhbi5jLTYwNi1cXG4tLVxcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmM9MTExOT1zdGF0aWMgaW50IGF3Y2NfaHdtb25fZmFuc19pbml0KHN0cnVjdCB3bWlfZGV2aWNlICp3ZGV2KVxcbi0tXFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLXdtYXguYy0xMTcyLVxcdFxcdGJpdG1hcF9nYXRoZXIoZ2F0aGVyLCBmYW5fdGVtcHMsIHByaXYtXFx1MDAzZXRlbXBfc2Vuc29ycywgQVdDQ19JRF9CSVRNQVBfU0laRSk7XFxuZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC9hbGllbndhcmUtd21pLXdtYXguYzoxMTczOlxcdFxcdGJpdG1hcF9jb3B5KFxcdTAwMjZmYW5fZGF0YS1cXHUwMDNlYXV0b19jaGFubmVsc190ZW1wLCBnYXRoZXIsIEJJVFNfUEVSX0xPTkcpO1xcbmRyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwvYWxpZW53YXJlLXdtaS13bWF4LmMtMTE3NC1cXHRcXHRwcml2LVxcdTAwM2VmYW5fZGF0YVtpXSA9IGZhbl9kYXRhO1xcbi0tXFxuZHJpdmVycy9wbnAvaXNhcG5wL2NvcmUuYz00MTA9c3RhdGljIHZvaWQgX19pbml0IGlzYXBucF9wYXJzZV9pcnFfcmVzb3VyY2Uoc3RydWN0IHBucF9kZXYgKmRldixcXG4tLVxcbmRyaXZlcnMvcG5wL2lzYXBucC9jb3JlLmMtNDIyLVxcdGJpdG1hcF96ZXJvKG1hcC5iaXRzLCBQTlBfSVJRX05SKTtcXG5kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jOjQyMzpcXHRiaXRtYXBfY29weShtYXAuYml0cywgXFx1MDAyNmJpdHMsIDE2KTtcXG5kcml2ZXJzL3BucC9pc2FwbnAvY29yZS5jLTQyNC1cXG4tLVxcbmRyaXZlcnMvcG5wL3BucGJpb3MvcnNwYXJzZXIuYz0yNjI9c3RhdGljIF9faW5pdCB2b2lkIHBucGJpb3NfcGFyc2VfaXJxX29wdGlvbihzdHJ1Y3QgcG5wX2RldiAqZGV2LFxcbi0tXFxuZHJpdmVycy9wbnAvcG5wYmlvcy9yc3BhcnNlci5jLTI3Mi1cXHRiaXRtYXBfemVybyhtYXAuYml0cywgUE5QX0lSUV9OUik7XFxuZHJpdmVycy9wbnAvcG5wYmlvcy9yc3BhcnNlci5jOjI3MzpcXHRiaXRtYXBfY29weShtYXAuYml0cywgXFx1MDAyNmJpdHMsIDE2KTtcXG5kcml2ZXJzL3BucC9wbnBiaW9zL3JzcGFyc2VyLmMtMjc0LVxcbi0tXFxuZHJpdmVycy9zMzkwL2NyeXB0by92ZmlvX2FwX29wcy5jPTY3MT1zdGF0aWMgYm9vbCB2ZmlvX2FwX21kZXZfZmlsdGVyX2Nkb21zKHN0cnVjdCBhcF9tYXRyaXhfbWRldiAqbWF0cml4X21kZXYpXFxuLS1cXG5kcml2ZXJzL3MzOTAvY3J5cHRvL3ZmaW9fYXBfb3BzLmMtNjc0LVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMjowNy42OTEwNTA0MzdaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA4ODgwMDA2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgQ29kZTogVW5kZXJzdGFuZGluZyBgYml0bWFwX2NvcHlgKipcblxuT2theSwgc28gSSBzZWUgYGJpdG1hcF9jb3B5YCBhbmQgaW1tZWRpYXRlbHkgcmVnaXN0ZXIgdGhhdCBpdCdzIGxpa2VseSBhIG1hY3JvIG9yIGlubGluZSBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGlzIGtlcm5lbCBjb2RlLCB0aGF0J3MgYWxtb3N0IGEgY2VydGFpbnR5LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQgKmRvZXMqLiBUaW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIFRoZSBuYXR1cmFsIHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcgaXMgYGluY2x1ZGUvbGludXgvYml0bWFwLmhgLiBUaGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBkZWZpbml0aW9uLCBhbG9uZyB3aXRoIGFueSByZWxldmFudCBkb2N1bWVudGF0aW9uIGFuZCwgb2YgY291cnNlLCB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIHRoYXQgSSdsbCBuZWVkIHRvIGFuYWx5emUuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA3MzgsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMjoxNC43Nzk4NTQwOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0ODEzMjEyNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGlubGluZSB2b2lkIGJpdG1hcF9jb3B5XFxcXChcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEyOjE3LjgyNzk5ODg0N1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzk0Mjk1NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWxpemluZyB0aGUgT2J2aW91cyoqXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gZGlkbid0IEkganVzdCBzZWUgc29tZXRoaW5nIGFib3V0IGBiaXRtYXBfY29weWAgaW4gdGhlIG91dHB1dCBmcm9tIHRoZSBwcmV2aW91cyBzZWFyY2g/IEFoLCB5ZXMsIHRoZXJlIGl0IGlzIGluIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYDogc3BlY2lmaWNhbGx5IHRoZSBkZWZpbml0aW9uIG9mIGBiaXRtYXBfY29weV9hbmRfZXh0ZW5kYC4gT2theSwgSSB3YXMgdG9vIGhhc3R5LiBMZXQncyBub3QgcmVpbnZlbnQgdGhlIHdoZWVsIGhlcmUuIExldCdzIGdvIGJhY2sgYW5kIGdyZXAgc3BlY2lmaWNhbGx5IGZvciB0aGF0IGZ1bmN0aW9uIG5hbWUsIGBiaXRtYXBfY29weWAsIHdpdGhpbiB0aGF0IHNhbWUgaGVhZGVyIGZpbGUsIGBpbmNsdWRlL2xpbnV4L2JpdG1hcC5oYC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhhdCBmdW5jdGlvbi4gSXQncyBwcm9iYWJseSBhbHJlYWR5IHRoZXJlIGFuZCBJIGp1c3QgbmVlZCB0byByZW1pbmQgbXlzZWxmIHdoZXJlIGl0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk0OSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMjoyMS42MjIyOTc3NTFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTYyNzM5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiaXRtYXBfY29weVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2JpdG1hcC5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYml0bWFwLmg9MTc9c3RydWN0IGRldmljZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtNDQtICogIGJpdG1hcF9maWxsKGRzdCwgbmJpdHMpICAgICAgICAgICAgICAgICAgICAgKmRzdCA9IH4wVUxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjQ1OiAqICBiaXRtYXBfY29weShkc3QsIHNyYywgbmJpdHMpICAgICAgICAgICAgICAgICpkc3QgPSAqc3JjXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC00Ni0gKiAgYml0bWFwX2FuZChkc3QsIHNyYzEsIHNyYzIsIG5iaXRzKSAgICAgICAgICAqZHN0ID0gKnNyYzEgXFx1MDAyNiAqc3JjMlxcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD0yNTg9c3RhdGljIF9fYWx3YXlzX2lubGluZVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6MjU5OnZvaWQgYml0bWFwX2NvcHkodW5zaWduZWQgbG9uZyAqZHN0LCBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsIHVuc2lnbmVkIGludCBuYml0cylcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI2MC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oPTI3Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaDoyNzM6dm9pZCBiaXRtYXBfY29weV9jbGVhcl90YWlsKHVuc2lnbmVkIGxvbmcgKmRzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCB1bnNpZ25lZCBpbnQgbmJpdHMpXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNzQte1xcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6Mjc1OlxcdGJpdG1hcF9jb3B5KGRzdCwgc3JjLCBuYml0cyk7XFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0yNzYtXFx0aWYgKG5iaXRzICUgQklUU19QRVJfTE9ORylcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMjc5LVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6MjgwOnN0YXRpYyBpbmxpbmUgdm9pZCBiaXRtYXBfY29weV9hbmRfZXh0ZW5kKHVuc2lnbmVkIGxvbmcgKnRvLFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMjgxLVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgdW5zaWduZWQgbG9uZyAqZnJvbSxcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMjk1LSAqIEluIGJvdGggY2FzZXMgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkIHdoZW4gY29weWluZyBkYXRhIGZyb20vdG8gYXJyYXlzIG9mXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaDoyOTY6ICogdTMyLiBCdXQgaW4gTEU2NCBjYXNlLCB0eXBlY2FzdCBpbiBiaXRtYXBfY29weV9jbGVhcl90YWlsKCkgbWF5IGxlYWRcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTI5Ny0gKiB0byBvdXQtb2YtYm91bmQgYWNjZXNzLiBUbyBhdm9pZCB0aGF0LCBib3RoIExFIGFuZCBCRSB2YXJpYW50cyBvZiA2NC1iaXRcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjI5ODogKiBhcmNoaXRlY3R1cmVzIGFyZSBub3QgdXNpbmcgYml0bWFwX2NvcHlfY2xlYXJfdGFpbCgpLlxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMjk5LSAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD0zMDM9dm9pZCBiaXRtYXBfdG9fYXJyMzIodTMyICpidWYsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcCxcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMzA2LSNkZWZpbmUgYml0bWFwX2Zyb21fYXJyMzIoYml0bWFwLCBidWYsIG5iaXRzKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjMwNzpcXHRiaXRtYXBfY29weV9jbGVhcl90YWlsKCh1bnNpZ25lZCBsb25nICopIChiaXRtYXApLFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTMwOC1cXHRcXHRcXHQoY29uc3QgdW5zaWduZWQgbG9uZyAqKSAoYnVmKSwgKG5iaXRzKSlcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oLTMwOS0jZGVmaW5lIGJpdG1hcF90b19hcnIzMihidWYsIGJpdG1hcCwgbmJpdHMpXFx0XFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmg6MzEwOlxcdGJpdG1hcF9jb3B5X2NsZWFyX3RhaWwoKHVuc2lnbmVkIGxvbmcgKikgKGJ1ZiksXFx0XFx0XFxcXFxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMzExLVxcdFxcdFxcdChjb25zdCB1bnNpZ25lZCBsb25nICopIChiaXRtYXApLCAobmJpdHMpKVxcbi0tXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaD0zMjA9dm9pZCBiaXRtYXBfdG9fYXJyNjQodTY0ICpidWYsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcCwgdW5zaWduZWQgaW50IG5iaXRzKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvYml0bWFwLmgtMzIyLSNkZWZpbmUgYml0bWFwX2Zyb21fYXJyNjQoYml0bWFwLCBidWYsIG5iaXRzKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjMyMzpcXHRiaXRtYXBfY29weV9jbGVhcl90YWlsKCh1bnNpZ25lZCBsb25nICopKGJpdG1hcCksIChjb25zdCB1bnNpZ25lZCBsb25nICopKGJ1ZiksIChuYml0cykpXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0zMjQtI2RlZmluZSBiaXRtYXBfdG9fYXJyNjQoYnVmLCBiaXRtYXAsIG5iaXRzKVxcdFxcdFxcdFxcXFxcXG5pbmNsdWRlL2xpbnV4L2JpdG1hcC5oOjMyNTpcXHRiaXRtYXBfY29weV9jbGVhcl90YWlsKCh1bnNpZ25lZCBsb25nICopKGJ1ZiksIChjb25zdCB1bnNpZ25lZCBsb25nICopKGJpdG1hcCksIChuYml0cykpXFxuaW5jbHVkZS9saW51eC9iaXRtYXAuaC0zMjYtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEyOjIxLjcyMzkzMTkxOFoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTk5MDQwMTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgYml0bWFwX2NvcHlgIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRob3JvdWdobHksIGVzcGVjaWFsbHkgZ2l2ZW4gbXkgYmFja2dyb3VuZC4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyB0aGlzIGlzIGltcGxlbWVudGVkLiBJJ20gZ29pbmcgdG8gbG9vayBhdCB0aGUgY29kZSwgY29uc2lkZXIgdGhlIGNvbnN0cmFpbnRzLCBhbmQgdGhlIGV4cGVjdGVkIHBlcmZvcm1hbmNlLiBJIHdhbnQgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLCBtZW1vcnkgYWNjZXNzIHBhdHRlcm5zLCBhbmQgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIHVzZWQuIEknbGwgbmVlZCB0byBhc3Nlc3MgaXRzIGVmZmljaWVuY3kgYW5kIG1ha2Ugc3VyZSBpdCBhbGlnbnMgd2l0aCBiZXN0IHByYWN0aWNlcyBmb3IgbXkgYXJlYSBvZiBleHBlcnRpc2UuIEknbGwgYmUgbG9va2luZyBmb3IgcG9zc2libGUgZWRnZSBjYXNlcyBvciBzY2VuYXJpb3MgdGhhdCBtaWdodCBjYXVzZSBpc3N1ZXMuIEknbGwgc3RhcnQgYnkgbWFraW5nIHN1cmUgaXQncyBjb3JyZWN0IGFuZCB0aGVuIG1vdmUgb24gdG8gb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE3MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEyOjI0LjcyMjk3NTM3NloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9iaXRtYXAuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyNTgsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTg6XFx0c3RhdGljIF9fYWx3YXlzX2lubGluZVxcbiAyNTk6XFx0dm9pZCBiaXRtYXBfY29weSh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgdW5zaWduZWQgaW50IG5iaXRzKVxcbiAyNjA6XFx0e1xcbiAyNjE6XFx0XFx0dW5zaWduZWQgaW50IGxlbiA9IGJpdG1hcF9zaXplKG5iaXRzKTtcXG4gMjYyOlxcdFxcbiAyNjM6XFx0XFx0aWYgKHNtYWxsX2NvbnN0X25iaXRzKG5iaXRzKSlcXG4gMjY0OlxcdFxcdFxcdCpkc3QgPSAqc3JjO1xcbiAyNjU6XFx0XFx0ZWxzZVxcbiAyNjY6XFx0XFx0XFx0bWVtY3B5KGRzdCwgc3JjLCBsZW4pO1xcbiAyNjc6XFx0fVxcbiAyNjg6XFx0XFxuIDI2OTpcXHQvKlxcbiAyNzA6XFx0ICogQ29weSBiaXRtYXAgYW5kIGNsZWFyIHRhaWwgYml0cyBpbiBsYXN0IHdvcmQuXFxuIDI3MTpcXHQgKi9cXG4gMjcyOlxcdHN0YXRpYyBfX2Fsd2F5c19pbmxpbmVcXG4gMjczOlxcdHZvaWQgYml0bWFwX2NvcHlfY2xlYXJfdGFpbCh1bnNpZ25lZCBsb25nICpkc3QsIGNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgdW5zaWduZWQgaW50IG5iaXRzKVxcbiAyNzQ6XFx0e1xcbiAyNzU6XFx0XFx0Yml0bWFwX2NvcHkoZHN0LCBzcmMsIG5iaXRzKTtcXG4gMjc2OlxcdFxcdGlmIChuYml0cyAlIEJJVFNfUEVSX0xPTkcpXFxuIDI3NzpcXHRcXHRcXHRkc3RbbmJpdHMgLyBCSVRTX1BFUl9MT05HXSBcXHUwMDI2PSBCSVRNQVBfTEFTVF9XT1JEX01BU0sobmJpdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMlQxNjoxMjoyNC43MjMwOTMyNTZaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEwMjg1MTY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERhdGEgQ29weWluZyBMb2dpYyoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBiaXRtYXBfc2l6ZWAgaXMgY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGJpdHMgKGBuYml0c2ApIGFuZCBpcyB0aGVuIHVzZWQgdG8gZGV0ZXJtaW5lIGhvdyBtYW55IGB1bnNpZ25lZCBsb25nYCBlbGVtZW50cyBhcmUgaW4gdGhlIGJpdG1hcCwgdGFraW5nIGludG8gYWNjb3VudCB0aGVpciBzaXplLiBUaGUgYGJpdG1hcF9jb3B5YCBmdW5jdGlvbiwgdGhlcmVmb3JlLCB3b3JrcyBhdCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhvc2UgZnVsbCBgdW5zaWduZWQgbG9uZ2BzLlxuXG5UaGlzIGlzIGltbWVkaWF0ZWx5IHJlbGV2YW50IGJlY2F1c2UgSSBzZWUgYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCBpcyBkZWNsYXJpbmcgYW4gYXJyYXkgb2YgYHVuc2lnbmVkIGxvbmdgLiBJZiB0aGUgbWFjcm8ganVzdCBkZWNsYXJlcyB0aGUgYXJyYXksIHRoZSBjb3B5IG9wZXJhdGlvbiB1c2VzIGEgc2l6ZSBsYXJnZSBlbm91Z2ggdG8gY29weSB0aGlzIGVudGlyZSBhcnJheSB1c2luZyBgYml0bWFwX2NvcHlgLlxuXG5Ob3cgdGhlIGludGVyZXN0aW5nIHBvaW50OiBXaGF0IGlmIHRoZSBkZWNsYXJhdGlvbiB3aXRoIGBJUF9UVU5ORUxfREVDTEFSRV9GTEFHUyhvX2ZsYWdzKWAgaXMgKm5vdCogaW5pdGlhbGl6aW5nIHRoZSBhcnJheT8gVGhlIGNvcHkgaXMgZnJvbSBgcC1cdTAwM2VvX2ZsYWdzYCB0byBgb19mbGFnc2AsIGFuZCBpZiBgcC1cdTAwM2VvX2ZsYWdzYCBpcyAqYWxzbyogYW4gYXJyYXkgb2YgYHVuc2lnbmVkIGxvbmdgLCBhbmQgc2luY2UgdGhlIGBiaXRtYXBfY29weWAgaXMgY29uZmlndXJlZCB0byBjb3B5IHRoZSBlbnRpcmUgYXJyYXkgaW4gYSBibG9jayB1c2luZyBgQklUU19UT19MT05HUyhuYml0cykgKiBzaXplb2YodW5zaWduZWQgbG9uZylgLCB0aGUgZW50aXJlIGRlc3RpbmF0aW9uIGFycmF5IHdpbGwgYmUgcG9wdWxhdGVkIGluIHRoZSBjb3B5LlxuXG5UaHVzLCB0aGUgY29weSBvcGVyYXRpb24gd2l0aGluIGBpcF90dW5uZWxfZmxhZ3NfY29weWAgZW5zdXJlcyB0aGF0IGBvX2ZsYWdzYCB3aWxsIGJlICpmdWxseSogaW5pdGlhbGl6ZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB0aGUgYml0d2lzZSBjb3B5LiBGb2xsb3dpbmcgdGhhdCwgd2UgaGF2ZSBgZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3Mob19mbGFncylgLiBTbyB0aGlzIGV4cGxhaW5zIGhvdyB0aGUgZmxhZ3MgYXJlIHRoZW4gY29udmVydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjY2MCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEyOjMwLjgyNTk0OTc0OVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYxOTIxMDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFnc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dyZS5jPTI3PXN0YXRpYyBpbnQgbWx4NWVfZ2VuX2lwX3R1bm5lbF9oZWFkZXJfZ3JldGFwKGNoYXIgYnVmW10sXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW4vdGNfdHVuX2dyZS5jLTQ5LVxcdGhkcl9sZW5cXHQ9IG1seDVlX3RjX3R1bl9jYWxjX2hsZW5fZ3JldGFwKGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ3JlLmM6NTA6XFx0Z3JlaC1cXHUwMDNlZmxhZ3MgPSBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyh0dW5fa2V5LVxcdTAwM2V0dW5fZmxhZ3MpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9lbi90Y190dW5fZ3JlLmMtNTEtXFx0aWYgKHRlc3RfYml0KElQX1RVTk5FTF9LRVlfQklULCB0dW5fa2V5LVxcdTAwM2V0dW5fZmxhZ3MpKSB7XFxuLS1cXG5pbmNsdWRlL25ldC9ncmUuaD02Mz1zdGF0aWMgaW5saW5lIHZvaWQgZ3JlX2ZsYWdzX3RvX3RubF9mbGFncyh1bnNpZ25lZCBsb25nICpkc3QsIF9fYmUxNiBmbGFncylcXG4tLVxcbmluY2x1ZGUvbmV0L2dyZS5oLTc3LVxcbmluY2x1ZGUvbmV0L2dyZS5oOjc4OnN0YXRpYyBpbmxpbmUgX19iZTE2IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKnRmbGFncylcXG5pbmNsdWRlL25ldC9ncmUuaC03OS17XFxuLS1cXG5pbmNsdWRlL25ldC9ncmUuaD0xMDA9c3RhdGljIGlubGluZSB2b2lkIGdyZV9idWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9sZW4sXFxuLS1cXG5pbmNsdWRlL25ldC9ncmUuaC0xMTEtXFx0Z3JlaCA9IChzdHJ1Y3QgZ3JlX2Jhc2VfaGRyICopc2tiLVxcdTAwM2VkYXRhO1xcbmluY2x1ZGUvbmV0L2dyZS5oOjExMjpcXHRncmVoLVxcdTAwM2VmbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKGZsYWdzKTtcXG5pbmNsdWRlL25ldC9ncmUuaC0xMTMtXFx0Z3JlaC1cXHUwMDNlcHJvdG9jb2wgPSBwcm90bztcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jPTgyMT1zdGF0aWMgaW50IGlwZ3JlX3R1bm5lbF9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTg1OC1cXG5uZXQvaXB2NC9pcF9ncmUuYzo4NTk6XFx0aV9mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXFx1MDAzZWlfZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTg2MC1cXHRpcF90dW5uZWxfZmxhZ3NfZnJvbV9iZTE2KHAtXFx1MDAzZWlfZmxhZ3MsIGlfZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjg2MTpcXHRvX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cXHUwMDNlb19mbGFncyk7XFxubmV0L2lwdjQvaXBfZ3JlLmMtODYyLVxcdGlwX3R1bm5lbF9mbGFnc19mcm9tX2JlMTYocC1cXHUwMDNlb19mbGFncywgb19mbGFncyk7XFxuLS1cXG5uZXQvaXB2NC9pcF9ncmUuYz04OTQ9c3RhdGljIGludCBpcGdyZV9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9pcHY0L2lwX2dyZS5jLTkxMC1cXHRncmVoID0gKHN0cnVjdCBncmVfYmFzZV9oZHIgKikoaXBoKzEpO1xcbm5ldC9pcHY0L2lwX2dyZS5jOjkxMTpcXHRncmVoLVxcdTAwM2VmbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHQtXFx1MDAzZXBhcm1zLm9fZmxhZ3MpO1xcbm5ldC9pcHY0L2lwX2dyZS5jLTkxMi1cXHRncmVoLVxcdTAwM2Vwcm90b2NvbCA9IGh0b25zKHR5cGUpO1xcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmM9MTU2NT1zdGF0aWMgaW50IGlwZ3JlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L2lwdjQvaXBfZ3JlLmMtMTU3Ny1cXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HUkVfSUZMQUdTLFxcbm5ldC9pcHY0L2lwX2dyZS5jOjE1Nzg6XFx0XFx0XFx0IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXFx1MDAzZWlfZmxhZ3MpKSB8fFxcbm5ldC9pcHY0L2lwX2dyZS5jLTE1NzktXFx0ICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX09GTEFHUyxcXG5uZXQvaXB2NC9pcF9ncmUuYzoxNTgwOlxcdFxcdFxcdCBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhvX2ZsYWdzKSkgfHxcXG5uZXQvaXB2NC9pcF9ncmUuYy0xNTgxLVxcdCAgICBubGFfcHV0X2JlMzIoc2tiLCBJRkxBX0dSRV9JS0VZLCBwLVxcdTAwM2VpX2tleSkgfHxcXG4tLVxcbm5ldC9pcHY2L2lwNl9ncmUuYz0xMjM1PXN0YXRpYyB2b2lkIGlwNmdyZV90bmxfcGFybV90b191c2VyKHN0cnVjdCBpcDZfdG5sX3Bhcm0yICp1LFxcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jLTEyNDctXFx0dS1cXHUwMDNlb19rZXkgPSBwLVxcdTAwM2VvX2tleTtcXG5uZXQvaXB2Ni9pcDZfZ3JlLmM6MTI0ODpcXHR1LVxcdTAwM2VpX2ZsYWdzID0gZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3MocC1cXHUwMDNlaV9mbGFncyk7XFxubmV0L2lwdjYvaXA2X2dyZS5jOjEyNDk6XFx0dS1cXHUwMDNlb19mbGFncyA9IGdyZV90bmxfZmxhZ3NfdG9fZ3JlX2ZsYWdzKHAtXFx1MDAzZW9fZmxhZ3MpO1xcbm5ldC9pcHY2L2lwNl9ncmUuYy0xMjUwLVxcdG1lbWNweSh1LVxcdTAwM2VuYW1lLCBwLVxcdTAwM2VuYW1lLCBzaXplb2YodS1cXHUwMDNlbmFtZSkpO1xcbi0tXFxubmV0L2lwdjYvaXA2X2dyZS5jPTIxMTU9c3RhdGljIGludCBpcDZncmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjE0Mi1cXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HUkVfSUZMQUdTLFxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMTQzOlxcdFxcdFxcdCBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhwLVxcdTAwM2VpX2ZsYWdzKSkgfHxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjE0NC1cXHQgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HUkVfT0ZMQUdTLFxcbm5ldC9pcHY2L2lwNl9ncmUuYzoyMTQ1OlxcdFxcdFxcdCBncmVfdG5sX2ZsYWdzX3RvX2dyZV9mbGFncyhvX2ZsYWdzKSkgfHxcXG5uZXQvaXB2Ni9pcDZfZ3JlLmMtMjE0Ni1cXHQgICAgbmxhX3B1dF9iZTMyKHNrYiwgSUZMQV9HUkVfSUtFWSwgcC1cXHUwMDNlaV9rZXkpIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEyVDE2OjEyOjMzLjQ0NTE2NzgyOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzg3MjQ1MDQ0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgR1JFIFR1bm5lbCBGbGFnIEhhbmRsaW5nIGFuZCBDb25jdXJyZW5jeSBGaXgqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHJlZ2FyZGluZyBgZ3JlX3RubF9mbGFnc190b19ncmVfZmxhZ3NgIGlzIGNvbmZpcm1lZDogaXQncyBhIHNpbXBsZSBiaXRtYXAgY29udmVyc2lvbiB0byBgX19iZTE2YC4gVGhlIGZ1bmN0aW9uIGNoZWNrcyBzcGVjaWZpYyBiaXRzLCBzbyB0aGVyZSdzIG5vIHdheSBmb3IgaXQgdG8gY2F1c2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZCBvciBpbmZvcm1hdGlvbiBsZWFrLiBUaGlzIGNvbmZpcm1zIHRoYXQgS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgaGVyZS4gVGhlIGNvcmUgcHJvYmxlbSBpcyBhIGNvbmN1cnJlbmN5IGlzc3VlIG9yIGEgbG9naWMgZXJyb3IgcmVsYXRlZCB0byB0aGUgdHVubmVsIHBhcmFtZXRlcnMsIHNwZWNpZmljYWxseSB0aGUgYG9fZmxhZ3NgIGZpZWxkIGluIGB0dW5uZWwtXHUwMDNlcGFybXNgLlxuXG5UaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgdGhlIG1vZGlmaWNhdGlvbiBvZiBgdC1cdTAwM2VwYXJtcy5vX2ZsYWdzYCBlaXRoZXIgZHVyaW5nIHRyYW5zbWlzc2lvbiAoYGVyc3Bhbl94bWl0YCwgYGlwZ3JlX3htaXRgKSBvciBkdXJpbmcgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2ApLiBUaGlzIGlzIGluaGVyZW50bHkgZmxhd2VkIGJlY2F1c2UgYHQtXHUwMDNlcGFybXNgIGhvbGRzIHRoZSAqY29uZmlndXJlZCogc3RhdGUgb2YgdGhlIHR1bm5lbC4gSWYgd2UncmUgbW9kaWZ5aW5nIGl0IGRpcmVjdGx5IGR1cmluZyBwYWNrZXQgcHJvY2Vzc2luZyBvciBkdW1wIG9wZXJhdGlvbnMsIHdlJ3JlIGludHJvZHVjaW5nIGEgZGF0YSByYWNlLiBTdWJzZXF1ZW50IHBhY2tldHMgb3IgZHVtcHMgbWlnaHQgcmVhZCB0aGlzIG1vZGlmaWVkIChhbmQgcG90ZW50aWFsbHkgaW5jb25zaXN0ZW50KSBzdGF0ZSwgd2hpY2gsIHdoaWxlIGxlYWRpbmcgdG8gaW5jb3JyZWN0IGJlaGF2aW9yLCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC4gVGhlIHByb2JsZW0gaXMgYSBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIGBfX2dyZV94bWl0YCBjaGFuZ2VzLiBBaCwgdGhlIG9sZCB2ZXJzaW9uIGNvcGllZCBgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgIHRvIGBmbGFnc2AgYW5kIHBhc3NlZCB0aGF0IHRvIGBncmVfYnVpbGRfaGVhZGVyYC4gQnV0IGBpcGdyZV94bWl0YCBhbmQgYGVyc3Bhbl94bWl0YCB3ZXJlIG1vZGlmeWluZyB0aGUgb3JpZ2luYWwgYHR1bm5lbC1cdTAwM2VwYXJtcy5vX2ZsYWdzYCBiZWZvcmUgY2FsbGluZyBgX19ncmVfeG1pdGAuIFRoZSBmaXggbm93IGNvcGllcyBgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3NgIHRvIGEgbG9jYWwgYGZsYWdzYCB2YXJpYWJsZSAqYmVmb3JlKiBtb2RpZmljYXRpb24sIGFuZCBwYXNzZXMgKnRoYXQqIHRvIGBfX2dyZV94bWl0YC4gVGhpcyBpcyBhIHByZXR0eSBzb2xpZCBmaXguIEl0IHByZXZlbnRzIG1vZGlmaWNhdGlvbiBvZiB0aGUgc2hhcmVkIGB0dW5uZWwtXHUwMDNlcGFybXMub19mbGFnc2AuXG5cbkxldCdzIHF1aWNrbHkgY29uZmlybSB0aGF0IGBmbGFnc2AgaXMgaW5pdGlhbGl6ZWQgaW4gYGlwZ3JlX3htaXRgOiBgSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1MoZmxhZ3MpYCBkZWNsYXJlcyB0aGUgYXJyYXkgYW5kIGBpcF90dW5uZWxfZmxhZ3NfY29weShmbGFncywgdHVubmVsLVx1MDAzZXBhcm1zLm9fZmxhZ3MpYCBkb2VzIHRoZSBjb3B5aW5nLiBBbmQgd2Uga25vdyB0aGF0IGBiaXRtYXBfY29weWAgZG9lcyB0aGUgcmlnaHQgdGhpbmcsIGNvcHlpbmcgdGhlIGZ1bGwgYXJyYXkuIFNvLCB0aGUgbG9jYWwgYGZsYWdzYCB2YXJpYWJsZSAqaXMqIGZ1bGx5IGluaXRpYWxpemVkLiBTYW1lIGdvZXMgZm9yIGBpcGdyZV9maWxsX2luZm9gIC0gaXQgZGVjbGFyZXMgYW5kIGluaXRpYWxpemVzIHRoZSBsb2NhbCBgb19mbGFnc2AgaW4gdGhlIHNhbWUgd2F5LlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgYSBjb25jdXJyZW5jeS9sb2dpYyBidWcsIG5vdCBhbiB1bmluaXRpYWxpemVkIHJlYWQuIFRoZSBjb3JyZWN0IGFwcHJvYWNoIGhlcmUgaXMgdG8gdXNlIEtBU0FOIChvciBzdGFuZGFyZCB0ZXN0aW5nKSB0byBjYXRjaCByYWNlIGNvbmRpdGlvbnMgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGlzc3Vlcy4gS01TQU4sIHdoaWNoIGlzIGZvciBkZXRlY3RpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIGlzIG5vdCBuZWVkZWQuIFRoaXMgaXMgYSBmaXggZm9yIGRhdGEgcmFjZXMgYW5kIGxvZ2ljYWwgZXJyb3JzLCBub3QgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDczMiwiT3V0cHV0VG9rZW5zIjoyMTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTJUMTY6MTI6NDcuMzE3NjIxOTI0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjcyMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGNvbmN1cnJlbmN5IGFuZCBsb2dpYyBidWcgd2hlcmUgc2hhcmVkIHR1bm5lbCBwYXJhbWV0ZXJzIChgdHVubmVsLVxcdTAwM2VwYXJtcy5vX2ZsYWdzYCkgd2VyZSBiZWluZyBpbmNvcnJlY3RseSBtb2RpZmllZCBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiAoYGVyc3Bhbl94bWl0YCwgYGlwNmVyc3Bhbl90dW5uZWxfeG1pdGApIGFuZCBuZXRsaW5rIGR1bXBzIChgaXBncmVfZmlsbF9pbmZvYCwgYGVyc3Bhbl9maWxsX2luZm9gKS4gVGhpcyBjb3VsZCBsZWFkIHRvIGRhdGEgcmFjZXMgYW5kIGNvcnJ1cHRlZCB0dW5uZWwgc3RhdGUuIFRoZSBmaXggaW50cm9kdWNlcyBsb2NhbCBjb3BpZXMgb2YgdGhlIGZsYWdzIChgSVBfVFVOTkVMX0RFQ0xBUkVfRkxBR1NgKSB3aGljaCBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBpcF90dW5uZWxfZmxhZ3NfY29weSgpYCAod2hpY2ggdXNlcyBgYml0bWFwX2NvcHkoKWAgdG8gY29weSB0aGUgZW50aXJlIGB1bnNpZ25lZCBsb25nYCBhcnJheSkuIFRoZXJlIGlzIG5vIGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGFueSByaXNrIG9mIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgS0FTQU4vS0NTQU4gYW5kIGxvZ2ljIHRlc3RpbmcgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggZGF0YSByYWNlcyBhbmQgbWVtb3J5IGNvcnJ1cHRpb24uIEtNU0FOIGlzIHNwZWNpZmljYWxseSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBjb25jdXJyZW5jeSBhbmQgbG9naWMgYnVnIHdoZXJlIHNoYXJlZCB0dW5uZWwgcGFyYW1ldGVycyAoYHR1bm5lbC1cXHUwMDNlcGFybXMub19mbGFnc2ApIHdlcmUgYmVpbmcgaW5jb3JyZWN0bHkgbW9kaWZpZWQgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gKGBlcnNwYW5feG1pdGAsIGBpcDZlcnNwYW5fdHVubmVsX3htaXRgKSBhbmQgbmV0bGluayBkdW1wcyAoYGlwZ3JlX2ZpbGxfaW5mb2AsIGBlcnNwYW5fZmlsbF9pbmZvYCkuIFRoaXMgY291bGQgbGVhZCB0byBkYXRhIHJhY2VzIGFuZCBjb3JydXB0ZWQgdHVubmVsIHN0YXRlLiBUaGUgZml4IGludHJvZHVjZXMgbG9jYWwgY29waWVzIG9mIHRoZSBmbGFncyAoYElQX1RVTk5FTF9ERUNMQVJFX0ZMQUdTYCkgd2hpY2ggYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgaXBfdHVubmVsX2ZsYWdzX2NvcHkoKWAgKHdoaWNoIHVzZXMgYGJpdG1hcF9jb3B5KClgIHRvIGNvcHkgdGhlIGVudGlyZSBgdW5zaWduZWQgbG9uZ2AgYXJyYXkpLiBUaGVyZSBpcyBubyBpbnRyb2R1Y3Rpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhbnkgcmlzayBvZiBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIEtBU0FOL0tDU0FOIGFuZCBsb2dpYyB0ZXN0aW5nIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGRhdGEgcmFjZXMgYW5kIG1lbW9yeSBjb3JydXB0aW9uLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpw9v[1] Phase: Succeeded StartedAt: 2026-08-12 16:12:59 +0000 UTC FinishedAt: 2026-08-12 16:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-12 16:12:59 +0000 UTC FinishedAt: 2026-08-12 16:12:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2] Phase: Succeeded StartedAt: 2026-08-12 16:12:59 +0000 UTC FinishedAt: 2026-08-12 19:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-12 16:12:59 +0000 UTC FinishedAt: 2026-08-12 19:55:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-12 16:12:59 +0000 UTC FinishedAt: 2026-08-12 16:13:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-12 16:12:59 +0000 UTC FinishedAt: 2026-08-12 16:13:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpw9v/series-workflowdpw9v-convert-artifact-1078045150/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-12 16:13:09 +0000 UTC FinishedAt: 2026-08-12 16:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-12 16:13:09 +0000 UTC FinishedAt: 2026-08-12 16:31:11 +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:*3715dbfd-6fef-409f-a7bd-7821b0b7f7a2,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-workflowdpw9v/series-workflowdpw9v-convert-artifact-1078045150/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": "7ee6e5bf-cb48-41fd-9f13-f2a048a3baff", "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-workflowdpw9v/series-workflowdpw9v-build-action-364759748/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-12 16:13:09 +0000 UTC FinishedAt: 2026-08-12 16:31:01 +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:*3715dbfd-6fef-409f-a7bd-7821b0b7f7a2,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-workflowdpw9v/series-workflowdpw9v-convert-artifact-1078045150/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": "7ee6e5bf-cb48-41fd-9f13-f2a048a3baff", "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-workflowdpw9v/series-workflowdpw9v-build-action-364759748/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-12 16:31:11 +0000 UTC FinishedAt: 2026-08-12 16:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-12 16:31:11 +0000 UTC FinishedAt: 2026-08-12 16:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-12 16:31:11 +0000 UTC FinishedAt: 2026-08-12 16:31:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-12 16:31:11 +0000 UTC FinishedAt: 2026-08-12 16:31:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdpw9v/series-workflowdpw9v-convert-artifact-1442860433/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-12 16:31:21 +0000 UTC FinishedAt: 2026-08-12 16:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-12 16:31:21 +0000 UTC FinishedAt: 2026-08-12 16:33:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7ee6e5bf-cb48-41fd-9f13-f2a048a3baff,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-workflowdpw9v/series-workflowdpw9v-build-action-364759748/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-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-12 16:33:33 +0000 UTC FinishedAt: 2026-08-12 16:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-12 16:33:33 +0000 UTC FinishedAt: 2026-08-12 16:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-12 16:33:33 +0000 UTC FinishedAt: 2026-08-12 16:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-12 16:33:33 +0000 UTC FinishedAt: 2026-08-12 16:50:18 +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:*3715dbfd-6fef-409f-a7bd-7821b0b7f7a2,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-workflowdpw9v/series-workflowdpw9v-convert-artifact-1442860433/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": "aee1e586-3486-41ae-a9be-98bfc46edfd4", "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-workflowdpw9v/series-workflowdpw9v-build-action-202849629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-12 16:33:33 +0000 UTC FinishedAt: 2026-08-12 16:50:08 +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:*3715dbfd-6fef-409f-a7bd-7821b0b7f7a2,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-workflowdpw9v/series-workflowdpw9v-convert-artifact-1442860433/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": "aee1e586-3486-41ae-a9be-98bfc46edfd4", "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-workflowdpw9v/series-workflowdpw9v-build-action-202849629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-12 16:50:18 +0000 UTC FinishedAt: 2026-08-12 16:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-12 16:50:18 +0000 UTC FinishedAt: 2026-08-12 16:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-12 16:50:18 +0000 UTC FinishedAt: 2026-08-12 16:52:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-12 16:50:18 +0000 UTC FinishedAt: 2026-08-12 16:52:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aee1e586-3486-41ae-a9be-98bfc46edfd4,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-workflowdpw9v/series-workflowdpw9v-build-action-202849629/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-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-12 16:52:24 +0000 UTC FinishedAt: 2026-08-12 19:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-12 16:52:24 +0000 UTC FinishedAt: 2026-08-12 19:55:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"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:*7ee6e5bf-cb48-41fd-9f13-f2a048a3baff,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aee1e586-3486-41ae-a9be-98bfc46edfd4,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-workflowdpw9v/series-workflowdpw9v-build-action-364759748/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-workflowdpw9v/series-workflowdpw9v-build-action-202849629/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-12 16:52:24 +0000 UTC FinishedAt: 2026-08-12 16:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-12 16:52:24 +0000 UTC FinishedAt: 2026-08-12 16:52:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"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-workflowdpw9v/series-workflowdpw9v-convert-artifact-2376043718/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-12 16:52:24 +0000 UTC FinishedAt: 2026-08-12 16:52:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-12 16:52:24 +0000 UTC FinishedAt: 2026-08-12 16:52:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-12 16:52:24 +0000 UTC FinishedAt: 2026-08-12 16:52:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-12 16:52:35 +0000 UTC FinishedAt: 2026-08-12 19:55:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdpw9v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ipgre_xmit","erspan_xmit","gre_tap_xmit","ip6erspan_tunnel_xmit","ipgre_fill_info","erspan_fill_info","ip6gre_fill_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ac155a26750a595703e7dadff84735456d75a479","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_IPGRE","NET_IPGRE_DEMUX","IPV6_GRE"],"series_id":"2f0be438-d7d5-45c4-ae72-66651d5be0cb","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-12 16:52:35 +0000 UTC FinishedAt: 2026-08-12 19:55:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7ee6e5bf-cb48-41fd-9f13-f2a048a3baff,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*aee1e586-3486-41ae-a9be-98bfc46edfd4,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-workflowdpw9v/series-workflowdpw9v-build-action-364759748/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-workflowdpw9v/series-workflowdpw9v-build-action-202849629/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-workflowdpw9v/series-workflowdpw9v-convert-artifact-2376043718/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,}