Name: series-workflowcnmm9 Phase: Succeeded StartedAt: 2026-08-25 13:10:37 +0000 UTC FinishedAt: 2026-08-25 17:13:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[0] Phase: Succeeded StartedAt: 2026-08-25 13:10:37 +0000 UTC FinishedAt: 2026-08-25 13:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 13:10:37 +0000 UTC FinishedAt: 2026-08-25 13:32:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GTP", "VXLAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GTP", "VXLAN" ], "series_id": "0b1e98d0-33af-47ae-a591-99310f563a93" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "gtp_encap_recv", "gro_cells_receive" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dUUCYjMzQ7LAogICAgJiMzNDtWWExBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d0cF9lbmNhcF9yZWN2JiMzNDssCiAgICAmIzM0O2dyb19jZWxsc19yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGd0cF9yeGAgdG8gZHJvcCBHU08gcGFja2V0cyBhbmQgbW9kaWZpZXMgYGdyb19jZWxsc19yZWNlaXZlYCB0byB1bnNldCB0aGUgdHJhbnNwb3J0IGhlYWRlciBvZiB0aGUgYHNrYmAgYnkgc2V0dGluZyBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHRvIGB+MFVgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgdGhlIHVuc2V0IHRyYW5zcG9ydCBoZWFkZXIgaXMgdXNlZCB3aXRob3V0IGNoZWNraW5nLCBpdCB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKHVzaW5nIGB+MFVgIGFzIGFuIG9mZnNldCksIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGh1cywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIChjYWxsZWQgdmlhIGBndHBfZW5jYXBfcmVjdmApIGFuZCB1cGRhdGVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYGdyb19jZWxsc19yZWNlaXZlYCB0byB1bnNldCB0aGUgdHJhbnNwb3J0IGhlYWRlciBvZiBgc2tfYnVmZmBzIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggc3RhbGUgaGVhZGVycy4gQm90aCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBuZXR3b3JrIGRhdGFwYXRoIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYTFhYjhkMDVjMmJiNTFlMTc3YWZmOTdlNWZlOGIwMzBkZmJjZWZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTM6Mjg6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3RwLmMgYi9kcml2ZXJzL25ldC9ndHAuY1xuaW5kZXggOWExMmNjNTNkYTAwMi4uZjZlNDdjMzY5ZDYyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2d0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ndHAuY1xuQEAgLTMxMiw2ICYjNDM7MzEyLDExIEBAIHN0YXRpYyBpbnQgZ3RwX2lubmVyX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZHJsZW4sXG4gc3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKVxuIHtcbiYjNDM7XHRpZiAoc2tiX2lzX2dzbyhza2IpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZGJnKHBjdHgtXHUwMDNlZGV2LCBcJiMzNDtHU08gaXMgbm90IHN1cHBvcnRlZCBpbiBHVFBcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghZ3RwX2NoZWNrX21zKHNrYiwgcGN0eCwgaGRybGVuLCByb2xlLCBpbm5lcl9wcm90bykpIHtcbiBcdFx0bmV0ZGV2X2RiZyhwY3R4LVx1MDAzZWRldiwgXCYjMzQ7Tm8gUERQIGN0eCBmb3IgdGhpcyBNU1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAxO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCAyMmVkYTFkNTRhMGU4Li42MjZiYmI5YmFlMWFkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTMwODIsNiAmIzQzOzMwODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAhPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSl+MFU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gKHR5cGVvZihza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RyYW5zcG9ydF9oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2dyb19jZWxscy5jIGIvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcbmluZGV4IDFiODQzODVjMDRiZDkuLmQ4YzBhMjg2NzEyMDEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ncm9fY2VsbHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcbkBAIC0yMiw2ICYjNDM7MjIsOCBAQCBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKHVubGlrZWx5KCEoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuJiM0MztcdHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4mIzQzO1xuIFx0aWYgKCFnY2VsbHMtXHUwMDNlY2VsbHMgfHwgc2tiX2Nsb25lZChza2IpIHx8IG5ldGlmX2VsaWRlX2dybyhkZXYpKSB7XG4gXHRcdHJlcyA9IG5ldGlmX3J4KHNrYik7XG4gXHRcdGdvdG8gdW5sb2NrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtHVFAmIzM0OywKICAgICYjMzQ7VlhMQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndHBfZW5jYXBfcmVjdiYjMzQ7LAogICAgJiMzNDtncm9fY2VsbHNfcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIChjYWxsZWQgdmlhIGBndHBfZW5jYXBfcmVjdmApIGFuZCB1cGRhdGVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYGdyb19jZWxsc19yZWNlaXZlYCB0byB1bnNldCB0aGUgdHJhbnNwb3J0IGhlYWRlciBvZiBgc2tfYnVmZmBzIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggc3RhbGUgaGVhZGVycy4gQm90aCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBuZXR3b3JrIGRhdGFwYXRoIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYTFhYjhkMDVjMmJiNTFlMTc3YWZmOTdlNWZlOGIwMzBkZmJjZWZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTM6Mjg6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndHAuYyBiL2RyaXZlcnMvbmV0L2d0cC5jCmluZGV4IDlhMTJjYzUzZGEwMDIuLmY2ZTQ3YzM2OWQ2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2d0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2d0cC5jCkBAIC0zMTIsNiAmIzQzOzMxMiwxMSBAQCBzdGF0aWMgaW50IGd0cF9pbm5lcl9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGRybGVuLAogc3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKQogewomIzQzOwlpZiAoc2tiX2lzX2dzbyhza2IpKSB7CiYjNDM7CQluZXRkZXZfZGJnKHBjdHgtJmd0O2RldiwgJiMzNDtHU08gaXMgbm90IHN1cHBvcnRlZCBpbiBHVFBcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiAJaWYgKCFndHBfY2hlY2tfbXMoc2tiLCBwY3R4LCBoZHJsZW4sIHJvbGUsIGlubmVyX3Byb3RvKSkgewogCQluZXRkZXZfZGJnKHBjdHgtJmd0O2RldiwgJiMzNDtObyBQRFAgY3R4IGZvciB0aGlzIE1TXG4mIzM0Oyk7CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggMjJlZGExZDU0YTBlOC4uNjI2YmJiOWJhZTFhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0zMDgyLDYgJiM0MzszMDgyLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAhPSAodHlwZW9mKHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcikpfjBVOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSAodHlwZW9mKHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcikpfjBVOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RyYW5zcG9ydF9oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlERUJVR19ORVRfV0FSTl9PTl9PTkNFKCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmMgYi9uZXQvY29yZS9ncm9fY2VsbHMuYwppbmRleCAxYjg0Mzg1YzA0YmQ5Li5kOGMwYTI4NjcxMjAxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ncm9fY2VsbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ncm9fY2VsbHMuYwpAQCAtMjIsNiAmIzQzOzIyLDggQEAgaW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpZiAodW5saWtlbHkoIShkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkpKQogCQlnb3RvIGRyb3A7CiAKJiM0MzsJc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKJiM0MzsKIAlpZiAoIWdjZWxscy0mZ3Q7Y2VsbHMgfHwgc2tiX2Nsb25lZChza2IpIHx8IG5ldGlmX2VsaWRlX2dybyhkZXYpKSB7CiAJCXJlcyA9IG5ldGlmX3J4KHNrYik7CiAJCWdvdG8gdW5sb2NrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBzb21lIGludGVyZXN0aW5nIGFyZWFzOiBgZHJpdmVycy9uZXQvZ3RwLmNgLCBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIGFuZCBgbmV0L2NvcmUvZ3JvX2NlbGxzLmNgLiBJIHNlZSB0aGF0IHRoZSBtYWluIGNoYW5nZXMgaW52b2x2ZSBhZGRpbmcgYSBjaGVjayBpbiBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzLCBpbnRyb2R1Y2luZyBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIGluIGBza2J1ZmYuaGAsIGFuZCwgaW1wb3J0YW50bHksIGNhbGxpbmcgdGhhdCBuZXcgZnVuY3Rpb24gd2l0aGluIGBncm9fY2VsbHNfcmVjZWl2ZWAuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgd29ydGggbXkgdGltZSB0byBmdXp6PyYjMzQ7IGBncm9fY2VsbHNfcmVjZWl2ZWAgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgZnVuY3Rpb24sIGhlYXZpbHkgdXNlZCBieSBhIHdpZGUgdmFyaWV0eSBvZiBkcml2ZXJzOiBtYWM4MDIxMSwgZ2VuZXZlLCB2eGxhbiwgZ3RwLi4uIHRoZSBsaXN0IGdvZXMgb24uIFRoaXMgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgaWYgdGhpcyBwYXRjaCBzdWJ0bHkgY2hhbmdlcyBpdHMgYmVoYXZpb3Igb3IgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3RhY2suIGBndHBfcnhgIGlzIGp1c3QgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgYnV0IGlmIHdlIGNhbiBicmVhayBpdCBpbiBgZ3JvX2NlbGxzX3JlY2VpdmVgIGl0IHdvdWxkIGJlIHVzZWZ1bC4KClNvLCB0aGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIHNpdGUgb2YgYGdyb19jZWxsc19yZWNlaXZlYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBwYXRjaCBhbHRlcnMgaXRzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBmdW5jdGlvbiBhbmQgdGhlIEdTTyBwYWNrZXQgY2hlY2sgaW50ZXJhY3QgaW4gdGhpcyBjb250ZXh0LiBUaGlzIHNlZW1zIGxpa2UgaXQgY291bGQgb3BlbiB1cCBhIGNvdXBsZSBvZiBuZXcgYXZlbnVlcyBmb3IgZnV6emluZzogYGd0cF9yeGAgaW4gcGFydGljdWxhciBmb3IgaG93IGl0IGhhbmRsZXMgR1NPIHBhY2tldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3JvX2NlbGxzX3JlY2VpdmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYW10LmM9MjI5Nz1zdGF0aWMgYm9vbCBhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2FtdC5jLTIzNTgtXHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuZHJpdmVycy9uZXQvYW10LmM6MjM1OTpcdGVyciA9IGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNmFtdC1cdTAwM2Vncm9fY2VsbHMsIHNrYik7XG5kcml2ZXJzL25ldC9hbXQuYy0yMzYwLVx0aWYgKGxpa2VseShlcnIgPT0gTkVUX1JYX1NVQ0NFU1MpKVxuLS1cbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYz02MT1zdGF0aWMgaW50IGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYy0xOTQtXHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jOjE5NTpcdGVyciA9IGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNmJhcmV1ZHAtXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTE5Ni1cdGlmIChsaWtlbHkoZXJyID09IE5FVF9SWF9TVUNDRVNTKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jPTQwPXJtbmV0X2RlbGl2ZXJfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy00OS1cdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzo1MDpcdGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNnByaXYtXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy01MS19XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjcwPXN0YXRpYyB2b2lkIGdlbmV2ZV9yeChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTM3Ny1cdGVsc2VcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjM3ODpcdFx0ZXJyID0gZ3JvX2NlbGxzX3JlY2VpdmUoXHUwMDI2Z2VuZXZlLVx1MDAzZWdyb19jZWxscywgc2tiKTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTM3OS1cdGlmIChsaWtlbHkoZXJyID09IE5FVF9SWF9TVUNDRVNTKSlcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz04NDc9c3RhdGljIHZvaWQgbWFjc2VjX2RlY3J5cHRfZG9uZSh2b2lkICpkYXRhLCBpbnQgZXJyKVxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTg3NC1cbmRyaXZlcnMvbmV0L21hY3NlYy5jOjg3NTpcdGlmIChncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZtYWNzZWMtXHUwMDNlZ3JvX2NlbGxzLCBza2IpID09IE5FVF9SWF9TVUNDRVNTKVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtODc2LVx0XHRjb3VudF9yeChkZXYsIGxlbik7XG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmM9MTEzMD1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBtYWNzZWNfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0xMzAyLVx0c2tiX29ycGhhbihza2IpO1xuZHJpdmVycy9uZXQvbWFjc2VjLmM6MTMwMzpcdHJldCA9IGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNm1hY3NlYy1cdTAwM2Vncm9fY2VsbHMsIHNrYik7XG5kcml2ZXJzL25ldC9tYWNzZWMuYy0xMzA0LVx0aWYgKHJldCA9PSBORVRfUlhfU1VDQ0VTUylcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM9NjA9c3RhdGljIHZvaWQgb3Zwbl9uZXRkZXZfd3JpdGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtOTQtXHQvKiB3ZSBtYXkgZ2V0IGhlcmUgaW4gcHJvY2VzcyBjb250ZXh0IGluIGNhc2Ugb2YgVENQIGNvbm5lY3Rpb25zLFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjk1Olx0ICogdGhlcmVmb3JlIHdlIGhhdmUgdG8gZGlzYWJsZSBCSHMgdG8gZW5zdXJlIGdyb19jZWxsc19yZWNlaXZlKClcbmRyaXZlcnMvbmV0L292cG4vaW8uYy05Ni1cdCAqIGFuZCBkZXZfZHN0YXRzX3J4X2FkZCgpIGRvIG5vdCBnZXQgY29ycnVwdGVkIG9yIGVudGVyIGRlYWRsb2NrXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTk4LVx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjk5Olx0cmV0ID0gZ3JvX2NlbGxzX3JlY2VpdmUoXHUwMDI2cGVlci1cdTAwM2VvdnBuLVx1MDAzZWdyb19jZWxscywgc2tiKTtcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0xMDAtXHRpZiAobGlrZWx5KHJldCA9PSBORVRfUlhfU1VDQ0VTUykpIHtcbi0tXG5kcml2ZXJzL25ldC9wZmNwLmM9NTE9c3RhdGljIGludCBwZmNwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3BmY3AuYy05Ni1cbmRyaXZlcnMvbmV0L3BmY3AuYzo5NzpcdGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNnBmY3AtXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xuZHJpdmVycy9uZXQvcGZjcC5jLTk4LVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNjQ2PXN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTgwMS1cdHZ4bGFuX3ZuaWZpbHRlcl9jb3VudCh2eGxhbiwgdm5pLCB2bmlub2RlLCBWWExBTl9WTklfU1RBVFNfUlgsIHNrYi1cdTAwM2VsZW4pO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE4MDI6XHRncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZ2eGxhbi1cdTAwM2Vncm9fY2VsbHMsIHNrYik7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTgwMy1cbi0tXG5pbmNsdWRlL25ldC9ncm9fY2VsbHMuaD0xMT1zdHJ1Y3QgZ3JvX2NlbGxzIHtcbi0tXG5pbmNsdWRlL25ldC9ncm9fY2VsbHMuaC0xNC1cbmluY2x1ZGUvbmV0L2dyb19jZWxscy5oOjE1OmludCBncm9fY2VsbHNfcmVjZWl2ZShzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvZ3JvX2NlbGxzLmgtMTYtaW50IGdyb19jZWxsc19pbml0KHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4tLVxubmV0L2NvcmUvZ3JvX2NlbGxzLmM9OD1zdHJ1Y3QgZ3JvX2NlbGwge1xuLS1cbm5ldC9jb3JlL2dyb19jZWxscy5jLTEzLVxubmV0L2NvcmUvZ3JvX2NlbGxzLmM6MTQ6aW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL2dyb19jZWxscy5jLTE1LXtcbi0tXG5uZXQvY29yZS9ncm9fY2VsbHMuYy01NS19XG5uZXQvY29yZS9ncm9fY2VsbHMuYzo1NjpFWFBPUlRfU1lNQk9MKGdyb19jZWxsc19yZWNlaXZlKTtcbm5ldC9jb3JlL2dyb19jZWxscy5jLTU3LVxuLS1cbm5ldC9kc2EvdGFnLmM9NTQ9c3RhdGljIGludCBkc2Ffc3dpdGNoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9kc2EvdGFnLmMtMTIyLVxubmV0L2RzYS90YWcuYzoxMjM6XHRncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZwLVx1MDAzZWdjZWxscywgc2tiKTtcbm5ldC9kc2EvdGFnLmMtMTI0LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTM3Nz1pbnQgaXBfdHVubmVsX3JjdihzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDQ3LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDQ4Olx0Z3JvX2NlbGxzX3JlY2VpdmUoXHUwMDI2dHVubmVsLVx1MDAzZWdyb19jZWxscywgc2tiKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ0OS1cdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz04MDg9c3RhdGljIGludCBfX2lwNl90bmxfcmN2KHN0cnVjdCBpcDZfdG5sICp0dW5uZWwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTg5NC1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzo4OTU6XHRncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZ0dW5uZWwtXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTg5Ni1cdHJldHVybiAwO1xuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYz00NjY9aW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03NDYtXHRcdFx0ZGV2X3B1dChkZXYpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjc0NzpcdFx0Z3JvX2NlbGxzX3JlY2VpdmUoXHUwMDI2Z3JvX2NlbGxzLCBza2IpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTc0OC1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTc2NC1cdFx0XHRcdHNrYl9kc3RfZHJvcChza2IpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjc2NTpcdFx0XHRncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZncm9fY2VsbHMsIHNrYik7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzY2LVx0XHR9XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTYzOT1zdGF0aWMgdTMyIF9faXB0ZnNfaXBsZW4odTggKmRhdGEpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY1NC0gKiBGaW5pc2ggdGhlIHN0YW5kYXJkIHhmcm0gcHJvY2Vzc2luZyBvbiB0aGUgaW5uZXIgcGFja2V0IHByaW9yIHRvIHNlbmRpbmcgYmFja1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjY1NTogKiB0aHJvdWdoIGdyb19jZWxsc19yZWNlaXZlLiBXZSBkbyB0aGlzIHNlcGFyYXRlbHkgYi9jIHdlIGFyZSBidWlsZGluZyBhIGxpc3Rcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NTYtICogb2YgcGFja2V0cyBpbiB0aGUgaG9wZXMgdGhhdCBvbmUgZGF5IGEgbGlzdCB3aWxsIGJlIHRha2VuIGJ5XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTY1OT1zdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY2Mi1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2NjM6XHQvKiBUaGUgcGFja2V0IGlzIGdvaW5nIGJhY2sgdGhyb3VnaCBncm9fY2VsbHNfcmVjZWl2ZSBubyBuZWVkIHRvXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjY0LVx0ICogc2V0IHRoaXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM2MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaGFzIG1lIGludHJpZ3VlZC4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIG5hbWVseSBgZ3JvX2NlbGxzX3JlY2VpdmVgIGFuZCBgZ3RwX3J4YC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoYXQgYGdyb19jZWxsc19yZWNlaXZlYCBub3cgY2FsbHMgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYilgLiBUaGF0JiMzOTtzIGEgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgaW1wYWN0cyBhICpsb3QqIG9mIGRyaXZlcnMgYW5kIHR1bm5lbHPigJR2eGxhbiwgZ2VuZXZlLCB0aGUgaXBfdHVubmVsLCB4ZnJtLi4uIGJhc2ljYWxseSBhbnl0aGluZyB0aGF0IGRvZXMgZW5jYXBzdWxhdGlvbi4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoaXMuIFRoZSBvdGhlciBtb2RpZmljYXRpb24gZGVhbHMgd2l0aCB0aGUgYGd0cF9yeGAgZnVuY3Rpb24gd2hpY2ggY2F1c2VzIEdTTyBwYWNrZXRzIHRvIGJlIGRyb3BwZWQuCgpUaGUgYmlnIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBJIG1lYW4sIGl0ICpkb2VzKiBmaXggYSBidWfigJRgZ3JvX2NlbGxzX3JlY2VpdmVgIHdhc24mIzM5O3QgcHJvcGVybHkgdW5zZXR0aW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyLCB3aGljaCBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBzaWRlIGVmZmVjdHMgZG93biB0aGUgbGluZS4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcuIFRoZSBgZ3RwX3J4YCBjaGFuZ2UsIHRob3VnaCwgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJlaGF2aW91ciBjaGFuZ2UgYXMgb3Bwb3NlZCB0byBhIGJ1Z2ZpeC4gU28gSSBuZWVkIHRvIGJlIHN1cmUgb24gdGhpcy4KCkkmIzM5O20gdGhpbmtpbmcsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIGJvdGggYGd0cF9yeGAgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAgYW5kIHNlZSB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGluIGRldGFpbC4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwX3J4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTI4OD1zdGF0aWMgaW50IGd0cF9pbm5lcl9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGRybGVuLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTMxMS1cbmRyaXZlcnMvbmV0L2d0cC5jOjMxMjpzdGF0aWMgaW50IGd0cF9yeChzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L2d0cC5jLTMxMy1cdFx0ICB1bnNpZ25lZCBpbnQgaGRybGVuLCB1bnNpZ25lZCBpbnQgcm9sZSwgX191MTYgaW5uZXJfcHJvdG8pXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9NTg1PXN0YXRpYyBpbnQgZ3RwMF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTYyNS1cbmRyaXZlcnMvbmV0L2d0cC5jOjYyNjpcdHJldHVybiBndHBfcngocGN0eCwgc2tiLCBoZHJsZW4sIGd0cC1cdTAwM2Vyb2xlLCBpbm5lcl9wcm90byk7XG5kcml2ZXJzL25ldC9ndHAuYy02MjctfVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTc5Mz1zdGF0aWMgaW50IGd0cDF1X3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtODUyLVxuZHJpdmVycy9uZXQvZ3RwLmM6ODUzOlx0cmV0dXJuIGd0cF9yeChwY3R4LCBza2IsIGhkcmxlbiwgZ3RwLVx1MDAzZXJvbGUsIGlubmVyX3Byb3RvKTtcbmRyaXZlcnMvbmV0L2d0cC5jLTg1NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdUUCBSZWNlaXZlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEdUUCByZWNlaXZlIHByb2Nlc3NpbmcuIEl0IHNlZW1zIGBndHBfcnhgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBmcm9tIGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YC4gTWFrZXMgc2Vuc2UsIHRob3NlIGFyZSB0aGUgVURQIGVuY2Fwc3VsYXRpb24gZW50cnkgcG9pbnRzLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgc2tiX2lzX2dzbyhza2IpYCB3aXRoaW4gYGd0cF9yeGAuIEhtbSwgdGhhdCBzdWdnZXN0cyB0aGV5JiMzOTtyZSBkZWFsaW5nIHdpdGggR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKS4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgYW4gYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyYCBjYWxsIGFkZGVkIHdpdGhpbiBgZ3JvX2NlbGxzX3JlY2VpdmVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB1c3VhbGx5IHJlbGF0ZWQgdG8gR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykuIFNpbmNlIEdTTyBhbmQgR1JPIHdvcmsgdG9nZXRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYGdyb19jZWxsc19yZWNlaXZlYCBpdHNlbGYgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZ3JvX2NlbGxzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2dyb19jZWxscy5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2hvdGRhdGEuaFx1MDAzZVxuICAgNzpcdFxuICAgODpcdHN0cnVjdCBncm9fY2VsbCB7XG4gICA5Olx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXHRuYXBpX3NrYnM7XG4gIDEwOlx0XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3RcdG5hcGk7XG4gIDExOlx0XHRsb2NhbF9sb2NrX3RcdFx0YmhfbG9jaztcbiAgMTI6XHR9O1xuICAxMzpcdFxuICAxNDpcdGludCBncm9fY2VsbHNfcmVjZWl2ZShzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBza19idWZmICpza2IpXG4gIDE1Olx0e1xuICAxNjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cdTAwM2VkZXY7XG4gIDE3Olx0XHRib29sIGhhdmVfYmhfbG9jayA9IGZhbHNlO1xuICAxODpcdFx0c3RydWN0IGdyb19jZWxsICpjZWxsO1xuICAxOTpcdFx0aW50IHJlcztcbiAgMjA6XHRcbiAgMjE6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAgMjI6XHRcdGlmICh1bmxpa2VseSghKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSkpXG4gIDIzOlx0XHRcdGdvdG8gZHJvcDtcbiAgMjQ6XHRcbiAgMjU6XHRcdHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gIDI2Olx0XG4gIDI3Olx0XHRpZiAoIWdjZWxscy1cdTAwM2VjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHtcbiAgMjg6XHRcdFx0cmVzID0gbmV0aWZfcngoc2tiKTtcbiAgMjk6XHRcdFx0Z290byB1bmxvY2s7XG4gIDMwOlx0XHR9XG4gIDMxOlx0XG4gIDMyOlx0XHRsb2NhbF9sb2NrX25lc3RlZF9iaChcdTAwMjZnY2VsbHMtXHUwMDNlY2VsbHMtXHUwMDNlYmhfbG9jayk7XG4gIDMzOlx0XHRoYXZlX2JoX2xvY2sgPSB0cnVlO1xuICAzNDpcdFx0Y2VsbCA9IHRoaXNfY3B1X3B0cihnY2VsbHMtXHUwMDNlY2VsbHMpO1xuICAzNTpcdFxuICAzNjpcdFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2Y2VsbC1cdTAwM2VuYXBpX3NrYnMpIFx1MDAzZSBSRUFEX09OQ0UobmV0X2hvdGRhdGEubWF4X2JhY2tsb2cpKSB7XG4gIDM3Olx0ZHJvcDpcbiAgMzg6XHRcdFx0ZGV2X2NvcmVfc3RhdHNfcnhfZHJvcHBlZF9pbmMoZGV2KTtcbiAgMzk6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDQwOlx0XHRcdHJlcyA9IE5FVF9SWF9EUk9QO1xuICA0MTpcdFx0XHRnb3RvIHVubG9jaztcbiAgNDI6XHRcdH1cbiAgNDM6XHRcbiAgNDQ6XHRcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y2VsbC1cdTAwM2VuYXBpX3NrYnMsIHNrYik7XG4gIDQ1Olx0XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZjZWxsLVx1MDAzZW5hcGlfc2ticykgPT0gMSlcbiAgNDY6XHRcdFx0bmFwaV9zY2hlZHVsZShcdTAwMjZjZWxsLVx1MDAzZW5hcGkpO1xuICA0NzpcdFxuICA0ODpcdFx0cmVzID0gTkVUX1JYX1NVQ0NFU1M7XG4gIDQ5Olx0XG4gIDUwOlx0dW5sb2NrOlxuICA1MTpcdFx0aWYgKGhhdmVfYmhfbG9jaylcbiAgNTI6XHRcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZnY2VsbHMtXHUwMDNlY2VsbHMtXHUwMDNlYmhfbG9jayk7XG4gIDUzOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAgNTQ6XHRcdHJldHVybiByZXM7XG4gIDU1Olx0fVxuICA1NjpcdEVYUE9SVF9TWU1CT0woZ3JvX2NlbGxzX3JlY2VpdmUpO1xuICA1NzpcdFxuICA1ODpcdC8qIGNhbGxlZCB1bmRlciBCSCBjb250ZXh0ICovXG4gIDU5Olx0c3RhdGljIGludCBncm9fY2VsbF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiAgNjA6XHR7XG4gIDYxOlx0XHRzdHJ1Y3QgZ3JvX2NlbGwgKmNlbGwgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGdyb19jZWxsLCBuYXBpKTtcbiAgNjI6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gIDYzOlx0XHRpbnQgd29ya19kb25lID0gMDtcbiAgNjQ6XHRcbiAgNjU6XHRcdHdoaWxlICh3b3JrX2RvbmUgXHUwMDNjIGJ1ZGdldCkge1xuICA2NjpcdFx0XHRfX2xvY2FsX2xvY2tfbmVzdGVkX2JoKFx1MDAyNmNlbGwtXHUwMDNlYmhfbG9jayk7XG4gIDY3Olx0XHRcdHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2Y2VsbC1cdTAwM2VuYXBpX3NrYnMpO1xuICA2ODpcdFx0XHRfX2xvY2FsX3VubG9ja19uZXN0ZWRfYmgoXHUwMDI2Y2VsbC1cdTAwM2ViaF9sb2NrKTtcbiAgNjk6XHRcdFx0aWYgKCFza2IpXG4gIDcwOlx0XHRcdFx0YnJlYWs7XG4gIDcxOlx0XHRcdG5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTtcbiAgNzI6XHRcdFx0d29ya19kb25lJiM0MzsmIzQzOztcbiAgNzM6XHRcdH1cbiAgNzQ6XHRcbiAgNzU6XHRcdGlmICh3b3JrX2RvbmUgXHUwMDNjIGJ1ZGdldClcbiAgNzY6XHRcdFx0bmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSk7XG4gIDc3Olx0XHRyZXR1cm4gd29ya19kb25lO1xuICA3ODpcdH1cbiAgNzk6XHRcbiAgODA6XHRpbnQgZ3JvX2NlbGxzX2luaXQoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICA4MTpcdHtcbiAgODI6XHRcdGludCBpO1xuICA4MzpcdFxuICA4NDpcdFx0Z2NlbGxzLVx1MDAzZWNlbGxzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBncm9fY2VsbCk7XG4gIDg1Olx0XHRpZiAoIWdjZWxscy1cdTAwM2VjZWxscylcbiAgODY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDg3Olx0XG4gIDg4Olx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xuICA4OTpcdFx0XHRzdHJ1Y3QgZ3JvX2NlbGwgKmNlbGwgPSBwZXJfY3B1X3B0cihnY2VsbHMtXHUwMDNlY2VsbHMsIGkpO1xuICA5MDpcdFxuICA5MTpcdFx0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2Y2VsbC1cdTAwM2VuYXBpX3NrYnMpO1xuICA5MjpcdFx0XHRsb2NhbF9sb2NrX2luaXQoXHUwMDI2Y2VsbC1cdTAwM2ViaF9sb2NrKTtcbiAgOTM6XHRcbiAgOTQ6XHRcdFx0c2V0X2JpdChOQVBJX1NUQVRFX05PX0JVU1lfUE9MTCwgXHUwMDI2Y2VsbC1cdTAwM2VuYXBpLnN0YXRlKTtcbiAgOTU6XHRcbiAgOTY6XHRcdFx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcdTAwMjZjZWxsLVx1MDAzZW5hcGksIGdyb19jZWxsX3BvbGwpO1xuICA5NzpcdFx0XHRuYXBpX2VuYWJsZShcdTAwMjZjZWxsLVx1MDAzZW5hcGkpO1xuICA5ODpcdFx0fVxuICA5OTpcdFx0cmV0dXJuIDA7XG4gMTAwOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NDIKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRoaXMgUGF0Y2ggaXMgYSBHb29kIElkZWEqKgoKT2theSwgc28gdGhpcyBwYXRjaCBsb29rcyBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEl0IGludHJvZHVjZXMgYSBjaGVjayBmb3IgR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSB3aXRoaW4gYGd0cF9yeGAgYW5kIGFsc28gYXBwZWFycyB0byBiZSB1bnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgaW4gYGdyb19jZWxsc19yZWNlaXZlYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSB0byB0YXJnZXQgd2l0aCBmdXp6aW5nLiBBbnl0aGluZyByZWxhdGVkIHRvIGhlYWRlciBtYW5pcHVsYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBHU08gaXMgaW52b2x2ZWQsIGlzIG9mdGVuIGEgc291cmNlIG9mIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSB0aGlua2luZyBHVFAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gaGVyZS4gVGltZSB0byBjb25maXJtIGlmIHRoYXQgY29uZmlnIGlzIGhhbmRsZWQgd2l0aGluIGRyaXZlcnMvbmV0L0tjb25maWcuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBsaW5lcyB1cCB3aXRoIHRoZSByZWxldmFudCBkcml2ZXIgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBHVFAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yNjA9Y29uZmlnIEJBUkVVRFBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTI3MS1cbmRyaXZlcnMvbmV0L0tjb25maWc6MjcyOmNvbmZpZyBHVFBcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVx0dHJpc3RhdGUgXCYjMzQ7R1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wgZGF0YXBhdGggKEdUUC1VKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjQzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqR1RQIERlcGVuZGVuY3kgSHVudCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgR1RQIHN1cHBvcnQuIE15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHByb2JhYmx5IGRlY2xhcmVkIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYC4gSXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgYW5kIGFzc29jaWF0ZWQgc2V0dGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBhbnkgS2NvbmZpZyBvcHRpb25zIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHdoaWNoIGRyaXZlcnMgYW5kIG1vZHVsZXMgcmVsYXRlIHRvIEdUUCBhbmQgd2hhdCBvdGhlciBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgb3IgY2FuIGJlIG9wdGlvbmFsbHkgZW5hYmxlZC4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gc3RhcnQgd2l0aCBmb3IgY29uZmlndXJhdGlvbiB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBiYXJldWRwLlxuIDI3MTpcdFxuIDI3MjpcdGNvbmZpZyBHVFBcbiAyNzM6XHRcdHRyaXN0YXRlIFwmIzM0O0dQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSlcJiMzNDtcbiAyNzQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDI3NTpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gMjc2Olx0XHRoZWxwXG4gMjc3Olx0XHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgZ3RwIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcbiAyNzg6XHRcdCAgdGhlIEdQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSkuIFRoaXMgdHVubmVsaW5nIHByb3RvY29sXG4gMjc5Olx0XHQgIGlzIHVzZWQgdG8gcHJldmVudCBzdWJzY3JpYmVycyBmcm9tIGFjY2Vzc2luZyBtb2JpbGUgY2FycmllciBjb3JlXG4gMjgwOlx0XHQgIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGEgdXNlcnNwYWNlIHNvZnR3YXJlIHRoYXRcbiAyODE6XHRcdCAgaW1wbGVtZW50cyB0aGUgc2lnbmFsaW5nIHByb3RvY29sIChHVFAtQykgdG8gdXBkYXRlIGl0cyBQRFAgY29udGV4dFxuIDI4MjpcdFx0ICBiYXNlLCBzdWNoIGFzIE9wZW5HR1NOIFx1MDAzY2h0dHA6Ly9naXQub3Ntb2NvbS5vcmcvb3Blbmdnc24vKS4gVGhpc1xuIDI4MzpcdFx0ICB0dW5uZWxpbmcgcHJvdG9jb2wgaXMgaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBHU00gVFMgMDkuNjAgYW5kXG4gMjg0Olx0XHQgIDNHUFAgVFMgMjkuMDYwIHN0YW5kYXJkcy5cbiAyODU6XHRcbiAyODY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyODc6XHRcdCAgd2lsbCBiZSBjYWxsZWQgZ3RwLlxuIDI4ODpcdFxuIDI4OTpcdGNvbmZpZyBQRkNQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBncm9fY2VsbHNfcmVjZWl2ZWAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIGBHVFBgIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBlbmFibGluZyBjb25kaXRpb25zIGZvciBgZ3JvX2NlbGxzX3JlY2VpdmVgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2NvcmUvZ3JvX2NlbGxzLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIGNlbGwgaGFuZGxpbmcgcmVzaWRlcywgb2J2aW91c2x5LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXNzZWN0IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB0byB0cmFjZSBiYWNrIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIHdhbnQgdG8gcGlucG9pbnQgZXhhY3RseSB3aGljaCBjb25maWd1cmF0aW9ucywgb3IgY29tYmluYXRpb25zIG9mIGNvbmZpZ3VyYXRpb25zLCBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBUaGlzIHdpbGwgaGVscCB1bmRlcnN0YW5kIHRoZSBidWlsZCBhbmQgcnVudGltZSBpbXBsaWNhdGlvbnMgZm9yIGEgZ2l2ZW4gZGVwbG95bWVudCBhbmQgYWxzbyBhbnkgdXBzdHJlYW0gZGVwZW5kZW5jeSByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dyb19jZWxscy5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19IV0JNKSAmIzQzOz0gaHdibS5vXG5uZXQvY29yZS9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfR1JPX0NFTExTKSAmIzQzOz0gZ3JvX2NlbGxzLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQzLW9iai0kKENPTkZJR19GQUlMT1ZFUikgJiM0Mzs9IGZhaWxvdmVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYENPTkZJR19HUk9fQ0VMTFNgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfR1JPX0NFTExTYCBpcyB0aGUgY29uZmlnIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMsIGZlYXR1cmVzLCBvciBkcml2ZXJzIG1pZ2h0IGVuYWJsZSBvciByZXF1aXJlIHRoaXMgb3B0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgc2VsZWN0aW9uIHBhdGhzLCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWcgc3lzdGVtIGFuZCBzZWUgd2hhdCYjMzk7cyBzZWxlY3RpbmcgaXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIGxvb2sgZm9yIGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgd2h5IGl0JiMzOTtzIGVuYWJsZWQgaW4gdmFyaW91cyBjb250ZXh0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEdST19DRUxMUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTIzMD1jb25maWcgVlhMQU5cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMy1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMzQ6XHRzZWxlY3QgR1JPX0NFTExTXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTI0NT1jb25maWcgR0VORVZFXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDgtXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjQ5Olx0c2VsZWN0IEdST19DRUxMU1xuZHJpdmVycy9uZXQvS2NvbmZpZy0yNTAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNjA9Y29uZmlnIEJBUkVVRFBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTI2My1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNjQ6XHRzZWxlY3QgR1JPX0NFTExTXG5kcml2ZXJzL25ldC9LY29uZmlnLTI2NS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTMxOD1jb25maWcgTUFDU0VDXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjItXHRzZWxlY3QgQ1JZUFRPX0dDTVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjM6XHRzZWxlY3QgR1JPX0NFTExTXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnPTY9bWVudWNvbmZpZyBSTU5FVFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWctOC1cdGRlZmF1bHQgblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZzo5Olx0c2VsZWN0IEdST19DRUxMU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZy0xMC1cdGhlbHBcbi0tXG5uZXQvZHNhL0tjb25maWc9Mz1tZW51Y29uZmlnIE5FVF9EU0Fcbi0tXG5uZXQvZHNhL0tjb25maWctNy1cdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVUREVWSUNFU1xubmV0L2RzYS9LY29uZmlnOjg6XHRzZWxlY3QgR1JPX0NFTExTXG5uZXQvZHNhL0tjb25maWctOS1cdHNlbGVjdCBORVRfU1dJVENIREVWXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0xODY9Y29uZmlnIE5FVF9JUF9UVU5ORUxcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE4OC1cdHNlbGVjdCBEU1RfQ0FDSEVcbm5ldC9pcHY0L0tjb25maWc6MTg5Olx0c2VsZWN0IEdST19DRUxMU1xubmV0L2lwdjQvS2NvbmZpZy0xOTAtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE5OT1jb25maWcgSVBWNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwMi1cdHNlbGVjdCBEU1RfQ0FDSEVcbm5ldC9pcHY2L0tjb25maWc6MjAzOlx0c2VsZWN0IEdST19DRUxMU1xubmV0L2lwdjYvS2NvbmZpZy0yMDQtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz01PWNvbmZpZyBYRlJNXG4tLVxubmV0L3hmcm0vS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjg6XHRzZWxlY3QgR1JPX0NFTExTXG5uZXQveGZybS9LY29uZmlnLTktXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk0MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEluaXRpYWxseSwgSSB0aG91Z2h0IHdlIGNvdWxkIGp1c3QgZW5hYmxlIGBHVFBgIGFuZCBgR1JPX0NFTExTYCDigJMgb3IgcG90ZW50aWFsbHkgc29tZXRoaW5nIGxpa2UgYFZYTEFOYCBvciBgR0VORVZFYCB3aGljaCAqZG8qIHNlbGVjdCBgR1JPX0NFTExTYC4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGRvZXMgYEdUUGAgYWN0dWFsbHkgKnNlbGVjdCogYEdST19DRUxMU2A/IExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ndHAuY2Agc291cmNlIGNvZGUuIERvZXMgaXQgdXNlIHRoZSBgZ3JvX2NlbGxzX3JlY2VpdmVgIGZ1bmN0aW9uPyBIbW0sIG5vLCBpdCBsb29rcyBsaWtlIGBndHBfcnhgIGRvZXNuJiMzOTt0IHV0aWxpemUgYGdyb19jZWxsc19yZWNlaXZlYC4KCldhaXQsIGxldCBtZSBtYWtlIHN1cmUuIFRoZSBkaWZmIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW5kaWNhdGUgdGhhdCBgZ3RwLmNgIGlzIHVzaW5nIGBncm9fY2VsbHNfcmVjZWl2ZWAuIERvZXMgYGd0cC5jYCAqYWN0dWFsbHkqIHVzZSBgZ3JvX2NlbGxzX3JlY2VpdmVgPyBObywgaXQgbG9va3MgbGlrZSBgZ3JvX2NlbGxzX3JlY2VpdmVgIGlzIHVzZWQgYnkgb3RoZXIgZHJpdmVycy4gVGhlIHBhdGNoIGRvZXMgbW9kaWZ5IGJvdGggYGd0cC5jYCBhbmQgYGdyb19jZWxscy5jYCwgc28gYEdUUGAgaXMgcmVxdWlyZWQgZm9yIGBndHAuY2AsIGFuZCBgR1JPX0NFTExTYCBpcyBuZWNlc3NhcnkgZm9yIGBncm9fY2VsbHMuY2AuCgpMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYEdUUGAgZG9lc24mIzM5O3Qgc2VsZWN0IGBHUk9fQ0VMTFNgLiBOb3BlLCBpdCBkb2VzbiYjMzk7dC4gQnV0LCBgR1JPX0NFTExTYCAqaXMqIHNlbGVjdGVkIGJ5IGBWWExBTmAsIGBHRU5FVkVgLCBgTUFDU0VDYCwgYE5FVF9JUF9UVU5ORUxgLCBgSVBWNl9UVU5ORUxgLCBhbmQgYFhGUk1gLiBTbywgd2UgY2FuIGp1c3Qgc3BlY2lmeSBgR1RQYCBhbmQgYEdST19DRUxMU2AgdG8gYmUgc3VyZS4KClJlZ2FyZGluZyB0aGUgZm9jdXMgc3ltYm9scy4gTG9va3MgbGlrZSBgZ3RwX3J4YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gSSBzaG91bGQgY2hlY2sgd2hpY2ggbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgYXJlIGF2YWlsYWJsZS4gQXJlIHRoZXkgYGd0cDBfdWRwX2VuY2FwX3JlY3ZgIGFuZCBgZ3RwMXVfdWRwX2VuY2FwX3JlY3ZgPyBObyB3YWl0LCBgZ3RwX3J4YCBpcyBzdGlsbCBzdGF0aWMuIExldCYjMzk7cyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGBndHAwX3VkcF9lbmNhcF9yZWN2YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwMF91ZHBfZW5jYXBfcmVjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYz01Njk9c3RhdGljIGludCBndHBfcHJvdG9fdG9fZmFtaWx5KF9fdTE2IHByb3RvKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTU4NC0vKiAxIG1lYW5zIHBhc3MgdXAgdG8gdGhlIHN0YWNrLCAtMSBtZWFucyBkcm9wIGFuZCAwIG1lYW5zIGRlY2Fwc3VsYXRlZC4gKi9cbmRyaXZlcnMvbmV0L2d0cC5jOjU4NTpzdGF0aWMgaW50IGd0cDBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L2d0cC5jLTU4Ni17XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9OTA4PXN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTkyMS1cdFx0bmV0ZGV2X2RiZyhndHAtXHUwMDNlZGV2LCBcJiMzNDtyZWNlaXZlZCBHVFAwIHBhY2tldFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ndHAuYzo5MjI6XHRcdHJldCA9IGd0cDBfdWRwX2VuY2FwX3JlY3YoZ3RwLCBza2IpO1xuZHJpdmVycy9uZXQvZ3RwLmMtOTIzLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHVuZGVyc3RhbmRpbmcsIGdpdmVuIG15IGV4cGVydGlzZToKCioqR1RQIEVuY2Fwc3VsYXRpb24gRW50cnkgUG9pbnQqKgoKUmlnaHQsIHNvIGBndHBfZW5jYXBfcmVjdmAgaXMgKnRoZSogcG9pbnQgb2YgZW50cnkgZm9yIHRoZSB3aG9sZSBHVFAtb3Zlci1VRFAgZW5jYXBzdWxhdGlvbiBwcm9jZXNzLiBUaGF0JiMzOTtzIHRoZSBnYXRld2F5LiBJIHVuZGVyc3RhbmQgdGhpcyBtZWFucyB0aGF0IGFueSBpbmNvbWluZyBHVFAgdHJhZmZpYyB0aGF0JiMzOTtzIGdvaW5nIHRvIGJlIHVuZW5jYXBzdWxhdGVkLCBwYXJzZWQsIGFuZCByb3V0ZWQgbmVlZHMgdG8gZ28gdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjaGFpbiwgdGhlIGluaXRpYWwgaGFuZHNoYWtlIHdpdGggdGhlIEdUUCBwYWNrZXRzIHRoYXQgYXJlIGJlaW5nIHRyYW5zcG9ydGVkIG92ZXIgVURQLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgY29ycmVjdCBwcm9jZXNzaW5nIG9mIGFueSBHVFAgdHJhZmZpYy4gU28sIGBndHBfZW5jYXBfcmVjdmAgaXMgdGhlIGtleSBmb3IgYW55dGhpbmcgR1RQIHJlbGF0ZWQgdGhhdCYjMzk7cyB1c2luZyBVRFAgdHJhbnNwb3J0LiBHb3R0YSBnZXQgdGhhdCByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwX2VuY2FwX3JlY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ3RwLmM9ODkxPXN0YXRpYyB2b2lkIGd0cF9lbmNhcF9kaXNhYmxlKHN0cnVjdCBndHBfZGV2ICpndHApXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtOTA3LSAqL1xuZHJpdmVycy9uZXQvZ3RwLmM6OTA4OnN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvZ3RwLmMtOTA5LXtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0xNDA5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqZ3RwX2NyZWF0ZV9zb2NrKGludCB0eXBlLCBzdHJ1Y3QgZ3RwX2RldiAqZ3RwLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE0MzktXHR0dW5jZmcuZW5jYXBfdHlwZSA9IHR5cGU7XG5kcml2ZXJzL25ldC9ndHAuYzoxNDQwOlx0dHVuY2ZnLmVuY2FwX3JjdiA9IGd0cF9lbmNhcF9yZWN2O1xuZHJpdmVycy9uZXQvZ3RwLmMtMTQ0MS1cdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gTlVMTDtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0xNjU0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqZ3RwX2VuY2FwX2VuYWJsZV9zb2NrZXQoaW50IGZkLCBpbnQgdHlwZSxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0xNjk0LVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xuZHJpdmVycy9uZXQvZ3RwLmM6MTY5NTpcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcbmRyaXZlcnMvbmV0L2d0cC5jLTE2OTYtXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IGd0cF9lbmNhcF9kZXN0cm95O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzNAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgR1RQIGFuZCBHUk9fQ0VMTFMgZm9yIERhdGFwYXRoIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtYWluIGVudHJ5IHBvaW50IGZvciBHVFAgcGFja2V0cyBpcyBgZ3RwX2VuY2FwX3JlY3ZgLiBJdCYjMzk7cyB1c2VkIHdpdGhpbiBgZ3JvX2NlbGxzX3JlY2VpdmVgLCB3aGljaCBpcyBleHBvcnRlZCBhbmQgY2FsbGVkIGJ5IHZhcmlvdXMgZHJpdmVycywgc28gYm90aCBvZiB0aGVzZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSAqRm9jdXNTeW1ib2xzKiBmb3IgdGhpcyBhbmFseXNpcy4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYGdyb19jZWxsc19yZWNlaXZlYCBpcyBleHBvcnRlZCwgYW5kIGl0IGlzISBJdCYjMzk7cyBub3Qgc3RhdGljLiBHb29kLiBOb3csIGBndHBfZW5jYXBfcmVjdmAgaXMgc3RhdGljLCB3aGljaCBzZWVtcyBjb250cmFyeSB0byB0aGUgZ3VpZGFuY2UgdG8gcHJlZmVyIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBIb3dldmVyLCBpdCAqaXMqIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtgKSwgc28gaXQgd29uJiMzOTt0IGJlIGlubGluZWQgYW5kICpkb2VzKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoaXMgbWFrZXMgaXQgYSB2aWFibGUgY2FuZGlkYXRlLiBTaW5jZSB0aGVyZSBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGEgYmV0dGVyIG5vbi1zdGF0aWMgb3B0aW9uLCBgZ3RwX2VuY2FwX3JlY3ZgIHdpbGwgYmUgdGhlIGJlc3QgZW50cnlwb2ludCBmdW5jdGlvbiBmb3IgdGhlIEdUUCBkYXRhcGF0aC4KCkkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGBncm9fY2VsbHNfcmVjZWl2ZWAgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYC4gWWVwLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAgYW5kIGlzIEVYUE9SVF9TWU1CT0wmIzM5O2QuCgpTbywgdGhlICpGb2N1c1N5bWJvbHMqIGFyZSBjb25maXJtZWQ6IGBndHBfZW5jYXBfcmVjdmAgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAuCgpOb3csIGZvciAqRW5hYmxlQ29uZmlncyosIEkgbmVlZCBgR1RQYCBhbmQgYEdST19DRUxMU2AuCgpJJiMzOTttIGdvaW5nIHRvIHJldmlldyB0aGUgcGF0Y2ggbm93LiBJdCBmaXhlcyB0d28gdGhpbmdzOiBmaXJzdCwgaXQgZHJvcHMgR1NPIHBhY2tldHMgaW4gdGhlIEdUUCBkYXRhcGF0aCwgYW5kIHNlY29uZCwgaXQgdW5zZXRzIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGluIGBncm9fY2VsbHNfcmVjZWl2ZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCBwcmV2ZW50cyBzdGFsZSB0cmFuc3BvcnQgaGVhZGVycyBmcm9tIGNhdXNpbmcgaXNzdWVzIGFzIHBhY2tldHMgYXJlIHBhc3NlZCB1cCB0aGUgc3RhY2suIEJvdGggb2YgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3RpbmcgY29yZSBuZXR3b3JraW5nIGFuZCBkcml2ZXIgY29kZS4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuCgpNeSAqRm9jdXNTeW1ib2xzKiBhcmUgc3RpbGw6IGBndHBfZW5jYXBfcmVjdmAsIGBncm9fY2VsbHNfcmVjZWl2ZWAuClRoZSAqRW5hYmxlQ29uZmlncyogSSYjMzk7bGwgbmVlZCBhcmUgYEdUUGAgYW5kIGBHUk9fQ0VMTFNgLgoKTm93LCBJJiMzOTttIGp1c3QgY29uZmlybWluZyB0aGF0IGBHUk9fQ0VMTFNgIGlzIGEgdmFsaWQgY29uZmlnIG9wdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBBaCwgaXQmIzM5O3MgKnNlbGVjdGVkKiBpbiB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLCBidXQgbm90IGRpcmVjdGx5IGRlZmluZWQgYXMgYGNvbmZpZyBHUk9fQ0VMTFNgLiBHb3R0YSBsb29rIGEgYml0IGRlZXBlciB0byBzZWUgd2hlcmUgYEdST19DRUxMU2AgaXMgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEdST19DRUxMUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00NjE9Y29uZmlnIERTVF9DQUNIRVxuLS1cbm5ldC9LY29uZmlnLTQ2NC1cbm5ldC9LY29uZmlnOjQ2NTpjb25maWcgR1JPX0NFTExTXG5uZXQvS2NvbmZpZy00NjYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDk0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gYGNvbmZpZyBHUk9fQ0VMTFNgIGlzIGEgYm9vbGVhbiB3aXRoaW4gYG5ldC9LY29uZmlnYC4gUmlnaHQsIGl0JiMzOTtzIGEgYGJvb2xgIHdpdGhvdXQgYSBwcm9tcHQsIHdoaWNoIG1lYW5zIGl0IGNhbiYjMzk7dCBiZSBkaXJlY3RseSBzZWxlY3RlZCBieSBhIHVzZXIuIEl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgKnRocm91Z2gqIGFub3RoZXIgY29uZmlnLiBIbW0sIGlmIEkgdHJ5IHRvIGp1c3QgYWRkIGBHUk9fQ0VMTFNgIHRvIGBFbmFibGVDb25maWdzYCwgaXQgbGlrZWx5IHdvbiYjMzk7dCB3b3JrLCBiZWNhdXNlIEtjb25maWcgd29uJiMzOTt0IGxldCBpdCBiZSBkaXJlY3RseSBzZWxlY3RlZC4KCldhaXQsIGRvZXMgc3l6a2FsbGVyIGJ5cGFzcyB0aGlzIHJlc3RyaWN0aW9uPyBObywgdGhlIEtjb25maWcgdG9vbGluZyB3aWxsIGlnbm9yZSBpdCBzaW5jZSB0aGVyZSYjMzk7cyBubyBwcm9tcHQuIFNvLCBJIG5lZWQgdG8gZmluZCBhICpzZWxlY3RpbmcqIGNvbmZpZy4gU29tZXRoaW5nIHRoYXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gZW5hYmxlIGBHUk9fQ0VMTFNgLiBPa2F5LCBgVlhMQU5gLCBgTUFDU0VDYCwgb3IgYEdFTkVWRWAgY291bGQgd29yay4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGluY2x1ZGluZyBib3RoIGBWWExBTmAgYW5kIGBHRU5FVkVgLgoKSG9sZCBvbi4uLiBkb2VzIGBHVFBgIHNlbGVjdCBpdD8gTmVlZCB0byBjb25maXJtLiBOby4gT2theSwgYmFjayB0byB0aGUgZHJhd2luZyBib2FyZCB0byBkb3VibGUtY2hlY2suIExldCBtZSBsb29rIGF0IGBkcml2ZXJzL25ldC9LY29uZmlnYCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgVlhMQU5gIHNlbGVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZYTEFOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTIyOS1cbmRyaXZlcnMvbmV0L0tjb25maWc6MjMwOmNvbmZpZyBWWExBTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMzAKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVjaXNpb24qKgoKT2theSwgc28gSSYjMzk7bSBpbXBsZW1lbnRpbmcgc29tZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gR1RQIGFuZCBWWExBTi4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgdXNlciAqY2FuKiBzZWxlY3QgVlhMQU4sIHNvIHRoYXQmIzM5O3MgZ29pbmcgaW4gbXkgRW5hYmxlQ29uZmlncy4gSSYjMzk7bGwgYWxzbyBhZGQgR1RQIHRvIEVuYWJsZUNvbmZpZ3MuIE5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBkZXBlbmRlbmNpZXMgY2F1c2luZyBwcm9ibGVtcy4KCkdUUCBkZXBlbmRzIG9uIElORVQsIHdoaWNoIGlzIGV4cGVjdGVkLCBhbmQgc2VsZWN0cyBORVRfVURQX1RVTk5FTC4gVGhhdCYjMzk7cyBhbGwgZ29vZCwgbm8gaXNzdWVzIHRoZXJlLgoKVlhMQU4gYWxzbyBkZXBlbmRzIG9uIElORVQgYW5kIHRoZW4gZWl0aGVyIElQVjYgKm9yKiBpdCBiZWluZyBkaXNhYmxlZCwgYW5kIGFsc28gc2VsZWN0cyBORVRfVURQX1RVTk5FTCBhbmQgR1JPX0NFTExTLiBNYWtlcyBzZW5zZS4gSSYjMzk7dmUgYWxyZWFkeSBjb25maXJtZWQgSSBjYW4gZW5hYmxlIEdST19DRUxMUyBieSBlbmFibGluZyBWWExBTiBhbmQgdGhhdCB0aGUgVlhMQU4gb3B0aW9uIHdpbGwgZW5hYmxlIE5FVF9VRFBfVFVOTkVMLCBzbyB0aGF04oCZcyBmaW5lLiBJJiMzOTttIGFsc28gY29uZmlybWluZyB0aGF0IE5FVF9VRFBfVFVOTkVMIGlzIHNlbGVjdGVkIGJ5ICpib3RoKiBHVFAgYW5kIFZYTEFOLCBhcyBleHBlY3RlZC4KClRoZXJlZm9yZSwgRW5hYmxlQ29uZmlncyB3aWxsIGJlOiAqKkdUUCwgVlhMQU4qKi4KCkZvciBteSBGb2N1c1N5bWJvbHMsIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlIGZ1bmN0aW9ucyBgZ3RwX2VuY2FwX3JlY3ZgIGFuZCBgZ3JvX2NlbGxzX3JlY2VpdmVgLCBzbyBJJiMzOTtsbCBpbmNsdWRlIHRob3NlLiBTbywgbXkgRm9jdXNTeW1ib2xzIGFyZTogKipndHBfZW5jYXBfcmVjdiwgZ3JvX2NlbGxzX3JlY2VpdmUqKi4KClRoaXMgcGF0Y2gsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHNwZWNpZmljIGlzc3VlIGJ5IG1vZGlmeWluZyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIHRoZSBndHBfcnggcGF0aCAoaGFuZGxlZCB2aWEgZ3RwX2VuY2FwX3JlY3YpIGFuZCBtb2RpZnlpbmcgZ3JvX2NlbGxzX3JlY2VpdmUgdG8gcHJldmVudCBzdGFsZSBoZWFkZXIgaXNzdWVzLiBUaGVzZSBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgYWN0aXZlIG5ldHdvcmsgZGF0YXBhdGgsIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgY2hhbmdlLiBJJiMzOTttIGFsbCBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtHVFAmIzM0OywKICAgICYjMzQ7VlhMQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndHBfZW5jYXBfcmVjdiYjMzQ7LAogICAgJiMzNDtncm9fY2VsbHNfcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIChjYWxsZWQgdmlhIGBndHBfZW5jYXBfcmVjdmApIGFuZCB1cGRhdGVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYGdyb19jZWxsc19yZWNlaXZlYCB0byB1bnNldCB0aGUgdHJhbnNwb3J0IGhlYWRlciBvZiBgc2tfYnVmZmBzIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggc3RhbGUgaGVhZGVycy4gQm90aCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBuZXR3b3JrIGRhdGFwYXRoIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dUUCYjMzQ7LAogICAgJiMzNDtWWExBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d0cF9lbmNhcF9yZWN2JiMzNDssCiAgICAmIzM0O2dyb19jZWxsc19yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHVFAgZHJpdmVyIHRvIGRyb3AgR1NPIHBhY2tldHMgaW4gYGd0cF9yeGAgKGNhbGxlZCB2aWEgYGd0cF9lbmNhcF9yZWN2YCkgYW5kIHVwZGF0ZXMgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIGBza19idWZmYHMgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBzdGFsZSBoZWFkZXJzLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZGF0YXBhdGggY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzIGFuZCBtb2RpZmllcyBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIHRoZSBgc2tiYCBieSBzZXR0aW5nIGBza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcmAgdG8gYH4wVWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiB0aGUgdW5zZXQgdHJhbnNwb3J0IGhlYWRlciBpcyB1c2VkIHdpdGhvdXQgY2hlY2tpbmcsIGl0IHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAodXNpbmcgYH4wVWAgYXMgYW4gb2Zmc2V0KSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaHVzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFhMWFiOGQwNWMyYmI1MWUxNzdhZmY5N2U1ZmU4YjAzMGRmYmNlZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzoyODoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmMKaW5kZXggOWExMmNjNTNkYTAwMi4uZjZlNDdjMzY5ZDYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3RwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZ3RwLmMKQEAgLTMxMiw2ICYjNDM7MzEyLDExIEBAIHN0YXRpYyBpbnQgZ3RwX2lubmVyX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZHJsZW4sCiBzdGF0aWMgaW50IGd0cF9yeChzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICB1bnNpZ25lZCBpbnQgaGRybGVuLCB1bnNpZ25lZCBpbnQgcm9sZSwgX191MTYgaW5uZXJfcHJvdG8pCiB7CiYjNDM7CWlmIChza2JfaXNfZ3NvKHNrYikpIHsKJiM0MzsJCW5ldGRldl9kYmcocGN0eC0mZ3Q7ZGV2LCAmIzM0O0dTTyBpcyBub3Qgc3VwcG9ydGVkIGluIEdUUFxuJiMzNDspOwomIzQzOwkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKIAlpZiAoIWd0cF9jaGVja19tcyhza2IsIHBjdHgsIGhkcmxlbiwgcm9sZSwgaW5uZXJfcHJvdG8pKSB7CiAJCW5ldGRldl9kYmcocGN0eC0mZ3Q7ZGV2LCAmIzM0O05vIFBEUCBjdHggZm9yIHRoaXMgTVNcbiYjMzQ7KTsKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCAyMmVkYTFkNTRhMGU4Li42MjZiYmI5YmFlMWFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTMwODIsNiAmIzQzOzMwODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyKSl+MFU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9ICh0eXBlb2Yoc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyKSl+MFU7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfdHJhbnNwb3J0X2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCURFQlVHX05FVF9XQVJOX09OX09OQ0UoIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ncm9fY2VsbHMuYyBiL25ldC9jb3JlL2dyb19jZWxscy5jCmluZGV4IDFiODQzODVjMDRiZDkuLmQ4YzBhMjg2NzEyMDEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2dyb19jZWxscy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2dyb19jZWxscy5jCkBAIC0yMiw2ICYjNDM7MjIsOCBAQCBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmICh1bmxpa2VseSghKGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1VQKSkpCiAJCWdvdG8gZHJvcDsKIAomIzQzOwlza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwomIzQzOwogCWlmICghZ2NlbGxzLSZndDtjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHsKIAkJcmVzID0gbmV0aWZfcngoc2tiKTsKIAkJZ290byB1bmxvY2s7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE5CgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdUUCBQYXRjaDogS01TQU4gSW1wbGljYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLiBMb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgYGd0cF9yeGAgbm93IGRyb3BwaW5nIEdTTyBwYWNrZXRzIHdpdGggdGhlIGFkZGVkIGNoZWNrIGBpZiAoc2tiX2lzX2dzbyhza2IpKWAuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgYWRkcmVzc2luZyBhbiBpbmNvbXBhdGliaWxpdHkgd2l0aCBHVFAsIGFuZCBHU08gaGFuZGxpbmcuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgYWRkaXRpb24gb2YgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYilgIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgYW5kIGl04oCZcyBiZWluZyBjYWxsZWQgaW4gYGdyb19jZWxsc19yZWNlaXZlYC4gVGhpcyBpcyB0aGUgcGFydCB0aGF0IHBpcXVlZCBteSBpbnRlcmVzdCByZWdhcmRpbmcgbWVtb3J5IHNhZmV0eS4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bjoKCiogICAqKmBndHBfcnhgIGFuZCBHU08gcGFja2V0czoqKiBUaGF0IGRyb3AgbG9naWMgc2VlbXMgc291bmQgZW5vdWdoLiBOb3RoaW5nIGFsYXJtaW5nIHRoZXJlLgoqICAgKipgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgOioqIFRoaXMgaXMgdGhlIGtleS4gU2V0dGluZyBgc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyYCB0byBgfjBVYCBlZmZlY3RpdmVseSBtZWFucyBpdCYjMzk7cyBtYXJrZWQgYXMgdW5zZXQuIFRoYXQgaXMgd2hhdCB0aGlzIGNhbGwgZG9lcy4KKiAgICoqYGdyb19jZWxsc19yZWNlaXZlYCBjYWxsOioqIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgbWFraW5nIHVzZSBvZiBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQsIHdhaXQsIHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBXZSYjMzk7cmUgKnNldHRpbmcqIGBza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXJgIHRvIGEgKnNwZWNpZmljKiB2YWx1ZSwgYH4wVWAsIG5vdCBsZWF2aW5nIGl0IGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZSBHU08gZHJvcCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb25kaXRpb25hbCwgbm8gY29tcGxleGl0aWVzIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgZGlnIGEgYml0IGRlZXBlci4gQ291bGQgdGhpcyBwb3RlbnRpYWxseSBsZWFkIHRvIGEgbWVtb3J5ICpyZWFkKiBpc3N1ZSBvciBldmVuIGFuIGluZm8gbGVhaz8gYHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcmAgaXMgZWl0aGVyIGFuIG9mZnNldCBvciBhIHBvaW50ZXIsIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbi4gU2V0dGluZyBpdCB0byBgfjBVYCBpbmRpY2F0ZXMgYW4gdW5zZXQgc3RhdGUuIFRoZSBkYW5nZXIgaXMsIGlmIHNvbWUgcGFydCBvZiB0aGUgY29kZSAqcmVhZHMqIGBza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXJgIHdpdGhvdXQgY2hlY2tpbmcgaWYgaXQmIzM5O3Mgc2V0IHVzaW5nIGEgZnVuY3Rpb24gc3VjaCBhcyBgc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldGAsIGl0IG1pZ2h0IGludGVycHJldCB0aGF0IGB+MFVgIHZhbHVlIGFzIGEgdmFsaWQgb2Zmc2V0LiBUaGlzIGNvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHRvIGNhdGNoLiBCdXQsIHRoZXJlJiMzOTtzIG5vIGFjdHVhbCBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UmIzM5O3JlIGV4cGxpY2l0bHkgc2V0dGluZyBhIHZhbHVlLCBhbGJlaXQgYSAmIzM0O3NwZWNpYWwmIzM0OyBvbmUuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBvbmx5IHJpc2sgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHRoYXQgd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4sIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIFRoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzLiBJdCBhbHNvIG1vZGlmaWVzIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gdW5zZXQgdGhlIHRyYW5zcG9ydCBoZWFkZXIsIGJ5IHNldHRpbmcgYHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcmAgdG8gYH4wVWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIElmIHRoZSB1bnNldCB0cmFuc3BvcnQgaGVhZGVyIGlzIHVzZWQgd2l0aG91dCBjaGVja2luZywgaXQgcmVzdWx0cyBpbiBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggaXMgY2F1Z2h0IGJ5IEtBU0FOLgpUaHVzLCBubyBhZGRpdGlvbmFsIEtNU0FOIHRlc3RpbmcgaXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzIGFuZCBtb2RpZmllcyBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIHRoZSBgc2tiYCBieSBzZXR0aW5nIGBza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcmAgdG8gYH4wVWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiB0aGUgdW5zZXQgdHJhbnNwb3J0IGhlYWRlciBpcyB1c2VkIHdpdGhvdXQgY2hlY2tpbmcsIGl0IHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAodXNpbmcgYH4wVWAgYXMgYW4gb2Zmc2V0KSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaHVzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzIGFuZCBtb2RpZmllcyBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIHRoZSBgc2tiYCBieSBzZXR0aW5nIGBza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcmAgdG8gYH4wVWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiB0aGUgdW5zZXQgdHJhbnNwb3J0IGhlYWRlciBpcyB1c2VkIHdpdGhvdXQgY2hlY2tpbmcsIGl0IHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAodXNpbmcgYH4wVWAgYXMgYW4gb2Zmc2V0KSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaHVzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjI4OjIwLjU2ODk0NTQyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjgwNzI2ODk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJHVFBcIixcbiAgICBcIlZYTEFOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3RwX2VuY2FwX3JlY3ZcIixcbiAgICBcImdyb19jZWxsc19yZWNlaXZlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzIGFuZCBtb2RpZmllcyBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIHRoZSBgc2tiYCBieSBzZXR0aW5nIGBza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHRvIGB+MFVgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgdGhlIHVuc2V0IHRyYW5zcG9ydCBoZWFkZXIgaXMgdXNlZCB3aXRob3V0IGNoZWNraW5nLCBpdCB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKHVzaW5nIGB+MFVgIGFzIGFuIG9mZnNldCksIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGh1cywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHVFAgZHJpdmVyIHRvIGRyb3AgR1NPIHBhY2tldHMgaW4gYGd0cF9yeGAgKGNhbGxlZCB2aWEgYGd0cF9lbmNhcF9yZWN2YCkgYW5kIHVwZGF0ZXMgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIGBza19idWZmYHMgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBzdGFsZSBoZWFkZXJzLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZGF0YXBhdGggY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mjg6MjAuNTY4OTQ5OTk3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTA4OTEyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYTFhYjhkMDVjMmJiNTFlMTc3YWZmOTdlNWZlOGIwMzBkZmJjZWZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDEzOjI4OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmNcXG5pbmRleCA5YTEyY2M1M2RhMDAyLi5mNmU0N2MzNjlkNjIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2d0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZ3RwLmNcXG5AQCAtMzEyLDYgKzMxMiwxMSBAQCBzdGF0aWMgaW50IGd0cF9pbm5lcl9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGRybGVuLFxcbiBzdGF0aWMgaW50IGd0cF9yeChzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0ICB1bnNpZ25lZCBpbnQgaGRybGVuLCB1bnNpZ25lZCBpbnQgcm9sZSwgX191MTYgaW5uZXJfcHJvdG8pXFxuIHtcXG4rXFx0aWYgKHNrYl9pc19nc28oc2tiKSkge1xcbitcXHRcXHRuZXRkZXZfZGJnKHBjdHgtXFx1MDAzZWRldiwgXFxcIkdTTyBpcyBub3Qgc3VwcG9ydGVkIGluIEdUUFxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoIWd0cF9jaGVja19tcyhza2IsIHBjdHgsIGhkcmxlbiwgcm9sZSwgaW5uZXJfcHJvdG8pKSB7XFxuIFxcdFxcdG5ldGRldl9kYmcocGN0eC1cXHUwMDNlZGV2LCBcXFwiTm8gUERQIGN0eCBmb3IgdGhpcyBNU1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAxO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbmluZGV4IDIyZWRhMWQ1NGEwZTguLjYyNmJiYjliYWUxYWQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcXG5AQCAtMzA4Miw2ICszMDgyLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHJldHVybiBza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgIT0gKHR5cGVvZihza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gKHR5cGVvZihza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfdHJhbnNwb3J0X2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSk7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2dyb19jZWxscy5jIGIvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcXG5pbmRleCAxYjg0Mzg1YzA0YmQ5Li5kOGMwYTI4NjcxMjAxIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2dyb19jZWxscy5jXFxuKysrIGIvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcXG5AQCAtMjIsNiArMjIsOCBAQCBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRpZiAodW5saWtlbHkoIShkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSkpXFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFxuK1xcdHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuK1xcbiBcXHRpZiAoIWdjZWxscy1cXHUwMDNlY2VsbHMgfHwgc2tiX2Nsb25lZChza2IpIHx8IG5ldGlmX2VsaWRlX2dybyhkZXYpKSB7XFxuIFxcdFxcdHJlcyA9IG5ldGlmX3J4KHNrYik7XFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODoyMC45ODA1ODg3OTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNDQyNjgxNDU2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1RQXCIsXG4gICAgXCJWWExBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImd0cF9lbmNhcF9yZWN2XCIsXG4gICAgXCJncm9fY2VsbHNfcmVjZWl2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHVFAgZHJpdmVyIHRvIGRyb3AgR1NPIHBhY2tldHMgaW4gYGd0cF9yeGAgKGNhbGxlZCB2aWEgYGd0cF9lbmNhcF9yZWN2YCkgYW5kIHVwZGF0ZXMgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIGBza19idWZmYHMgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBzdGFsZSBoZWFkZXJzLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZGF0YXBhdGggY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWExYWI4ZDA1YzJiYjUxZTE3N2FmZjk3ZTVmZThiMDMwZGZiY2VmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEzOjI4OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3RwLmMgYi9kcml2ZXJzL25ldC9ndHAuY1xuaW5kZXggOWExMmNjNTNkYTAwMi4uZjZlNDdjMzY5ZDYyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2d0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ndHAuY1xuQEAgLTMxMiw2ICszMTIsMTEgQEAgc3RhdGljIGludCBndHBfaW5uZXJfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhkcmxlbixcbiBzdGF0aWMgaW50IGd0cF9yeChzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICB1bnNpZ25lZCBpbnQgaGRybGVuLCB1bnNpZ25lZCBpbnQgcm9sZSwgX191MTYgaW5uZXJfcHJvdG8pXG4ge1xuK1x0aWYgKHNrYl9pc19nc28oc2tiKSkge1xuK1x0XHRuZXRkZXZfZGJnKHBjdHgtXHUwMDNlZGV2LCBcIkdTTyBpcyBub3Qgc3VwcG9ydGVkIGluIEdUUFxcblwiKTtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4gXHRpZiAoIWd0cF9jaGVja19tcyhza2IsIHBjdHgsIGhkcmxlbiwgcm9sZSwgaW5uZXJfcHJvdG8pKSB7XG4gXHRcdG5ldGRldl9kYmcocGN0eC1cdTAwM2VkZXYsIFwiTm8gUERQIGN0eCBmb3IgdGhpcyBNU1xcblwiKTtcbiBcdFx0cmV0dXJuIDE7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDIyZWRhMWQ1NGEwZTguLjYyNmJiYjliYWUxYWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtMzA4Miw2ICszMDgyLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgIT0gKHR5cGVvZihza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9ICh0eXBlb2Yoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfdHJhbnNwb3J0X2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmMgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xuaW5kZXggMWI4NDM4NWMwNGJkOS4uZDhjMGEyODY3MTIwMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2dyb19jZWxscy5jXG4rKysgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xuQEAgLTIyLDYgKzIyLDggQEAgaW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmICh1bmxpa2VseSghKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSkpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbitcdHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4rXG4gXHRpZiAoIWdjZWxscy1cdTAwM2VjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHtcbiBcdFx0cmVzID0gbmV0aWZfcngoc2tiKTtcbiBcdFx0Z290byB1bmxvY2s7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODoyMC45ODA1OTAyOTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjMzNDk1OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IHRvdWNoZXMgc29tZSBpbnRlcmVzdGluZyBhcmVhczogYGRyaXZlcnMvbmV0L2d0cC5jYCwgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLCBhbmQgYG5ldC9jb3JlL2dyb19jZWxscy5jYC4gSSBzZWUgdGhhdCB0aGUgbWFpbiBjaGFuZ2VzIGludm9sdmUgYWRkaW5nIGEgY2hlY2sgaW4gYGd0cF9yeGAgdG8gZHJvcCBHU08gcGFja2V0cywgaW50cm9kdWNpbmcgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyYCBpbiBgc2tidWZmLmhgLCBhbmQsIGltcG9ydGFudGx5LCBjYWxsaW5nIHRoYXQgbmV3IGZ1bmN0aW9uIHdpdGhpbiBgZ3JvX2NlbGxzX3JlY2VpdmVgLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBcIklzIHRoaXMgd29ydGggbXkgdGltZSB0byBmdXp6P1wiIGBncm9fY2VsbHNfcmVjZWl2ZWAgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJdCdzIGEgZnVuZGFtZW50YWwgbmV0d29ya2luZyBmdW5jdGlvbiwgaGVhdmlseSB1c2VkIGJ5IGEgd2lkZSB2YXJpZXR5IG9mIGRyaXZlcnM6IG1hYzgwMjExLCBnZW5ldmUsIHZ4bGFuLCBndHAuLi4gdGhlIGxpc3QgZ29lcyBvbi4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIHRhcmdldCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBpZiB0aGlzIHBhdGNoIHN1YnRseSBjaGFuZ2VzIGl0cyBiZWhhdmlvciBvciBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzdGFjay4gYGd0cF9yeGAgaXMganVzdCBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBidXQgaWYgd2UgY2FuIGJyZWFrIGl0IGluIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXQgd291bGQgYmUgdXNlZnVsLlxuXG5TbywgdGhlIG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbCBzaXRlIG9mIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcGF0Y2ggYWx0ZXJzIGl0cyBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXcgZnVuY3Rpb24gYW5kIHRoZSBHU08gcGFja2V0IGNoZWNrIGludGVyYWN0IGluIHRoaXMgY29udGV4dC4gVGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIG9wZW4gdXAgYSBjb3VwbGUgb2YgbmV3IGF2ZW51ZXMgZm9yIGZ1enppbmc6IGBndHBfcnhgIGluIHBhcnRpY3VsYXIgZm9yIGhvdyBpdCBoYW5kbGVzIEdTTyBwYWNrZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mjg6MjYuNjE0MDg4NTkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTE3ODUzMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3JvX2NlbGxzX3JlY2VpdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYW10LmM9MjI5Nz1zdGF0aWMgYm9vbCBhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvYW10LmMtMjM1OC1cXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG5kcml2ZXJzL25ldC9hbXQuYzoyMzU5OlxcdGVyciA9IGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZhbXQtXFx1MDAzZWdyb19jZWxscywgc2tiKTtcXG5kcml2ZXJzL25ldC9hbXQuYy0yMzYwLVxcdGlmIChsaWtlbHkoZXJyID09IE5FVF9SWF9TVUNDRVNTKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYz02MT1zdGF0aWMgaW50IGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTE5NC1cXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG5kcml2ZXJzL25ldC9iYXJldWRwLmM6MTk1OlxcdGVyciA9IGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZiYXJldWRwLVxcdTAwM2Vncm9fY2VsbHMsIHNrYik7XFxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTE5Ni1cXHRpZiAobGlrZWx5KGVyciA9PSBORVRfUlhfU1VDQ0VTUykpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jPTQwPXJtbmV0X2RlbGl2ZXJfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTQ5LVxcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM6NTA6XFx0Z3JvX2NlbGxzX3JlY2VpdmUoXFx1MDAyNnByaXYtXFx1MDAzZWdyb19jZWxscywgc2tiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTUxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI3MD1zdGF0aWMgdm9pZCBnZW5ldmVfcngoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgc3RydWN0IGdlbmV2ZV9zb2NrICpncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTM3Ny1cXHRlbHNlXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6Mzc4OlxcdFxcdGVyciA9IGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZnZW5ldmUtXFx1MDAzZWdyb19jZWxscywgc2tiKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0zNzktXFx0aWYgKGxpa2VseShlcnIgPT0gTkVUX1JYX1NVQ0NFU1MpKVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9ODQ3PXN0YXRpYyB2b2lkIG1hY3NlY19kZWNyeXB0X2RvbmUodm9pZCAqZGF0YSwgaW50IGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTg3NC1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo4NzU6XFx0aWYgKGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZtYWNzZWMtXFx1MDAzZWdyb19jZWxscywgc2tiKSA9PSBORVRfUlhfU1VDQ0VTUylcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy04NzYtXFx0XFx0Y291bnRfcngoZGV2LCBsZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9MTEzMD1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBtYWNzZWNfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTEzMDItXFx0c2tiX29ycGhhbihza2IpO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjEzMDM6XFx0cmV0ID0gZ3JvX2NlbGxzX3JlY2VpdmUoXFx1MDAyNm1hY3NlYy1cXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTEzMDQtXFx0aWYgKHJldCA9PSBORVRfUlhfU1VDQ0VTUylcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYz02MD1zdGF0aWMgdm9pZCBvdnBuX25ldGRldl93cml0ZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTk0LVxcdC8qIHdlIG1heSBnZXQgaGVyZSBpbiBwcm9jZXNzIGNvbnRleHQgaW4gY2FzZSBvZiBUQ1AgY29ubmVjdGlvbnMsXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjk1OlxcdCAqIHRoZXJlZm9yZSB3ZSBoYXZlIHRvIGRpc2FibGUgQkhzIHRvIGVuc3VyZSBncm9fY2VsbHNfcmVjZWl2ZSgpXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTk2LVxcdCAqIGFuZCBkZXZfZHN0YXRzX3J4X2FkZCgpIGRvIG5vdCBnZXQgY29ycnVwdGVkIG9yIGVudGVyIGRlYWRsb2NrXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtOTgtXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbmRyaXZlcnMvbmV0L292cG4vaW8uYzo5OTpcXHRyZXQgPSBncm9fY2VsbHNfcmVjZWl2ZShcXHUwMDI2cGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0xMDAtXFx0aWYgKGxpa2VseShyZXQgPT0gTkVUX1JYX1NVQ0NFU1MpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wZmNwLmM9NTE9c3RhdGljIGludCBwZmNwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvcGZjcC5jLTk2LVxcbmRyaXZlcnMvbmV0L3BmY3AuYzo5NzpcXHRncm9fY2VsbHNfcmVjZWl2ZShcXHUwMDI2cGZjcC1cXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xcbmRyaXZlcnMvbmV0L3BmY3AuYy05OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNjQ2PXN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xODAxLVxcdHZ4bGFuX3ZuaWZpbHRlcl9jb3VudCh2eGxhbiwgdm5pLCB2bmlub2RlLCBWWExBTl9WTklfU1RBVFNfUlgsIHNrYi1cXHUwMDNlbGVuKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTgwMjpcXHRncm9fY2VsbHNfcmVjZWl2ZShcXHUwMDI2dnhsYW4tXFx1MDAzZWdyb19jZWxscywgc2tiKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTgwMy1cXG4tLVxcbmluY2x1ZGUvbmV0L2dyb19jZWxscy5oPTExPXN0cnVjdCBncm9fY2VsbHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvZ3JvX2NlbGxzLmgtMTQtXFxuaW5jbHVkZS9uZXQvZ3JvX2NlbGxzLmg6MTU6aW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvZ3JvX2NlbGxzLmgtMTYtaW50IGdyb19jZWxsc19pbml0KHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5uZXQvY29yZS9ncm9fY2VsbHMuYz04PXN0cnVjdCBncm9fY2VsbCB7XFxuLS1cXG5uZXQvY29yZS9ncm9fY2VsbHMuYy0xMy1cXG5uZXQvY29yZS9ncm9fY2VsbHMuYzoxNDppbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL2dyb19jZWxscy5jLTE1LXtcXG4tLVxcbm5ldC9jb3JlL2dyb19jZWxscy5jLTU1LX1cXG5uZXQvY29yZS9ncm9fY2VsbHMuYzo1NjpFWFBPUlRfU1lNQk9MKGdyb19jZWxsc19yZWNlaXZlKTtcXG5uZXQvY29yZS9ncm9fY2VsbHMuYy01Ny1cXG4tLVxcbm5ldC9kc2EvdGFnLmM9NTQ9c3RhdGljIGludCBkc2Ffc3dpdGNoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2RzYS90YWcuYy0xMjItXFxubmV0L2RzYS90YWcuYzoxMjM6XFx0Z3JvX2NlbGxzX3JlY2VpdmUoXFx1MDAyNnAtXFx1MDAzZWdjZWxscywgc2tiKTtcXG5uZXQvZHNhL3RhZy5jLTEyNC1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTM3Nz1pbnQgaXBfdHVubmVsX3JjdihzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NDctXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDQ4OlxcdGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZ0dW5uZWwtXFx1MDAzZWdyb19jZWxscywgc2tiKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NDktXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9ODA4PXN0YXRpYyBpbnQgX19pcDZfdG5sX3JjdihzdHJ1Y3QgaXA2X3RubCAqdHVubmVsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTg5NC1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6ODk1OlxcdGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZ0dW5uZWwtXFx1MDAzZWdyb19jZWxscywgc2tiKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtODk2LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jPTQ2Nj1pbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzQ2LVxcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NzQ3OlxcdFxcdGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZncm9fY2VsbHMsIHNrYik7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTc0OC1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03NjQtXFx0XFx0XFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc2NTpcXHRcXHRcXHRncm9fY2VsbHNfcmVjZWl2ZShcXHUwMDI2Z3JvX2NlbGxzLCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03NjYtXFx0XFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTYzOT1zdGF0aWMgdTMyIF9faXB0ZnNfaXBsZW4odTggKmRhdGEpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjU0LSAqIEZpbmlzaCB0aGUgc3RhbmRhcmQgeGZybSBwcm9jZXNzaW5nIG9uIHRoZSBpbm5lciBwYWNrZXQgcHJpb3IgdG8gc2VuZGluZyBiYWNrXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjY1NTogKiB0aHJvdWdoIGdyb19jZWxsc19yZWNlaXZlLiBXZSBkbyB0aGlzIHNlcGFyYXRlbHkgYi9jIHdlIGFyZSBidWlsZGluZyBhIGxpc3RcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjU2LSAqIG9mIHBhY2tldHMgaW4gdGhlIGhvcGVzIHRoYXQgb25lIGRheSBhIGxpc3Qgd2lsbCBiZSB0YWtlbiBieVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTY1OT1zdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjYyLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2NjM6XFx0LyogVGhlIHBhY2tldCBpcyBnb2luZyBiYWNrIHRocm91Z2ggZ3JvX2NlbGxzX3JlY2VpdmUgbm8gbmVlZCB0b1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NjQtXFx0ICogc2V0IHRoaXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjI4OjI4LjQ2NTg3OTAxM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDU5MDM0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaGFzIG1lIGludHJpZ3VlZC4gSXQncyB0b3VjaGluZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBwYXJ0cyBvZiB0aGUgbmV0d29ya2luZyBzdGFjaywgbmFtZWx5IGBncm9fY2VsbHNfcmVjZWl2ZWAgYW5kIGBndHBfcnhgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhhdCBgZ3JvX2NlbGxzX3JlY2VpdmVgIG5vdyBjYWxscyBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAuIFRoYXQncyBhIGxvdy1sZXZlbCBmdW5jdGlvbiB0aGF0IGltcGFjdHMgYSAqbG90KiBvZiBkcml2ZXJzIGFuZCB0dW5uZWxz4oCUdnhsYW4sIGdlbmV2ZSwgdGhlIGlwX3R1bm5lbCwgeGZybS4uLiBiYXNpY2FsbHkgYW55dGhpbmcgdGhhdCBkb2VzIGVuY2Fwc3VsYXRpb24uIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGlzLiBUaGUgb3RoZXIgbW9kaWZpY2F0aW9uIGRlYWxzIHdpdGggdGhlIGBndHBfcnhgIGZ1bmN0aW9uIHdoaWNoIGNhdXNlcyBHU08gcGFja2V0cyB0byBiZSBkcm9wcGVkLlxuXG5UaGUgYmlnIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBJIG1lYW4sIGl0ICpkb2VzKiBmaXggYSBidWfigJRgZ3JvX2NlbGxzX3JlY2VpdmVgIHdhc24ndCBwcm9wZXJseSB1bnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IHNpZGUgZWZmZWN0cyBkb3duIHRoZSBsaW5lLiBUaGF0J3MgZGVmaW5pdGVseSB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBUaGUgYGd0cF9yeGAgY2hhbmdlLCB0aG91Z2gsIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBiZWhhdmlvdXIgY2hhbmdlIGFzIG9wcG9zZWQgdG8gYSBidWdmaXguIFNvIEkgbmVlZCB0byBiZSBzdXJlIG9uIHRoaXMuXG5cbkknbSB0aGlua2luZywgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEknbGwgbmVlZCB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGZvciBib3RoIGBndHBfcnhgIGFuZCBgZ3JvX2NlbGxzX3JlY2VpdmVgIGFuZCBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpbiBkZXRhaWwuIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mjg6MzMuMjExNzg0ODMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjA0NDYzNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3RwX3J4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jPTI4OD1zdGF0aWMgaW50IGd0cF9pbm5lcl9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGRybGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMzExLVxcbmRyaXZlcnMvbmV0L2d0cC5jOjMxMjpzdGF0aWMgaW50IGd0cF9yeChzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9ndHAuYy0zMTMtXFx0XFx0ICB1bnNpZ25lZCBpbnQgaGRybGVuLCB1bnNpZ25lZCBpbnQgcm9sZSwgX191MTYgaW5uZXJfcHJvdG8pXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz01ODU9c3RhdGljIGludCBndHAwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy02MjUtXFxuZHJpdmVycy9uZXQvZ3RwLmM6NjI2OlxcdHJldHVybiBndHBfcngocGN0eCwgc2tiLCBoZHJsZW4sIGd0cC1cXHUwMDNlcm9sZSwgaW5uZXJfcHJvdG8pO1xcbmRyaXZlcnMvbmV0L2d0cC5jLTYyNy19XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz03OTM9c3RhdGljIGludCBndHAxdV91ZHBfZW5jYXBfcmVjdihzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtODUyLVxcbmRyaXZlcnMvbmV0L2d0cC5jOjg1MzpcXHRyZXR1cm4gZ3RwX3J4KHBjdHgsIHNrYiwgaGRybGVuLCBndHAtXFx1MDAzZXJvbGUsIGlubmVyX3Byb3RvKTtcXG5kcml2ZXJzL25ldC9ndHAuYy04NTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODozNS4wNzIyMzY0MDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjgyNjM2MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1RQIFJlY2VpdmUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEdUUCByZWNlaXZlIHByb2Nlc3NpbmcuIEl0IHNlZW1zIGBndHBfcnhgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBmcm9tIGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YC4gTWFrZXMgc2Vuc2UsIHRob3NlIGFyZSB0aGUgVURQIGVuY2Fwc3VsYXRpb24gZW50cnkgcG9pbnRzLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgc2tiX2lzX2dzbyhza2IpYCB3aXRoaW4gYGd0cF9yeGAuIEhtbSwgdGhhdCBzdWdnZXN0cyB0aGV5J3JlIGRlYWxpbmcgd2l0aCBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pLiBBbmQgdGhlbiB0aGVyZSdzIGFuIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgY2FsbCBhZGRlZCB3aXRoaW4gYGdyb19jZWxsc19yZWNlaXZlYC4gVGhhdCdzIGludGVyZXN0aW5nLCB1c3VhbGx5IHJlbGF0ZWQgdG8gR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykuIFNpbmNlIEdTTyBhbmQgR1JPIHdvcmsgdG9nZXRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYGdyb19jZWxsc19yZWNlaXZlYCBpdHNlbGYgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYC4gTGV0J3Mgc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mjg6MzkuMzU0ODc0ODA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZ3JvX2NlbGxzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2dyb19jZWxscy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9ob3RkYXRhLmhcXHUwMDNlXFxuICAgNzpcXHRcXG4gICA4OlxcdHN0cnVjdCBncm9fY2VsbCB7XFxuICAgOTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXFx0bmFwaV9za2JzO1xcbiAgMTA6XFx0XFx0c3RydWN0IG5hcGlfc3RydWN0XFx0bmFwaTtcXG4gIDExOlxcdFxcdGxvY2FsX2xvY2tfdFxcdFxcdGJoX2xvY2s7XFxuICAxMjpcXHR9O1xcbiAgMTM6XFx0XFxuICAxNDpcXHRpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgMTU6XFx0e1xcbiAgMTY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbiAgMTc6XFx0XFx0Ym9vbCBoYXZlX2JoX2xvY2sgPSBmYWxzZTtcXG4gIDE4OlxcdFxcdHN0cnVjdCBncm9fY2VsbCAqY2VsbDtcXG4gIDE5OlxcdFxcdGludCByZXM7XFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gIDIyOlxcdFxcdGlmICh1bmxpa2VseSghKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApKSlcXG4gIDIzOlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gIDI0OlxcdFxcbiAgMjU6XFx0XFx0c2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0aWYgKCFnY2VsbHMtXFx1MDAzZWNlbGxzIHx8IHNrYl9jbG9uZWQoc2tiKSB8fCBuZXRpZl9lbGlkZV9ncm8oZGV2KSkge1xcbiAgMjg6XFx0XFx0XFx0cmVzID0gbmV0aWZfcngoc2tiKTtcXG4gIDI5OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiAgMzA6XFx0XFx0fVxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHRsb2NhbF9sb2NrX25lc3RlZF9iaChcXHUwMDI2Z2NlbGxzLVxcdTAwM2VjZWxscy1cXHUwMDNlYmhfbG9jayk7XFxuICAzMzpcXHRcXHRoYXZlX2JoX2xvY2sgPSB0cnVlO1xcbiAgMzQ6XFx0XFx0Y2VsbCA9IHRoaXNfY3B1X3B0cihnY2VsbHMtXFx1MDAzZWNlbGxzKTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNmNlbGwtXFx1MDAzZW5hcGlfc2ticykgXFx1MDAzZSBSRUFEX09OQ0UobmV0X2hvdGRhdGEubWF4X2JhY2tsb2cpKSB7XFxuICAzNzpcXHRkcm9wOlxcbiAgMzg6XFx0XFx0XFx0ZGV2X2NvcmVfc3RhdHNfcnhfZHJvcHBlZF9pbmMoZGV2KTtcXG4gIDM5OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgNDA6XFx0XFx0XFx0cmVzID0gTkVUX1JYX0RST1A7XFxuICA0MTpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gIDQyOlxcdFxcdH1cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2Y2VsbC1cXHUwMDNlbmFwaV9za2JzLCBza2IpO1xcbiAgNDU6XFx0XFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNmNlbGwtXFx1MDAzZW5hcGlfc2ticykgPT0gMSlcXG4gIDQ2OlxcdFxcdFxcdG5hcGlfc2NoZWR1bGUoXFx1MDAyNmNlbGwtXFx1MDAzZW5hcGkpO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRyZXMgPSBORVRfUlhfU1VDQ0VTUztcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0dW5sb2NrOlxcbiAgNTE6XFx0XFx0aWYgKGhhdmVfYmhfbG9jaylcXG4gIDUyOlxcdFxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNmdjZWxscy1cXHUwMDNlY2VsbHMtXFx1MDAzZWJoX2xvY2spO1xcbiAgNTM6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuICA1NDpcXHRcXHRyZXR1cm4gcmVzO1xcbiAgNTU6XFx0fVxcbiAgNTY6XFx0RVhQT1JUX1NZTUJPTChncm9fY2VsbHNfcmVjZWl2ZSk7XFxuICA1NzpcXHRcXG4gIDU4OlxcdC8qIGNhbGxlZCB1bmRlciBCSCBjb250ZXh0ICovXFxuICA1OTpcXHRzdGF0aWMgaW50IGdyb19jZWxsX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiAgNjA6XFx0e1xcbiAgNjE6XFx0XFx0c3RydWN0IGdyb19jZWxsICpjZWxsID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBncm9fY2VsbCwgbmFwaSk7XFxuICA2MjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAgNjM6XFx0XFx0aW50IHdvcmtfZG9uZSA9IDA7XFxuICA2NDpcXHRcXG4gIDY1OlxcdFxcdHdoaWxlICh3b3JrX2RvbmUgXFx1MDAzYyBidWRnZXQpIHtcXG4gIDY2OlxcdFxcdFxcdF9fbG9jYWxfbG9ja19uZXN0ZWRfYmgoXFx1MDAyNmNlbGwtXFx1MDAzZWJoX2xvY2spO1xcbiAgNjc6XFx0XFx0XFx0c2tiID0gX19za2JfZGVxdWV1ZShcXHUwMDI2Y2VsbC1cXHUwMDNlbmFwaV9za2JzKTtcXG4gIDY4OlxcdFxcdFxcdF9fbG9jYWxfdW5sb2NrX25lc3RlZF9iaChcXHUwMDI2Y2VsbC1cXHUwMDNlYmhfbG9jayk7XFxuICA2OTpcXHRcXHRcXHRpZiAoIXNrYilcXG4gIDcwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgNzE6XFx0XFx0XFx0bmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpO1xcbiAgNzI6XFx0XFx0XFx0d29ya19kb25lKys7XFxuICA3MzpcXHRcXHR9XFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdGlmICh3b3JrX2RvbmUgXFx1MDAzYyBidWRnZXQpXFxuICA3NjpcXHRcXHRcXHRuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya19kb25lKTtcXG4gIDc3OlxcdFxcdHJldHVybiB3b3JrX2RvbmU7XFxuICA3ODpcXHR9XFxuICA3OTpcXHRcXG4gIDgwOlxcdGludCBncm9fY2VsbHNfaW5pdChzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA4MTpcXHR7XFxuICA4MjpcXHRcXHRpbnQgaTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0Z2NlbGxzLVxcdTAwM2VjZWxscyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgZ3JvX2NlbGwpO1xcbiAgODU6XFx0XFx0aWYgKCFnY2VsbHMtXFx1MDAzZWNlbGxzKVxcbiAgODY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuICA4OTpcXHRcXHRcXHRzdHJ1Y3QgZ3JvX2NlbGwgKmNlbGwgPSBwZXJfY3B1X3B0cihnY2VsbHMtXFx1MDAzZWNlbGxzLCBpKTtcXG4gIDkwOlxcdFxcbiAgOTE6XFx0XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZjZWxsLVxcdTAwM2VuYXBpX3NrYnMpO1xcbiAgOTI6XFx0XFx0XFx0bG9jYWxfbG9ja19pbml0KFxcdTAwMjZjZWxsLVxcdTAwM2ViaF9sb2NrKTtcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0XFx0c2V0X2JpdChOQVBJX1NUQVRFX05PX0JVU1lfUE9MTCwgXFx1MDAyNmNlbGwtXFx1MDAzZW5hcGkuc3RhdGUpO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHRcXHRuZXRpZl9uYXBpX2FkZChkZXYsIFxcdTAwMjZjZWxsLVxcdTAwM2VuYXBpLCBncm9fY2VsbF9wb2xsKTtcXG4gIDk3OlxcdFxcdFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZjZWxsLVxcdTAwM2VuYXBpKTtcXG4gIDk4OlxcdFxcdH1cXG4gIDk5OlxcdFxcdHJldHVybiAwO1xcbiAxMDA6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODozOS4zNTQ5NTI3MDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ1OTIwMzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGhpcyBQYXRjaCBpcyBhIEdvb2QgSWRlYSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBJdCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQgKEdTTykgd2l0aGluIGBndHBfcnhgIGFuZCBhbHNvIGFwcGVhcnMgdG8gYmUgdW5zZXR0aW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGluIGBncm9fY2VsbHNfcmVjZWl2ZWAuIFRoYXQncyBhIGNsYXNzaWMgYXJlYSB0byB0YXJnZXQgd2l0aCBmdXp6aW5nLiBBbnl0aGluZyByZWxhdGVkIHRvIGhlYWRlciBtYW5pcHVsYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBHU08gaXMgaW52b2x2ZWQsIGlzIG9mdGVuIGEgc291cmNlIG9mIHZ1bG5lcmFiaWxpdGllcy4gSSdtIHRoaW5raW5nIEdUUCBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBoZXJlLiBUaW1lIHRvIGNvbmZpcm0gaWYgdGhhdCBjb25maWcgaXMgaGFuZGxlZCB3aXRoaW4gZHJpdmVycy9uZXQvS2NvbmZpZy4gTGV0J3Mgc2VlIGlmIHRoaXMgbGluZXMgdXAgd2l0aCB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTQyLCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODo0Mi43MDA4NzU0MzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODU3NDY5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEdUUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTI2MD1jb25maWcgQkFSRVVEUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzEtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNzI6Y29uZmlnIEdUUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVxcdHRyaXN0YXRlIFxcXCJHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODo0NC4zODY2MzA5MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY2NTc3MjI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqR1RQIERlcGVuZGVuY3kgSHVudCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIEdUUCBzdXBwb3J0LiBNeSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBwcm9iYWJseSBkZWNsYXJlZCBpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIEl0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgYW5kIGFzc29jaWF0ZWQgc2V0dGluZ3MuIEknbGwgbmVlZCB0byBjb25maXJtIGFueSBLY29uZmlnIG9wdGlvbnMgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd2hpY2ggZHJpdmVycyBhbmQgbW9kdWxlcyByZWxhdGUgdG8gR1RQIGFuZCB3aGF0IG90aGVyIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBvciBjYW4gYmUgb3B0aW9uYWxseSBlbmFibGVkLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmFzZSB0byBzdGFydCB3aXRoIGZvciBjb25maWd1cmF0aW9uIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODo1My4wNTI0MDYxNDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBiYXJldWRwLlxcbiAyNzE6XFx0XFxuIDI3MjpcXHRjb25maWcgR1RQXFxuIDI3MzpcXHRcXHR0cmlzdGF0ZSBcXFwiR1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wgZGF0YXBhdGggKEdUUC1VKVxcXCJcXG4gMjc0OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAyNzU6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDI3NjpcXHRcXHRoZWxwXFxuIDI3NzpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgZ3RwIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcXG4gMjc4OlxcdFxcdCAgdGhlIEdQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSkuIFRoaXMgdHVubmVsaW5nIHByb3RvY29sXFxuIDI3OTpcXHRcXHQgIGlzIHVzZWQgdG8gcHJldmVudCBzdWJzY3JpYmVycyBmcm9tIGFjY2Vzc2luZyBtb2JpbGUgY2FycmllciBjb3JlXFxuIDI4MDpcXHRcXHQgIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGEgdXNlcnNwYWNlIHNvZnR3YXJlIHRoYXRcXG4gMjgxOlxcdFxcdCAgaW1wbGVtZW50cyB0aGUgc2lnbmFsaW5nIHByb3RvY29sIChHVFAtQykgdG8gdXBkYXRlIGl0cyBQRFAgY29udGV4dFxcbiAyODI6XFx0XFx0ICBiYXNlLCBzdWNoIGFzIE9wZW5HR1NOIFxcdTAwM2NodHRwOi8vZ2l0Lm9zbW9jb20ub3JnL29wZW5nZ3NuLykuIFRoaXNcXG4gMjgzOlxcdFxcdCAgdHVubmVsaW5nIHByb3RvY29sIGlzIGltcGxlbWVudGVkIGFjY29yZGluZyB0byB0aGUgR1NNIFRTIDA5LjYwIGFuZFxcbiAyODQ6XFx0XFx0ICAzR1BQIFRTIDI5LjA2MCBzdGFuZGFyZHMuXFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjg3OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgZ3RwLlxcbiAyODg6XFx0XFxuIDI4OTpcXHRjb25maWcgUEZDUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODo1My4wNTI0ODM1NDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc1MjU5NTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgZ3JvX2NlbGxzX3JlY2VpdmVgIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBkaXZpbmcgaW50byB0aGUgYEdUUGAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbnMgZm9yIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvY29yZS9ncm9fY2VsbHMuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgY2VsbCBoYW5kbGluZyByZXNpZGVzLCBvYnZpb3VzbHkuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpc3NlY3QgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHRvIHRyYWNlIGJhY2sgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgd2FudCB0byBwaW5wb2ludCBleGFjdGx5IHdoaWNoIGNvbmZpZ3VyYXRpb25zLCBvciBjb21iaW5hdGlvbnMgb2YgY29uZmlndXJhdGlvbnMsIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMgd2lsbCBoZWxwIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGFuZCBydW50aW1lIGltcGxpY2F0aW9ucyBmb3IgYSBnaXZlbiBkZXBsb3ltZW50IGFuZCBhbHNvIGFueSB1cHN0cmVhbSBkZXBlbmRlbmN5IHJlcXVpcmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc1MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mjg6NTguODA1MDgyMjQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY5ODkwNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdyb19jZWxscy5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19IV0JNKSArPSBod2JtLm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfR1JPX0NFTExTKSArPSBncm9fY2VsbHMub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQzLW9iai0kKENPTkZJR19GQUlMT1ZFUikgKz0gZmFpbG92ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyOTowMC45NzQ5ODAzOTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NTQ0MjQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX0dST19DRUxMU2AgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0dST19DRUxMU2AgaXMgdGhlIGNvbmZpZyB3ZSdyZSBkZWFsaW5nIHdpdGguIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMsIGZlYXR1cmVzLCBvciBkcml2ZXJzIG1pZ2h0IGVuYWJsZSBvciByZXF1aXJlIHRoaXMgb3B0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgc2VsZWN0aW9uIHBhdGhzLCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWcgc3lzdGVtIGFuZCBzZWUgd2hhdCdzIHNlbGVjdGluZyBpdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBsb29rIGZvciBgc2VsZWN0YCBzdGF0ZW1lbnRzLCBhbmQgdW5kZXJzdGFuZCB0aGUgbG9naWMgYmVoaW5kIHdoeSBpdCdzIGVuYWJsZWQgaW4gdmFyaW91cyBjb250ZXh0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA2MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjI5OjA1LjE3MDQyNDg4NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NTYyMzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgR1JPX0NFTExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MjMwPWNvbmZpZyBWWExBTlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzMtXFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMzQ6XFx0c2VsZWN0IEdST19DRUxMU1xcbmRyaXZlcnMvbmV0L0tjb25maWctMjM1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MjQ1PWNvbmZpZyBHRU5FVkVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjQ4LVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjQ5OlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI1MC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTI2MD1jb25maWcgQkFSRVVEUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNjMtXFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNjQ6XFx0c2VsZWN0IEdST19DRUxMU1xcbmRyaXZlcnMvbmV0L0tjb25maWctMjY1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzIyLVxcdHNlbGVjdCBDUllQVE9fR0NNXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjM6XFx0c2VsZWN0IEdST19DRUxMU1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzI0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWc9Nj1tZW51Y29uZmlnIFJNTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnLTgtXFx0ZGVmYXVsdCBuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZzo5OlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnLTEwLVxcdGhlbHBcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZz0zPW1lbnVjb25maWcgTkVUX0RTQVxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTctXFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVERFVklDRVNcXG5uZXQvZHNhL0tjb25maWc6ODpcXHRzZWxlY3QgR1JPX0NFTExTXFxubmV0L2RzYS9LY29uZmlnLTktXFx0c2VsZWN0IE5FVF9TV0lUQ0hERVZcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MTg2PWNvbmZpZyBORVRfSVBfVFVOTkVMXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE4OC1cXHRzZWxlY3QgRFNUX0NBQ0hFXFxubmV0L2lwdjQvS2NvbmZpZzoxODk6XFx0c2VsZWN0IEdST19DRUxMU1xcbm5ldC9pcHY0L0tjb25maWctMTkwLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xOTk9Y29uZmlnIElQVjZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwMi1cXHRzZWxlY3QgRFNUX0NBQ0hFXFxubmV0L2lwdjYvS2NvbmZpZzoyMDM6XFx0c2VsZWN0IEdST19DRUxMU1xcbm5ldC9pcHY2L0tjb25maWctMjA0LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy03LVxcdGRlcGVuZHMgb24gSU5FVFxcbm5ldC94ZnJtL0tjb25maWc6ODpcXHRzZWxlY3QgR1JPX0NFTExTXFxubmV0L3hmcm0vS2NvbmZpZy05LVxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyOTowNi45MTYwNTUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDMzNjY0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgd2UgY291bGQganVzdCBlbmFibGUgYEdUUGAgYW5kIGBHUk9fQ0VMTFNgIOKAkyBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgbGlrZSBgVlhMQU5gIG9yIGBHRU5FVkVgIHdoaWNoICpkbyogc2VsZWN0IGBHUk9fQ0VMTFNgLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gZG9lcyBgR1RQYCBhY3R1YWxseSAqc2VsZWN0KiBgR1JPX0NFTExTYD8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvbmV0L2d0cC5jYCBzb3VyY2UgY29kZS4gRG9lcyBpdCB1c2UgdGhlIGBncm9fY2VsbHNfcmVjZWl2ZWAgZnVuY3Rpb24/IEhtbSwgbm8sIGl0IGxvb2tzIGxpa2UgYGd0cF9yeGAgZG9lc24ndCB1dGlsaXplIGBncm9fY2VsbHNfcmVjZWl2ZWAuXG5cbldhaXQsIGxldCBtZSBtYWtlIHN1cmUuIFRoZSBkaWZmIGRvZXNuJ3Qgc2VlbSB0byBpbmRpY2F0ZSB0aGF0IGBndHAuY2AgaXMgdXNpbmcgYGdyb19jZWxsc19yZWNlaXZlYC4gRG9lcyBgZ3RwLmNgICphY3R1YWxseSogdXNlIGBncm9fY2VsbHNfcmVjZWl2ZWA/IE5vLCBpdCBsb29rcyBsaWtlIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgdXNlZCBieSBvdGhlciBkcml2ZXJzLiBUaGUgcGF0Y2ggZG9lcyBtb2RpZnkgYm90aCBgZ3RwLmNgIGFuZCBgZ3JvX2NlbGxzLmNgLCBzbyBgR1RQYCBpcyByZXF1aXJlZCBmb3IgYGd0cC5jYCwgYW5kIGBHUk9fQ0VMTFNgIGlzIG5lY2Vzc2FyeSBmb3IgYGdyb19jZWxscy5jYC5cblxuTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBHVFBgIGRvZXNuJ3Qgc2VsZWN0IGBHUk9fQ0VMTFNgLiBOb3BlLCBpdCBkb2Vzbid0LiBCdXQsIGBHUk9fQ0VMTFNgICppcyogc2VsZWN0ZWQgYnkgYFZYTEFOYCwgYEdFTkVWRWAsIGBNQUNTRUNgLCBgTkVUX0lQX1RVTk5FTGAsIGBJUFY2X1RVTk5FTGAsIGFuZCBgWEZSTWAuIFNvLCB3ZSBjYW4ganVzdCBzcGVjaWZ5IGBHVFBgIGFuZCBgR1JPX0NFTExTYCB0byBiZSBzdXJlLlxuXG5SZWdhcmRpbmcgdGhlIGZvY3VzIHN5bWJvbHMuIExvb2tzIGxpa2UgYGd0cF9yeGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEkgc2hvdWxkIGNoZWNrIHdoaWNoIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGFyZSBhdmFpbGFibGUuIEFyZSB0aGV5IGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YD8gTm8gd2FpdCwgYGd0cF9yeGAgaXMgc3RpbGwgc3RhdGljLiBMZXQncyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGBndHAwX3VkcF9lbmNhcF9yZWN2YC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk0MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyOToxMy43NTk0MjQ5ODFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzA0NjY3MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3RwMF91ZHBfZW5jYXBfcmVjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ndHAuYz01Njk9c3RhdGljIGludCBndHBfcHJvdG9fdG9fZmFtaWx5KF9fdTE2IHByb3RvKVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtNTg0LS8qIDEgbWVhbnMgcGFzcyB1cCB0byB0aGUgc3RhY2ssIC0xIG1lYW5zIGRyb3AgYW5kIDAgbWVhbnMgZGVjYXBzdWxhdGVkLiAqL1xcbmRyaXZlcnMvbmV0L2d0cC5jOjU4NTpzdGF0aWMgaW50IGd0cDBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9ndHAuYy01ODYte1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9OTA4PXN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtOTIxLVxcdFxcdG5ldGRldl9kYmcoZ3RwLVxcdTAwM2VkZXYsIFxcXCJyZWNlaXZlZCBHVFAwIHBhY2tldFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZ3RwLmM6OTIyOlxcdFxcdHJldCA9IGd0cDBfdWRwX2VuY2FwX3JlY3YoZ3RwLCBza2IpO1xcbmRyaXZlcnMvbmV0L2d0cC5jLTkyMy1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mjk6MTUuMzI5ODk3NTQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTg1NzQ3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHVuZGVyc3RhbmRpbmcsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipHVFAgRW5jYXBzdWxhdGlvbiBFbnRyeSBQb2ludCoqXG5cblJpZ2h0LCBzbyBgZ3RwX2VuY2FwX3JlY3ZgIGlzICp0aGUqIHBvaW50IG9mIGVudHJ5IGZvciB0aGUgd2hvbGUgR1RQLW92ZXItVURQIGVuY2Fwc3VsYXRpb24gcHJvY2Vzcy4gVGhhdCdzIHRoZSBnYXRld2F5LiBJIHVuZGVyc3RhbmQgdGhpcyBtZWFucyB0aGF0IGFueSBpbmNvbWluZyBHVFAgdHJhZmZpYyB0aGF0J3MgZ29pbmcgdG8gYmUgdW5lbmNhcHN1bGF0ZWQsIHBhcnNlZCwgYW5kIHJvdXRlZCBuZWVkcyB0byBnbyB0aHJvdWdoIHRoaXMgZnVuY3Rpb24uIEl0J3MgdGhlIGJlZ2lubmluZyBvZiB0aGUgY2hhaW4sIHRoZSBpbml0aWFsIGhhbmRzaGFrZSB3aXRoIHRoZSBHVFAgcGFja2V0cyB0aGF0IGFyZSBiZWluZyB0cmFuc3BvcnRlZCBvdmVyIFVEUC4gSXQncyBjcnVjaWFsIGZvciB0aGUgY29ycmVjdCBwcm9jZXNzaW5nIG9mIGFueSBHVFAgdHJhZmZpYy4gU28sIGBndHBfZW5jYXBfcmVjdmAgaXMgdGhlIGtleSBmb3IgYW55dGhpbmcgR1RQIHJlbGF0ZWQgdGhhdCdzIHVzaW5nIFVEUCB0cmFuc3BvcnQuIEdvdHRhIGdldCB0aGF0IHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA1MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjI5OjE4LjcyODQ3NTcxMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0Nzg5MDc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndHBfZW5jYXBfcmVjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ndHAuYz04OTE9c3RhdGljIHZvaWQgZ3RwX2VuY2FwX2Rpc2FibGUoc3RydWN0IGd0cF9kZXYgKmd0cClcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTkwNy0gKi9cXG5kcml2ZXJzL25ldC9ndHAuYzo5MDg6c3RhdGljIGludCBndHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvZ3RwLmMtOTA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTE0MDk9c3RhdGljIHN0cnVjdCBzb2NrICpndHBfY3JlYXRlX3NvY2soaW50IHR5cGUsIHN0cnVjdCBndHBfZGV2ICpndHAsXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xNDM5LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcXG5kcml2ZXJzL25ldC9ndHAuYzoxNDQwOlxcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcXG5kcml2ZXJzL25ldC9ndHAuYy0xNDQxLVxcdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTE2NTQ9c3RhdGljIHN0cnVjdCBzb2NrICpndHBfZW5jYXBfZW5hYmxlX3NvY2tldChpbnQgZmQsIGludCB0eXBlLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTY5NC1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IHR5cGU7XFxuZHJpdmVycy9uZXQvZ3RwLmM6MTY5NTpcXHR0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7XFxuZHJpdmVycy9uZXQvZ3RwLmMtMTY5Ni1cXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IGd0cF9lbmNhcF9kZXN0cm95O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyOToyMC40NzYzNzIyMThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwMjE3NTU0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgR1RQIGFuZCBHUk9fQ0VMTFMgZm9yIERhdGFwYXRoIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWFpbiBlbnRyeSBwb2ludCBmb3IgR1RQIHBhY2tldHMgaXMgYGd0cF9lbmNhcF9yZWN2YC4gSXQncyB1c2VkIHdpdGhpbiBgZ3JvX2NlbGxzX3JlY2VpdmVgLCB3aGljaCBpcyBleHBvcnRlZCBhbmQgY2FsbGVkIGJ5IHZhcmlvdXMgZHJpdmVycywgc28gYm90aCBvZiB0aGVzZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSAqRm9jdXNTeW1ib2xzKiBmb3IgdGhpcyBhbmFseXNpcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgZ3JvX2NlbGxzX3JlY2VpdmVgIGlzIGV4cG9ydGVkLCBhbmQgaXQgaXMhIEl0J3Mgbm90IHN0YXRpYy4gR29vZC4gTm93LCBgZ3RwX2VuY2FwX3JlY3ZgIGlzIHN0YXRpYywgd2hpY2ggc2VlbXMgY29udHJhcnkgdG8gdGhlIGd1aWRhbmNlIHRvIHByZWZlciBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gSG93ZXZlciwgaXQgKmlzKiBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgKGB0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7YCksIHNvIGl0IHdvbid0IGJlIGlubGluZWQgYW5kICpkb2VzKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoaXMgbWFrZXMgaXQgYSB2aWFibGUgY2FuZGlkYXRlLiBTaW5jZSB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBiZXR0ZXIgbm9uLXN0YXRpYyBvcHRpb24sIGBndHBfZW5jYXBfcmVjdmAgd2lsbCBiZSB0aGUgYmVzdCBlbnRyeXBvaW50IGZ1bmN0aW9uIGZvciB0aGUgR1RQIGRhdGFwYXRoLlxuXG5JJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGBncm9fY2VsbHNfcmVjZWl2ZWAgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYC4gWWVwLCBpdCdzIGRlZmluZWQgYXMgYGludCBncm9fY2VsbHNfcmVjZWl2ZShzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBza19idWZmICpza2IpYCBhbmQgaXMgRVhQT1JUX1NZTUJPTCdkLlxuXG5TbywgdGhlICpGb2N1c1N5bWJvbHMqIGFyZSBjb25maXJtZWQ6IGBndHBfZW5jYXBfcmVjdmAgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAuXG5cbk5vdywgZm9yICpFbmFibGVDb25maWdzKiwgSSBuZWVkIGBHVFBgIGFuZCBgR1JPX0NFTExTYC5cblxuSSdtIGdvaW5nIHRvIHJldmlldyB0aGUgcGF0Y2ggbm93LiBJdCBmaXhlcyB0d28gdGhpbmdzOiBmaXJzdCwgaXQgZHJvcHMgR1NPIHBhY2tldHMgaW4gdGhlIEdUUCBkYXRhcGF0aCwgYW5kIHNlY29uZCwgaXQgdW5zZXRzIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGluIGBncm9fY2VsbHNfcmVjZWl2ZWAuIFRoYXQncyBpbXBvcnRhbnQuIEl0IHByZXZlbnRzIHN0YWxlIHRyYW5zcG9ydCBoZWFkZXJzIGZyb20gY2F1c2luZyBpc3N1ZXMgYXMgcGFja2V0cyBhcmUgcGFzc2VkIHVwIHRoZSBzdGFjay4gQm90aCBvZiB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdGluZyBjb3JlIG5ldHdvcmtpbmcgYW5kIGRyaXZlciBjb2RlLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy5cblxuTXkgKkZvY3VzU3ltYm9scyogYXJlIHN0aWxsOiBgZ3RwX2VuY2FwX3JlY3ZgLCBgZ3JvX2NlbGxzX3JlY2VpdmVgLlxuVGhlICpFbmFibGVDb25maWdzKiBJJ2xsIG5lZWQgYXJlIGBHVFBgIGFuZCBgR1JPX0NFTExTYC5cblxuTm93LCBJJ20ganVzdCBjb25maXJtaW5nIHRoYXQgYEdST19DRUxMU2AgaXMgYSB2YWxpZCBjb25maWcgb3B0aW9uLiBMZXQncyBzZWUuLi4gQWgsIGl0J3MgKnNlbGVjdGVkKiBpbiB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLCBidXQgbm90IGRpcmVjdGx5IGRlZmluZWQgYXMgYGNvbmZpZyBHUk9fQ0VMTFNgLiBHb3R0YSBsb29rIGEgYml0IGRlZXBlciB0byBzZWUgd2hlcmUgYEdST19DRUxMU2AgaXMgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MzQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjI5OjMzLjQ5ODEzMDE1OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMjQxNDYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgR1JPX0NFTExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ2MT1jb25maWcgRFNUX0NBQ0hFXFxuLS1cXG5uZXQvS2NvbmZpZy00NjQtXFxubmV0L0tjb25maWc6NDY1OmNvbmZpZyBHUk9fQ0VMTFNcXG5uZXQvS2NvbmZpZy00NjYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyOTozNS4yMzA1NTAxOTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0MzcwMTQxOTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgY29uZmlnIEdST19DRUxMU2AgaXMgYSBib29sZWFuIHdpdGhpbiBgbmV0L0tjb25maWdgLiBSaWdodCwgaXQncyBhIGBib29sYCB3aXRob3V0IGEgcHJvbXB0LCB3aGljaCBtZWFucyBpdCBjYW4ndCBiZSBkaXJlY3RseSBzZWxlY3RlZCBieSBhIHVzZXIuIEl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgKnRocm91Z2gqIGFub3RoZXIgY29uZmlnLiBIbW0sIGlmIEkgdHJ5IHRvIGp1c3QgYWRkIGBHUk9fQ0VMTFNgIHRvIGBFbmFibGVDb25maWdzYCwgaXQgbGlrZWx5IHdvbid0IHdvcmssIGJlY2F1c2UgS2NvbmZpZyB3b24ndCBsZXQgaXQgYmUgZGlyZWN0bHkgc2VsZWN0ZWQuXG5cbldhaXQsIGRvZXMgc3l6a2FsbGVyIGJ5cGFzcyB0aGlzIHJlc3RyaWN0aW9uPyBObywgdGhlIEtjb25maWcgdG9vbGluZyB3aWxsIGlnbm9yZSBpdCBzaW5jZSB0aGVyZSdzIG5vIHByb21wdC4gU28sIEkgbmVlZCB0byBmaW5kIGEgKnNlbGVjdGluZyogY29uZmlnLiBTb21ldGhpbmcgdGhhdCBoYXMgdGhlIHBvdGVudGlhbCB0byBlbmFibGUgYEdST19DRUxMU2AuIE9rYXksIGBWWExBTmAsIGBNQUNTRUNgLCBvciBgR0VORVZFYCBjb3VsZCB3b3JrLiBMZXQncyBzdGFydCBieSBpbmNsdWRpbmcgYm90aCBgVlhMQU5gIGFuZCBgR0VORVZFYC5cblxuSG9sZCBvbi4uLiBkb2VzIGBHVFBgIHNlbGVjdCBpdD8gTmVlZCB0byBjb25maXJtLiBOby4gT2theSwgYmFjayB0byB0aGUgZHJhd2luZyBib2FyZCB0byBkb3VibGUtY2hlY2suIExldCBtZSBsb29rIGF0IGBkcml2ZXJzL25ldC9LY29uZmlnYCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgVlhMQU5gIHNlbGVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0OTQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6MzE6MzkuNjAwNjk1NDc2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgzMzEzMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWWExBTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTIxNj1jb25maWcgSVBWVEFQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIyOS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjIzMDpjb25maWcgVlhMQU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBlWHRlbnNpYmxlIExvY2FsIEFyZWEgTmV0d29yayAoVlhMQU4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozMTo0MS4zODQwMTQwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc4Nzg0NDA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIERlY2lzaW9uKipcblxuT2theSwgc28gSSdtIGltcGxlbWVudGluZyBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBHVFAgYW5kIFZYTEFOLiBJdCdzIGNsZWFyIHRoYXQgdGhlIHVzZXIgKmNhbiogc2VsZWN0IFZYTEFOLCBzbyB0aGF0J3MgZ29pbmcgaW4gbXkgRW5hYmxlQ29uZmlncy4gSSdsbCBhbHNvIGFkZCBHVFAgdG8gRW5hYmxlQ29uZmlncy4gTm93LCBsZXQncyBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBkZXBlbmRlbmNpZXMgY2F1c2luZyBwcm9ibGVtcy5cblxuR1RQIGRlcGVuZHMgb24gSU5FVCwgd2hpY2ggaXMgZXhwZWN0ZWQsIGFuZCBzZWxlY3RzIE5FVF9VRFBfVFVOTkVMLiBUaGF0J3MgYWxsIGdvb2QsIG5vIGlzc3VlcyB0aGVyZS5cblxuVlhMQU4gYWxzbyBkZXBlbmRzIG9uIElORVQgYW5kIHRoZW4gZWl0aGVyIElQVjYgKm9yKiBpdCBiZWluZyBkaXNhYmxlZCwgYW5kIGFsc28gc2VsZWN0cyBORVRfVURQX1RVTk5FTCBhbmQgR1JPX0NFTExTLiBNYWtlcyBzZW5zZS4gSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCBJIGNhbiBlbmFibGUgR1JPX0NFTExTIGJ5IGVuYWJsaW5nIFZYTEFOIGFuZCB0aGF0IHRoZSBWWExBTiBvcHRpb24gd2lsbCBlbmFibGUgTkVUX1VEUF9UVU5ORUwsIHNvIHRoYXTigJlzIGZpbmUuIEknbSBhbHNvIGNvbmZpcm1pbmcgdGhhdCBORVRfVURQX1RVTk5FTCBpcyBzZWxlY3RlZCBieSAqYm90aCogR1RQIGFuZCBWWExBTiwgYXMgZXhwZWN0ZWQuXG5cblRoZXJlZm9yZSwgRW5hYmxlQ29uZmlncyB3aWxsIGJlOiAqKkdUUCwgVlhMQU4qKi5cblxuRm9yIG15IEZvY3VzU3ltYm9scywgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgZnVuY3Rpb25zIGBndHBfZW5jYXBfcmVjdmAgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHNvIEknbGwgaW5jbHVkZSB0aG9zZS4gU28sIG15IEZvY3VzU3ltYm9scyBhcmU6ICoqZ3RwX2VuY2FwX3JlY3YsIGdyb19jZWxsc19yZWNlaXZlKiouXG5cblRoaXMgcGF0Y2gsIGl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgaXNzdWUgYnkgbW9kaWZ5aW5nIHRoZSBHVFAgZHJpdmVyIHRvIGRyb3AgR1NPIHBhY2tldHMgaW4gdGhlIGd0cF9yeCBwYXRoIChoYW5kbGVkIHZpYSBndHBfZW5jYXBfcmVjdikgYW5kIG1vZGlmeWluZyBncm9fY2VsbHNfcmVjZWl2ZSB0byBwcmV2ZW50IHN0YWxlIGhlYWRlciBpc3N1ZXMuIFRoZXNlIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBhY3RpdmUgbmV0d29yayBkYXRhcGF0aCwgc28gaXQncyBhIGNyaXRpY2FsIGNoYW5nZS4gSSdtIGFsbCBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDMwLCJPdXRwdXRUb2tlbnMiOjEzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozMjoyNS4xNzE4NjExNDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njg3MDQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1RQXCIsXG4gICAgXCJWWExBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImd0cF9lbmNhcF9yZWN2XCIsXG4gICAgXCJncm9fY2VsbHNfcmVjZWl2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHVFAgZHJpdmVyIHRvIGRyb3AgR1NPIHBhY2tldHMgaW4gYGd0cF9yeGAgKGNhbGxlZCB2aWEgYGd0cF9lbmNhcF9yZWN2YCkgYW5kIHVwZGF0ZXMgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIGBza19idWZmYHMgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBzdGFsZSBoZWFkZXJzLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZGF0YXBhdGggY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJHVFBcIixcbiAgICBcIlZYTEFOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3RwX2VuY2FwX3JlY3ZcIixcbiAgICBcImdyb19jZWxsc19yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdUUCBkcml2ZXIgdG8gZHJvcCBHU08gcGFja2V0cyBpbiBgZ3RwX3J4YCAoY2FsbGVkIHZpYSBgZ3RwX2VuY2FwX3JlY3ZgKSBhbmQgdXBkYXRlcyB0aGUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gdW5zZXQgdGhlIHRyYW5zcG9ydCBoZWFkZXIgb2YgYHNrX2J1ZmZgcyB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIHN0YWxlIGhlYWRlcnMuIEJvdGggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBkYXRhcGF0aCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozMjoyNS4yNDg3MzgxMDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTI3NDY1NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6MzI6MjUuMjQ5MjQ4MTc5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMTI2OTUxMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzIGFuZCBtb2RpZmllcyBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIHRoZSBgc2tiYCBieSBzZXR0aW5nIGBza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHRvIGB+MFVgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgdGhlIHVuc2V0IHRyYW5zcG9ydCBoZWFkZXIgaXMgdXNlZCB3aXRob3V0IGNoZWNraW5nLCBpdCB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKHVzaW5nIGB+MFVgIGFzIGFuIG9mZnNldCksIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGh1cywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFhMWFiOGQwNWMyYmI1MWUxNzdhZmY5N2U1ZmU4YjAzMGRmYmNlZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzoyODoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmNcbmluZGV4IDlhMTJjYzUzZGEwMDIuLmY2ZTQ3YzM2OWQ2MjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ndHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZ3RwLmNcbkBAIC0zMTIsNiArMzEyLDExIEBAIHN0YXRpYyBpbnQgZ3RwX2lubmVyX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZHJsZW4sXG4gc3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKVxuIHtcbitcdGlmIChza2JfaXNfZ3NvKHNrYikpIHtcbitcdFx0bmV0ZGV2X2RiZyhwY3R4LVx1MDAzZWRldiwgXCJHU08gaXMgbm90IHN1cHBvcnRlZCBpbiBHVFBcXG5cIik7XG4rXHRcdGdvdG8gZXJyO1xuK1x0fVxuK1xuIFx0aWYgKCFndHBfY2hlY2tfbXMoc2tiLCBwY3R4LCBoZHJsZW4sIHJvbGUsIGlubmVyX3Byb3RvKSkge1xuIFx0XHRuZXRkZXZfZGJnKHBjdHgtXHUwMDNlZGV2LCBcIk5vIFBEUCBjdHggZm9yIHRoaXMgTVNcXG5cIik7XG4gXHRcdHJldHVybiAxO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCAyMmVkYTFkNTRhMGU4Li42MjZiYmI5YmFlMWFkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTMwODIsNiArMzA4MiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSl+MFU7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RyYW5zcG9ydF9oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2dyb19jZWxscy5jIGIvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcbmluZGV4IDFiODQzODVjMDRiZDkuLmQ4YzBhMjg2NzEyMDEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ncm9fY2VsbHMuY1xuKysrIGIvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcbkBAIC0yMiw2ICsyMiw4IEBAIGludCBncm9fY2VsbHNfcmVjZWl2ZShzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAodW5saWtlbHkoIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkpKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4rXHRza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuK1xuIFx0aWYgKCFnY2VsbHMtXHUwMDNlY2VsbHMgfHwgc2tiX2Nsb25lZChza2IpIHx8IG5ldGlmX2VsaWRlX2dybyhkZXYpKSB7XG4gXHRcdHJlcyA9IG5ldGlmX3J4KHNrYik7XG4gXHRcdGdvdG8gdW5sb2NrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6MzI6MjUuMjQ5MjUwNDQ5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTI2OTIzNjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1RQIFBhdGNoOiBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLiBMb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgYGd0cF9yeGAgbm93IGRyb3BwaW5nIEdTTyBwYWNrZXRzIHdpdGggdGhlIGFkZGVkIGNoZWNrIGBpZiAoc2tiX2lzX2dzbyhza2IpKWAuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgYWRkcmVzc2luZyBhbiBpbmNvbXBhdGliaWxpdHkgd2l0aCBHVFAsIGFuZCBHU08gaGFuZGxpbmcuXG5cblRoZW4sIHRoZXJlJ3MgdGhlIGFkZGl0aW9uIG9mIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpYCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIGFuZCBpdOKAmXMgYmVpbmcgY2FsbGVkIGluIGBncm9fY2VsbHNfcmVjZWl2ZWAuIFRoaXMgaXMgdGhlIHBhcnQgdGhhdCBwaXF1ZWQgbXkgaW50ZXJlc3QgcmVnYXJkaW5nIG1lbW9yeSBzYWZldHkuIExldCdzIGJyZWFrIHRoaXMgZG93bjpcblxuKiAgICoqYGd0cF9yeGAgYW5kIEdTTyBwYWNrZXRzOioqIFRoYXQgZHJvcCBsb2dpYyBzZWVtcyBzb3VuZCBlbm91Z2guIE5vdGhpbmcgYWxhcm1pbmcgdGhlcmUuXG4qICAgKipgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgOioqIFRoaXMgaXMgdGhlIGtleS4gU2V0dGluZyBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHRvIGB+MFVgIGVmZmVjdGl2ZWx5IG1lYW5zIGl0J3MgbWFya2VkIGFzIHVuc2V0LiBUaGF0IGlzIHdoYXQgdGhpcyBjYWxsIGRvZXMuXG4qICAgKipgZ3JvX2NlbGxzX3JlY2VpdmVgIGNhbGw6KiogYGdyb19jZWxsc19yZWNlaXZlYCBpcyBtYWtpbmcgdXNlIG9mIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQnV0LCB3YWl0LCB0aGF0J3Mgbm90IHRoZSBjYXNlLiBXZSdyZSAqc2V0dGluZyogYHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyYCB0byBhICpzcGVjaWZpYyogdmFsdWUsIGB+MFVgLCBub3QgbGVhdmluZyBpdCBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlLiBUaGUgR1NPIGRyb3AgaXMgYSBzdHJhaWdodGZvcndhcmQgY29uZGl0aW9uYWwsIG5vIGNvbXBsZXhpdGllcyB0aGVyZS5cblxuTm93LCBsZXQncyBkaWcgYSBiaXQgZGVlcGVyLiBDb3VsZCB0aGlzIHBvdGVudGlhbGx5IGxlYWQgdG8gYSBtZW1vcnkgKnJlYWQqIGlzc3VlIG9yIGV2ZW4gYW4gaW5mbyBsZWFrPyBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIGlzIGVpdGhlciBhbiBvZmZzZXQgb3IgYSBwb2ludGVyLCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24uIFNldHRpbmcgaXQgdG8gYH4wVWAgaW5kaWNhdGVzIGFuIHVuc2V0IHN0YXRlLiBUaGUgZGFuZ2VyIGlzLCBpZiBzb21lIHBhcnQgb2YgdGhlIGNvZGUgKnJlYWRzKiBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHdpdGhvdXQgY2hlY2tpbmcgaWYgaXQncyBzZXQgdXNpbmcgYSBmdW5jdGlvbiBzdWNoIGFzIGBza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0YCwgaXQgbWlnaHQgaW50ZXJwcmV0IHRoYXQgYH4wVWAgdmFsdWUgYXMgYSB2YWxpZCBvZmZzZXQuIFRoaXMgY291bGQgcmVzdWx0IGluIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCwgb2YgY291cnNlLCBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgdG8gY2F0Y2guIEJ1dCwgdGhlcmUncyBubyBhY3R1YWwgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlJ3JlIGV4cGxpY2l0bHkgc2V0dGluZyBhIHZhbHVlLCBhbGJlaXQgYSBcInNwZWNpYWxcIiBvbmUuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhlIG9ubHkgcmlzayBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdGhhdCB3aWxsIGJlIGNhdWdodCBieSBLQVNBTiwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gVGhlIHBhdGNoIG1vZGlmaWVzIGBndHBfcnhgIHRvIGRyb3AgR1NPIHBhY2tldHMuIEl0IGFsc28gbW9kaWZpZXMgYGdyb19jZWxsc19yZWNlaXZlYCB0byB1bnNldCB0aGUgdHJhbnNwb3J0IGhlYWRlciwgYnkgc2V0dGluZyBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHRvIGB+MFVgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiB0aGUgdW5zZXQgdHJhbnNwb3J0IGhlYWRlciBpcyB1c2VkIHdpdGhvdXQgY2hlY2tpbmcsIGl0IHJlc3VsdHMgaW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHdoaWNoIGlzIGNhdWdodCBieSBLQVNBTi5cblRodXMsIG5vIGFkZGl0aW9uYWwgS01TQU4gdGVzdGluZyBpcyBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTksIk91dHB1dFRva2VucyI6MTYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6MzI6MzcuMzc2MTc3MjQ3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzIGFuZCBtb2RpZmllcyBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIHRoZSBgc2tiYCBieSBzZXR0aW5nIGBza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHRvIGB+MFVgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgdGhlIHVuc2V0IHRyYW5zcG9ydCBoZWFkZXIgaXMgdXNlZCB3aXRob3V0IGNoZWNraW5nLCBpdCB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKHVzaW5nIGB+MFVgIGFzIGFuIG9mZnNldCksIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGh1cywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBndHBfcnhgIHRvIGRyb3AgR1NPIHBhY2tldHMgYW5kIG1vZGlmaWVzIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gdW5zZXQgdGhlIHRyYW5zcG9ydCBoZWFkZXIgb2YgdGhlIGBza2JgIGJ5IHNldHRpbmcgYHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlcmAgdG8gYH4wVWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiB0aGUgdW5zZXQgdHJhbnNwb3J0IGhlYWRlciBpcyB1c2VkIHdpdGhvdXQgY2hlY2tpbmcsIGl0IHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAodXNpbmcgYH4wVWAgYXMgYW4gb2Zmc2V0KSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaHVzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmm9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 13:10:37 +0000 UTC FinishedAt: 2026-08-25 13:32:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GTP", "VXLAN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GTP", "VXLAN" ], "series_id": "0b1e98d0-33af-47ae-a591-99310f563a93" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "gtp_encap_recv", "gro_cells_receive" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dUUCYjMzQ7LAogICAgJiMzNDtWWExBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d0cF9lbmNhcF9yZWN2JiMzNDssCiAgICAmIzM0O2dyb19jZWxsc19yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGd0cF9yeGAgdG8gZHJvcCBHU08gcGFja2V0cyBhbmQgbW9kaWZpZXMgYGdyb19jZWxsc19yZWNlaXZlYCB0byB1bnNldCB0aGUgdHJhbnNwb3J0IGhlYWRlciBvZiB0aGUgYHNrYmAgYnkgc2V0dGluZyBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHRvIGB+MFVgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgdGhlIHVuc2V0IHRyYW5zcG9ydCBoZWFkZXIgaXMgdXNlZCB3aXRob3V0IGNoZWNraW5nLCBpdCB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKHVzaW5nIGB+MFVgIGFzIGFuIG9mZnNldCksIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGh1cywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIChjYWxsZWQgdmlhIGBndHBfZW5jYXBfcmVjdmApIGFuZCB1cGRhdGVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYGdyb19jZWxsc19yZWNlaXZlYCB0byB1bnNldCB0aGUgdHJhbnNwb3J0IGhlYWRlciBvZiBgc2tfYnVmZmBzIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggc3RhbGUgaGVhZGVycy4gQm90aCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBuZXR3b3JrIGRhdGFwYXRoIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYTFhYjhkMDVjMmJiNTFlMTc3YWZmOTdlNWZlOGIwMzBkZmJjZWZhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMTM6Mjg6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3RwLmMgYi9kcml2ZXJzL25ldC9ndHAuY1xuaW5kZXggOWExMmNjNTNkYTAwMi4uZjZlNDdjMzY5ZDYyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2d0cC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ndHAuY1xuQEAgLTMxMiw2ICYjNDM7MzEyLDExIEBAIHN0YXRpYyBpbnQgZ3RwX2lubmVyX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZHJsZW4sXG4gc3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKVxuIHtcbiYjNDM7XHRpZiAoc2tiX2lzX2dzbyhza2IpKSB7XG4mIzQzO1x0XHRuZXRkZXZfZGJnKHBjdHgtXHUwMDNlZGV2LCBcJiMzNDtHU08gaXMgbm90IHN1cHBvcnRlZCBpbiBHVFBcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghZ3RwX2NoZWNrX21zKHNrYiwgcGN0eCwgaGRybGVuLCByb2xlLCBpbm5lcl9wcm90bykpIHtcbiBcdFx0bmV0ZGV2X2RiZyhwY3R4LVx1MDAzZWRldiwgXCYjMzQ7Tm8gUERQIGN0eCBmb3IgdGhpcyBNU1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiAxO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCAyMmVkYTFkNTRhMGU4Li42MjZiYmI5YmFlMWFkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTMwODIsNiAmIzQzOzMwODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdHJldHVybiBza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciAhPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSl+MFU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gKHR5cGVvZihza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RyYW5zcG9ydF9oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2dyb19jZWxscy5jIGIvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcbmluZGV4IDFiODQzODVjMDRiZDkuLmQ4YzBhMjg2NzEyMDEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ncm9fY2VsbHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcbkBAIC0yMiw2ICYjNDM7MjIsOCBAQCBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0aWYgKHVubGlrZWx5KCEoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBJRkZfVVApKSlcbiBcdFx0Z290byBkcm9wO1xuIFxuJiM0MztcdHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4mIzQzO1xuIFx0aWYgKCFnY2VsbHMtXHUwMDNlY2VsbHMgfHwgc2tiX2Nsb25lZChza2IpIHx8IG5ldGlmX2VsaWRlX2dybyhkZXYpKSB7XG4gXHRcdHJlcyA9IG5ldGlmX3J4KHNrYik7XG4gXHRcdGdvdG8gdW5sb2NrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtHVFAmIzM0OywKICAgICYjMzQ7VlhMQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndHBfZW5jYXBfcmVjdiYjMzQ7LAogICAgJiMzNDtncm9fY2VsbHNfcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIChjYWxsZWQgdmlhIGBndHBfZW5jYXBfcmVjdmApIGFuZCB1cGRhdGVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYGdyb19jZWxsc19yZWNlaXZlYCB0byB1bnNldCB0aGUgdHJhbnNwb3J0IGhlYWRlciBvZiBgc2tfYnVmZmBzIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggc3RhbGUgaGVhZGVycy4gQm90aCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBuZXR3b3JrIGRhdGFwYXRoIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYTFhYjhkMDVjMmJiNTFlMTc3YWZmOTdlNWZlOGIwMzBkZmJjZWZhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMTM6Mjg6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ndHAuYyBiL2RyaXZlcnMvbmV0L2d0cC5jCmluZGV4IDlhMTJjYzUzZGEwMDIuLmY2ZTQ3YzM2OWQ2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2d0cC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2d0cC5jCkBAIC0zMTIsNiAmIzQzOzMxMiwxMSBAQCBzdGF0aWMgaW50IGd0cF9pbm5lcl9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGRybGVuLAogc3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKQogewomIzQzOwlpZiAoc2tiX2lzX2dzbyhza2IpKSB7CiYjNDM7CQluZXRkZXZfZGJnKHBjdHgtJmd0O2RldiwgJiMzNDtHU08gaXMgbm90IHN1cHBvcnRlZCBpbiBHVFBcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiYjNDM7CiAJaWYgKCFndHBfY2hlY2tfbXMoc2tiLCBwY3R4LCBoZHJsZW4sIHJvbGUsIGlubmVyX3Byb3RvKSkgewogCQluZXRkZXZfZGJnKHBjdHgtJmd0O2RldiwgJiMzNDtObyBQRFAgY3R4IGZvciB0aGlzIE1TXG4mIzM0Oyk7CiAJCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggMjJlZGExZDU0YTBlOC4uNjI2YmJiOWJhZTFhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC0zMDgyLDYgJiM0MzszMDgyLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiAJcmV0dXJuIHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciAhPSAodHlwZW9mKHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcikpfjBVOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXIgPSAodHlwZW9mKHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcikpfjBVOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RyYW5zcG9ydF9oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlERUJVR19ORVRfV0FSTl9PTl9PTkNFKCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmMgYi9uZXQvY29yZS9ncm9fY2VsbHMuYwppbmRleCAxYjg0Mzg1YzA0YmQ5Li5kOGMwYTI4NjcxMjAxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ncm9fY2VsbHMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9ncm9fY2VsbHMuYwpAQCAtMjIsNiAmIzQzOzIyLDggQEAgaW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlpZiAodW5saWtlbHkoIShkZXYtJmd0O2ZsYWdzICZhbXA7IElGRl9VUCkpKQogCQlnb3RvIGRyb3A7CiAKJiM0MzsJc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKJiM0MzsKIAlpZiAoIWdjZWxscy0mZ3Q7Y2VsbHMgfHwgc2tiX2Nsb25lZChza2IpIHx8IG5ldGlmX2VsaWRlX2dybyhkZXYpKSB7CiAJCXJlcyA9IG5ldGlmX3J4KHNrYik7CiAJCWdvdG8gdW5sb2NrOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTIyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBoZXJlIHRoYXQgdG91Y2hlcyBzb21lIGludGVyZXN0aW5nIGFyZWFzOiBgZHJpdmVycy9uZXQvZ3RwLmNgLCBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIGFuZCBgbmV0L2NvcmUvZ3JvX2NlbGxzLmNgLiBJIHNlZSB0aGF0IHRoZSBtYWluIGNoYW5nZXMgaW52b2x2ZSBhZGRpbmcgYSBjaGVjayBpbiBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzLCBpbnRyb2R1Y2luZyBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgIGluIGBza2J1ZmYuaGAsIGFuZCwgaW1wb3J0YW50bHksIGNhbGxpbmcgdGhhdCBuZXcgZnVuY3Rpb24gd2l0aGluIGBncm9fY2VsbHNfcmVjZWl2ZWAuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O0lzIHRoaXMgd29ydGggbXkgdGltZSB0byBmdXp6PyYjMzQ7IGBncm9fY2VsbHNfcmVjZWl2ZWAgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIG5ldHdvcmtpbmcgZnVuY3Rpb24sIGhlYXZpbHkgdXNlZCBieSBhIHdpZGUgdmFyaWV0eSBvZiBkcml2ZXJzOiBtYWM4MDIxMSwgZ2VuZXZlLCB2eGxhbiwgZ3RwLi4uIHRoZSBsaXN0IGdvZXMgb24uIFRoaXMgbWFrZXMgaXQgYSBwcmltZSB0YXJnZXQgZm9yIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMsIGVzcGVjaWFsbHkgaWYgdGhpcyBwYXRjaCBzdWJ0bHkgY2hhbmdlcyBpdHMgYmVoYXZpb3Igb3IgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3RhY2suIGBndHBfcnhgIGlzIGp1c3QgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiwgYnV0IGlmIHdlIGNhbiBicmVhayBpdCBpbiBgZ3JvX2NlbGxzX3JlY2VpdmVgIGl0IHdvdWxkIGJlIHVzZWZ1bC4KClNvLCB0aGUgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjYWxsIHNpdGUgb2YgYGdyb19jZWxsc19yZWNlaXZlYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBwYXRjaCBhbHRlcnMgaXRzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG5ldyBmdW5jdGlvbiBhbmQgdGhlIEdTTyBwYWNrZXQgY2hlY2sgaW50ZXJhY3QgaW4gdGhpcyBjb250ZXh0LiBUaGlzIHNlZW1zIGxpa2UgaXQgY291bGQgb3BlbiB1cCBhIGNvdXBsZSBvZiBuZXcgYXZlbnVlcyBmb3IgZnV6emluZzogYGd0cF9yeGAgaW4gcGFydGljdWxhciBmb3IgaG93IGl0IGhhbmRsZXMgR1NPIHBhY2tldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3JvX2NlbGxzX3JlY2VpdmUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYW10LmM9MjI5Nz1zdGF0aWMgYm9vbCBhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2FtdC5jLTIzNTgtXHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuZHJpdmVycy9uZXQvYW10LmM6MjM1OTpcdGVyciA9IGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNmFtdC1cdTAwM2Vncm9fY2VsbHMsIHNrYik7XG5kcml2ZXJzL25ldC9hbXQuYy0yMzYwLVx0aWYgKGxpa2VseShlcnIgPT0gTkVUX1JYX1NVQ0NFU1MpKVxuLS1cbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYz02MT1zdGF0aWMgaW50IGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYy0xOTQtXHRsZW4gPSBza2ItXHUwMDNlbGVuO1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jOjE5NTpcdGVyciA9IGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNmJhcmV1ZHAtXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTE5Ni1cdGlmIChsaWtlbHkoZXJyID09IE5FVF9SWF9TVUNDRVNTKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jPTQwPXJtbmV0X2RlbGl2ZXJfc2tiKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy00OS1cdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsIDApO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYzo1MDpcdGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNnByaXYtXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvcm1uZXRfaGFuZGxlcnMuYy01MS19XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjcwPXN0YXRpYyB2b2lkIGdlbmV2ZV9yeChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTM3Ny1cdGVsc2VcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjM3ODpcdFx0ZXJyID0gZ3JvX2NlbGxzX3JlY2VpdmUoXHUwMDI2Z2VuZXZlLVx1MDAzZWdyb19jZWxscywgc2tiKTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTM3OS1cdGlmIChsaWtlbHkoZXJyID09IE5FVF9SWF9TVUNDRVNTKSlcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYz04NDc9c3RhdGljIHZvaWQgbWFjc2VjX2RlY3J5cHRfZG9uZSh2b2lkICpkYXRhLCBpbnQgZXJyKVxuLS1cbmRyaXZlcnMvbmV0L21hY3NlYy5jLTg3NC1cbmRyaXZlcnMvbmV0L21hY3NlYy5jOjg3NTpcdGlmIChncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZtYWNzZWMtXHUwMDNlZ3JvX2NlbGxzLCBza2IpID09IE5FVF9SWF9TVUNDRVNTKVxuZHJpdmVycy9uZXQvbWFjc2VjLmMtODc2LVx0XHRjb3VudF9yeChkZXYsIGxlbik7XG4tLVxuZHJpdmVycy9uZXQvbWFjc2VjLmM9MTEzMD1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBtYWNzZWNfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcbi0tXG5kcml2ZXJzL25ldC9tYWNzZWMuYy0xMzAyLVx0c2tiX29ycGhhbihza2IpO1xuZHJpdmVycy9uZXQvbWFjc2VjLmM6MTMwMzpcdHJldCA9IGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNm1hY3NlYy1cdTAwM2Vncm9fY2VsbHMsIHNrYik7XG5kcml2ZXJzL25ldC9tYWNzZWMuYy0xMzA0LVx0aWYgKHJldCA9PSBORVRfUlhfU1VDQ0VTUylcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmM9NjA9c3RhdGljIHZvaWQgb3Zwbl9uZXRkZXZfd3JpdGUoc3RydWN0IG92cG5fcGVlciAqcGVlciwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtOTQtXHQvKiB3ZSBtYXkgZ2V0IGhlcmUgaW4gcHJvY2VzcyBjb250ZXh0IGluIGNhc2Ugb2YgVENQIGNvbm5lY3Rpb25zLFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjk1Olx0ICogdGhlcmVmb3JlIHdlIGhhdmUgdG8gZGlzYWJsZSBCSHMgdG8gZW5zdXJlIGdyb19jZWxsc19yZWNlaXZlKClcbmRyaXZlcnMvbmV0L292cG4vaW8uYy05Ni1cdCAqIGFuZCBkZXZfZHN0YXRzX3J4X2FkZCgpIGRvIG5vdCBnZXQgY29ycnVwdGVkIG9yIGVudGVyIGRlYWRsb2NrXG4tLVxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTk4LVx0bG9jYWxfYmhfZGlzYWJsZSgpO1xuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjk5Olx0cmV0ID0gZ3JvX2NlbGxzX3JlY2VpdmUoXHUwMDI2cGVlci1cdTAwM2VvdnBuLVx1MDAzZWdyb19jZWxscywgc2tiKTtcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0xMDAtXHRpZiAobGlrZWx5KHJldCA9PSBORVRfUlhfU1VDQ0VTUykpIHtcbi0tXG5kcml2ZXJzL25ldC9wZmNwLmM9NTE9c3RhdGljIGludCBwZmNwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3BmY3AuYy05Ni1cbmRyaXZlcnMvbmV0L3BmY3AuYzo5NzpcdGdyb19jZWxsc19yZWNlaXZlKFx1MDAyNnBmY3AtXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xuZHJpdmVycy9uZXQvcGZjcC5jLTk4LVxuLS1cbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNjQ2PXN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTgwMS1cdHZ4bGFuX3ZuaWZpbHRlcl9jb3VudCh2eGxhbiwgdm5pLCB2bmlub2RlLCBWWExBTl9WTklfU1RBVFNfUlgsIHNrYi1cdTAwM2VsZW4pO1xuZHJpdmVycy9uZXQvdnhsYW4vdnhsYW5fY29yZS5jOjE4MDI6XHRncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZ2eGxhbi1cdTAwM2Vncm9fY2VsbHMsIHNrYik7XG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTgwMy1cbi0tXG5pbmNsdWRlL25ldC9ncm9fY2VsbHMuaD0xMT1zdHJ1Y3QgZ3JvX2NlbGxzIHtcbi0tXG5pbmNsdWRlL25ldC9ncm9fY2VsbHMuaC0xNC1cbmluY2x1ZGUvbmV0L2dyb19jZWxscy5oOjE1OmludCBncm9fY2VsbHNfcmVjZWl2ZShzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9uZXQvZ3JvX2NlbGxzLmgtMTYtaW50IGdyb19jZWxsc19pbml0KHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4tLVxubmV0L2NvcmUvZ3JvX2NlbGxzLmM9OD1zdHJ1Y3QgZ3JvX2NlbGwge1xuLS1cbm5ldC9jb3JlL2dyb19jZWxscy5jLTEzLVxubmV0L2NvcmUvZ3JvX2NlbGxzLmM6MTQ6aW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC9jb3JlL2dyb19jZWxscy5jLTE1LXtcbi0tXG5uZXQvY29yZS9ncm9fY2VsbHMuYy01NS19XG5uZXQvY29yZS9ncm9fY2VsbHMuYzo1NjpFWFBPUlRfU1lNQk9MKGdyb19jZWxsc19yZWNlaXZlKTtcbm5ldC9jb3JlL2dyb19jZWxscy5jLTU3LVxuLS1cbm5ldC9kc2EvdGFnLmM9NTQ9c3RhdGljIGludCBkc2Ffc3dpdGNoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9kc2EvdGFnLmMtMTIyLVxubmV0L2RzYS90YWcuYzoxMjM6XHRncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZwLVx1MDAzZWdjZWxscywgc2tiKTtcbm5ldC9kc2EvdGFnLmMtMTI0LVxuLS1cbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTM3Nz1pbnQgaXBfdHVubmVsX3JjdihzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvaXBfdHVubmVsLmMtNDQ3LVxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDQ4Olx0Z3JvX2NlbGxzX3JlY2VpdmUoXHUwMDI2dHVubmVsLVx1MDAzZWdyb19jZWxscywgc2tiKTtcbm5ldC9pcHY0L2lwX3R1bm5lbC5jLTQ0OS1cdHJldHVybiAwO1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz04MDg9c3RhdGljIGludCBfX2lwNl90bmxfcmN2KHN0cnVjdCBpcDZfdG5sICp0dW5uZWwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTg5NC1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYzo4OTU6XHRncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZ0dW5uZWwtXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTg5Ni1cdHJldHVybiAwO1xuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYz00NjY9aW50IHhmcm1faW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5leHRoZHIsIF9fYmUzMiBzcGksIGludCBlbmNhcF90eXBlKVxuLS1cbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03NDYtXHRcdFx0ZGV2X3B1dChkZXYpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjc0NzpcdFx0Z3JvX2NlbGxzX3JlY2VpdmUoXHUwMDI2Z3JvX2NlbGxzLCBza2IpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jLTc0OC1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tLVxubmV0L3hmcm0veGZybV9pbnB1dC5jLTc2NC1cdFx0XHRcdHNrYl9kc3RfZHJvcChza2IpO1xubmV0L3hmcm0veGZybV9pbnB1dC5jOjc2NTpcdFx0XHRncm9fY2VsbHNfcmVjZWl2ZShcdTAwMjZncm9fY2VsbHMsIHNrYik7XG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzY2LVx0XHR9XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTYzOT1zdGF0aWMgdTMyIF9faXB0ZnNfaXBsZW4odTggKmRhdGEpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY1NC0gKiBGaW5pc2ggdGhlIHN0YW5kYXJkIHhmcm0gcHJvY2Vzc2luZyBvbiB0aGUgaW5uZXIgcGFja2V0IHByaW9yIHRvIHNlbmRpbmcgYmFja1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjY1NTogKiB0aHJvdWdoIGdyb19jZWxsc19yZWNlaXZlLiBXZSBkbyB0aGlzIHNlcGFyYXRlbHkgYi9jIHdlIGFyZSBidWlsZGluZyBhIGxpc3Rcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NTYtICogb2YgcGFja2V0cyBpbiB0aGUgaG9wZXMgdGhhdCBvbmUgZGF5IGEgbGlzdCB3aWxsIGJlIHRha2VuIGJ5XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTY1OT1zdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY2Mi1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2NjM6XHQvKiBUaGUgcGFja2V0IGlzIGdvaW5nIGJhY2sgdGhyb3VnaCBncm9fY2VsbHNfcmVjZWl2ZSBubyBuZWVkIHRvXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjY0LVx0ICogc2V0IHRoaXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM2MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaGFzIG1lIGludHJpZ3VlZC4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBwcmV0dHkgZnVuZGFtZW50YWwgcGFydHMgb2YgdGhlIG5ldHdvcmtpbmcgc3RhY2ssIG5hbWVseSBgZ3JvX2NlbGxzX3JlY2VpdmVgIGFuZCBgZ3RwX3J4YC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoYXQgYGdyb19jZWxsc19yZWNlaXZlYCBub3cgY2FsbHMgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYilgLiBUaGF0JiMzOTtzIGEgbG93LWxldmVsIGZ1bmN0aW9uIHRoYXQgaW1wYWN0cyBhICpsb3QqIG9mIGRyaXZlcnMgYW5kIHR1bm5lbHPigJR2eGxhbiwgZ2VuZXZlLCB0aGUgaXBfdHVubmVsLCB4ZnJtLi4uIGJhc2ljYWxseSBhbnl0aGluZyB0aGF0IGRvZXMgZW5jYXBzdWxhdGlvbi4gSSBuZWVkIHRvIGtlZXAgYW4gZXllIG9uIHRoaXMuIFRoZSBvdGhlciBtb2RpZmljYXRpb24gZGVhbHMgd2l0aCB0aGUgYGd0cF9yeGAgZnVuY3Rpb24gd2hpY2ggY2F1c2VzIEdTTyBwYWNrZXRzIHRvIGJlIGRyb3BwZWQuCgpUaGUgYmlnIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBJIG1lYW4sIGl0ICpkb2VzKiBmaXggYSBidWfigJRgZ3JvX2NlbGxzX3JlY2VpdmVgIHdhc24mIzM5O3QgcHJvcGVybHkgdW5zZXR0aW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyLCB3aGljaCBjb3VsZCBsZWFkIHRvIGFsbCBzb3J0cyBvZiBuYXN0eSBzaWRlIGVmZmVjdHMgZG93biB0aGUgbGluZS4gVGhhdCYjMzk7cyBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcuIFRoZSBgZ3RwX3J4YCBjaGFuZ2UsIHRob3VnaCwgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGJlaGF2aW91ciBjaGFuZ2UgYXMgb3Bwb3NlZCB0byBhIGJ1Z2ZpeC4gU28gSSBuZWVkIHRvIGJlIHN1cmUgb24gdGhpcy4KCkkmIzM5O20gdGhpbmtpbmcsIHRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGNvZGUgZm9yIGJvdGggYGd0cF9yeGAgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAgYW5kIHNlZSB3aGF0IHRoZSBpbXBsaWNhdGlvbnMgYXJlIGluIGRldGFpbC4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwX3J4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2d0cC5jPTI4OD1zdGF0aWMgaW50IGd0cF9pbm5lcl9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGRybGVuLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTMxMS1cbmRyaXZlcnMvbmV0L2d0cC5jOjMxMjpzdGF0aWMgaW50IGd0cF9yeChzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRyaXZlcnMvbmV0L2d0cC5jLTMxMy1cdFx0ICB1bnNpZ25lZCBpbnQgaGRybGVuLCB1bnNpZ25lZCBpbnQgcm9sZSwgX191MTYgaW5uZXJfcHJvdG8pXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9NTg1PXN0YXRpYyBpbnQgZ3RwMF91ZHBfZW5jYXBfcmVjdihzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTYyNS1cbmRyaXZlcnMvbmV0L2d0cC5jOjYyNjpcdHJldHVybiBndHBfcngocGN0eCwgc2tiLCBoZHJsZW4sIGd0cC1cdTAwM2Vyb2xlLCBpbm5lcl9wcm90byk7XG5kcml2ZXJzL25ldC9ndHAuYy02MjctfVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jPTc5Mz1zdGF0aWMgaW50IGd0cDF1X3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtODUyLVxuZHJpdmVycy9uZXQvZ3RwLmM6ODUzOlx0cmV0dXJuIGd0cF9yeChwY3R4LCBza2IsIGhkcmxlbiwgZ3RwLVx1MDAzZXJvbGUsIGlubmVyX3Byb3RvKTtcbmRyaXZlcnMvbmV0L2d0cC5jLTg1NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdUUCBSZWNlaXZlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEdUUCByZWNlaXZlIHByb2Nlc3NpbmcuIEl0IHNlZW1zIGBndHBfcnhgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBmcm9tIGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YC4gTWFrZXMgc2Vuc2UsIHRob3NlIGFyZSB0aGUgVURQIGVuY2Fwc3VsYXRpb24gZW50cnkgcG9pbnRzLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgc2tiX2lzX2dzbyhza2IpYCB3aXRoaW4gYGd0cF9yeGAuIEhtbSwgdGhhdCBzdWdnZXN0cyB0aGV5JiMzOTtyZSBkZWFsaW5nIHdpdGggR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKS4gQW5kIHRoZW4gdGhlcmUmIzM5O3MgYW4gYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyYCBjYWxsIGFkZGVkIHdpdGhpbiBgZ3JvX2NlbGxzX3JlY2VpdmVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCB1c3VhbGx5IHJlbGF0ZWQgdG8gR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykuIFNpbmNlIEdTTyBhbmQgR1JPIHdvcmsgdG9nZXRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYGdyb19jZWxsc19yZWNlaXZlYCBpdHNlbGYgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2NvcmUvZ3JvX2NlbGxzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9za2J1ZmYuaFx1MDAzZVxuICAgMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuICAgNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gICA1Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2dyb19jZWxscy5oXHUwMDNlXG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbmV0L2hvdGRhdGEuaFx1MDAzZVxuICAgNzpcdFxuICAgODpcdHN0cnVjdCBncm9fY2VsbCB7XG4gICA5Olx0XHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXHRuYXBpX3NrYnM7XG4gIDEwOlx0XHRzdHJ1Y3QgbmFwaV9zdHJ1Y3RcdG5hcGk7XG4gIDExOlx0XHRsb2NhbF9sb2NrX3RcdFx0YmhfbG9jaztcbiAgMTI6XHR9O1xuICAxMzpcdFxuICAxNDpcdGludCBncm9fY2VsbHNfcmVjZWl2ZShzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBza19idWZmICpza2IpXG4gIDE1Olx0e1xuICAxNjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cdTAwM2VkZXY7XG4gIDE3Olx0XHRib29sIGhhdmVfYmhfbG9jayA9IGZhbHNlO1xuICAxODpcdFx0c3RydWN0IGdyb19jZWxsICpjZWxsO1xuICAxOTpcdFx0aW50IHJlcztcbiAgMjA6XHRcbiAgMjE6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAgMjI6XHRcdGlmICh1bmxpa2VseSghKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSkpXG4gIDIzOlx0XHRcdGdvdG8gZHJvcDtcbiAgMjQ6XHRcbiAgMjU6XHRcdHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4gIDI2Olx0XG4gIDI3Olx0XHRpZiAoIWdjZWxscy1cdTAwM2VjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHtcbiAgMjg6XHRcdFx0cmVzID0gbmV0aWZfcngoc2tiKTtcbiAgMjk6XHRcdFx0Z290byB1bmxvY2s7XG4gIDMwOlx0XHR9XG4gIDMxOlx0XG4gIDMyOlx0XHRsb2NhbF9sb2NrX25lc3RlZF9iaChcdTAwMjZnY2VsbHMtXHUwMDNlY2VsbHMtXHUwMDNlYmhfbG9jayk7XG4gIDMzOlx0XHRoYXZlX2JoX2xvY2sgPSB0cnVlO1xuICAzNDpcdFx0Y2VsbCA9IHRoaXNfY3B1X3B0cihnY2VsbHMtXHUwMDNlY2VsbHMpO1xuICAzNTpcdFxuICAzNjpcdFx0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2Y2VsbC1cdTAwM2VuYXBpX3NrYnMpIFx1MDAzZSBSRUFEX09OQ0UobmV0X2hvdGRhdGEubWF4X2JhY2tsb2cpKSB7XG4gIDM3Olx0ZHJvcDpcbiAgMzg6XHRcdFx0ZGV2X2NvcmVfc3RhdHNfcnhfZHJvcHBlZF9pbmMoZGV2KTtcbiAgMzk6XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4gIDQwOlx0XHRcdHJlcyA9IE5FVF9SWF9EUk9QO1xuICA0MTpcdFx0XHRnb3RvIHVubG9jaztcbiAgNDI6XHRcdH1cbiAgNDM6XHRcbiAgNDQ6XHRcdF9fc2tiX3F1ZXVlX3RhaWwoXHUwMDI2Y2VsbC1cdTAwM2VuYXBpX3NrYnMsIHNrYik7XG4gIDQ1Olx0XHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZjZWxsLVx1MDAzZW5hcGlfc2ticykgPT0gMSlcbiAgNDY6XHRcdFx0bmFwaV9zY2hlZHVsZShcdTAwMjZjZWxsLVx1MDAzZW5hcGkpO1xuICA0NzpcdFxuICA0ODpcdFx0cmVzID0gTkVUX1JYX1NVQ0NFU1M7XG4gIDQ5Olx0XG4gIDUwOlx0dW5sb2NrOlxuICA1MTpcdFx0aWYgKGhhdmVfYmhfbG9jaylcbiAgNTI6XHRcdFx0bG9jYWxfdW5sb2NrX25lc3RlZF9iaChcdTAwMjZnY2VsbHMtXHUwMDNlY2VsbHMtXHUwMDNlYmhfbG9jayk7XG4gIDUzOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAgNTQ6XHRcdHJldHVybiByZXM7XG4gIDU1Olx0fVxuICA1NjpcdEVYUE9SVF9TWU1CT0woZ3JvX2NlbGxzX3JlY2VpdmUpO1xuICA1NzpcdFxuICA1ODpcdC8qIGNhbGxlZCB1bmRlciBCSCBjb250ZXh0ICovXG4gIDU5Olx0c3RhdGljIGludCBncm9fY2VsbF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiAgNjA6XHR7XG4gIDYxOlx0XHRzdHJ1Y3QgZ3JvX2NlbGwgKmNlbGwgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGdyb19jZWxsLCBuYXBpKTtcbiAgNjI6XHRcdHN0cnVjdCBza19idWZmICpza2I7XG4gIDYzOlx0XHRpbnQgd29ya19kb25lID0gMDtcbiAgNjQ6XHRcbiAgNjU6XHRcdHdoaWxlICh3b3JrX2RvbmUgXHUwMDNjIGJ1ZGdldCkge1xuICA2NjpcdFx0XHRfX2xvY2FsX2xvY2tfbmVzdGVkX2JoKFx1MDAyNmNlbGwtXHUwMDNlYmhfbG9jayk7XG4gIDY3Olx0XHRcdHNrYiA9IF9fc2tiX2RlcXVldWUoXHUwMDI2Y2VsbC1cdTAwM2VuYXBpX3NrYnMpO1xuICA2ODpcdFx0XHRfX2xvY2FsX3VubG9ja19uZXN0ZWRfYmgoXHUwMDI2Y2VsbC1cdTAwM2ViaF9sb2NrKTtcbiAgNjk6XHRcdFx0aWYgKCFza2IpXG4gIDcwOlx0XHRcdFx0YnJlYWs7XG4gIDcxOlx0XHRcdG5hcGlfZ3JvX3JlY2VpdmUobmFwaSwgc2tiKTtcbiAgNzI6XHRcdFx0d29ya19kb25lJiM0MzsmIzQzOztcbiAgNzM6XHRcdH1cbiAgNzQ6XHRcbiAgNzU6XHRcdGlmICh3b3JrX2RvbmUgXHUwMDNjIGJ1ZGdldClcbiAgNzY6XHRcdFx0bmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHdvcmtfZG9uZSk7XG4gIDc3Olx0XHRyZXR1cm4gd29ya19kb25lO1xuICA3ODpcdH1cbiAgNzk6XHRcbiAgODA6XHRpbnQgZ3JvX2NlbGxzX2luaXQoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICA4MTpcdHtcbiAgODI6XHRcdGludCBpO1xuICA4MzpcdFxuICA4NDpcdFx0Z2NlbGxzLVx1MDAzZWNlbGxzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBncm9fY2VsbCk7XG4gIDg1Olx0XHRpZiAoIWdjZWxscy1cdTAwM2VjZWxscylcbiAgODY6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gIDg3Olx0XG4gIDg4Olx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkge1xuICA4OTpcdFx0XHRzdHJ1Y3QgZ3JvX2NlbGwgKmNlbGwgPSBwZXJfY3B1X3B0cihnY2VsbHMtXHUwMDNlY2VsbHMsIGkpO1xuICA5MDpcdFxuICA5MTpcdFx0XHRfX3NrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2Y2VsbC1cdTAwM2VuYXBpX3NrYnMpO1xuICA5MjpcdFx0XHRsb2NhbF9sb2NrX2luaXQoXHUwMDI2Y2VsbC1cdTAwM2ViaF9sb2NrKTtcbiAgOTM6XHRcbiAgOTQ6XHRcdFx0c2V0X2JpdChOQVBJX1NUQVRFX05PX0JVU1lfUE9MTCwgXHUwMDI2Y2VsbC1cdTAwM2VuYXBpLnN0YXRlKTtcbiAgOTU6XHRcbiAgOTY6XHRcdFx0bmV0aWZfbmFwaV9hZGQoZGV2LCBcdTAwMjZjZWxsLVx1MDAzZW5hcGksIGdyb19jZWxsX3BvbGwpO1xuICA5NzpcdFx0XHRuYXBpX2VuYWJsZShcdTAwMjZjZWxsLVx1MDAzZW5hcGkpO1xuICA5ODpcdFx0fVxuICA5OTpcdFx0cmV0dXJuIDA7XG4gMTAwOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5NDIKCQkJCQkJCW91dHB1dDogMTYKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRoaXMgUGF0Y2ggaXMgYSBHb29kIElkZWEqKgoKT2theSwgc28gdGhpcyBwYXRjaCBsb29rcyBwcm9taXNpbmcgZm9yIGZ1enppbmcuIEl0IGludHJvZHVjZXMgYSBjaGVjayBmb3IgR2VuZXJpYyBTZWdtZW50YXRpb24gT2ZmbG9hZCAoR1NPKSB3aXRoaW4gYGd0cF9yeGAgYW5kIGFsc28gYXBwZWFycyB0byBiZSB1bnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIgaW4gYGdyb19jZWxsc19yZWNlaXZlYC4gVGhhdCYjMzk7cyBhIGNsYXNzaWMgYXJlYSB0byB0YXJnZXQgd2l0aCBmdXp6aW5nLiBBbnl0aGluZyByZWxhdGVkIHRvIGhlYWRlciBtYW5pcHVsYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBHU08gaXMgaW52b2x2ZWQsIGlzIG9mdGVuIGEgc291cmNlIG9mIHZ1bG5lcmFiaWxpdGllcy4gSSYjMzk7bSB0aGlua2luZyBHVFAgaXMgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gaGVyZS4gVGltZSB0byBjb25maXJtIGlmIHRoYXQgY29uZmlnIGlzIGhhbmRsZWQgd2l0aGluIGRyaXZlcnMvbmV0L0tjb25maWcuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBsaW5lcyB1cCB3aXRoIHRoZSByZWxldmFudCBkcml2ZXIgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBHVFAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yNjA9Y29uZmlnIEJBUkVVRFBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTI3MS1cbmRyaXZlcnMvbmV0L0tjb25maWc6MjcyOmNvbmZpZyBHVFBcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVx0dHJpc3RhdGUgXCYjMzQ7R1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wgZGF0YXBhdGggKEdUUC1VKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MjQzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqR1RQIERlcGVuZGVuY3kgSHVudCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBrZXJuZWwmIzM5O3MgR1RQIHN1cHBvcnQuIE15IGltbWVkaWF0ZSBodW5jaCBpcyB0aGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHByb2JhYmx5IGRlY2xhcmVkIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYC4gSXQmIzM5O3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgYW5kIGFzc29jaWF0ZWQgc2V0dGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBhbnkgS2NvbmZpZyBvcHRpb25zIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHdoaWNoIGRyaXZlcnMgYW5kIG1vZHVsZXMgcmVsYXRlIHRvIEdUUCBhbmQgd2hhdCBvdGhlciBmZWF0dXJlcyBhcmUgcmVxdWlyZWQgb3IgY2FuIGJlIG9wdGlvbmFsbHkgZW5hYmxlZC4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJhc2UgdG8gc3RhcnQgd2l0aCBmb3IgY29uZmlndXJhdGlvbiB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI3MDpcdFx0ICB3aWxsIGJlIGNhbGxlZCBiYXJldWRwLlxuIDI3MTpcdFxuIDI3MjpcdGNvbmZpZyBHVFBcbiAyNzM6XHRcdHRyaXN0YXRlIFwmIzM0O0dQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSlcJiMzNDtcbiAyNzQ6XHRcdGRlcGVuZHMgb24gSU5FVFxuIDI3NTpcdFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4gMjc2Olx0XHRoZWxwXG4gMjc3Olx0XHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgZ3RwIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcbiAyNzg6XHRcdCAgdGhlIEdQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSkuIFRoaXMgdHVubmVsaW5nIHByb3RvY29sXG4gMjc5Olx0XHQgIGlzIHVzZWQgdG8gcHJldmVudCBzdWJzY3JpYmVycyBmcm9tIGFjY2Vzc2luZyBtb2JpbGUgY2FycmllciBjb3JlXG4gMjgwOlx0XHQgIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGEgdXNlcnNwYWNlIHNvZnR3YXJlIHRoYXRcbiAyODE6XHRcdCAgaW1wbGVtZW50cyB0aGUgc2lnbmFsaW5nIHByb3RvY29sIChHVFAtQykgdG8gdXBkYXRlIGl0cyBQRFAgY29udGV4dFxuIDI4MjpcdFx0ICBiYXNlLCBzdWNoIGFzIE9wZW5HR1NOIFx1MDAzY2h0dHA6Ly9naXQub3Ntb2NvbS5vcmcvb3Blbmdnc24vKS4gVGhpc1xuIDI4MzpcdFx0ICB0dW5uZWxpbmcgcHJvdG9jb2wgaXMgaW1wbGVtZW50ZWQgYWNjb3JkaW5nIHRvIHRoZSBHU00gVFMgMDkuNjAgYW5kXG4gMjg0Olx0XHQgIDNHUFAgVFMgMjkuMDYwIHN0YW5kYXJkcy5cbiAyODU6XHRcbiAyODY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAyODc6XHRcdCAgd2lsbCBiZSBjYWxsZWQgZ3RwLlxuIDI4ODpcdFxuIDI4OTpcdGNvbmZpZyBQRkNQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NTIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBncm9fY2VsbHNfcmVjZWl2ZWAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGl2aW5nIGludG8gdGhlIGBHVFBgIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBlbmFibGluZyBjb25kaXRpb25zIGZvciBgZ3JvX2NlbGxzX3JlY2VpdmVgLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbmV0L2NvcmUvZ3JvX2NlbGxzLmNgIGZpbGUuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgZm9yIEdlbmVyaWMgUmVjZWl2ZSBPZmZsb2FkIChHUk8pIGNlbGwgaGFuZGxpbmcgcmVzaWRlcywgb2J2aW91c2x5LiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byBkaXNzZWN0IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9ucyB0byB0cmFjZSBiYWNrIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIHdhbnQgdG8gcGlucG9pbnQgZXhhY3RseSB3aGljaCBjb25maWd1cmF0aW9ucywgb3IgY29tYmluYXRpb25zIG9mIGNvbmZpZ3VyYXRpb25zLCBhcmUgcmVzcG9uc2libGUgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBUaGlzIHdpbGwgaGVscCB1bmRlcnN0YW5kIHRoZSBidWlsZCBhbmQgcnVudGltZSBpbXBsaWNhdGlvbnMgZm9yIGEgZ2l2ZW4gZGVwbG95bWVudCBhbmQgYWxzbyBhbnkgdXBzdHJlYW0gZGVwZW5kZW5jeSByZXF1aXJlbWVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dyb19jZWxscy5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19IV0JNKSAmIzQzOz0gaHdibS5vXG5uZXQvY29yZS9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfR1JPX0NFTExTKSAmIzQzOz0gZ3JvX2NlbGxzLm9cbm5ldC9jb3JlL01ha2VmaWxlLTQzLW9iai0kKENPTkZJR19GQUlMT1ZFUikgJiM0Mzs9IGZhaWxvdmVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA2MAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYENPTkZJR19HUk9fQ0VMTFNgIENvbmZpZ3VyYXRpb24gT3B0aW9uKioKCk9rYXksIHNvIGBDT05GSUdfR1JPX0NFTExTYCBpcyB0aGUgY29uZmlnIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMsIGZlYXR1cmVzLCBvciBkcml2ZXJzIG1pZ2h0IGVuYWJsZSBvciByZXF1aXJlIHRoaXMgb3B0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgc2VsZWN0aW9uIHBhdGhzLCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWcgc3lzdGVtIGFuZCBzZWUgd2hhdCYjMzk7cyBzZWxlY3RpbmcgaXQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIGxvb2sgZm9yIGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBiZWhpbmQgd2h5IGl0JiMzOTtzIGVuYWJsZWQgaW4gdmFyaW91cyBjb250ZXh0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IEdST19DRUxMUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTIzMD1jb25maWcgVlhMQU5cbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMy1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMzQ6XHRzZWxlY3QgR1JPX0NFTExTXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzNS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTI0NT1jb25maWcgR0VORVZFXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDgtXHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjQ5Olx0c2VsZWN0IEdST19DRUxMU1xuZHJpdmVycy9uZXQvS2NvbmZpZy0yNTAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZz0yNjA9Y29uZmlnIEJBUkVVRFBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTI2My1cdHNlbGVjdCBORVRfVURQX1RVTk5FTFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNjQ6XHRzZWxlY3QgR1JPX0NFTExTXG5kcml2ZXJzL25ldC9LY29uZmlnLTI2NS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTMxOD1jb25maWcgTUFDU0VDXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0zMjItXHRzZWxlY3QgQ1JZUFRPX0dDTVxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjM6XHRzZWxlY3QgR1JPX0NFTExTXG5kcml2ZXJzL25ldC9LY29uZmlnLTMyNC1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnPTY9bWVudWNvbmZpZyBSTU5FVFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWctOC1cdGRlZmF1bHQgblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZzo5Olx0c2VsZWN0IEdST19DRUxMU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZy0xMC1cdGhlbHBcbi0tXG5uZXQvZHNhL0tjb25maWc9Mz1tZW51Y29uZmlnIE5FVF9EU0Fcbi0tXG5uZXQvZHNhL0tjb25maWctNy1cdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVUREVWSUNFU1xubmV0L2RzYS9LY29uZmlnOjg6XHRzZWxlY3QgR1JPX0NFTExTXG5uZXQvZHNhL0tjb25maWctOS1cdHNlbGVjdCBORVRfU1dJVENIREVWXG4tLVxubmV0L2lwdjQvS2NvbmZpZz0xODY9Y29uZmlnIE5FVF9JUF9UVU5ORUxcbi0tXG5uZXQvaXB2NC9LY29uZmlnLTE4OC1cdHNlbGVjdCBEU1RfQ0FDSEVcbm5ldC9pcHY0L0tjb25maWc6MTg5Olx0c2VsZWN0IEdST19DRUxMU1xubmV0L2lwdjQvS2NvbmZpZy0xOTAtXHRkZWZhdWx0IG5cbi0tXG5uZXQvaXB2Ni9LY29uZmlnPTE5OT1jb25maWcgSVBWNl9UVU5ORUxcbi0tXG5uZXQvaXB2Ni9LY29uZmlnLTIwMi1cdHNlbGVjdCBEU1RfQ0FDSEVcbm5ldC9pcHY2L0tjb25maWc6MjAzOlx0c2VsZWN0IEdST19DRUxMU1xubmV0L2lwdjYvS2NvbmZpZy0yMDQtXHRoZWxwXG4tLVxubmV0L3hmcm0vS2NvbmZpZz01PWNvbmZpZyBYRlJNXG4tLVxubmV0L3hmcm0vS2NvbmZpZy03LVx0ZGVwZW5kcyBvbiBJTkVUXG5uZXQveGZybS9LY29uZmlnOjg6XHRzZWxlY3QgR1JPX0NFTExTXG5uZXQveGZybS9LY29uZmlnLTktXHRzZWxlY3QgU0tCX0VYVEVOU0lPTlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk0MgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBUaG91Z2h0IFByb2Nlc3Mgb24gS2VybmVsIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEluaXRpYWxseSwgSSB0aG91Z2h0IHdlIGNvdWxkIGp1c3QgZW5hYmxlIGBHVFBgIGFuZCBgR1JPX0NFTExTYCDigJMgb3IgcG90ZW50aWFsbHkgc29tZXRoaW5nIGxpa2UgYFZYTEFOYCBvciBgR0VORVZFYCB3aGljaCAqZG8qIHNlbGVjdCBgR1JPX0NFTExTYC4gQnV0LCBob2xkIG9uIGEgc2Vjb25kLi4uIGRvZXMgYEdUUGAgYWN0dWFsbHkgKnNlbGVjdCogYEdST19DRUxMU2A/IExldCBtZSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ndHAuY2Agc291cmNlIGNvZGUuIERvZXMgaXQgdXNlIHRoZSBgZ3JvX2NlbGxzX3JlY2VpdmVgIGZ1bmN0aW9uPyBIbW0sIG5vLCBpdCBsb29rcyBsaWtlIGBndHBfcnhgIGRvZXNuJiMzOTt0IHV0aWxpemUgYGdyb19jZWxsc19yZWNlaXZlYC4KCldhaXQsIGxldCBtZSBtYWtlIHN1cmUuIFRoZSBkaWZmIGRvZXNuJiMzOTt0IHNlZW0gdG8gaW5kaWNhdGUgdGhhdCBgZ3RwLmNgIGlzIHVzaW5nIGBncm9fY2VsbHNfcmVjZWl2ZWAuIERvZXMgYGd0cC5jYCAqYWN0dWFsbHkqIHVzZSBgZ3JvX2NlbGxzX3JlY2VpdmVgPyBObywgaXQgbG9va3MgbGlrZSBgZ3JvX2NlbGxzX3JlY2VpdmVgIGlzIHVzZWQgYnkgb3RoZXIgZHJpdmVycy4gVGhlIHBhdGNoIGRvZXMgbW9kaWZ5IGJvdGggYGd0cC5jYCBhbmQgYGdyb19jZWxscy5jYCwgc28gYEdUUGAgaXMgcmVxdWlyZWQgZm9yIGBndHAuY2AsIGFuZCBgR1JPX0NFTExTYCBpcyBuZWNlc3NhcnkgZm9yIGBncm9fY2VsbHMuY2AuCgpMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYEdUUGAgZG9lc24mIzM5O3Qgc2VsZWN0IGBHUk9fQ0VMTFNgLiBOb3BlLCBpdCBkb2VzbiYjMzk7dC4gQnV0LCBgR1JPX0NFTExTYCAqaXMqIHNlbGVjdGVkIGJ5IGBWWExBTmAsIGBHRU5FVkVgLCBgTUFDU0VDYCwgYE5FVF9JUF9UVU5ORUxgLCBgSVBWNl9UVU5ORUxgLCBhbmQgYFhGUk1gLiBTbywgd2UgY2FuIGp1c3Qgc3BlY2lmeSBgR1RQYCBhbmQgYEdST19DRUxMU2AgdG8gYmUgc3VyZS4KClJlZ2FyZGluZyB0aGUgZm9jdXMgc3ltYm9scy4gTG9va3MgbGlrZSBgZ3RwX3J4YCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gSSBzaG91bGQgY2hlY2sgd2hpY2ggbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgYXJlIGF2YWlsYWJsZS4gQXJlIHRoZXkgYGd0cDBfdWRwX2VuY2FwX3JlY3ZgIGFuZCBgZ3RwMXVfdWRwX2VuY2FwX3JlY3ZgPyBObyB3YWl0LCBgZ3RwX3J4YCBpcyBzdGlsbCBzdGF0aWMuIExldCYjMzk7cyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGBndHAwX3VkcF9lbmNhcF9yZWN2YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwMF91ZHBfZW5jYXBfcmVjdiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ndHAuYz01Njk9c3RhdGljIGludCBndHBfcHJvdG9fdG9fZmFtaWx5KF9fdTE2IHByb3RvKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTU4NC0vKiAxIG1lYW5zIHBhc3MgdXAgdG8gdGhlIHN0YWNrLCAtMSBtZWFucyBkcm9wIGFuZCAwIG1lYW5zIGRlY2Fwc3VsYXRlZC4gKi9cbmRyaXZlcnMvbmV0L2d0cC5jOjU4NTpzdGF0aWMgaW50IGd0cDBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L2d0cC5jLTU4Ni17XG4tLVxuZHJpdmVycy9uZXQvZ3RwLmM9OTA4PXN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTkyMS1cdFx0bmV0ZGV2X2RiZyhndHAtXHUwMDNlZGV2LCBcJiMzNDtyZWNlaXZlZCBHVFAwIHBhY2tldFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ndHAuYzo5MjI6XHRcdHJldCA9IGd0cDBfdWRwX2VuY2FwX3JlY3YoZ3RwLCBza2IpO1xuZHJpdmVycy9uZXQvZ3RwLmMtOTIzLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwNTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHVuZGVyc3RhbmRpbmcsIGdpdmVuIG15IGV4cGVydGlzZToKCioqR1RQIEVuY2Fwc3VsYXRpb24gRW50cnkgUG9pbnQqKgoKUmlnaHQsIHNvIGBndHBfZW5jYXBfcmVjdmAgaXMgKnRoZSogcG9pbnQgb2YgZW50cnkgZm9yIHRoZSB3aG9sZSBHVFAtb3Zlci1VRFAgZW5jYXBzdWxhdGlvbiBwcm9jZXNzLiBUaGF0JiMzOTtzIHRoZSBnYXRld2F5LiBJIHVuZGVyc3RhbmQgdGhpcyBtZWFucyB0aGF0IGFueSBpbmNvbWluZyBHVFAgdHJhZmZpYyB0aGF0JiMzOTtzIGdvaW5nIHRvIGJlIHVuZW5jYXBzdWxhdGVkLCBwYXJzZWQsIGFuZCByb3V0ZWQgbmVlZHMgdG8gZ28gdGhyb3VnaCB0aGlzIGZ1bmN0aW9uLiBJdCYjMzk7cyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjaGFpbiwgdGhlIGluaXRpYWwgaGFuZHNoYWtlIHdpdGggdGhlIEdUUCBwYWNrZXRzIHRoYXQgYXJlIGJlaW5nIHRyYW5zcG9ydGVkIG92ZXIgVURQLiBJdCYjMzk7cyBjcnVjaWFsIGZvciB0aGUgY29ycmVjdCBwcm9jZXNzaW5nIG9mIGFueSBHVFAgdHJhZmZpYy4gU28sIGBndHBfZW5jYXBfcmVjdmAgaXMgdGhlIGtleSBmb3IgYW55dGhpbmcgR1RQIHJlbGF0ZWQgdGhhdCYjMzk7cyB1c2luZyBVRFAgdHJhbnNwb3J0LiBHb3R0YSBnZXQgdGhhdCByaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z3RwX2VuY2FwX3JlY3YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ3RwLmM9ODkxPXN0YXRpYyB2b2lkIGd0cF9lbmNhcF9kaXNhYmxlKHN0cnVjdCBndHBfZGV2ICpndHApXG4tLVxuZHJpdmVycy9uZXQvZ3RwLmMtOTA3LSAqL1xuZHJpdmVycy9uZXQvZ3RwLmM6OTA4OnN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuZHJpdmVycy9uZXQvZ3RwLmMtOTA5LXtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0xNDA5PXN0YXRpYyBzdHJ1Y3Qgc29jayAqZ3RwX2NyZWF0ZV9zb2NrKGludCB0eXBlLCBzdHJ1Y3QgZ3RwX2RldiAqZ3RwLFxuLS1cbmRyaXZlcnMvbmV0L2d0cC5jLTE0MzktXHR0dW5jZmcuZW5jYXBfdHlwZSA9IHR5cGU7XG5kcml2ZXJzL25ldC9ndHAuYzoxNDQwOlx0dHVuY2ZnLmVuY2FwX3JjdiA9IGd0cF9lbmNhcF9yZWN2O1xuZHJpdmVycy9uZXQvZ3RwLmMtMTQ0MS1cdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gTlVMTDtcbi0tXG5kcml2ZXJzL25ldC9ndHAuYz0xNjU0PXN0YXRpYyBzdHJ1Y3Qgc29jayAqZ3RwX2VuY2FwX2VuYWJsZV9zb2NrZXQoaW50IGZkLCBpbnQgdHlwZSxcbi0tXG5kcml2ZXJzL25ldC9ndHAuYy0xNjk0LVx0dHVuY2ZnLmVuY2FwX3R5cGUgPSB0eXBlO1xuZHJpdmVycy9uZXQvZ3RwLmM6MTY5NTpcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcbmRyaXZlcnMvbmV0L2d0cC5jLTE2OTYtXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IGd0cF9lbmNhcF9kZXN0cm95O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzNAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDEyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgR1RQIGFuZCBHUk9fQ0VMTFMgZm9yIERhdGFwYXRoIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtYWluIGVudHJ5IHBvaW50IGZvciBHVFAgcGFja2V0cyBpcyBgZ3RwX2VuY2FwX3JlY3ZgLiBJdCYjMzk7cyB1c2VkIHdpdGhpbiBgZ3JvX2NlbGxzX3JlY2VpdmVgLCB3aGljaCBpcyBleHBvcnRlZCBhbmQgY2FsbGVkIGJ5IHZhcmlvdXMgZHJpdmVycywgc28gYm90aCBvZiB0aGVzZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSAqRm9jdXNTeW1ib2xzKiBmb3IgdGhpcyBhbmFseXNpcy4KCkkgbmVlZCB0byBjb25maXJtIHRoYXQgYGdyb19jZWxsc19yZWNlaXZlYCBpcyBleHBvcnRlZCwgYW5kIGl0IGlzISBJdCYjMzk7cyBub3Qgc3RhdGljLiBHb29kLiBOb3csIGBndHBfZW5jYXBfcmVjdmAgaXMgc3RhdGljLCB3aGljaCBzZWVtcyBjb250cmFyeSB0byB0aGUgZ3VpZGFuY2UgdG8gcHJlZmVyIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLiBIb3dldmVyLCBpdCAqaXMqIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciAoYHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtgKSwgc28gaXQgd29uJiMzOTt0IGJlIGlubGluZWQgYW5kICpkb2VzKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoaXMgbWFrZXMgaXQgYSB2aWFibGUgY2FuZGlkYXRlLiBTaW5jZSB0aGVyZSBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGEgYmV0dGVyIG5vbi1zdGF0aWMgb3B0aW9uLCBgZ3RwX2VuY2FwX3JlY3ZgIHdpbGwgYmUgdGhlIGJlc3QgZW50cnlwb2ludCBmdW5jdGlvbiBmb3IgdGhlIEdUUCBkYXRhcGF0aC4KCkkmIzM5O20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGBncm9fY2VsbHNfcmVjZWl2ZWAgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYC4gWWVwLCBpdCYjMzk7cyBkZWZpbmVkIGFzIGBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKWAgYW5kIGlzIEVYUE9SVF9TWU1CT0wmIzM5O2QuCgpTbywgdGhlICpGb2N1c1N5bWJvbHMqIGFyZSBjb25maXJtZWQ6IGBndHBfZW5jYXBfcmVjdmAgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAuCgpOb3csIGZvciAqRW5hYmxlQ29uZmlncyosIEkgbmVlZCBgR1RQYCBhbmQgYEdST19DRUxMU2AuCgpJJiMzOTttIGdvaW5nIHRvIHJldmlldyB0aGUgcGF0Y2ggbm93LiBJdCBmaXhlcyB0d28gdGhpbmdzOiBmaXJzdCwgaXQgZHJvcHMgR1NPIHBhY2tldHMgaW4gdGhlIEdUUCBkYXRhcGF0aCwgYW5kIHNlY29uZCwgaXQgdW5zZXRzIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGluIGBncm9fY2VsbHNfcmVjZWl2ZWAuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCBwcmV2ZW50cyBzdGFsZSB0cmFuc3BvcnQgaGVhZGVycyBmcm9tIGNhdXNpbmcgaXNzdWVzIGFzIHBhY2tldHMgYXJlIHBhc3NlZCB1cCB0aGUgc3RhY2suIEJvdGggb2YgdGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhZmZlY3RpbmcgY29yZSBuZXR3b3JraW5nIGFuZCBkcml2ZXIgY29kZS4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuCgpNeSAqRm9jdXNTeW1ib2xzKiBhcmUgc3RpbGw6IGBndHBfZW5jYXBfcmVjdmAsIGBncm9fY2VsbHNfcmVjZWl2ZWAuClRoZSAqRW5hYmxlQ29uZmlncyogSSYjMzk7bGwgbmVlZCBhcmUgYEdUUGAgYW5kIGBHUk9fQ0VMTFNgLgoKTm93LCBJJiMzOTttIGp1c3QgY29uZmlybWluZyB0aGF0IGBHUk9fQ0VMTFNgIGlzIGEgdmFsaWQgY29uZmlnIG9wdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBBaCwgaXQmIzM5O3MgKnNlbGVjdGVkKiBpbiB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLCBidXQgbm90IGRpcmVjdGx5IGRlZmluZWQgYXMgYGNvbmZpZyBHUk9fQ0VMTFNgLiBHb3R0YSBsb29rIGEgYml0IGRlZXBlciB0byBzZWUgd2hlcmUgYEdST19DRUxMU2AgaXMgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEdST19DRUxMUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz00NjE9Y29uZmlnIERTVF9DQUNIRVxuLS1cbm5ldC9LY29uZmlnLTQ2NC1cbm5ldC9LY29uZmlnOjQ2NTpjb25maWcgR1JPX0NFTExTXG5uZXQvS2NvbmZpZy00NjYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDk0CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKgoKT2theSwgc28gYGNvbmZpZyBHUk9fQ0VMTFNgIGlzIGEgYm9vbGVhbiB3aXRoaW4gYG5ldC9LY29uZmlnYC4gUmlnaHQsIGl0JiMzOTtzIGEgYGJvb2xgIHdpdGhvdXQgYSBwcm9tcHQsIHdoaWNoIG1lYW5zIGl0IGNhbiYjMzk7dCBiZSBkaXJlY3RseSBzZWxlY3RlZCBieSBhIHVzZXIuIEl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgKnRocm91Z2gqIGFub3RoZXIgY29uZmlnLiBIbW0sIGlmIEkgdHJ5IHRvIGp1c3QgYWRkIGBHUk9fQ0VMTFNgIHRvIGBFbmFibGVDb25maWdzYCwgaXQgbGlrZWx5IHdvbiYjMzk7dCB3b3JrLCBiZWNhdXNlIEtjb25maWcgd29uJiMzOTt0IGxldCBpdCBiZSBkaXJlY3RseSBzZWxlY3RlZC4KCldhaXQsIGRvZXMgc3l6a2FsbGVyIGJ5cGFzcyB0aGlzIHJlc3RyaWN0aW9uPyBObywgdGhlIEtjb25maWcgdG9vbGluZyB3aWxsIGlnbm9yZSBpdCBzaW5jZSB0aGVyZSYjMzk7cyBubyBwcm9tcHQuIFNvLCBJIG5lZWQgdG8gZmluZCBhICpzZWxlY3RpbmcqIGNvbmZpZy4gU29tZXRoaW5nIHRoYXQgaGFzIHRoZSBwb3RlbnRpYWwgdG8gZW5hYmxlIGBHUk9fQ0VMTFNgLiBPa2F5LCBgVlhMQU5gLCBgTUFDU0VDYCwgb3IgYEdFTkVWRWAgY291bGQgd29yay4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGluY2x1ZGluZyBib3RoIGBWWExBTmAgYW5kIGBHRU5FVkVgLgoKSG9sZCBvbi4uLiBkb2VzIGBHVFBgIHNlbGVjdCBpdD8gTmVlZCB0byBjb25maXJtLiBOby4gT2theSwgYmFjayB0byB0aGUgZHJhd2luZyBib2FyZCB0byBkb3VibGUtY2hlY2suIExldCBtZSBsb29rIGF0IGBkcml2ZXJzL25ldC9LY29uZmlnYCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgVlhMQU5gIHNlbGVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZYTEFOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L0tjb25maWc9MjE2PWNvbmZpZyBJUFZUQVBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnLTIyOS1cbmRyaXZlcnMvbmV0L0tjb25maWc6MjMwOmNvbmZpZyBWWExBTlxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzEtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIChWWExBTilcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwMzAKCQkJCQkJCW91dHB1dDogMTMwCgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gRGVjaXNpb24qKgoKT2theSwgc28gSSYjMzk7bSBpbXBsZW1lbnRpbmcgc29tZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gR1RQIGFuZCBWWExBTi4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgdXNlciAqY2FuKiBzZWxlY3QgVlhMQU4sIHNvIHRoYXQmIzM5O3MgZ29pbmcgaW4gbXkgRW5hYmxlQ29uZmlncy4gSSYjMzk7bGwgYWxzbyBhZGQgR1RQIHRvIEVuYWJsZUNvbmZpZ3MuIE5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBkZXBlbmRlbmNpZXMgY2F1c2luZyBwcm9ibGVtcy4KCkdUUCBkZXBlbmRzIG9uIElORVQsIHdoaWNoIGlzIGV4cGVjdGVkLCBhbmQgc2VsZWN0cyBORVRfVURQX1RVTk5FTC4gVGhhdCYjMzk7cyBhbGwgZ29vZCwgbm8gaXNzdWVzIHRoZXJlLgoKVlhMQU4gYWxzbyBkZXBlbmRzIG9uIElORVQgYW5kIHRoZW4gZWl0aGVyIElQVjYgKm9yKiBpdCBiZWluZyBkaXNhYmxlZCwgYW5kIGFsc28gc2VsZWN0cyBORVRfVURQX1RVTk5FTCBhbmQgR1JPX0NFTExTLiBNYWtlcyBzZW5zZS4gSSYjMzk7dmUgYWxyZWFkeSBjb25maXJtZWQgSSBjYW4gZW5hYmxlIEdST19DRUxMUyBieSBlbmFibGluZyBWWExBTiBhbmQgdGhhdCB0aGUgVlhMQU4gb3B0aW9uIHdpbGwgZW5hYmxlIE5FVF9VRFBfVFVOTkVMLCBzbyB0aGF04oCZcyBmaW5lLiBJJiMzOTttIGFsc28gY29uZmlybWluZyB0aGF0IE5FVF9VRFBfVFVOTkVMIGlzIHNlbGVjdGVkIGJ5ICpib3RoKiBHVFAgYW5kIFZYTEFOLCBhcyBleHBlY3RlZC4KClRoZXJlZm9yZSwgRW5hYmxlQ29uZmlncyB3aWxsIGJlOiAqKkdUUCwgVlhMQU4qKi4KCkZvciBteSBGb2N1c1N5bWJvbHMsIHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBhcm91bmQgdGhlIGZ1bmN0aW9ucyBgZ3RwX2VuY2FwX3JlY3ZgIGFuZCBgZ3JvX2NlbGxzX3JlY2VpdmVgLCBzbyBJJiMzOTtsbCBpbmNsdWRlIHRob3NlLiBTbywgbXkgRm9jdXNTeW1ib2xzIGFyZTogKipndHBfZW5jYXBfcmVjdiwgZ3JvX2NlbGxzX3JlY2VpdmUqKi4KClRoaXMgcGF0Y2gsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHNwZWNpZmljIGlzc3VlIGJ5IG1vZGlmeWluZyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIHRoZSBndHBfcnggcGF0aCAoaGFuZGxlZCB2aWEgZ3RwX2VuY2FwX3JlY3YpIGFuZCBtb2RpZnlpbmcgZ3JvX2NlbGxzX3JlY2VpdmUgdG8gcHJldmVudCBzdGFsZSBoZWFkZXIgaXNzdWVzLiBUaGVzZSBhcmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgYWN0aXZlIG5ldHdvcmsgZGF0YXBhdGgsIHNvIGl0JiMzOTtzIGEgY3JpdGljYWwgY2hhbmdlLiBJJiMzOTttIGFsbCBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDEzOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtHVFAmIzM0OywKICAgICYjMzQ7VlhMQU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtndHBfZW5jYXBfcmVjdiYjMzQ7LAogICAgJiMzNDtncm9fY2VsbHNfcmVjZWl2ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgR1RQIGRyaXZlciB0byBkcm9wIEdTTyBwYWNrZXRzIGluIGBndHBfcnhgIChjYWxsZWQgdmlhIGBndHBfZW5jYXBfcmVjdmApIGFuZCB1cGRhdGVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24gYGdyb19jZWxsc19yZWNlaXZlYCB0byB1bnNldCB0aGUgdHJhbnNwb3J0IGhlYWRlciBvZiBgc2tfYnVmZmBzIHRvIHByZXZlbnQgaXNzdWVzIHdpdGggc3RhbGUgaGVhZGVycy4gQm90aCBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBuZXR3b3JrIGRhdGFwYXRoIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dUUCYjMzQ7LAogICAgJiMzNDtWWExBTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2d0cF9lbmNhcF9yZWN2JiMzNDssCiAgICAmIzM0O2dyb19jZWxsc19yZWNlaXZlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHVFAgZHJpdmVyIHRvIGRyb3AgR1NPIHBhY2tldHMgaW4gYGd0cF9yeGAgKGNhbGxlZCB2aWEgYGd0cF9lbmNhcF9yZWN2YCkgYW5kIHVwZGF0ZXMgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIGBza19idWZmYHMgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBzdGFsZSBoZWFkZXJzLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZGF0YXBhdGggY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTM6MzI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzozMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzIGFuZCBtb2RpZmllcyBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIHRoZSBgc2tiYCBieSBzZXR0aW5nIGBza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcmAgdG8gYH4wVWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiB0aGUgdW5zZXQgdHJhbnNwb3J0IGhlYWRlciBpcyB1c2VkIHdpdGhvdXQgY2hlY2tpbmcsIGl0IHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAodXNpbmcgYH4wVWAgYXMgYW4gb2Zmc2V0KSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaHVzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFhMWFiOGQwNWMyYmI1MWUxNzdhZmY5N2U1ZmU4YjAzMGRmYmNlZmEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzoyODoxOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmMKaW5kZXggOWExMmNjNTNkYTAwMi4uZjZlNDdjMzY5ZDYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ3RwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZ3RwLmMKQEAgLTMxMiw2ICYjNDM7MzEyLDExIEBAIHN0YXRpYyBpbnQgZ3RwX2lubmVyX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZHJsZW4sCiBzdGF0aWMgaW50IGd0cF9yeChzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICB1bnNpZ25lZCBpbnQgaGRybGVuLCB1bnNpZ25lZCBpbnQgcm9sZSwgX191MTYgaW5uZXJfcHJvdG8pCiB7CiYjNDM7CWlmIChza2JfaXNfZ3NvKHNrYikpIHsKJiM0MzsJCW5ldGRldl9kYmcocGN0eC0mZ3Q7ZGV2LCAmIzM0O0dTTyBpcyBub3Qgc3VwcG9ydGVkIGluIEdUUFxuJiMzNDspOwomIzQzOwkJZ290byBlcnI7CiYjNDM7CX0KJiM0MzsKIAlpZiAoIWd0cF9jaGVja19tcyhza2IsIHBjdHgsIGhkcmxlbiwgcm9sZSwgaW5uZXJfcHJvdG8pKSB7CiAJCW5ldGRldl9kYmcocGN0eC0mZ3Q7ZGV2LCAmIzM0O05vIFBEUCBjdHggZm9yIHRoaXMgTVNcbiYjMzQ7KTsKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaAppbmRleCAyMmVkYTFkNTRhMGU4Li42MjZiYmI5YmFlMWFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKQEAgLTMwODIsNiAmIzQzOzMwODIsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAlyZXR1cm4gc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyKSl+MFU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlciA9ICh0eXBlb2Yoc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyKSl+MFU7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfdHJhbnNwb3J0X2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCURFQlVHX05FVF9XQVJOX09OX09OQ0UoIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ncm9fY2VsbHMuYyBiL25ldC9jb3JlL2dyb19jZWxscy5jCmluZGV4IDFiODQzODVjMDRiZDkuLmQ4YzBhMjg2NzEyMDEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2dyb19jZWxscy5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2dyb19jZWxscy5jCkBAIC0yMiw2ICYjNDM7MjIsOCBAQCBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCWlmICh1bmxpa2VseSghKGRldi0mZ3Q7ZmxhZ3MgJmFtcDsgSUZGX1VQKSkpCiAJCWdvdG8gZHJvcDsKIAomIzQzOwlza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpOwomIzQzOwogCWlmICghZ2NlbGxzLSZndDtjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHsKIAkJcmVzID0gbmV0aWZfcngoc2tiKTsKIAkJZ290byB1bmxvY2s7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTE5CgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDQ5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdUUCBQYXRjaDogS01TQU4gSW1wbGljYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLiBMb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgYGd0cF9yeGAgbm93IGRyb3BwaW5nIEdTTyBwYWNrZXRzIHdpdGggdGhlIGFkZGVkIGNoZWNrIGBpZiAoc2tiX2lzX2dzbyhza2IpKWAuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgYWRkcmVzc2luZyBhbiBpbmNvbXBhdGliaWxpdHkgd2l0aCBHVFAsIGFuZCBHU08gaGFuZGxpbmcuCgpUaGVuLCB0aGVyZSYjMzk7cyB0aGUgYWRkaXRpb24gb2YgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYilgIGluIGBpbmNsdWRlL2xpbnV4L3NrYnVmZi5oYCwgYW5kIGl04oCZcyBiZWluZyBjYWxsZWQgaW4gYGdyb19jZWxsc19yZWNlaXZlYC4gVGhpcyBpcyB0aGUgcGFydCB0aGF0IHBpcXVlZCBteSBpbnRlcmVzdCByZWdhcmRpbmcgbWVtb3J5IHNhZmV0eS4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bjoKCiogICAqKmBndHBfcnhgIGFuZCBHU08gcGFja2V0czoqKiBUaGF0IGRyb3AgbG9naWMgc2VlbXMgc291bmQgZW5vdWdoLiBOb3RoaW5nIGFsYXJtaW5nIHRoZXJlLgoqICAgKipgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgOioqIFRoaXMgaXMgdGhlIGtleS4gU2V0dGluZyBgc2tiLSZndDt0cmFuc3BvcnRfaGVhZGVyYCB0byBgfjBVYCBlZmZlY3RpdmVseSBtZWFucyBpdCYjMzk7cyBtYXJrZWQgYXMgdW5zZXQuIFRoYXQgaXMgd2hhdCB0aGlzIGNhbGwgZG9lcy4KKiAgICoqYGdyb19jZWxsc19yZWNlaXZlYCBjYWxsOioqIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgbWFraW5nIHVzZSBvZiBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQsIHdhaXQsIHRoYXQmIzM5O3Mgbm90IHRoZSBjYXNlLiBXZSYjMzk7cmUgKnNldHRpbmcqIGBza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXJgIHRvIGEgKnNwZWNpZmljKiB2YWx1ZSwgYH4wVWAsIG5vdCBsZWF2aW5nIGl0IGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUuIFRoZSBHU08gZHJvcCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBjb25kaXRpb25hbCwgbm8gY29tcGxleGl0aWVzIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgZGlnIGEgYml0IGRlZXBlci4gQ291bGQgdGhpcyBwb3RlbnRpYWxseSBsZWFkIHRvIGEgbWVtb3J5ICpyZWFkKiBpc3N1ZSBvciBldmVuIGFuIGluZm8gbGVhaz8gYHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcmAgaXMgZWl0aGVyIGFuIG9mZnNldCBvciBhIHBvaW50ZXIsIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvbi4gU2V0dGluZyBpdCB0byBgfjBVYCBpbmRpY2F0ZXMgYW4gdW5zZXQgc3RhdGUuIFRoZSBkYW5nZXIgaXMsIGlmIHNvbWUgcGFydCBvZiB0aGUgY29kZSAqcmVhZHMqIGBza2ItJmd0O3RyYW5zcG9ydF9oZWFkZXJgIHdpdGhvdXQgY2hlY2tpbmcgaWYgaXQmIzM5O3Mgc2V0IHVzaW5nIGEgZnVuY3Rpb24gc3VjaCBhcyBgc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldGAsIGl0IG1pZ2h0IGludGVycHJldCB0aGF0IGB+MFVgIHZhbHVlIGFzIGEgdmFsaWQgb2Zmc2V0LiBUaGlzIGNvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2gsIG9mIGNvdXJzZSwgaXMgYSBwcmltZSBjYW5kaWRhdGUgZm9yIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHRvIGNhdGNoLiBCdXQsIHRoZXJlJiMzOTtzIG5vIGFjdHVhbCBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeS4gV2UmIzM5O3JlIGV4cGxpY2l0bHkgc2V0dGluZyBhIHZhbHVlLCBhbGJlaXQgYSAmIzM0O3NwZWNpYWwmIzM0OyBvbmUuCgpUaGVyZWZvcmUsIHNpbmNlIHRoZSBvbmx5IHJpc2sgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHRoYXQgd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4sIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24uIFRoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzLiBJdCBhbHNvIG1vZGlmaWVzIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gdW5zZXQgdGhlIHRyYW5zcG9ydCBoZWFkZXIsIGJ5IHNldHRpbmcgYHNrYi0mZ3Q7dHJhbnNwb3J0X2hlYWRlcmAgdG8gYH4wVWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIElmIHRoZSB1bnNldCB0cmFuc3BvcnQgaGVhZGVyIGlzIHVzZWQgd2l0aG91dCBjaGVja2luZywgaXQgcmVzdWx0cyBpbiBhbiBvdXQtb2YtYm91bmRzIGFjY2Vzcywgd2hpY2ggaXMgY2F1Z2h0IGJ5IEtBU0FOLgpUaHVzLCBubyBhZGRpdGlvbmFsIEtNU0FOIHRlc3RpbmcgaXMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzIGFuZCBtb2RpZmllcyBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIHRoZSBgc2tiYCBieSBzZXR0aW5nIGBza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcmAgdG8gYH4wVWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiB0aGUgdW5zZXQgdHJhbnNwb3J0IGhlYWRlciBpcyB1c2VkIHdpdGhvdXQgY2hlY2tpbmcsIGl0IHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAodXNpbmcgYH4wVWAgYXMgYW4gb2Zmc2V0KSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaHVzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzIGFuZCBtb2RpZmllcyBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIHRoZSBgc2tiYCBieSBzZXR0aW5nIGBza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcmAgdG8gYH4wVWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiB0aGUgdW5zZXQgdHJhbnNwb3J0IGhlYWRlciBpcyB1c2VkIHdpdGhvdXQgY2hlY2tpbmcsIGl0IHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAodXNpbmcgYH4wVWAgYXMgYW4gb2Zmc2V0KSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaHVzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjI4OjIwLjU2ODk0NTQyNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjgwNzI2ODk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJHVFBcIixcbiAgICBcIlZYTEFOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3RwX2VuY2FwX3JlY3ZcIixcbiAgICBcImdyb19jZWxsc19yZWNlaXZlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzIGFuZCBtb2RpZmllcyBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIHRoZSBgc2tiYCBieSBzZXR0aW5nIGBza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHRvIGB+MFVgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgdGhlIHVuc2V0IHRyYW5zcG9ydCBoZWFkZXIgaXMgdXNlZCB3aXRob3V0IGNoZWNraW5nLCBpdCB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKHVzaW5nIGB+MFVgIGFzIGFuIG9mZnNldCksIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGh1cywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHVFAgZHJpdmVyIHRvIGRyb3AgR1NPIHBhY2tldHMgaW4gYGd0cF9yeGAgKGNhbGxlZCB2aWEgYGd0cF9lbmNhcF9yZWN2YCkgYW5kIHVwZGF0ZXMgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIGBza19idWZmYHMgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBzdGFsZSBoZWFkZXJzLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZGF0YXBhdGggY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mjg6MjAuNTY4OTQ5OTk3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTA4OTEyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYTFhYjhkMDVjMmJiNTFlMTc3YWZmOTdlNWZlOGIwMzBkZmJjZWZhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDEzOjI4OjE5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmNcXG5pbmRleCA5YTEyY2M1M2RhMDAyLi5mNmU0N2MzNjlkNjIyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2d0cC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZ3RwLmNcXG5AQCAtMzEyLDYgKzMxMiwxMSBAQCBzdGF0aWMgaW50IGd0cF9pbm5lcl9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGRybGVuLFxcbiBzdGF0aWMgaW50IGd0cF9yeChzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0ICB1bnNpZ25lZCBpbnQgaGRybGVuLCB1bnNpZ25lZCBpbnQgcm9sZSwgX191MTYgaW5uZXJfcHJvdG8pXFxuIHtcXG4rXFx0aWYgKHNrYl9pc19nc28oc2tiKSkge1xcbitcXHRcXHRuZXRkZXZfZGJnKHBjdHgtXFx1MDAzZWRldiwgXFxcIkdTTyBpcyBub3Qgc3VwcG9ydGVkIGluIEdUUFxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuK1xcbiBcXHRpZiAoIWd0cF9jaGVja19tcyhza2IsIHBjdHgsIGhkcmxlbiwgcm9sZSwgaW5uZXJfcHJvdG8pKSB7XFxuIFxcdFxcdG5ldGRldl9kYmcocGN0eC1cXHUwMDNlZGV2LCBcXFwiTm8gUERQIGN0eCBmb3IgdGhpcyBNU1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiAxO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbmluZGV4IDIyZWRhMWQ1NGEwZTguLjYyNmJiYjliYWUxYWQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcXG5AQCAtMzA4Miw2ICszMDgyLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdHJldHVybiBza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgIT0gKHR5cGVvZihza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVTtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB2b2lkIHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0c2tiLVxcdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gKHR5cGVvZihza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfdHJhbnNwb3J0X2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiB7XFxuIFxcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSk7XFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2dyb19jZWxscy5jIGIvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcXG5pbmRleCAxYjg0Mzg1YzA0YmQ5Li5kOGMwYTI4NjcxMjAxIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL2dyb19jZWxscy5jXFxuKysrIGIvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcXG5AQCAtMjIsNiArMjIsOCBAQCBpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRpZiAodW5saWtlbHkoIShkZXYtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSUZGX1VQKSkpXFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFxuK1xcdHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XFxuK1xcbiBcXHRpZiAoIWdjZWxscy1cXHUwMDNlY2VsbHMgfHwgc2tiX2Nsb25lZChza2IpIHx8IG5ldGlmX2VsaWRlX2dybyhkZXYpKSB7XFxuIFxcdFxcdHJlcyA9IG5ldGlmX3J4KHNrYik7XFxuIFxcdFxcdGdvdG8gdW5sb2NrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODoyMC45ODA1ODg3OTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyNDQyNjgxNDU2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1RQXCIsXG4gICAgXCJWWExBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImd0cF9lbmNhcF9yZWN2XCIsXG4gICAgXCJncm9fY2VsbHNfcmVjZWl2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHVFAgZHJpdmVyIHRvIGRyb3AgR1NPIHBhY2tldHMgaW4gYGd0cF9yeGAgKGNhbGxlZCB2aWEgYGd0cF9lbmNhcF9yZWN2YCkgYW5kIHVwZGF0ZXMgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIGBza19idWZmYHMgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBzdGFsZSBoZWFkZXJzLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZGF0YXBhdGggY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWExYWI4ZDA1YzJiYjUxZTE3N2FmZjk3ZTVmZThiMDMwZGZiY2VmYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDEzOjI4OjE5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3RwLmMgYi9kcml2ZXJzL25ldC9ndHAuY1xuaW5kZXggOWExMmNjNTNkYTAwMi4uZjZlNDdjMzY5ZDYyMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2d0cC5jXG4rKysgYi9kcml2ZXJzL25ldC9ndHAuY1xuQEAgLTMxMiw2ICszMTIsMTEgQEAgc3RhdGljIGludCBndHBfaW5uZXJfcHJvdG8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhkcmxlbixcbiBzdGF0aWMgaW50IGd0cF9yeChzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0ICB1bnNpZ25lZCBpbnQgaGRybGVuLCB1bnNpZ25lZCBpbnQgcm9sZSwgX191MTYgaW5uZXJfcHJvdG8pXG4ge1xuK1x0aWYgKHNrYl9pc19nc28oc2tiKSkge1xuK1x0XHRuZXRkZXZfZGJnKHBjdHgtXHUwMDNlZGV2LCBcIkdTTyBpcyBub3Qgc3VwcG9ydGVkIGluIEdUUFxcblwiKTtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4rXG4gXHRpZiAoIWd0cF9jaGVja19tcyhza2IsIHBjdHgsIGhkcmxlbiwgcm9sZSwgaW5uZXJfcHJvdG8pKSB7XG4gXHRcdG5ldGRldl9kYmcocGN0eC1cdTAwM2VkZXYsIFwiTm8gUERQIGN0eCBmb3IgdGhpcyBNU1xcblwiKTtcbiBcdFx0cmV0dXJuIDE7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmhcbmluZGV4IDIyZWRhMWQ1NGEwZTguLjYyNmJiYjliYWUxYWQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5AQCAtMzA4Miw2ICszMDgyLDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpXG4gXHRyZXR1cm4gc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgIT0gKHR5cGVvZihza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlcikpfjBVO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRza2ItXHUwMDNldHJhbnNwb3J0X2hlYWRlciA9ICh0eXBlb2Yoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpza2JfdHJhbnNwb3J0X2hlYWRlcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiBcdERFQlVHX05FVF9XQVJOX09OX09OQ0UoIXNrYl90cmFuc3BvcnRfaGVhZGVyX3dhc19zZXQoc2tiKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ3JvX2NlbGxzLmMgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xuaW5kZXggMWI4NDM4NWMwNGJkOS4uZDhjMGEyODY3MTIwMSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2dyb19jZWxscy5jXG4rKysgYi9uZXQvY29yZS9ncm9fY2VsbHMuY1xuQEAgLTIyLDYgKzIyLDggQEAgaW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdGlmICh1bmxpa2VseSghKGRldi1cdTAwM2VmbGFncyBcdTAwMjYgSUZGX1VQKSkpXG4gXHRcdGdvdG8gZHJvcDtcbiBcbitcdHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4rXG4gXHRpZiAoIWdjZWxscy1cdTAwM2VjZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgbmV0aWZfZWxpZGVfZ3JvKGRldikpIHtcbiBcdFx0cmVzID0gbmV0aWZfcngoc2tiKTtcbiBcdFx0Z290byB1bmxvY2s7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODoyMC45ODA1OTAyOTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjMzNDk1OTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IHRvdWNoZXMgc29tZSBpbnRlcmVzdGluZyBhcmVhczogYGRyaXZlcnMvbmV0L2d0cC5jYCwgYGluY2x1ZGUvbGludXgvc2tidWZmLmhgLCBhbmQgYG5ldC9jb3JlL2dyb19jZWxscy5jYC4gSSBzZWUgdGhhdCB0aGUgbWFpbiBjaGFuZ2VzIGludm9sdmUgYWRkaW5nIGEgY2hlY2sgaW4gYGd0cF9yeGAgdG8gZHJvcCBHU08gcGFja2V0cywgaW50cm9kdWNpbmcgYHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyYCBpbiBgc2tidWZmLmhgLCBhbmQsIGltcG9ydGFudGx5LCBjYWxsaW5nIHRoYXQgbmV3IGZ1bmN0aW9uIHdpdGhpbiBgZ3JvX2NlbGxzX3JlY2VpdmVgLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBcIklzIHRoaXMgd29ydGggbXkgdGltZSB0byBmdXp6P1wiIGBncm9fY2VsbHNfcmVjZWl2ZWAgaW1tZWRpYXRlbHkgZ3JhYnMgbXkgYXR0ZW50aW9uLiBJdCdzIGEgZnVuZGFtZW50YWwgbmV0d29ya2luZyBmdW5jdGlvbiwgaGVhdmlseSB1c2VkIGJ5IGEgd2lkZSB2YXJpZXR5IG9mIGRyaXZlcnM6IG1hYzgwMjExLCBnZW5ldmUsIHZ4bGFuLCBndHAuLi4gdGhlIGxpc3QgZ29lcyBvbi4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIHRhcmdldCBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgZXNwZWNpYWxseSBpZiB0aGlzIHBhdGNoIHN1YnRseSBjaGFuZ2VzIGl0cyBiZWhhdmlvciBvciBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzdGFjay4gYGd0cF9yeGAgaXMganVzdCBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLCBidXQgaWYgd2UgY2FuIGJyZWFrIGl0IGluIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXQgd291bGQgYmUgdXNlZnVsLlxuXG5TbywgdGhlIG5leHQgc3RlcCBpcyBkZWZpbml0ZWx5IHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY2FsbCBzaXRlIG9mIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgcGF0Y2ggYWx0ZXJzIGl0cyBiZWhhdmlvci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBuZXcgZnVuY3Rpb24gYW5kIHRoZSBHU08gcGFja2V0IGNoZWNrIGludGVyYWN0IGluIHRoaXMgY29udGV4dC4gVGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIG9wZW4gdXAgYSBjb3VwbGUgb2YgbmV3IGF2ZW51ZXMgZm9yIGZ1enppbmc6IGBndHBfcnhgIGluIHBhcnRpY3VsYXIgZm9yIGhvdyBpdCBoYW5kbGVzIEdTTyBwYWNrZXRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTIyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mjg6MjYuNjE0MDg4NTkxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTE3ODUzMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3JvX2NlbGxzX3JlY2VpdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYW10LmM9MjI5Nz1zdGF0aWMgYm9vbCBhbXRfbXVsdGljYXN0X2RhdGFfaGFuZGxlcihzdHJ1Y3QgYW10X2RldiAqYW10LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvYW10LmMtMjM1OC1cXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG5kcml2ZXJzL25ldC9hbXQuYzoyMzU5OlxcdGVyciA9IGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZhbXQtXFx1MDAzZWdyb19jZWxscywgc2tiKTtcXG5kcml2ZXJzL25ldC9hbXQuYy0yMzYwLVxcdGlmIChsaWtlbHkoZXJyID09IE5FVF9SWF9TVUNDRVNTKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JhcmV1ZHAuYz02MT1zdGF0aWMgaW50IGJhcmV1ZHBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTE5NC1cXHRsZW4gPSBza2ItXFx1MDAzZWxlbjtcXG5kcml2ZXJzL25ldC9iYXJldWRwLmM6MTk1OlxcdGVyciA9IGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZiYXJldWRwLVxcdTAwM2Vncm9fY2VsbHMsIHNrYik7XFxuZHJpdmVycy9uZXQvYmFyZXVkcC5jLTE5Ni1cXHRpZiAobGlrZWx5KGVyciA9PSBORVRfUlhfU1VDQ0VTUykpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jPTQwPXJtbmV0X2RlbGl2ZXJfc2tiKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTQ5LVxcdHNrYl9zZXRfbWFjX2hlYWRlcihza2IsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L3JtbmV0X2hhbmRsZXJzLmM6NTA6XFx0Z3JvX2NlbGxzX3JlY2VpdmUoXFx1MDAyNnByaXYtXFx1MDAzZWdyb19jZWxscywgc2tiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9ybW5ldF9oYW5kbGVycy5jLTUxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI3MD1zdGF0aWMgdm9pZCBnZW5ldmVfcngoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgc3RydWN0IGdlbmV2ZV9zb2NrICpncyxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTM3Ny1cXHRlbHNlXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6Mzc4OlxcdFxcdGVyciA9IGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZnZW5ldmUtXFx1MDAzZWdyb19jZWxscywgc2tiKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0zNzktXFx0aWYgKGxpa2VseShlcnIgPT0gTkVUX1JYX1NVQ0NFU1MpKVxcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9ODQ3PXN0YXRpYyB2b2lkIG1hY3NlY19kZWNyeXB0X2RvbmUodm9pZCAqZGF0YSwgaW50IGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTg3NC1cXG5kcml2ZXJzL25ldC9tYWNzZWMuYzo4NzU6XFx0aWYgKGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZtYWNzZWMtXFx1MDAzZWdyb19jZWxscywgc2tiKSA9PSBORVRfUlhfU1VDQ0VTUylcXG5kcml2ZXJzL25ldC9tYWNzZWMuYy04NzYtXFx0XFx0Y291bnRfcngoZGV2LCBsZW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvbWFjc2VjLmM9MTEzMD1zdGF0aWMgcnhfaGFuZGxlcl9yZXN1bHRfdCBtYWNzZWNfaGFuZGxlX2ZyYW1lKHN0cnVjdCBza19idWZmICoqcHNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTEzMDItXFx0c2tiX29ycGhhbihza2IpO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jOjEzMDM6XFx0cmV0ID0gZ3JvX2NlbGxzX3JlY2VpdmUoXFx1MDAyNm1hY3NlYy1cXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xcbmRyaXZlcnMvbmV0L21hY3NlYy5jLTEzMDQtXFx0aWYgKHJldCA9PSBORVRfUlhfU1VDQ0VTUylcXG4tLVxcbmRyaXZlcnMvbmV0L292cG4vaW8uYz02MD1zdGF0aWMgdm9pZCBvdnBuX25ldGRldl93cml0ZShzdHJ1Y3Qgb3Zwbl9wZWVyICpwZWVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTk0LVxcdC8qIHdlIG1heSBnZXQgaGVyZSBpbiBwcm9jZXNzIGNvbnRleHQgaW4gY2FzZSBvZiBUQ1AgY29ubmVjdGlvbnMsXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jOjk1OlxcdCAqIHRoZXJlZm9yZSB3ZSBoYXZlIHRvIGRpc2FibGUgQkhzIHRvIGVuc3VyZSBncm9fY2VsbHNfcmVjZWl2ZSgpXFxuZHJpdmVycy9uZXQvb3Zwbi9pby5jLTk2LVxcdCAqIGFuZCBkZXZfZHN0YXRzX3J4X2FkZCgpIGRvIG5vdCBnZXQgY29ycnVwdGVkIG9yIGVudGVyIGRlYWRsb2NrXFxuLS1cXG5kcml2ZXJzL25ldC9vdnBuL2lvLmMtOTgtXFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbmRyaXZlcnMvbmV0L292cG4vaW8uYzo5OTpcXHRyZXQgPSBncm9fY2VsbHNfcmVjZWl2ZShcXHUwMDI2cGVlci1cXHUwMDNlb3Zwbi1cXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xcbmRyaXZlcnMvbmV0L292cG4vaW8uYy0xMDAtXFx0aWYgKGxpa2VseShyZXQgPT0gTkVUX1JYX1NVQ0NFU1MpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9wZmNwLmM9NTE9c3RhdGljIGludCBwZmNwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvcGZjcC5jLTk2LVxcbmRyaXZlcnMvbmV0L3BmY3AuYzo5NzpcXHRncm9fY2VsbHNfcmVjZWl2ZShcXHUwMDI2cGZjcC1cXHUwMDNlZ3JvX2NlbGxzLCBza2IpO1xcbmRyaXZlcnMvbmV0L3BmY3AuYy05OC1cXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYz0xNjQ2PXN0YXRpYyBpbnQgdnhsYW5fcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3Z4bGFuL3Z4bGFuX2NvcmUuYy0xODAxLVxcdHZ4bGFuX3ZuaWZpbHRlcl9jb3VudCh2eGxhbiwgdm5pLCB2bmlub2RlLCBWWExBTl9WTklfU1RBVFNfUlgsIHNrYi1cXHUwMDNlbGVuKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmM6MTgwMjpcXHRncm9fY2VsbHNfcmVjZWl2ZShcXHUwMDI2dnhsYW4tXFx1MDAzZWdyb19jZWxscywgc2tiKTtcXG5kcml2ZXJzL25ldC92eGxhbi92eGxhbl9jb3JlLmMtMTgwMy1cXG4tLVxcbmluY2x1ZGUvbmV0L2dyb19jZWxscy5oPTExPXN0cnVjdCBncm9fY2VsbHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvZ3JvX2NlbGxzLmgtMTQtXFxuaW5jbHVkZS9uZXQvZ3JvX2NlbGxzLmg6MTU6aW50IGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9uZXQvZ3JvX2NlbGxzLmgtMTYtaW50IGdyb19jZWxsc19pbml0KHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuLS1cXG5uZXQvY29yZS9ncm9fY2VsbHMuYz04PXN0cnVjdCBncm9fY2VsbCB7XFxuLS1cXG5uZXQvY29yZS9ncm9fY2VsbHMuYy0xMy1cXG5uZXQvY29yZS9ncm9fY2VsbHMuYzoxNDppbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC9jb3JlL2dyb19jZWxscy5jLTE1LXtcXG4tLVxcbm5ldC9jb3JlL2dyb19jZWxscy5jLTU1LX1cXG5uZXQvY29yZS9ncm9fY2VsbHMuYzo1NjpFWFBPUlRfU1lNQk9MKGdyb19jZWxsc19yZWNlaXZlKTtcXG5uZXQvY29yZS9ncm9fY2VsbHMuYy01Ny1cXG4tLVxcbm5ldC9kc2EvdGFnLmM9NTQ9c3RhdGljIGludCBkc2Ffc3dpdGNoX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2RzYS90YWcuYy0xMjItXFxubmV0L2RzYS90YWcuYzoxMjM6XFx0Z3JvX2NlbGxzX3JlY2VpdmUoXFx1MDAyNnAtXFx1MDAzZWdjZWxscywgc2tiKTtcXG5uZXQvZHNhL3RhZy5jLTEyNC1cXG4tLVxcbm5ldC9pcHY0L2lwX3R1bm5lbC5jPTM3Nz1pbnQgaXBfdHVubmVsX3JjdihzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NDctXFxubmV0L2lwdjQvaXBfdHVubmVsLmM6NDQ4OlxcdGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZ0dW5uZWwtXFx1MDAzZWdyb19jZWxscywgc2tiKTtcXG5uZXQvaXB2NC9pcF90dW5uZWwuYy00NDktXFx0cmV0dXJuIDA7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM9ODA4PXN0YXRpYyBpbnQgX19pcDZfdG5sX3JjdihzdHJ1Y3QgaXA2X3RubCAqdHVubmVsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTg5NC1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6ODk1OlxcdGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZ0dW5uZWwtXFx1MDAzZWdyb19jZWxscywgc2tiKTtcXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtODk2LVxcdHJldHVybiAwO1xcbi0tXFxubmV0L3hmcm0veGZybV9pbnB1dC5jPTQ2Nj1pbnQgeGZybV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwgaW50IGVuY2FwX3R5cGUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lucHV0LmMtNzQ2LVxcdFxcdFxcdGRldl9wdXQoZGV2KTtcXG5uZXQveGZybS94ZnJtX2lucHV0LmM6NzQ3OlxcdFxcdGdyb19jZWxsc19yZWNlaXZlKFxcdTAwMjZncm9fY2VsbHMsIHNrYik7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jLTc0OC1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03NjQtXFx0XFx0XFx0XFx0c2tiX2RzdF9kcm9wKHNrYik7XFxubmV0L3hmcm0veGZybV9pbnB1dC5jOjc2NTpcXHRcXHRcXHRncm9fY2VsbHNfcmVjZWl2ZShcXHUwMDI2Z3JvX2NlbGxzLCBza2IpO1xcbm5ldC94ZnJtL3hmcm1faW5wdXQuYy03NjYtXFx0XFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTYzOT1zdGF0aWMgdTMyIF9faXB0ZnNfaXBsZW4odTggKmRhdGEpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjU0LSAqIEZpbmlzaCB0aGUgc3RhbmRhcmQgeGZybSBwcm9jZXNzaW5nIG9uIHRoZSBpbm5lciBwYWNrZXQgcHJpb3IgdG8gc2VuZGluZyBiYWNrXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjY1NTogKiB0aHJvdWdoIGdyb19jZWxsc19yZWNlaXZlLiBXZSBkbyB0aGlzIHNlcGFyYXRlbHkgYi9jIHdlIGFyZSBidWlsZGluZyBhIGxpc3RcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjU2LSAqIG9mIHBhY2tldHMgaW4gdGhlIGhvcGVzIHRoYXQgb25lIGRheSBhIGxpc3Qgd2lsbCBiZSB0YWtlbiBieVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTY1OT1zdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjYyLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2NjM6XFx0LyogVGhlIHBhY2tldCBpcyBnb2luZyBiYWNrIHRocm91Z2ggZ3JvX2NlbGxzX3JlY2VpdmUgbm8gbmVlZCB0b1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NjQtXFx0ICogc2V0IHRoaXMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjI4OjI4LjQ2NTg3OTAxM1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDU5MDM0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaGFzIG1lIGludHJpZ3VlZC4gSXQncyB0b3VjaGluZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBwYXJ0cyBvZiB0aGUgbmV0d29ya2luZyBzdGFjaywgbmFtZWx5IGBncm9fY2VsbHNfcmVjZWl2ZWAgYW5kIGBndHBfcnhgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhhdCBgZ3JvX2NlbGxzX3JlY2VpdmVgIG5vdyBjYWxscyBgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKWAuIFRoYXQncyBhIGxvdy1sZXZlbCBmdW5jdGlvbiB0aGF0IGltcGFjdHMgYSAqbG90KiBvZiBkcml2ZXJzIGFuZCB0dW5uZWxz4oCUdnhsYW4sIGdlbmV2ZSwgdGhlIGlwX3R1bm5lbCwgeGZybS4uLiBiYXNpY2FsbHkgYW55dGhpbmcgdGhhdCBkb2VzIGVuY2Fwc3VsYXRpb24uIEkgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGlzLiBUaGUgb3RoZXIgbW9kaWZpY2F0aW9uIGRlYWxzIHdpdGggdGhlIGBndHBfcnhgIGZ1bmN0aW9uIHdoaWNoIGNhdXNlcyBHU08gcGFja2V0cyB0byBiZSBkcm9wcGVkLlxuXG5UaGUgYmlnIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBJIG1lYW4sIGl0ICpkb2VzKiBmaXggYSBidWfigJRgZ3JvX2NlbGxzX3JlY2VpdmVgIHdhc24ndCBwcm9wZXJseSB1bnNldHRpbmcgdGhlIHRyYW5zcG9ydCBoZWFkZXIsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IHNpZGUgZWZmZWN0cyBkb3duIHRoZSBsaW5lLiBUaGF0J3MgZGVmaW5pdGVseSB3b3J0aCBpbnZlc3RpZ2F0aW5nLiBUaGUgYGd0cF9yeGAgY2hhbmdlLCB0aG91Z2gsIGxvb2tzIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBiZWhhdmlvdXIgY2hhbmdlIGFzIG9wcG9zZWQgdG8gYSBidWdmaXguIFNvIEkgbmVlZCB0byBiZSBzdXJlIG9uIHRoaXMuXG5cbkknbSB0aGlua2luZywgdGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEknbGwgbmVlZCB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBjb2RlIGZvciBib3RoIGBndHBfcnhgIGFuZCBgZ3JvX2NlbGxzX3JlY2VpdmVgIGFuZCBzZWUgd2hhdCB0aGUgaW1wbGljYXRpb25zIGFyZSBpbiBkZXRhaWwuIExldCdzIHN0YXJ0IGRpZ2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mjg6MzMuMjExNzg0ODMzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjA0NDYzNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3RwX3J4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2d0cC5jPTI4OD1zdGF0aWMgaW50IGd0cF9pbm5lcl9wcm90byhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgaGRybGVuLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMzExLVxcbmRyaXZlcnMvbmV0L2d0cC5jOjMxMjpzdGF0aWMgaW50IGd0cF9yeChzdHJ1Y3QgcGRwX2N0eCAqcGN0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5kcml2ZXJzL25ldC9ndHAuYy0zMTMtXFx0XFx0ICB1bnNpZ25lZCBpbnQgaGRybGVuLCB1bnNpZ25lZCBpbnQgcm9sZSwgX191MTYgaW5uZXJfcHJvdG8pXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz01ODU9c3RhdGljIGludCBndHAwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBndHBfZGV2ICpndHAsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy02MjUtXFxuZHJpdmVycy9uZXQvZ3RwLmM6NjI2OlxcdHJldHVybiBndHBfcngocGN0eCwgc2tiLCBoZHJsZW4sIGd0cC1cXHUwMDNlcm9sZSwgaW5uZXJfcHJvdG8pO1xcbmRyaXZlcnMvbmV0L2d0cC5jLTYyNy19XFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYz03OTM9c3RhdGljIGludCBndHAxdV91ZHBfZW5jYXBfcmVjdihzdHJ1Y3QgZ3RwX2RldiAqZ3RwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtODUyLVxcbmRyaXZlcnMvbmV0L2d0cC5jOjg1MzpcXHRyZXR1cm4gZ3RwX3J4KHBjdHgsIHNrYiwgaGRybGVuLCBndHAtXFx1MDAzZXJvbGUsIGlubmVyX3Byb3RvKTtcXG5kcml2ZXJzL25ldC9ndHAuYy04NTQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODozNS4wNzIyMzY0MDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjgyNjM2MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1RQIFJlY2VpdmUgUGF0aCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEdUUCByZWNlaXZlIHByb2Nlc3NpbmcuIEl0IHNlZW1zIGBndHBfcnhgIGlzIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUsIGNhbGxlZCBmcm9tIGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YC4gTWFrZXMgc2Vuc2UsIHRob3NlIGFyZSB0aGUgVURQIGVuY2Fwc3VsYXRpb24gZW50cnkgcG9pbnRzLiBUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIGZvciBgc2tiX2lzX2dzbyhza2IpYCB3aXRoaW4gYGd0cF9yeGAuIEhtbSwgdGhhdCBzdWdnZXN0cyB0aGV5J3JlIGRlYWxpbmcgd2l0aCBHZW5lcmljIFNlZ21lbnRhdGlvbiBPZmZsb2FkIChHU08pLiBBbmQgdGhlbiB0aGVyZSdzIGFuIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAgY2FsbCBhZGRlZCB3aXRoaW4gYGdyb19jZWxsc19yZWNlaXZlYC4gVGhhdCdzIGludGVyZXN0aW5nLCB1c3VhbGx5IHJlbGF0ZWQgdG8gR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykuIFNpbmNlIEdTTyBhbmQgR1JPIHdvcmsgdG9nZXRoZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLiBJIHNob3VsZCBwcm9iYWJseSBkaXZlIGludG8gYGdyb19jZWxsc19yZWNlaXZlYCBpdHNlbGYgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYC4gTGV0J3Mgc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mjg6MzkuMzU0ODc0ODA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZ3JvX2NlbGxzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gICAzOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAgNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAgNTpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2dyb19jZWxscy5oXFx1MDAzZVxcbiAgIDY6XFx0I2luY2x1ZGUgXFx1MDAzY25ldC9ob3RkYXRhLmhcXHUwMDNlXFxuICAgNzpcXHRcXG4gICA4OlxcdHN0cnVjdCBncm9fY2VsbCB7XFxuICAgOTpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkXFx0bmFwaV9za2JzO1xcbiAgMTA6XFx0XFx0c3RydWN0IG5hcGlfc3RydWN0XFx0bmFwaTtcXG4gIDExOlxcdFxcdGxvY2FsX2xvY2tfdFxcdFxcdGJoX2xvY2s7XFxuICAxMjpcXHR9O1xcbiAgMTM6XFx0XFxuICAxNDpcXHRpbnQgZ3JvX2NlbGxzX3JlY2VpdmUoc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiAgMTU6XFx0e1xcbiAgMTY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi1cXHUwMDNlZGV2O1xcbiAgMTc6XFx0XFx0Ym9vbCBoYXZlX2JoX2xvY2sgPSBmYWxzZTtcXG4gIDE4OlxcdFxcdHN0cnVjdCBncm9fY2VsbCAqY2VsbDtcXG4gIDE5OlxcdFxcdGludCByZXM7XFxuICAyMDpcXHRcXG4gIDIxOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gIDIyOlxcdFxcdGlmICh1bmxpa2VseSghKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJRkZfVVApKSlcXG4gIDIzOlxcdFxcdFxcdGdvdG8gZHJvcDtcXG4gIDI0OlxcdFxcbiAgMjU6XFx0XFx0c2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0aWYgKCFnY2VsbHMtXFx1MDAzZWNlbGxzIHx8IHNrYl9jbG9uZWQoc2tiKSB8fCBuZXRpZl9lbGlkZV9ncm8oZGV2KSkge1xcbiAgMjg6XFx0XFx0XFx0cmVzID0gbmV0aWZfcngoc2tiKTtcXG4gIDI5OlxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiAgMzA6XFx0XFx0fVxcbiAgMzE6XFx0XFxuICAzMjpcXHRcXHRsb2NhbF9sb2NrX25lc3RlZF9iaChcXHUwMDI2Z2NlbGxzLVxcdTAwM2VjZWxscy1cXHUwMDNlYmhfbG9jayk7XFxuICAzMzpcXHRcXHRoYXZlX2JoX2xvY2sgPSB0cnVlO1xcbiAgMzQ6XFx0XFx0Y2VsbCA9IHRoaXNfY3B1X3B0cihnY2VsbHMtXFx1MDAzZWNlbGxzKTtcXG4gIDM1OlxcdFxcbiAgMzY6XFx0XFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNmNlbGwtXFx1MDAzZW5hcGlfc2ticykgXFx1MDAzZSBSRUFEX09OQ0UobmV0X2hvdGRhdGEubWF4X2JhY2tsb2cpKSB7XFxuICAzNzpcXHRkcm9wOlxcbiAgMzg6XFx0XFx0XFx0ZGV2X2NvcmVfc3RhdHNfcnhfZHJvcHBlZF9pbmMoZGV2KTtcXG4gIDM5OlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgNDA6XFx0XFx0XFx0cmVzID0gTkVUX1JYX0RST1A7XFxuICA0MTpcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4gIDQyOlxcdFxcdH1cXG4gIDQzOlxcdFxcbiAgNDQ6XFx0XFx0X19za2JfcXVldWVfdGFpbChcXHUwMDI2Y2VsbC1cXHUwMDNlbmFwaV9za2JzLCBza2IpO1xcbiAgNDU6XFx0XFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNmNlbGwtXFx1MDAzZW5hcGlfc2ticykgPT0gMSlcXG4gIDQ2OlxcdFxcdFxcdG5hcGlfc2NoZWR1bGUoXFx1MDAyNmNlbGwtXFx1MDAzZW5hcGkpO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRyZXMgPSBORVRfUlhfU1VDQ0VTUztcXG4gIDQ5OlxcdFxcbiAgNTA6XFx0dW5sb2NrOlxcbiAgNTE6XFx0XFx0aWYgKGhhdmVfYmhfbG9jaylcXG4gIDUyOlxcdFxcdFxcdGxvY2FsX3VubG9ja19uZXN0ZWRfYmgoXFx1MDAyNmdjZWxscy1cXHUwMDNlY2VsbHMtXFx1MDAzZWJoX2xvY2spO1xcbiAgNTM6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuICA1NDpcXHRcXHRyZXR1cm4gcmVzO1xcbiAgNTU6XFx0fVxcbiAgNTY6XFx0RVhQT1JUX1NZTUJPTChncm9fY2VsbHNfcmVjZWl2ZSk7XFxuICA1NzpcXHRcXG4gIDU4OlxcdC8qIGNhbGxlZCB1bmRlciBCSCBjb250ZXh0ICovXFxuICA1OTpcXHRzdGF0aWMgaW50IGdyb19jZWxsX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiAgNjA6XFx0e1xcbiAgNjE6XFx0XFx0c3RydWN0IGdyb19jZWxsICpjZWxsID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBncm9fY2VsbCwgbmFwaSk7XFxuICA2MjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xcbiAgNjM6XFx0XFx0aW50IHdvcmtfZG9uZSA9IDA7XFxuICA2NDpcXHRcXG4gIDY1OlxcdFxcdHdoaWxlICh3b3JrX2RvbmUgXFx1MDAzYyBidWRnZXQpIHtcXG4gIDY2OlxcdFxcdFxcdF9fbG9jYWxfbG9ja19uZXN0ZWRfYmgoXFx1MDAyNmNlbGwtXFx1MDAzZWJoX2xvY2spO1xcbiAgNjc6XFx0XFx0XFx0c2tiID0gX19za2JfZGVxdWV1ZShcXHUwMDI2Y2VsbC1cXHUwMDNlbmFwaV9za2JzKTtcXG4gIDY4OlxcdFxcdFxcdF9fbG9jYWxfdW5sb2NrX25lc3RlZF9iaChcXHUwMDI2Y2VsbC1cXHUwMDNlYmhfbG9jayk7XFxuICA2OTpcXHRcXHRcXHRpZiAoIXNrYilcXG4gIDcwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAgNzE6XFx0XFx0XFx0bmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpO1xcbiAgNzI6XFx0XFx0XFx0d29ya19kb25lKys7XFxuICA3MzpcXHRcXHR9XFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdGlmICh3b3JrX2RvbmUgXFx1MDAzYyBidWRnZXQpXFxuICA3NjpcXHRcXHRcXHRuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgd29ya19kb25lKTtcXG4gIDc3OlxcdFxcdHJldHVybiB3b3JrX2RvbmU7XFxuICA3ODpcXHR9XFxuICA3OTpcXHRcXG4gIDgwOlxcdGludCBncm9fY2VsbHNfaW5pdChzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA4MTpcXHR7XFxuICA4MjpcXHRcXHRpbnQgaTtcXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0Z2NlbGxzLVxcdTAwM2VjZWxscyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgZ3JvX2NlbGwpO1xcbiAgODU6XFx0XFx0aWYgKCFnY2VsbHMtXFx1MDAzZWNlbGxzKVxcbiAgODY6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuICA4NzpcXHRcXG4gIDg4OlxcdFxcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XFxuICA4OTpcXHRcXHRcXHRzdHJ1Y3QgZ3JvX2NlbGwgKmNlbGwgPSBwZXJfY3B1X3B0cihnY2VsbHMtXFx1MDAzZWNlbGxzLCBpKTtcXG4gIDkwOlxcdFxcbiAgOTE6XFx0XFx0XFx0X19za2JfcXVldWVfaGVhZF9pbml0KFxcdTAwMjZjZWxsLVxcdTAwM2VuYXBpX3NrYnMpO1xcbiAgOTI6XFx0XFx0XFx0bG9jYWxfbG9ja19pbml0KFxcdTAwMjZjZWxsLVxcdTAwM2ViaF9sb2NrKTtcXG4gIDkzOlxcdFxcbiAgOTQ6XFx0XFx0XFx0c2V0X2JpdChOQVBJX1NUQVRFX05PX0JVU1lfUE9MTCwgXFx1MDAyNmNlbGwtXFx1MDAzZW5hcGkuc3RhdGUpO1xcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHRcXHRuZXRpZl9uYXBpX2FkZChkZXYsIFxcdTAwMjZjZWxsLVxcdTAwM2VuYXBpLCBncm9fY2VsbF9wb2xsKTtcXG4gIDk3OlxcdFxcdFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZjZWxsLVxcdTAwM2VuYXBpKTtcXG4gIDk4OlxcdFxcdH1cXG4gIDk5OlxcdFxcdHJldHVybiAwO1xcbiAxMDA6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODozOS4zNTQ5NTI3MDRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ1OTIwMzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGhpcyBQYXRjaCBpcyBhIEdvb2QgSWRlYSoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggbG9va3MgcHJvbWlzaW5nIGZvciBmdXp6aW5nLiBJdCBpbnRyb2R1Y2VzIGEgY2hlY2sgZm9yIEdlbmVyaWMgU2VnbWVudGF0aW9uIE9mZmxvYWQgKEdTTykgd2l0aGluIGBndHBfcnhgIGFuZCBhbHNvIGFwcGVhcnMgdG8gYmUgdW5zZXR0aW5nIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGluIGBncm9fY2VsbHNfcmVjZWl2ZWAuIFRoYXQncyBhIGNsYXNzaWMgYXJlYSB0byB0YXJnZXQgd2l0aCBmdXp6aW5nLiBBbnl0aGluZyByZWxhdGVkIHRvIGhlYWRlciBtYW5pcHVsYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBHU08gaXMgaW52b2x2ZWQsIGlzIG9mdGVuIGEgc291cmNlIG9mIHZ1bG5lcmFiaWxpdGllcy4gSSdtIHRoaW5raW5nIEdUUCBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBoZXJlLiBUaW1lIHRvIGNvbmZpcm0gaWYgdGhhdCBjb25maWcgaXMgaGFuZGxlZCB3aXRoaW4gZHJpdmVycy9uZXQvS2NvbmZpZy4gTGV0J3Mgc2VlIGlmIHRoaXMgbGluZXMgdXAgd2l0aCB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTQyLCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODo0Mi43MDA4NzU0MzJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODU3NDY5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEdUUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTI2MD1jb25maWcgQkFSRVVEUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNzEtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNzI6Y29uZmlnIEdUUFxcbmRyaXZlcnMvbmV0L0tjb25maWctMjczLVxcdHRyaXN0YXRlIFxcXCJHUFJTIFR1bm5lbGluZyBQcm90b2NvbCBkYXRhcGF0aCAoR1RQLVUpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODo0NC4zODY2MzA5MjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY2NTc3MjI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqR1RQIERlcGVuZGVuY3kgSHVudCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIEdUUCBzdXBwb3J0LiBNeSBpbW1lZGlhdGUgaHVuY2ggaXMgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBwcm9iYWJseSBkZWNsYXJlZCBpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2AuIEl0J3MgdGhlIG1vc3QgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBkZXBlbmRlbmNpZXMgYW5kIGFzc29jaWF0ZWQgc2V0dGluZ3MuIEknbGwgbmVlZCB0byBjb25maXJtIGFueSBLY29uZmlnIG9wdGlvbnMgdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gd2hpY2ggZHJpdmVycyBhbmQgbW9kdWxlcyByZWxhdGUgdG8gR1RQIGFuZCB3aGF0IG90aGVyIGZlYXR1cmVzIGFyZSByZXF1aXJlZCBvciBjYW4gYmUgb3B0aW9uYWxseSBlbmFibGVkLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmFzZSB0byBzdGFydCB3aXRoIGZvciBjb25maWd1cmF0aW9uIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgyNDMsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODo1My4wNTI0MDYxNDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNzA6XFx0XFx0ICB3aWxsIGJlIGNhbGxlZCBiYXJldWRwLlxcbiAyNzE6XFx0XFxuIDI3MjpcXHRjb25maWcgR1RQXFxuIDI3MzpcXHRcXHR0cmlzdGF0ZSBcXFwiR1BSUyBUdW5uZWxpbmcgUHJvdG9jb2wgZGF0YXBhdGggKEdUUC1VKVxcXCJcXG4gMjc0OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAyNzU6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuIDI3NjpcXHRcXHRoZWxwXFxuIDI3NzpcXHRcXHQgIFRoaXMgYWxsb3dzIG9uZSB0byBjcmVhdGUgZ3RwIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGVcXG4gMjc4OlxcdFxcdCAgdGhlIEdQUlMgVHVubmVsaW5nIFByb3RvY29sIGRhdGFwYXRoIChHVFAtVSkuIFRoaXMgdHVubmVsaW5nIHByb3RvY29sXFxuIDI3OTpcXHRcXHQgIGlzIHVzZWQgdG8gcHJldmVudCBzdWJzY3JpYmVycyBmcm9tIGFjY2Vzc2luZyBtb2JpbGUgY2FycmllciBjb3JlXFxuIDI4MDpcXHRcXHQgIG5ldHdvcmsgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGEgdXNlcnNwYWNlIHNvZnR3YXJlIHRoYXRcXG4gMjgxOlxcdFxcdCAgaW1wbGVtZW50cyB0aGUgc2lnbmFsaW5nIHByb3RvY29sIChHVFAtQykgdG8gdXBkYXRlIGl0cyBQRFAgY29udGV4dFxcbiAyODI6XFx0XFx0ICBiYXNlLCBzdWNoIGFzIE9wZW5HR1NOIFxcdTAwM2NodHRwOi8vZ2l0Lm9zbW9jb20ub3JnL29wZW5nZ3NuLykuIFRoaXNcXG4gMjgzOlxcdFxcdCAgdHVubmVsaW5nIHByb3RvY29sIGlzIGltcGxlbWVudGVkIGFjY29yZGluZyB0byB0aGUgR1NNIFRTIDA5LjYwIGFuZFxcbiAyODQ6XFx0XFx0ICAzR1BQIFRTIDI5LjA2MCBzdGFuZGFyZHMuXFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlcnMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gMjg3OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgZ3RwLlxcbiAyODg6XFx0XFxuIDI4OTpcXHRjb25maWcgUEZDUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyODo1My4wNTI0ODM1NDVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc1MjU5NTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgZ3JvX2NlbGxzX3JlY2VpdmVgIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBkaXZpbmcgaW50byB0aGUgYEdUUGAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbnMgZm9yIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBuZXQvY29yZS9ncm9fY2VsbHMuY2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBmb3IgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQgKEdSTykgY2VsbCBoYW5kbGluZyByZXNpZGVzLCBvYnZpb3VzbHkuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpc3NlY3QgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIHRvIHRyYWNlIGJhY2sgdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgd2FudCB0byBwaW5wb2ludCBleGFjdGx5IHdoaWNoIGNvbmZpZ3VyYXRpb25zLCBvciBjb21iaW5hdGlvbnMgb2YgY29uZmlndXJhdGlvbnMsIGFyZSByZXNwb25zaWJsZSBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIFRoaXMgd2lsbCBoZWxwIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGFuZCBydW50aW1lIGltcGxpY2F0aW9ucyBmb3IgYSBnaXZlbiBkZXBsb3ltZW50IGFuZCBhbHNvIGFueSB1cHN0cmVhbSBkZXBlbmRlbmN5IHJlcXVpcmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc1MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mjg6NTguODA1MDgyMjQyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTY5ODkwNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdyb19jZWxscy5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTQxPW9iai0kKENPTkZJR19IV0JNKSArPSBod2JtLm9cXG5uZXQvY29yZS9NYWtlZmlsZTo0MjpvYmotJChDT05GSUdfR1JPX0NFTExTKSArPSBncm9fY2VsbHMub1xcbm5ldC9jb3JlL01ha2VmaWxlLTQzLW9iai0kKENPTkZJR19GQUlMT1ZFUikgKz0gZmFpbG92ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyOTowMC45NzQ5ODAzOTFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NTQ0MjQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgQ09ORklHX0dST19DRUxMU2AgQ29uZmlndXJhdGlvbiBPcHRpb24qKlxuXG5Pa2F5LCBzbyBgQ09ORklHX0dST19DRUxMU2AgaXMgdGhlIGNvbmZpZyB3ZSdyZSBkZWFsaW5nIHdpdGguIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMsIGZlYXR1cmVzLCBvciBkcml2ZXJzIG1pZ2h0IGVuYWJsZSBvciByZXF1aXJlIHRoaXMgb3B0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgc2VsZWN0aW9uIHBhdGhzLCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cywgYW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyYWwgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIG9yIGRpc2FibGluZyBpdC4gVGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWcgc3lzdGVtIGFuZCBzZWUgd2hhdCdzIHNlbGVjdGluZyBpdC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBsb29rIGZvciBgc2VsZWN0YCBzdGF0ZW1lbnRzLCBhbmQgdW5kZXJzdGFuZCB0aGUgbG9naWMgYmVoaW5kIHdoeSBpdCdzIGVuYWJsZWQgaW4gdmFyaW91cyBjb250ZXh0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA2MCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjI5OjA1LjE3MDQyNDg4NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NTYyMzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgR1JPX0NFTExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MjMwPWNvbmZpZyBWWExBTlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yMzMtXFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyMzQ6XFx0c2VsZWN0IEdST19DRUxMU1xcbmRyaXZlcnMvbmV0L0tjb25maWctMjM1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MjQ1PWNvbmZpZyBHRU5FVkVcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjQ4LVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbmRyaXZlcnMvbmV0L0tjb25maWc6MjQ5OlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5kcml2ZXJzL25ldC9LY29uZmlnLTI1MC1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTI2MD1jb25maWcgQkFSRVVEUFxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNjMtXFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNjQ6XFx0c2VsZWN0IEdST19DRUxMU1xcbmRyaXZlcnMvbmV0L0tjb25maWctMjY1LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9MzE4PWNvbmZpZyBNQUNTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWctMzIyLVxcdHNlbGVjdCBDUllQVE9fR0NNXFxuZHJpdmVycy9uZXQvS2NvbmZpZzozMjM6XFx0c2VsZWN0IEdST19DRUxMU1xcbmRyaXZlcnMvbmV0L0tjb25maWctMzI0LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3F1YWxjb21tL3JtbmV0L0tjb25maWc9Nj1tZW51Y29uZmlnIFJNTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnLTgtXFx0ZGVmYXVsdCBuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcXVhbGNvbW0vcm1uZXQvS2NvbmZpZzo5OlxcdHNlbGVjdCBHUk9fQ0VMTFNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9xdWFsY29tbS9ybW5ldC9LY29uZmlnLTEwLVxcdGhlbHBcXG4tLVxcbm5ldC9kc2EvS2NvbmZpZz0zPW1lbnVjb25maWcgTkVUX0RTQVxcbi0tXFxubmV0L2RzYS9LY29uZmlnLTctXFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVERFVklDRVNcXG5uZXQvZHNhL0tjb25maWc6ODpcXHRzZWxlY3QgR1JPX0NFTExTXFxubmV0L2RzYS9LY29uZmlnLTktXFx0c2VsZWN0IE5FVF9TV0lUQ0hERVZcXG4tLVxcbm5ldC9pcHY0L0tjb25maWc9MTg2PWNvbmZpZyBORVRfSVBfVFVOTkVMXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE4OC1cXHRzZWxlY3QgRFNUX0NBQ0hFXFxubmV0L2lwdjQvS2NvbmZpZzoxODk6XFx0c2VsZWN0IEdST19DRUxMU1xcbm5ldC9pcHY0L0tjb25maWctMTkwLVxcdGRlZmF1bHQgblxcbi0tXFxubmV0L2lwdjYvS2NvbmZpZz0xOTk9Y29uZmlnIElQVjZfVFVOTkVMXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTIwMi1cXHRzZWxlY3QgRFNUX0NBQ0hFXFxubmV0L2lwdjYvS2NvbmZpZzoyMDM6XFx0c2VsZWN0IEdST19DRUxMU1xcbm5ldC9pcHY2L0tjb25maWctMjA0LVxcdGhlbHBcXG4tLVxcbm5ldC94ZnJtL0tjb25maWc9NT1jb25maWcgWEZSTVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy03LVxcdGRlcGVuZHMgb24gSU5FVFxcbm5ldC94ZnJtL0tjb25maWc6ODpcXHRzZWxlY3QgR1JPX0NFTExTXFxubmV0L3hmcm0vS2NvbmZpZy05LVxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyOTowNi45MTYwNTUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4NDMzNjY0MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgVGhvdWdodCBQcm9jZXNzIG9uIEtlcm5lbCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgd2UgY291bGQganVzdCBlbmFibGUgYEdUUGAgYW5kIGBHUk9fQ0VMTFNgIOKAkyBvciBwb3RlbnRpYWxseSBzb21ldGhpbmcgbGlrZSBgVlhMQU5gIG9yIGBHRU5FVkVgIHdoaWNoICpkbyogc2VsZWN0IGBHUk9fQ0VMTFNgLiBCdXQsIGhvbGQgb24gYSBzZWNvbmQuLi4gZG9lcyBgR1RQYCBhY3R1YWxseSAqc2VsZWN0KiBgR1JPX0NFTExTYD8gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvbmV0L2d0cC5jYCBzb3VyY2UgY29kZS4gRG9lcyBpdCB1c2UgdGhlIGBncm9fY2VsbHNfcmVjZWl2ZWAgZnVuY3Rpb24/IEhtbSwgbm8sIGl0IGxvb2tzIGxpa2UgYGd0cF9yeGAgZG9lc24ndCB1dGlsaXplIGBncm9fY2VsbHNfcmVjZWl2ZWAuXG5cbldhaXQsIGxldCBtZSBtYWtlIHN1cmUuIFRoZSBkaWZmIGRvZXNuJ3Qgc2VlbSB0byBpbmRpY2F0ZSB0aGF0IGBndHAuY2AgaXMgdXNpbmcgYGdyb19jZWxsc19yZWNlaXZlYC4gRG9lcyBgZ3RwLmNgICphY3R1YWxseSogdXNlIGBncm9fY2VsbHNfcmVjZWl2ZWA/IE5vLCBpdCBsb29rcyBsaWtlIGBncm9fY2VsbHNfcmVjZWl2ZWAgaXMgdXNlZCBieSBvdGhlciBkcml2ZXJzLiBUaGUgcGF0Y2ggZG9lcyBtb2RpZnkgYm90aCBgZ3RwLmNgIGFuZCBgZ3JvX2NlbGxzLmNgLCBzbyBgR1RQYCBpcyByZXF1aXJlZCBmb3IgYGd0cC5jYCwgYW5kIGBHUk9fQ0VMTFNgIGlzIG5lY2Vzc2FyeSBmb3IgYGdyb19jZWxscy5jYC5cblxuTGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBHVFBgIGRvZXNuJ3Qgc2VsZWN0IGBHUk9fQ0VMTFNgLiBOb3BlLCBpdCBkb2Vzbid0LiBCdXQsIGBHUk9fQ0VMTFNgICppcyogc2VsZWN0ZWQgYnkgYFZYTEFOYCwgYEdFTkVWRWAsIGBNQUNTRUNgLCBgTkVUX0lQX1RVTk5FTGAsIGBJUFY2X1RVTk5FTGAsIGFuZCBgWEZSTWAuIFNvLCB3ZSBjYW4ganVzdCBzcGVjaWZ5IGBHVFBgIGFuZCBgR1JPX0NFTExTYCB0byBiZSBzdXJlLlxuXG5SZWdhcmRpbmcgdGhlIGZvY3VzIHN5bWJvbHMuIExvb2tzIGxpa2UgYGd0cF9yeGAgaXMgYSBzdGF0aWMgZnVuY3Rpb24uIEkgc2hvdWxkIGNoZWNrIHdoaWNoIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIGFyZSBhdmFpbGFibGUuIEFyZSB0aGV5IGBndHAwX3VkcF9lbmNhcF9yZWN2YCBhbmQgYGd0cDF1X3VkcF9lbmNhcF9yZWN2YD8gTm8gd2FpdCwgYGd0cF9yeGAgaXMgc3RpbGwgc3RhdGljLiBMZXQncyBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIG9mIGBndHAwX3VkcF9lbmNhcF9yZWN2YC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTk0MiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyOToxMy43NTk0MjQ5ODFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzA0NjY3MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ3RwMF91ZHBfZW5jYXBfcmVjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ndHAuYz01Njk9c3RhdGljIGludCBndHBfcHJvdG9fdG9fZmFtaWx5KF9fdTE2IHByb3RvKVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtNTg0LS8qIDEgbWVhbnMgcGFzcyB1cCB0byB0aGUgc3RhY2ssIC0xIG1lYW5zIGRyb3AgYW5kIDAgbWVhbnMgZGVjYXBzdWxhdGVkLiAqL1xcbmRyaXZlcnMvbmV0L2d0cC5jOjU4NTpzdGF0aWMgaW50IGd0cDBfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IGd0cF9kZXYgKmd0cCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5kcml2ZXJzL25ldC9ndHAuYy01ODYte1xcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmM9OTA4PXN0YXRpYyBpbnQgZ3RwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtOTIxLVxcdFxcdG5ldGRldl9kYmcoZ3RwLVxcdTAwM2VkZXYsIFxcXCJyZWNlaXZlZCBHVFAwIHBhY2tldFxcXFxuXFxcIik7XFxuZHJpdmVycy9uZXQvZ3RwLmM6OTIyOlxcdFxcdHJldCA9IGd0cDBfdWRwX2VuY2FwX3JlY3YoZ3RwLCBza2IpO1xcbmRyaXZlcnMvbmV0L2d0cC5jLTkyMy1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6Mjk6MTUuMzI5ODk3NTQ1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzOTg1NzQ3MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHVuZGVyc3RhbmRpbmcsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipHVFAgRW5jYXBzdWxhdGlvbiBFbnRyeSBQb2ludCoqXG5cblJpZ2h0LCBzbyBgZ3RwX2VuY2FwX3JlY3ZgIGlzICp0aGUqIHBvaW50IG9mIGVudHJ5IGZvciB0aGUgd2hvbGUgR1RQLW92ZXItVURQIGVuY2Fwc3VsYXRpb24gcHJvY2Vzcy4gVGhhdCdzIHRoZSBnYXRld2F5LiBJIHVuZGVyc3RhbmQgdGhpcyBtZWFucyB0aGF0IGFueSBpbmNvbWluZyBHVFAgdHJhZmZpYyB0aGF0J3MgZ29pbmcgdG8gYmUgdW5lbmNhcHN1bGF0ZWQsIHBhcnNlZCwgYW5kIHJvdXRlZCBuZWVkcyB0byBnbyB0aHJvdWdoIHRoaXMgZnVuY3Rpb24uIEl0J3MgdGhlIGJlZ2lubmluZyBvZiB0aGUgY2hhaW4sIHRoZSBpbml0aWFsIGhhbmRzaGFrZSB3aXRoIHRoZSBHVFAgcGFja2V0cyB0aGF0IGFyZSBiZWluZyB0cmFuc3BvcnRlZCBvdmVyIFVEUC4gSXQncyBjcnVjaWFsIGZvciB0aGUgY29ycmVjdCBwcm9jZXNzaW5nIG9mIGFueSBHVFAgdHJhZmZpYy4gU28sIGBndHBfZW5jYXBfcmVjdmAgaXMgdGhlIGtleSBmb3IgYW55dGhpbmcgR1RQIHJlbGF0ZWQgdGhhdCdzIHVzaW5nIFVEUCB0cmFuc3BvcnQuIEdvdHRhIGdldCB0aGF0IHJpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTA1MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjI5OjE4LjcyODQ3NTcxMVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0Nzg5MDc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJndHBfZW5jYXBfcmVjdlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ndHAuYz04OTE9c3RhdGljIHZvaWQgZ3RwX2VuY2FwX2Rpc2FibGUoc3RydWN0IGd0cF9kZXYgKmd0cClcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jLTkwNy0gKi9cXG5kcml2ZXJzL25ldC9ndHAuYzo5MDg6c3RhdGljIGludCBndHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvZ3RwLmMtOTA5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTE0MDk9c3RhdGljIHN0cnVjdCBzb2NrICpndHBfY3JlYXRlX3NvY2soaW50IHR5cGUsIHN0cnVjdCBndHBfZGV2ICpndHAsXFxuLS1cXG5kcml2ZXJzL25ldC9ndHAuYy0xNDM5LVxcdHR1bmNmZy5lbmNhcF90eXBlID0gdHlwZTtcXG5kcml2ZXJzL25ldC9ndHAuYzoxNDQwOlxcdHR1bmNmZy5lbmNhcF9yY3YgPSBndHBfZW5jYXBfcmVjdjtcXG5kcml2ZXJzL25ldC9ndHAuYy0xNDQxLVxcdHR1bmNmZy5lbmNhcF9kZXN0cm95ID0gTlVMTDtcXG4tLVxcbmRyaXZlcnMvbmV0L2d0cC5jPTE2NTQ9c3RhdGljIHN0cnVjdCBzb2NrICpndHBfZW5jYXBfZW5hYmxlX3NvY2tldChpbnQgZmQsIGludCB0eXBlLFxcbi0tXFxuZHJpdmVycy9uZXQvZ3RwLmMtMTY5NC1cXHR0dW5jZmcuZW5jYXBfdHlwZSA9IHR5cGU7XFxuZHJpdmVycy9uZXQvZ3RwLmM6MTY5NTpcXHR0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7XFxuZHJpdmVycy9uZXQvZ3RwLmMtMTY5Ni1cXHR0dW5jZmcuZW5jYXBfZGVzdHJveSA9IGd0cF9lbmNhcF9kZXN0cm95O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyOToyMC40NzYzNzIyMThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMwMjE3NTU0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgR1RQIGFuZCBHUk9fQ0VMTFMgZm9yIERhdGFwYXRoIE9wdGltaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgbWFpbiBlbnRyeSBwb2ludCBmb3IgR1RQIHBhY2tldHMgaXMgYGd0cF9lbmNhcF9yZWN2YC4gSXQncyB1c2VkIHdpdGhpbiBgZ3JvX2NlbGxzX3JlY2VpdmVgLCB3aGljaCBpcyBleHBvcnRlZCBhbmQgY2FsbGVkIGJ5IHZhcmlvdXMgZHJpdmVycywgc28gYm90aCBvZiB0aGVzZSBhcmUgZGVmaW5pdGVseSBnb2luZyB0byBiZSAqRm9jdXNTeW1ib2xzKiBmb3IgdGhpcyBhbmFseXNpcy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgZ3JvX2NlbGxzX3JlY2VpdmVgIGlzIGV4cG9ydGVkLCBhbmQgaXQgaXMhIEl0J3Mgbm90IHN0YXRpYy4gR29vZC4gTm93LCBgZ3RwX2VuY2FwX3JlY3ZgIGlzIHN0YXRpYywgd2hpY2ggc2VlbXMgY29udHJhcnkgdG8gdGhlIGd1aWRhbmNlIHRvIHByZWZlciBub24tc3RhdGljIGVudHJ5IHBvaW50cy4gSG93ZXZlciwgaXQgKmlzKiBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgKGB0dW5jZmcuZW5jYXBfcmN2ID0gZ3RwX2VuY2FwX3JlY3Y7YCksIHNvIGl0IHdvbid0IGJlIGlubGluZWQgYW5kICpkb2VzKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MuIFRoaXMgbWFrZXMgaXQgYSB2aWFibGUgY2FuZGlkYXRlLiBTaW5jZSB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBiZXR0ZXIgbm9uLXN0YXRpYyBvcHRpb24sIGBndHBfZW5jYXBfcmVjdmAgd2lsbCBiZSB0aGUgYmVzdCBlbnRyeXBvaW50IGZ1bmN0aW9uIGZvciB0aGUgR1RQIGRhdGFwYXRoLlxuXG5JJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIGBncm9fY2VsbHNfcmVjZWl2ZWAgaW4gYG5ldC9jb3JlL2dyb19jZWxscy5jYC4gWWVwLCBpdCdzIGRlZmluZWQgYXMgYGludCBncm9fY2VsbHNfcmVjZWl2ZShzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBza19idWZmICpza2IpYCBhbmQgaXMgRVhQT1JUX1NZTUJPTCdkLlxuXG5TbywgdGhlICpGb2N1c1N5bWJvbHMqIGFyZSBjb25maXJtZWQ6IGBndHBfZW5jYXBfcmVjdmAgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAuXG5cbk5vdywgZm9yICpFbmFibGVDb25maWdzKiwgSSBuZWVkIGBHVFBgIGFuZCBgR1JPX0NFTExTYC5cblxuSSdtIGdvaW5nIHRvIHJldmlldyB0aGUgcGF0Y2ggbm93LiBJdCBmaXhlcyB0d28gdGhpbmdzOiBmaXJzdCwgaXQgZHJvcHMgR1NPIHBhY2tldHMgaW4gdGhlIEdUUCBkYXRhcGF0aCwgYW5kIHNlY29uZCwgaXQgdW5zZXRzIHRoZSB0cmFuc3BvcnQgaGVhZGVyIGluIGBncm9fY2VsbHNfcmVjZWl2ZWAuIFRoYXQncyBpbXBvcnRhbnQuIEl0IHByZXZlbnRzIHN0YWxlIHRyYW5zcG9ydCBoZWFkZXJzIGZyb20gY2F1c2luZyBpc3N1ZXMgYXMgcGFja2V0cyBhcmUgcGFzc2VkIHVwIHRoZSBzdGFjay4gQm90aCBvZiB0aGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFmZmVjdGluZyBjb3JlIG5ldHdvcmtpbmcgYW5kIGRyaXZlciBjb2RlLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgZnV6emluZy5cblxuTXkgKkZvY3VzU3ltYm9scyogYXJlIHN0aWxsOiBgZ3RwX2VuY2FwX3JlY3ZgLCBgZ3JvX2NlbGxzX3JlY2VpdmVgLlxuVGhlICpFbmFibGVDb25maWdzKiBJJ2xsIG5lZWQgYXJlIGBHVFBgIGFuZCBgR1JPX0NFTExTYC5cblxuTm93LCBJJ20ganVzdCBjb25maXJtaW5nIHRoYXQgYEdST19DRUxMU2AgaXMgYSB2YWxpZCBjb25maWcgb3B0aW9uLiBMZXQncyBzZWUuLi4gQWgsIGl0J3MgKnNlbGVjdGVkKiBpbiB0aGUgYG5ldC9LY29uZmlnYCBmaWxlLCBidXQgbm90IGRpcmVjdGx5IGRlZmluZWQgYXMgYGNvbmZpZyBHUk9fQ0VMTFNgLiBHb3R0YSBsb29rIGEgYml0IGRlZXBlciB0byBzZWUgd2hlcmUgYEdST19DRUxMU2AgaXMgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE2MzQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDEzOjI5OjMzLjQ5ODEzMDE1OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTczMjQxNDYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgR1JPX0NFTExTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTQ2MT1jb25maWcgRFNUX0NBQ0hFXFxuLS1cXG5uZXQvS2NvbmZpZy00NjQtXFxubmV0L0tjb25maWc6NDY1OmNvbmZpZyBHUk9fQ0VMTFNcXG5uZXQvS2NvbmZpZy00NjYtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzoyOTozNS4yMzA1NTAxOTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0MzcwMTQxOTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBgY29uZmlnIEdST19DRUxMU2AgaXMgYSBib29sZWFuIHdpdGhpbiBgbmV0L0tjb25maWdgLiBSaWdodCwgaXQncyBhIGBib29sYCB3aXRob3V0IGEgcHJvbXB0LCB3aGljaCBtZWFucyBpdCBjYW4ndCBiZSBkaXJlY3RseSBzZWxlY3RlZCBieSBhIHVzZXIuIEl0IG5lZWRzIHRvIGJlIGVuYWJsZWQgKnRocm91Z2gqIGFub3RoZXIgY29uZmlnLiBIbW0sIGlmIEkgdHJ5IHRvIGp1c3QgYWRkIGBHUk9fQ0VMTFNgIHRvIGBFbmFibGVDb25maWdzYCwgaXQgbGlrZWx5IHdvbid0IHdvcmssIGJlY2F1c2UgS2NvbmZpZyB3b24ndCBsZXQgaXQgYmUgZGlyZWN0bHkgc2VsZWN0ZWQuXG5cbldhaXQsIGRvZXMgc3l6a2FsbGVyIGJ5cGFzcyB0aGlzIHJlc3RyaWN0aW9uPyBObywgdGhlIEtjb25maWcgdG9vbGluZyB3aWxsIGlnbm9yZSBpdCBzaW5jZSB0aGVyZSdzIG5vIHByb21wdC4gU28sIEkgbmVlZCB0byBmaW5kIGEgKnNlbGVjdGluZyogY29uZmlnLiBTb21ldGhpbmcgdGhhdCBoYXMgdGhlIHBvdGVudGlhbCB0byBlbmFibGUgYEdST19DRUxMU2AuIE9rYXksIGBWWExBTmAsIGBNQUNTRUNgLCBvciBgR0VORVZFYCBjb3VsZCB3b3JrLiBMZXQncyBzdGFydCBieSBpbmNsdWRpbmcgYm90aCBgVlhMQU5gIGFuZCBgR0VORVZFYC5cblxuSG9sZCBvbi4uLiBkb2VzIGBHVFBgIHNlbGVjdCBpdD8gTmVlZCB0byBjb25maXJtLiBOby4gT2theSwgYmFjayB0byB0aGUgZHJhd2luZyBib2FyZCB0byBkb3VibGUtY2hlY2suIExldCBtZSBsb29rIGF0IGBkcml2ZXJzL25ldC9LY29uZmlnYCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgVlhMQU5gIHNlbGVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0OTQsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6MzE6MzkuNjAwNjk1NDc2WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgzMzEzMDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWWExBTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTIxNj1jb25maWcgSVBWVEFQXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIyOS1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjIzMDpjb25maWcgVlhMQU5cXG5kcml2ZXJzL25ldC9LY29uZmlnLTIzMS1cXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBlWHRlbnNpYmxlIExvY2FsIEFyZWEgTmV0d29yayAoVlhMQU4pXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozMTo0MS4zODQwMTQwN1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc4Nzg0NDA5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIERlY2lzaW9uKipcblxuT2theSwgc28gSSdtIGltcGxlbWVudGluZyBzb21lIGNoYW5nZXMgcmVsYXRlZCB0byBHVFAgYW5kIFZYTEFOLiBJdCdzIGNsZWFyIHRoYXQgdGhlIHVzZXIgKmNhbiogc2VsZWN0IFZYTEFOLCBzbyB0aGF0J3MgZ29pbmcgaW4gbXkgRW5hYmxlQ29uZmlncy4gSSdsbCBhbHNvIGFkZCBHVFAgdG8gRW5hYmxlQ29uZmlncy4gTm93LCBsZXQncyBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBkZXBlbmRlbmNpZXMgY2F1c2luZyBwcm9ibGVtcy5cblxuR1RQIGRlcGVuZHMgb24gSU5FVCwgd2hpY2ggaXMgZXhwZWN0ZWQsIGFuZCBzZWxlY3RzIE5FVF9VRFBfVFVOTkVMLiBUaGF0J3MgYWxsIGdvb2QsIG5vIGlzc3VlcyB0aGVyZS5cblxuVlhMQU4gYWxzbyBkZXBlbmRzIG9uIElORVQgYW5kIHRoZW4gZWl0aGVyIElQVjYgKm9yKiBpdCBiZWluZyBkaXNhYmxlZCwgYW5kIGFsc28gc2VsZWN0cyBORVRfVURQX1RVTk5FTCBhbmQgR1JPX0NFTExTLiBNYWtlcyBzZW5zZS4gSSd2ZSBhbHJlYWR5IGNvbmZpcm1lZCBJIGNhbiBlbmFibGUgR1JPX0NFTExTIGJ5IGVuYWJsaW5nIFZYTEFOIGFuZCB0aGF0IHRoZSBWWExBTiBvcHRpb24gd2lsbCBlbmFibGUgTkVUX1VEUF9UVU5ORUwsIHNvIHRoYXTigJlzIGZpbmUuIEknbSBhbHNvIGNvbmZpcm1pbmcgdGhhdCBORVRfVURQX1RVTk5FTCBpcyBzZWxlY3RlZCBieSAqYm90aCogR1RQIGFuZCBWWExBTiwgYXMgZXhwZWN0ZWQuXG5cblRoZXJlZm9yZSwgRW5hYmxlQ29uZmlncyB3aWxsIGJlOiAqKkdUUCwgVlhMQU4qKi5cblxuRm9yIG15IEZvY3VzU3ltYm9scywgdGhlIGNoYW5nZXMgYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgZnVuY3Rpb25zIGBndHBfZW5jYXBfcmVjdmAgYW5kIGBncm9fY2VsbHNfcmVjZWl2ZWAsIHNvIEknbGwgaW5jbHVkZSB0aG9zZS4gU28sIG15IEZvY3VzU3ltYm9scyBhcmU6ICoqZ3RwX2VuY2FwX3JlY3YsIGdyb19jZWxsc19yZWNlaXZlKiouXG5cblRoaXMgcGF0Y2gsIGl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgaXNzdWUgYnkgbW9kaWZ5aW5nIHRoZSBHVFAgZHJpdmVyIHRvIGRyb3AgR1NPIHBhY2tldHMgaW4gdGhlIGd0cF9yeCBwYXRoIChoYW5kbGVkIHZpYSBndHBfZW5jYXBfcmVjdikgYW5kIG1vZGlmeWluZyBncm9fY2VsbHNfcmVjZWl2ZSB0byBwcmV2ZW50IHN0YWxlIGhlYWRlciBpc3N1ZXMuIFRoZXNlIGFyZSBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBhY3RpdmUgbmV0d29yayBkYXRhcGF0aCwgc28gaXQncyBhIGNyaXRpY2FsIGNoYW5nZS4gSSdtIGFsbCBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MDMwLCJPdXRwdXRUb2tlbnMiOjEzMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozMjoyNS4xNzE4NjExNDJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Njg3MDQ0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR1RQXCIsXG4gICAgXCJWWExBTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImd0cF9lbmNhcF9yZWN2XCIsXG4gICAgXCJncm9fY2VsbHNfcmVjZWl2ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBHVFAgZHJpdmVyIHRvIGRyb3AgR1NPIHBhY2tldHMgaW4gYGd0cF9yeGAgKGNhbGxlZCB2aWEgYGd0cF9lbmNhcF9yZWN2YCkgYW5kIHVwZGF0ZXMgdGhlIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbiBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIGBza19idWZmYHMgdG8gcHJldmVudCBpc3N1ZXMgd2l0aCBzdGFsZSBoZWFkZXJzLiBCb3RoIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIG5ldHdvcmsgZGF0YXBhdGggY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJHVFBcIixcbiAgICBcIlZYTEFOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ3RwX2VuY2FwX3JlY3ZcIixcbiAgICBcImdyb19jZWxsc19yZWNlaXZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEdUUCBkcml2ZXIgdG8gZHJvcCBHU08gcGFja2V0cyBpbiBgZ3RwX3J4YCAoY2FsbGVkIHZpYSBgZ3RwX2VuY2FwX3JlY3ZgKSBhbmQgdXBkYXRlcyB0aGUgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gdW5zZXQgdGhlIHRyYW5zcG9ydCBoZWFkZXIgb2YgYHNrX2J1ZmZgcyB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIHN0YWxlIGhlYWRlcnMuIEJvdGggYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgbmV0d29yayBkYXRhcGF0aCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMzozMjoyNS4yNDg3MzgxMDlaIiwiU2VxIjoyNywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTI3NDY1NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6MzI6MjUuMjQ5MjQ4MTc5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyMTI2OTUxMjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzIGFuZCBtb2RpZmllcyBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIHRoZSBgc2tiYCBieSBzZXR0aW5nIGBza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHRvIGB+MFVgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgdGhlIHVuc2V0IHRyYW5zcG9ydCBoZWFkZXIgaXMgdXNlZCB3aXRob3V0IGNoZWNraW5nLCBpdCB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKHVzaW5nIGB+MFVgIGFzIGFuIG9mZnNldCksIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGh1cywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGFhMWFiOGQwNWMyYmI1MWUxNzdhZmY5N2U1ZmU4YjAzMGRmYmNlZmFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMzoyODoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0cC5jIGIvZHJpdmVycy9uZXQvZ3RwLmNcbmluZGV4IDlhMTJjYzUzZGEwMDIuLmY2ZTQ3YzM2OWQ2MjIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ndHAuY1xuKysrIGIvZHJpdmVycy9uZXQvZ3RwLmNcbkBAIC0zMTIsNiArMzEyLDExIEBAIHN0YXRpYyBpbnQgZ3RwX2lubmVyX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZHJsZW4sXG4gc3RhdGljIGludCBndHBfcngoc3RydWN0IHBkcF9jdHggKnBjdHgsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdCAgdW5zaWduZWQgaW50IGhkcmxlbiwgdW5zaWduZWQgaW50IHJvbGUsIF9fdTE2IGlubmVyX3Byb3RvKVxuIHtcbitcdGlmIChza2JfaXNfZ3NvKHNrYikpIHtcbitcdFx0bmV0ZGV2X2RiZyhwY3R4LVx1MDAzZWRldiwgXCJHU08gaXMgbm90IHN1cHBvcnRlZCBpbiBHVFBcXG5cIik7XG4rXHRcdGdvdG8gZXJyO1xuK1x0fVxuK1xuIFx0aWYgKCFndHBfY2hlY2tfbXMoc2tiLCBwY3R4LCBoZHJsZW4sIHJvbGUsIGlubmVyX3Byb3RvKSkge1xuIFx0XHRuZXRkZXZfZGJnKHBjdHgtXHUwMDNlZGV2LCBcIk5vIFBEUCBjdHggZm9yIHRoaXMgTVNcXG5cIik7XG4gXHRcdHJldHVybiAxO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oXG5pbmRleCAyMmVkYTFkNTRhMGU4Li42MjZiYmI5YmFlMWFkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaFxuQEAgLTMwODIsNiArMzA4MiwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2tiX3RyYW5zcG9ydF9oZWFkZXJfd2FzX3NldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0cmV0dXJuIHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyICE9ICh0eXBlb2Yoc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIpKX4wVTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHNrYl91bnNldF90cmFuc3BvcnRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0c2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSAodHlwZW9mKHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyKSl+MFU7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqc2tiX3RyYW5zcG9ydF9oZWFkZXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRERUJVR19ORVRfV0FSTl9PTl9PTkNFKCFza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0KHNrYikpO1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2dyb19jZWxscy5jIGIvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcbmluZGV4IDFiODQzODVjMDRiZDkuLmQ4YzBhMjg2NzEyMDEgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9ncm9fY2VsbHMuY1xuKysrIGIvbmV0L2NvcmUvZ3JvX2NlbGxzLmNcbkBAIC0yMiw2ICsyMiw4IEBAIGludCBncm9fY2VsbHNfcmVjZWl2ZShzdHJ1Y3QgZ3JvX2NlbGxzICpnY2VsbHMsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRpZiAodW5saWtlbHkoIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IElGRl9VUCkpKVxuIFx0XHRnb3RvIGRyb3A7XG4gXG4rXHRza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpO1xuK1xuIFx0aWYgKCFnY2VsbHMtXHUwMDNlY2VsbHMgfHwgc2tiX2Nsb25lZChza2IpIHx8IG5ldGlmX2VsaWRlX2dybyhkZXYpKSB7XG4gXHRcdHJlcyA9IG5ldGlmX3J4KHNrYik7XG4gXHRcdGdvdG8gdW5sb2NrO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6MzI6MjUuMjQ5MjUwNDQ5WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMTI2OTIzNjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR1RQIFBhdGNoOiBLTVNBTiBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLiBMb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaW52b2x2ZXMgYGd0cF9yeGAgbm93IGRyb3BwaW5nIEdTTyBwYWNrZXRzIHdpdGggdGhlIGFkZGVkIGNoZWNrIGBpZiAoc2tiX2lzX2dzbyhza2IpKWAuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgYnVnIGZpeCwgYWRkcmVzc2luZyBhbiBpbmNvbXBhdGliaWxpdHkgd2l0aCBHVFAsIGFuZCBHU08gaGFuZGxpbmcuXG5cblRoZW4sIHRoZXJlJ3MgdGhlIGFkZGl0aW9uIG9mIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IpYCBpbiBgaW5jbHVkZS9saW51eC9za2J1ZmYuaGAsIGFuZCBpdOKAmXMgYmVpbmcgY2FsbGVkIGluIGBncm9fY2VsbHNfcmVjZWl2ZWAuIFRoaXMgaXMgdGhlIHBhcnQgdGhhdCBwaXF1ZWQgbXkgaW50ZXJlc3QgcmVnYXJkaW5nIG1lbW9yeSBzYWZldHkuIExldCdzIGJyZWFrIHRoaXMgZG93bjpcblxuKiAgICoqYGd0cF9yeGAgYW5kIEdTTyBwYWNrZXRzOioqIFRoYXQgZHJvcCBsb2dpYyBzZWVtcyBzb3VuZCBlbm91Z2guIE5vdGhpbmcgYWxhcm1pbmcgdGhlcmUuXG4qICAgKipgc2tiX3Vuc2V0X3RyYW5zcG9ydF9oZWFkZXJgOioqIFRoaXMgaXMgdGhlIGtleS4gU2V0dGluZyBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHRvIGB+MFVgIGVmZmVjdGl2ZWx5IG1lYW5zIGl0J3MgbWFya2VkIGFzIHVuc2V0LiBUaGF0IGlzIHdoYXQgdGhpcyBjYWxsIGRvZXMuXG4qICAgKipgZ3JvX2NlbGxzX3JlY2VpdmVgIGNhbGw6KiogYGdyb19jZWxsc19yZWNlaXZlYCBpcyBtYWtpbmcgdXNlIG9mIGBza2JfdW5zZXRfdHJhbnNwb3J0X2hlYWRlcmAuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQnV0LCB3YWl0LCB0aGF0J3Mgbm90IHRoZSBjYXNlLiBXZSdyZSAqc2V0dGluZyogYHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyYCB0byBhICpzcGVjaWZpYyogdmFsdWUsIGB+MFVgLCBub3QgbGVhdmluZyBpdCBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlLiBUaGUgR1NPIGRyb3AgaXMgYSBzdHJhaWdodGZvcndhcmQgY29uZGl0aW9uYWwsIG5vIGNvbXBsZXhpdGllcyB0aGVyZS5cblxuTm93LCBsZXQncyBkaWcgYSBiaXQgZGVlcGVyLiBDb3VsZCB0aGlzIHBvdGVudGlhbGx5IGxlYWQgdG8gYSBtZW1vcnkgKnJlYWQqIGlzc3VlIG9yIGV2ZW4gYW4gaW5mbyBsZWFrPyBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIGlzIGVpdGhlciBhbiBvZmZzZXQgb3IgYSBwb2ludGVyLCBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24uIFNldHRpbmcgaXQgdG8gYH4wVWAgaW5kaWNhdGVzIGFuIHVuc2V0IHN0YXRlLiBUaGUgZGFuZ2VyIGlzLCBpZiBzb21lIHBhcnQgb2YgdGhlIGNvZGUgKnJlYWRzKiBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHdpdGhvdXQgY2hlY2tpbmcgaWYgaXQncyBzZXQgdXNpbmcgYSBmdW5jdGlvbiBzdWNoIGFzIGBza2JfdHJhbnNwb3J0X2hlYWRlcl93YXNfc2V0YCwgaXQgbWlnaHQgaW50ZXJwcmV0IHRoYXQgYH4wVWAgdmFsdWUgYXMgYSB2YWxpZCBvZmZzZXQuIFRoaXMgY291bGQgcmVzdWx0IGluIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzLCB3aGljaCwgb2YgY291cnNlLCBpcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgdG8gY2F0Y2guIEJ1dCwgdGhlcmUncyBubyBhY3R1YWwgZXhwb3N1cmUgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIFdlJ3JlIGV4cGxpY2l0bHkgc2V0dGluZyBhIHZhbHVlLCBhbGJlaXQgYSBcInNwZWNpYWxcIiBvbmUuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhlIG9ubHkgcmlzayBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdGhhdCB3aWxsIGJlIGNhdWdodCBieSBLQVNBTiwgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gVGhlIHBhdGNoIG1vZGlmaWVzIGBndHBfcnhgIHRvIGRyb3AgR1NPIHBhY2tldHMuIEl0IGFsc28gbW9kaWZpZXMgYGdyb19jZWxsc19yZWNlaXZlYCB0byB1bnNldCB0aGUgdHJhbnNwb3J0IGhlYWRlciwgYnkgc2V0dGluZyBgc2tiLVx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHRvIGB+MFVgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiB0aGUgdW5zZXQgdHJhbnNwb3J0IGhlYWRlciBpcyB1c2VkIHdpdGhvdXQgY2hlY2tpbmcsIGl0IHJlc3VsdHMgaW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHdoaWNoIGlzIGNhdWdodCBieSBLQVNBTi5cblRodXMsIG5vIGFkZGl0aW9uYWwgS01TQU4gdGVzdGluZyBpcyBuZWVkZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MTksIk91dHB1dFRva2VucyI6MTYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTM6MzI6MzcuMzc2MTc3MjQ3WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZ3RwX3J4YCB0byBkcm9wIEdTTyBwYWNrZXRzIGFuZCBtb2RpZmllcyBgZ3JvX2NlbGxzX3JlY2VpdmVgIHRvIHVuc2V0IHRoZSB0cmFuc3BvcnQgaGVhZGVyIG9mIHRoZSBgc2tiYCBieSBzZXR0aW5nIGBza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXJgIHRvIGB+MFVgLiBUaGVzZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgZG8gbm90IGludHJvZHVjZSBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gSWYgdGhlIHVuc2V0IHRyYW5zcG9ydCBoZWFkZXIgaXMgdXNlZCB3aXRob3V0IGNoZWNraW5nLCBpdCB3b3VsZCByZXN1bHQgaW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgKHVzaW5nIGB+MFVgIGFzIGFuIG9mZnNldCksIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTi4gVGh1cywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBndHBfcnhgIHRvIGRyb3AgR1NPIHBhY2tldHMgYW5kIG1vZGlmaWVzIGBncm9fY2VsbHNfcmVjZWl2ZWAgdG8gdW5zZXQgdGhlIHRyYW5zcG9ydCBoZWFkZXIgb2YgdGhlIGBza2JgIGJ5IHNldHRpbmcgYHNrYi1cXHUwMDNldHJhbnNwb3J0X2hlYWRlcmAgdG8gYH4wVWAuIFRoZXNlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHVzZXIgc3BhY2UsIGFuZCBkbyBub3QgaW50cm9kdWNlIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiB0aGUgdW5zZXQgdHJhbnNwb3J0IGhlYWRlciBpcyB1c2VkIHdpdGhvdXQgY2hlY2tpbmcsIGl0IHdvdWxkIHJlc3VsdCBpbiBhbiBvdXQtb2YtYm91bmRzIGFjY2VzcyAodXNpbmcgYH4wVWAgYXMgYW4gb2Zmc2V0KSwgd2hpY2ggaXMgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOLiBUaHVzLCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmm9[1] Phase: Succeeded StartedAt: 2026-08-25 13:32:49 +0000 UTC FinishedAt: 2026-08-25 13:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 13:32:49 +0000 UTC FinishedAt: 2026-08-25 13:32:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2] Phase: Succeeded StartedAt: 2026-08-25 13:32:49 +0000 UTC FinishedAt: 2026-08-25 17:13:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 13:32:49 +0000 UTC FinishedAt: 2026-08-25 17:13:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 13:32:49 +0000 UTC FinishedAt: 2026-08-25 13:32:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 13:32:49 +0000 UTC FinishedAt: 2026-08-25 13:32:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcnmm9/series-workflowcnmm9-convert-artifact-2167550589/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 13:32:59 +0000 UTC FinishedAt: 2026-08-25 13:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 13:32:59 +0000 UTC FinishedAt: 2026-08-25 13:50:02 +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:*9f590f17-73a3-4ceb-b15d-8a97e75cb622,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-workflowcnmm9/series-workflowcnmm9-convert-artifact-2167550589/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": "6b614290-46a8-4252-badf-b975219fe508", "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-workflowcnmm9/series-workflowcnmm9-build-action-2889292723/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 13:32:59 +0000 UTC FinishedAt: 2026-08-25 13:49:52 +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:*9f590f17-73a3-4ceb-b15d-8a97e75cb622,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-workflowcnmm9/series-workflowcnmm9-convert-artifact-2167550589/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": "6b614290-46a8-4252-badf-b975219fe508", "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-workflowcnmm9/series-workflowcnmm9-build-action-2889292723/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 13:50:02 +0000 UTC FinishedAt: 2026-08-25 13:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 13:50:02 +0000 UTC FinishedAt: 2026-08-25 13:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 13:50:02 +0000 UTC FinishedAt: 2026-08-25 13:50:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 13:50:02 +0000 UTC FinishedAt: 2026-08-25 13:50:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowcnmm9/series-workflowcnmm9-convert-artifact-2894709208/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 13:50:12 +0000 UTC FinishedAt: 2026-08-25 13:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 13:50:12 +0000 UTC FinishedAt: 2026-08-25 13:52:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b614290-46a8-4252-badf-b975219fe508,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-workflowcnmm9/series-workflowcnmm9-build-action-2889292723/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-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 13:52:36 +0000 UTC FinishedAt: 2026-08-25 13:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 13:52:36 +0000 UTC FinishedAt: 2026-08-25 13:52:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 13:52:36 +0000 UTC FinishedAt: 2026-08-25 14:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 13:52:36 +0000 UTC FinishedAt: 2026-08-25 14:09:59 +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:*9f590f17-73a3-4ceb-b15d-8a97e75cb622,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-workflowcnmm9/series-workflowcnmm9-convert-artifact-2894709208/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": "cfc5c2b9-26b7-43a4-bb03-d472dd749e88", "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-workflowcnmm9/series-workflowcnmm9-build-action-355822404/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 13:52:36 +0000 UTC FinishedAt: 2026-08-25 14:09:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9f590f17-73a3-4ceb-b15d-8a97e75cb622,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-workflowcnmm9/series-workflowcnmm9-convert-artifact-2894709208/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": "cfc5c2b9-26b7-43a4-bb03-d472dd749e88", "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-workflowcnmm9/series-workflowcnmm9-build-action-355822404/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 14:09:59 +0000 UTC FinishedAt: 2026-08-25 14:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 14:09:59 +0000 UTC FinishedAt: 2026-08-25 14:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 14:09:59 +0000 UTC FinishedAt: 2026-08-25 14:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 14:09:59 +0000 UTC FinishedAt: 2026-08-25 14:11:56 +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:*cfc5c2b9-26b7-43a4-bb03-d472dd749e88,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-workflowcnmm9/series-workflowcnmm9-build-action-355822404/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-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 14:12:06 +0000 UTC FinishedAt: 2026-08-25 17:13:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 14:12:06 +0000 UTC FinishedAt: 2026-08-25 17:13:59 +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":["gtp_encap_recv","gro_cells_receive"],"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:*6b614290-46a8-4252-badf-b975219fe508,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cfc5c2b9-26b7-43a4-bb03-d472dd749e88,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-workflowcnmm9/series-workflowcnmm9-build-action-2889292723/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-workflowcnmm9/series-workflowcnmm9-build-action-355822404/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 14:12:06 +0000 UTC FinishedAt: 2026-08-25 14:12:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 14:12:06 +0000 UTC FinishedAt: 2026-08-25 14:12:10 +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":["gtp_encap_recv","gro_cells_receive"],"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-workflowcnmm9/series-workflowcnmm9-convert-artifact-2753693361/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 14:12:06 +0000 UTC FinishedAt: 2026-08-25 14:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 14:12:06 +0000 UTC FinishedAt: 2026-08-25 14:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 14:12:06 +0000 UTC FinishedAt: 2026-08-25 14:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 14:12:16 +0000 UTC FinishedAt: 2026-08-25 17:13:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcnmm9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["gtp_encap_recv","gro_cells_receive"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a8cd539ac19f7a68e68e1d25ef9ca2ff55b8500","config_name":"upstream-apparmor-kasan.config","enable_configs":["GTP","VXLAN"],"series_id":"0b1e98d0-33af-47ae-a591-99310f563a93","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 14:12:16 +0000 UTC FinishedAt: 2026-08-25 17:13:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b614290-46a8-4252-badf-b975219fe508,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cfc5c2b9-26b7-43a4-bb03-d472dd749e88,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-workflowcnmm9/series-workflowcnmm9-build-action-2889292723/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-workflowcnmm9/series-workflowcnmm9-build-action-355822404/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-workflowcnmm9/series-workflowcnmm9-convert-artifact-2753693361/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,}