Name: series-workflowsthfj Phase: Succeeded StartedAt: 2026-08-29 10:37:08 +0000 UTC FinishedAt: 2026-08-29 14:33:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[0] Phase: Succeeded StartedAt: 2026-08-29 10:37:08 +0000 UTC FinishedAt: 2026-08-29 10:52:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 10:37:08 +0000 UTC FinishedAt: 2026-08-29 10:52:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f78e0cb3fd377cfe90fe07a0eeec20584c0f4907", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f78e0cb3fd377cfe90fe07a0eeec20584c0f4907", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS" ], "series_id": "ec641c38-3c0e-4b9b-9791-daef03ada094" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "release_task", "proc_flush_pid" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWxlYXNlX3Rhc2smIzM0OywKICAgICYjMzQ7cHJvY19mbHVzaF9waWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIC8gcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGluIHJlbGVhc2VfdGFzaygpIGJ5IHRha2luZyBhIHJlZmVyZW5jZSB0byB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGJlZm9yZSBfX2V4aXRfc2lnbmFsKCkgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBwaWQgc3RydWN0dXJlJiMzOTtzIHJlZmVyZW5jZSBjb3VudCBkcm9wcGVkIHRvIHplcm8gcHJlbWF0dXJlbHkuIFN1Y2ggbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIGZ1bGx5IGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGNvbXBsZXggc3RydWN0IGluaXRpYWxpemF0aW9ucywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSB0YXNrIHJlbGVhc2UgbG9naWMgaW4gcmVsZWFzZV90YXNrKCkgYnkgZXhwbGljaXRseSBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIGFuZCByZWxlYXNpbmcgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0YXNrIHRlYXJkb3duIGFuZCBwcm9jIGRjYWNoZSBmbHVzaGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhmNGE1MDRiYWYyNmQ3NGY3ODliNzYyNWExMzM5NzM0ZWQ4NGM5MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMDo1MDo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuY1xuaW5kZXggOTc2ODZhZjg5NTAxMy4uNDYxZTI4MzRmY2I0NSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9leGl0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9leGl0LmNcbkBAIC0yNjEsOCAmIzQzOzI2MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHBpZGZzX2V4aXQocCk7XG4gXHRjZ3JvdXBfdGFza19yZWxlYXNlKHApO1xuIFxuLVx0LyogUmV0cmlldmUgQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4tXHR0aHJlYWRfcGlkID0gdGFza19waWQocCk7XG4mIzQzO1x0LyogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgbWF5IHNldCBpdCB0byBOVUxMLiAqL1xuJiM0MztcdHRocmVhZF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKHApKTtcbiBcbiBcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuIFx0cHRyYWNlX3JlbGVhc2VfdGFzayhwKTtcbkBAIC0yOTEsOCAmIzQzOzI5MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdH1cbiBcbiBcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4tXHQvKiBAdGhyZWFkX3BpZCBjYW4mIzM5O3QgZ28gYXdheSB1bnRpbCBmcmVlX3BpZHMoKSBiZWxvdyAqL1xuIFx0cHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7XG4mIzQzO1x0cHV0X3BpZCh0aHJlYWRfcGlkKTtcbiBcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xuIFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFx1MDAyNnAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcbiBcdFx0XHQgICAgICBzaXplb2YocC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlbGVhc2VfdGFzayYjMzQ7LAogICAgJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHRhc2sgcmVsZWFzZSBsb2dpYyBpbiByZWxlYXNlX3Rhc2soKSBieSBleHBsaWNpdGx5IGFjcXVpcmluZyBhIHJlZmVyZW5jZSB0byB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRhc2sgdGVhcmRvd24gYW5kIHByb2MgZGNhY2hlIGZsdXNoaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGY0YTUwNGJhZjI2ZDc0Zjc4OWI3NjI1YTEzMzk3MzRlZDg0YzkxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggOTc2ODZhZjg5NTAxMy4uNDYxZTI4MzRmY2I0NSAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZXhpdC5jCkBAIC0yNjEsOCAmIzQzOzI2MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAlwaWRmc19leGl0KHApOwogCWNncm91cF90YXNrX3JlbGVhc2UocCk7CiAKLQkvKiBSZXRyaWV2ZSBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi8KLQl0aHJlYWRfcGlkID0gdGFza19waWQocCk7CiYjNDM7CS8qIFBpbiBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi8KJiM0MzsJdGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpOwogCiAJd3JpdGVfbG9ja19pcnEoJmFtcDt0YXNrbGlzdF9sb2NrKTsKIAlwdHJhY2VfcmVsZWFzZV90YXNrKHApOwpAQCAtMjkxLDggJiM0MzsyOTEsOCBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJfQogCiAJd3JpdGVfdW5sb2NrX2lycSgmYW1wO3Rhc2tsaXN0X2xvY2spOwotCS8qIEB0aHJlYWRfcGlkIGNhbiYjMzk7dCBnbyBhd2F5IHVudGlsIGZyZWVfcGlkcygpIGJlbG93ICovCiAJcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7CiYjNDM7CXB1dF9waWQodGhyZWFkX3BpZCk7CiAJZXhpdF9jcmVkX25hbWVzcGFjZXMocCk7CiAJYWRkX2RldmljZV9yYW5kb21uZXNzKCZhbXA7cC0mZ3Q7c2Uuc3VtX2V4ZWNfcnVudGltZSwKIAkJCSAgICAgIHNpemVvZihwLSZndDtzZS5zdW1fZXhlY19ydW50aW1lKSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2g6IFJlbGVhc2UgVGFzayoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBrZXJuZWwvZXhpdC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcmVsZWFzZV90YXNrKClgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNyaXRpY2FsIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSB0YXNrIGV4aXQgcGF0aC4gIFRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBhcm91bmQgdGhlIGhhbmRsaW5nIG9mIGBAdGhyZWFkX3BpZGAgYmVmb3JlIHRoZSB0YXNrIGlzIGZ1bGx5IHVuaGFzaGVkIGFuZCBkZWFsbG9jYXRlZC4KCk15IGZpcnN0IHRob3VnaHQgaXMgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgcmV0cmlldmVzIGBAdGhyZWFkX3BpZGAgd2l0aCBgdGFza19waWQocClgIGJlZm9yZSBkZWFsbG9jYXRpb24gaW4gdGhlIG9sZCB2ZXJzaW9uIG9mIHRoZSBjb2RlLiBUaGlzIGlzIGxpa2VseSB0byBlbnN1cmUgdGhhdCB0aGlzIHJlZmVyZW5jZSB0byB0aGUgcHJvY2VzcyBJRCBpcyBzYWZlbHkgc3RvcmVkIGJlZm9yZSB0aGUgdW5kZXJseWluZyBkYXRhIGlzIHBvdGVudGlhbGx5IG1vZGlmaWVkIGJ5IHN1YnNlcXVlbnQgb3BlcmF0aW9ucy4KCk5vdywgd2l0aCB0aGlzIHBhdGNoLCB0aGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIGZ1bmN0aW9uIGNhbGxzIHRoYXQgYXJlIG9mIG5vdGUuIFRoZSB1cGRhdGVkIGNvZGUgbm93ICYjMzQ7cGlucyYjMzQ7IGBAdGhyZWFkX3BpZGAgdXNpbmcgYGdldF9waWQodGFza19waWQocCkpYCBiZWZvcmUgdGhlIHVuaGFzaGluZyBvY2N1cnMuIFRoaXMgaXMgZm9sbG93ZWQgbGF0ZXIgYnkgYHB1dF9waWQodGhyZWFkX3BpZClgLiBUaGUgY29tbWVudCBoaWdobGlnaHRzIHRoYXQgYEB0aHJlYWRfcGlkYCBpcyBwcm90ZWN0ZWQgdW50aWwgYGZyZWVfcGlkcygpYCBoYXBwZW5zIGFmdGVyIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBDbGVhcmx5LCB0aGlzIGlzIHRvIGVuc3VyZSB0aGF0IGEgcmVmZXJlbmNlIHRvIHRoZSBQSUQgaXMgcmV0YWluZWQsIHByZXZlbnRpbmcgaXQgZnJvbSBiZWNvbWluZyBwcmVtYXR1cmVseSBpbnZhbGlkLiAgSSBzdXNwZWN0IHRoaXMgJiMzNDtwaW5uaW5nJiMzNDsgbWVjaGFuaXNtIGlzIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgUElEIGNvdWxkIGJlIHJlLXVzZWQgYmVmb3JlIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9ucyB1c2luZyBpdCBhcmUgY29tcGxldGUuCgpUaGUgc3Vic2VxdWVudCBgcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZClgIGNhbGwsIGp1c3QgYmVmb3JlIHJlbGVhc2luZyB0aGUgUElELCBpcyBhbm90aGVyIGNsdWUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgcHJvY2VzcyBJRCBpcyB1c2VkIGluIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0gYW5kIGxpa2VseSBuZWVkcyB0byBiZSBzeW5jaHJvbml6ZWQgb3IgZmx1c2hlZCBiZWZvcmUgaXQgaXMgZGVhbGxvY2F0ZWQuIFRoZSBhZGRpdGlvbiBvZiBgcHV0X3BpZCgpYCBlbnN1cmVzIHRoYXQgdGhlIHJlZmVyZW5jZSBpcyByZWxlYXNlZCBhZnRlciBmbHVzaGluZywgY29tcGxldGluZyB0aGUgbGlmZWN5Y2xlLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiBgcHV0X3BpZCgpYCBhbmQgdW5kZXJzdGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGludm9sdmVkLCBidXQgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIHJvYnVzdCBQSUQgbWFuYWdlbWVudCBpbiBwbGFjZSBoZXJlLiBNeSBndWVzcyBpcyB0aGlzIGlzIGEgZ29vZCBjaGFuZ2UgYW5kIHRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhIHN1YnRsZSBidWcgdGhhdCB0aGlzIGZpeCBhZGRyZXNzZXMuIEkgd291bGQgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIG1vcmUgZGV0YWlsIHRvIGJlIHN1cmUsIGJ1dCBpdCBsb29rcyBsaWtlIGEgd2VsbC10YXJnZXRlZCBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZXhpdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHR7XG4gMjQ2Olx0fVxuIDI0NzpcdFxuIDI0ODpcdHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiAyNDk6XHR7XG4gMjUwOlx0XHRzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgcG9zdDtcbiAyNTE6XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyO1xuIDI1MjpcdFx0c3RydWN0IHBpZCAqdGhyZWFkX3BpZDtcbiAyNTM6XHRcdGludCB6YXBfbGVhZGVyO1xuIDI1NDpcdHJlcGVhdDpcbiAyNTU6XHRcdG1lbXNldChcdTAwMjZwb3N0LCAwLCBzaXplb2YocG9zdCkpO1xuIDI1NjpcdFxuIDI1NzpcdFx0LyogZG9uJiMzOTt0IG5lZWQgdG8gZ2V0IHRoZSBSQ1UgcmVhZGxvY2sgaGVyZSAtIHRoZSBwcm9jZXNzIGlzIGRlYWQgYW5kXG4gMjU4Olx0XHQgKiBjYW4mIzM5O3QgYmUgbW9kaWZ5aW5nIGl0cyBvd24gY3JlZGVudGlhbHMuICovXG4gMjU5Olx0XHRkZWNfcmxpbWl0X3Vjb3VudHModGFza191Y291bnRzKHApLCBVQ09VTlRfUkxJTUlUX05QUk9DLCAxKTtcbiAyNjA6XHRcbiAyNjE6XHRcdHBpZGZzX2V4aXQocCk7XG4gMjYyOlx0XHRjZ3JvdXBfdGFza19yZWxlYXNlKHApO1xuIDI2MzpcdFxuIDI2NDpcdFx0LyogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgbWF5IHNldCBpdCB0byBOVUxMLiAqL1xuIDI2NTpcdFx0dGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpO1xuIDI2NjpcdFxuIDI2NzpcdFx0d3JpdGVfbG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4gMjY4Olx0XHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xuIDI2OTpcdFx0X19leGl0X3NpZ25hbChcdTAwMjZwb3N0LCBwKTtcbiAyNzA6XHRcbiAyNzE6XHRcdC8qXG4gMjcyOlx0XHQgKiBJZiB3ZSBhcmUgdGhlIGxhc3Qgbm9uLWxlYWRlciBtZW1iZXIgb2YgdGhlIHRocmVhZFxuIDI3MzpcdFx0ICogZ3JvdXAsIGFuZCB0aGUgbGVhZGVyIGlzIHpvbWJpZSwgdGhlbiBub3RpZnkgdGhlXG4gMjc0Olx0XHQgKiBncm91cCBsZWFkZXImIzM5O3MgcGFyZW50IHByb2Nlc3MuIChpZiBpdCB3YW50cyBub3RpZmljYXRpb24uKVxuIDI3NTpcdFx0ICovXG4gMjc2Olx0XHR6YXBfbGVhZGVyID0gMDtcbiAyNzc6XHRcdGxlYWRlciA9IHAtXHUwMDNlZ3JvdXBfbGVhZGVyO1xuIDI3ODpcdFx0aWYgKGxlYWRlciAhPSBwIFx1MDAyNlx1MDAyNiB0aHJlYWRfZ3JvdXBfZW1wdHkobGVhZGVyKVxuIDI3OTpcdFx0XHRcdFx1MDAyNlx1MDAyNiBsZWFkZXItXHUwMDNlZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSkge1xuIDI4MDpcdFx0XHQvKiBmb3IgcGlkZnNfZXhpdCgpIGFuZCBkb19ub3RpZnlfcGFyZW50KCkgKi9cbiAyODE6XHRcdFx0aWYgKGxlYWRlci1cdTAwM2VzaWduYWwtXHUwMDNlZmxhZ3MgXHUwMDI2IFNJR05BTF9HUk9VUF9FWElUKVxuIDI4MjpcdFx0XHRcdGxlYWRlci1cdTAwM2VleGl0X2NvZGUgPSBsZWFkZXItXHUwMDNlc2lnbmFsLVx1MDAzZWdyb3VwX2V4aXRfY29kZTtcbiAyODM6XHRcdFx0LypcbiAyODQ6XHRcdFx0ICogSWYgd2Ugd2VyZSB0aGUgbGFzdCBjaGlsZCB0aHJlYWQgYW5kIHRoZSBsZWFkZXIgaGFzXG4gMjg1Olx0XHRcdCAqIGV4aXRlZCBhbHJlYWR5LCBhbmQgdGhlIGxlYWRlciYjMzk7cyBwYXJlbnQgaWdub3JlcyBTSUdDSExELFxuIDI4NjpcdFx0XHQgKiB0aGVuIHdlIGFyZSB0aGUgb25lIHdobyBzaG91bGQgcmVsZWFzZSB0aGUgbGVhZGVyLlxuIDI4NzpcdFx0XHQgKi9cbiAyODg6XHRcdFx0emFwX2xlYWRlciA9IGRvX25vdGlmeV9wYXJlbnQobGVhZGVyLCBsZWFkZXItXHUwMDNlZXhpdF9zaWduYWwpO1xuIDI4OTpcdFx0XHRpZiAoemFwX2xlYWRlcilcbiAyOTA6XHRcdFx0XHRsZWFkZXItXHUwMDNlZXhpdF9zdGF0ZSA9IEVYSVRfREVBRDtcbiAyOTE6XHRcdH1cbiAyOTI6XHRcbiAyOTM6XHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4gMjk0Olx0XHRwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKTtcbiAyOTU6XHRcdHB1dF9waWQodGhyZWFkX3BpZCk7XG4gMjk2Olx0XHRleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTtcbiAyOTc6XHRcdGFkZF9kZXZpY2VfcmFuZG9tbmVzcyhcdTAwMjZwLVx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUsXG4gMjk4Olx0XHRcdFx0ICAgICAgc2l6ZW9mKHAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSkpO1xuIDI5OTpcdFx0ZnJlZV9waWRzKHBvc3QucGlkcyk7XG4gMzAwOlx0XHRyZWxlYXNlX3RocmVhZChwKTtcbiAzMDE6XHRcdC8qXG4gMzAyOlx0XHQgKiBUaGlzIHRhc2sgd2FzIGFscmVhZHkgcmVtb3ZlZCBmcm9tIHRoZSBwcm9jZXNzL3RocmVhZC9waWQgbGlzdHNcbiAzMDM6XHRcdCAqIGFuZCBsb2NrX3Rhc2tfc2lnaGFuZChwKSBjYW4mIzM5O3Qgc3VjY2VlZC4gTm9ib2R5IGVsc2UgY2FuIHRvdWNoXG4gMzA0Olx0XHQgKiAtXHUwMDNlcGVuZGluZyBvciwgaWYgZ3JvdXAgZGVhZCwgc2lnbmFsLVx1MDAzZXNoYXJlZF9wZW5kaW5nLiBXZSBjYW4gY2FsbFxuIDMwNTpcdFx0ICogZmx1c2hfc2lncXVldWUoKSBsb2NrbGVzcy5cbiAzMDY6XHRcdCAqL1xuIDMwNzpcdFx0Zmx1c2hfc2lncXVldWUoXHUwMDI2cC1cdTAwM2VwZW5kaW5nKTtcbiAzMDg6XHRcdGlmICh0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKVxuIDMwOTpcdFx0XHRmbHVzaF9zaWdxdWV1ZShcdTAwMjZwLVx1MDAzZXNpZ25hbC1cdTAwM2VzaGFyZWRfcGVuZGluZyk7XG4gMzEwOlx0XG4gMzExOlx0XHRwdXRfdGFza19zdHJ1Y3RfcmN1X3VzZXIocCk7XG4gMzEyOlx0XG4gMzEzOlx0XHRwID0gbGVhZGVyO1xuIDMxNDpcdFx0aWYgKHVubGlrZWx5KHphcF9sZWFkZXIpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBjaGFuZ2UgdG8gYHJlbGVhc2VfdGFza2AgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQmIzM5O3MgaW4gY29yZSBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSB0YXNrIGxpZmVjeWNsZSwgYW5kIGRlYWxzIHdpdGggUElEIG1hbmFnZW1lbnQuIEl0JiMzOTtzIHRyaWdnZXJlZCBkdXJpbmcgcHJvY2VzcyB0ZXJtaW5hdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgcHJldHR5IGZ1bmRhbWVudGFsLiBUaGUgcGF0Y2ggaXMgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gaG93IHRoZSBgdGhyZWFkX3BpZGAgaXMgaGFuZGxlZCBkdXJpbmcgdGFzayByZWxlYXNlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBwcm9jX2ZsdXNoX3BpZGAuIFByZXZpb3VzbHksIHRoZSBjb2RlIGFzc3VtZWQgYHRocmVhZF9waWRgIHdvdWxkbiYjMzk7dCBkaXNhcHBlYXIsIGJ1dCB0aGlzIGNoYW5nZSBhZGRzIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgKGBnZXRfcGlkKClgLCBgcHV0X3BpZCgpYCkgdG8gZ3VhcmFudGVlIGl0cyBzYWZldHkuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBjaGVjayB0aGUgY3JpdGVyaWEuIEl0JiMzOTtzICpkZWZpbml0ZWx5KiBub3QgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZywgY29uc3RhbnQgY2hhbmdlcywgb3IgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0JiMzOTtzIG1vZGlmeWluZyAqcmVhY2hhYmxlLCBjb3JlIGtlcm5lbCBsb2dpYyouIFNwZWNpZmljYWxseSwgYGtlcm5lbC9leGl0LmNgIGRlYWxzIHdpdGggcHJvY2VzcyB0ZXJtaW5hdGlvbiwgYW5kIGByZWxlYXNlX3Rhc2tgIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgdGFzayBleGl0cy4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUga2VybmVsIQoKSSBuZWVkIHRvIGRlY2lkZSBpZiBgcmVsZWFzZV90YXNrYCBpcyBhICYjMzQ7aG90IHBhdGgmIzM0OyBmdW5jdGlvbi4gSWYgaXQgaXMsIEkgc2hvdWxkIGF2b2lkIGxpc3RpbmcgaXQgYmVjYXVzZSBvZiBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBIbW0uLi4gYHJlbGVhc2VfdGFza2AgaXMgY2FsbGVkICpldmVyeSogdGltZSBhIHRhc2sgZXhpdHMg4oCTIHRoYXQgc291bmRzIHByZXR0eSBob3QuIEJ1dCB0aGVuIGFnYWluLCBpcyBpdCBob3QtcGF0aCAqZ2VuZXJpYyogbGlrZSBhIGNvbW1vbiBzeXN0ZW0gY2FsbCwgb3IgaXMgaXQgYSBzcGVjaWZpYyBlbnRyeSBwb2ludD8gSXQgc2VlbXMgbW9yZSBzcGVjaWZpYyB0byB0YXNrIGV4aXQuIE1heWJlLCBpbiB0aGlzIGNvbnRleHQsIGl0JiMzOTtzICpub3QqIGEgJiMzNDtnZW5lcmljIGhvdCBwYXRoJiMzNDsgYXMgSSB0aGluayBhYm91dCB0aGlzLiBJdCBpcyBhIGtleSBlbnRyeSBwb2ludCBkdXJpbmcgYSBjZXJ0YWluIGFjdGlvbiwgYnV0IGl0IGlzbiYjMzk7dCBsaWtlIGEgZmlsZSBzeXN0ZW0gcmVhZCBjYWxsLgoKT2theSwgbGV0JiMzOTtzIHRoaW5rIGFib3V0IGBGb2N1c1N5bWJvbHNgLiBTaG91bGQgSSBpbmNsdWRlIGByZWxlYXNlX3Rhc2tgPyBJdCBpcyAqdGhlKiBtb2RpZmllZCBmdW5jdGlvbi4gSXQgKnNlZW1zKiBsaWtlIEkgc2hvdWxkLiBJcyBgcHJvY19mbHVzaF9waWRgIGEgZnVuY3Rpb24gdG8gZm9jdXMgb24/IEkgc2hvdWxkIGxvb2sgZm9yIGNhbGxlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gbWFrZSBhIGJldHRlciBkZWNpc2lvbi4gSSB3aWxsIG5lZWQgdG8gY2hlY2sgdGhvc2UuIFRoaXMgYWJzb2x1dGVseSBzZWVtcyB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlbGVhc2VfdGFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9leGl0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2V4aXQuYz0xMjM9bGF0ZV9pbml0Y2FsbChrZXJuZWxfZXhpdF9zeXNmc19pbml0KTtcbi0tXG5rZXJuZWwvZXhpdC5jLTEyNi0vKlxua2VybmVsL2V4aXQuYzoxMjc6ICogRm9yIHRoaW5ncyByZWxlYXNlX3Rhc2soKSB3b3VsZCBsaWtlIHRvIGRvICphZnRlciogdGFza2xpc3RfbG9jayBpcyByZWxlYXNlZC5cbmtlcm5lbC9leGl0LmMtMTI4LSAqL1xua2VybmVsL2V4aXQuYzoxMjk6c3RydWN0IHJlbGVhc2VfdGFza19wb3N0IHtcbmtlcm5lbC9leGl0LmMtMTMwLVx0c3RydWN0IHBpZCAqcGlkc1tQSURUWVBFX01BWF07XG4tLVxua2VybmVsL2V4aXQuYy0xMzItXG5rZXJuZWwvZXhpdC5jOjEzMzpzdGF0aWMgdm9pZCBfX3VuaGFzaF9wcm9jZXNzKHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCAqcG9zdCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxua2VybmVsL2V4aXQuYy0xMzQtXHRcdFx0ICAgICBib29sIGdyb3VwX2RlYWQpXG4tLVxua2VybmVsL2V4aXQuYy0xNTctICovXG5rZXJuZWwvZXhpdC5jOjE1ODpzdGF0aWMgdm9pZCBfX2V4aXRfc2lnbmFsKHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCAqcG9zdCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5rZXJuZWwvZXhpdC5jLTE1OS17XG4tLVxua2VybmVsL2V4aXQuYz0yNDQ9dm9pZCBfX3dlYWsgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spXG4tLVxua2VybmVsL2V4aXQuYy0yNDctXG5rZXJuZWwvZXhpdC5jOjI0ODp2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5rZXJuZWwvZXhpdC5jLTI0OS17XG5rZXJuZWwvZXhpdC5jOjI1MDpcdHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCBwb3N0O1xua2VybmVsL2V4aXQuYy0yNTEtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxlYWRlcjtcbi0tXG5rZXJuZWwvZXhpdC5jLTI2Ny1cdHdyaXRlX2xvY2tfaXJxKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xua2VybmVsL2V4aXQuYzoyNjg6XHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xua2VybmVsL2V4aXQuYy0yNjktXHRfX2V4aXRfc2lnbmFsKFx1MDAyNnBvc3QsIHApO1xuLS1cbmtlcm5lbC9leGl0LmM9NjMwPXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZpbmRfY2hpbGRfcmVhcGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqZmF0aGVyLFxuLS1cbmtlcm5lbC9leGl0LmMtNjUyLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlcHRyYWNlX2VudHJ5KTtcbmtlcm5lbC9leGl0LmM6NjUzOlx0XHRyZWxlYXNlX3Rhc2socCk7XG5rZXJuZWwvZXhpdC5jLTY1NC1cdH1cbi0tXG5rZXJuZWwvZXhpdC5jPTY2OT1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX25ld19yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsXG4tLVxua2VybmVsL2V4aXQuYy03MDQtLypcbmtlcm5lbC9leGl0LmM6NzA1OiogQW55IHRoYXQgbmVlZCB0byBiZSByZWxlYXNlX3Rhc2smIzM5O2QgYXJlIHB1dCBvbiB0aGUgQGRlYWQgbGlzdC5cbmtlcm5lbC9leGl0LmMtNzA2LSAqL1xuLS1cbmtlcm5lbC9leGl0LmM9NzcwPXN0YXRpYyB2b2lkIGV4aXRfbm90aWZ5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgZ3JvdXBfZGVhZClcbi0tXG5rZXJuZWwvZXhpdC5jLTgwOC1cdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZXB0cmFjZV9lbnRyeSk7XG5rZXJuZWwvZXhpdC5jOjgwOTpcdFx0cmVsZWFzZV90YXNrKHApO1xua2VybmVsL2V4aXQuYy04MTAtXHR9XG4tLVxua2VybmVsL2V4aXQuYz0xMjA2PXN0YXRpYyBpbnQgd2FpdF90YXNrX3pvbWJpZShzdHJ1Y3Qgd2FpdF9vcHRzICp3bywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9leGl0LmMtMTMxMi1cdGlmIChzdGF0ZSA9PSBFWElUX0RFQUQpXG5rZXJuZWwvZXhpdC5jOjEzMTM6XHRcdHJlbGVhc2VfdGFzayhwKTtcbmtlcm5lbC9leGl0LmMtMTMxNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTU2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgZm9yIGByZWxlYXNlX3Rhc2tgJiMzOTtzIFZpc2liaWxpdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgdGhpcyBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGFjdHVhbGx5IG1lYW50IHRvIGJlIGFjY2Vzc2VkIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgZGVjbGFyZWQgaW4gYSBoZWFkZXIgZmlsZSBvciBtYXJrZWQgd2l0aCBhbiBhcHByb3ByaWF0ZSBsaW5rYWdlIHNwZWNpZmllcj8gT3IsIG1vcmUgYnJvYWRseSwgaXMgaXQgKnVzZWQqIGluIGFueSBoZWFkZXIgZmlsZXM/IFRoaXMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgaXQmIzM5O3MgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgbWVhbnQgdG8gYmUgdXNlZCBieSBvdGhlciBtb2R1bGVzLCBvciBpZiBpdCYjMzk7cyBtZWFudCB0byBiZSBhbiBpbnRlcm5hbCB1dGlsaXR5LiBUaGlzIGRldGVybWluYXRpb24gaW5mbHVlbmNlcyBob3cgSSYjMzk7bGwgdHJlYXQgaXQgaW4gYW55IHJlZmFjdG9yaW5nIG9yIGFuYWx5c2lzLiBVbmRlcnN0YW5kaW5nIGl0cyB2aXNpYmlsaXR5IGlzIGNydWNpYWwgYmVmb3JlIG1ha2luZyBhbnkgZnVydGhlciBkZWNpc2lvbnMgYWJvdXQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVsZWFzZV90YXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg9Nzk9ZXh0ZXJuIHZvaWQgZm9ya19pbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtODAtXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaDo4MTpleHRlcm4gdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICogcCk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaC04Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDU4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBwcm9jX2ZsdXNoX3BpZGAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gSSYjMzk7dmUgZ290IGEgc3BlY2lmaWMgaXNzdWUgSSYjMzk7bSB0YWNrbGluZywgYW5kIEkgdGhpbmsgYHByb2NfZmx1c2hfcGlkYCBtaWdodCBiZSByZWxldmFudC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBjaGVjay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnMgYW5kIG91dHMgb2YgdGhpcyBmdW5jdGlvbiDigJMgc2VlIGhvdyBpdCYjMzk7cyB1c2VkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgY29udGV4dCBvZiB0aGUgY29kZSwgbWF5YmUgSSBzaG91bGQgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGNsdWVzLiBUaGlzIGluaXRpYWwgc3RlcCBpcyBhYm91dCBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYmVoYXZpb3IuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgaW52ZXN0aWdhdGlvbi4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfZmx1c2hfcGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmM9MTk3Nj1zdGF0aWMgc3RydWN0IGlub2RlICpwcm9jX3BpZF9tYWtlX2Jhc2VfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9wcm9jL2Jhc2UuYy0xOTg2LVxuZnMvcHJvYy9iYXNlLmM6MTk4NzpcdC8qIExldCBwcm9jX2ZsdXNoX3BpZCBmaW5kIHRoaXMgZGlyZWN0b3J5IGlub2RlICovXG5mcy9wcm9jL2Jhc2UuYy0xOTg4LVx0ZWkgPSBQUk9DX0koaW5vZGUpO1xuLS1cbmZzL3Byb2MvYmFzZS5jPTM0MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2NfdGdpZF9iYXNlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMzQzMC0vKipcbmZzL3Byb2MvYmFzZS5jOjM0MzE6ICogcHJvY19mbHVzaF9waWQgLSAgUmVtb3ZlIGRjYWNoZSBlbnRyaWVzIGZvciBAcGlkIGZyb20gdGhlIC9wcm9jIGRjYWNoZS5cbmZzL3Byb2MvYmFzZS5jLTM0MzItICogQHBpZDogcGlkIHRoYXQgc2hvdWxkIGJlIGZsdXNoZWQuXG4tLVxuZnMvcHJvYy9iYXNlLmMtMzQ0OC1cbmZzL3Byb2MvYmFzZS5jOjM0NDk6dm9pZCBwcm9jX2ZsdXNoX3BpZChzdHJ1Y3QgcGlkICpwaWQpXG5mcy9wcm9jL2Jhc2UuYy0zNDUwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS2VybmVsIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgYENPTkZJR2Agb3B0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgYmVoYXZpb3Igb2YgYHJlbGVhc2VfdGFza2Agb3IgdGhlIGBrZXJuZWwvZXhpdC5jYCBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGBrZXJuZWwvZXhpdC5jYCBpcyBmdW5kYW1lbnRhbDsgaXQmIzM5O3MgdW5jb25kaXRpb25hbGx5IGJha2VkIGludG8gdGhlIGtlcm5lbCBidWlsZCwgcmlnaHQ/IEJ1dCBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qLgoKTm93LCBgcHJvY19mbHVzaF9waWRgIGlzIGEgZGlmZmVyZW50IGFuaW1hbC4gSSByZWNhbGwgaXQgcmVzaWRpbmcgd2l0aGluIGBmcy9wcm9jL2Jhc2UuY2AsIGFuZCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0cyBpbmNsdXNpb24gaXMgZ2F0ZWQgYnkgYENPTkZJR19QUk9DX0ZTYC4gSG93ZXZlciwgcmVseWluZyBvbiBtZW1vcnkgYWxvbmUgaXNuJiMzOTt0IGdvb2QgZW5vdWdoLCBhbmQgSSBkb24mIzM5O3Qgd2FudCBhbnkgYXNzdW1wdGlvbnMsIHNvIGl0JiMzOTtzIGJlc3QgdG8gdmVyaWZ5IHRoaXMgZGVmaW5pdGl2ZWx5LiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIG9mIHRydXRoOiBgaW5jbHVkZS9saW51eC9wcm9jX2ZzLmhgLiBUaGF0IGhlYWRlciBmaWxlIHNob3VsZCBjbGFyaWZ5IHdoZXRoZXIgYHByb2NfZmx1c2hfcGlkYCBpcyBhbHdheXMgcHJlc2VudCBvciBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUaW1lIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcHJvY19mcy5oPTg1PWV4dGVybiB2b2lkIHByb2Nfcm9vdF9pbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmg6ODY6ZXh0ZXJuIHZvaWQgcHJvY19mbHVzaF9waWQoc3RydWN0IHBpZCAqKTtcbmluY2x1ZGUvbGludXgvcHJvY19mcy5oLTg3LVxuLS1cbmluY2x1ZGUvbGludXgvcHJvY19mcy5oPTE3Mj1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY19yb290X2luaXQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaC0xNzUtXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaDoxNzY6c3RhdGljIGlubGluZSB2b2lkIHByb2NfZmx1c2hfcGlkKHN0cnVjdCBwaWQgKnBpZClcbmluY2x1ZGUvbGludXgvcHJvY19mcy5oLTE3Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDcKCQkJCQkJCW91dHB1dDogMTE4CgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgcHJvY19mbHVzaF9waWRgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBwcm9jX2ZsdXNoX3BpZGAgaXMgYSBwbGFjZWhvbGRlciB3aGVuIGBDT05GSUdfUFJPQ19GU2AgaXMgZGlzYWJsZWQsIGJ1dCBiZWNvbWVzIGNydWNpYWwgZm9yIGZsdXNoaW5nIHRoZSBwcm9jIGRjYWNoZSB3aGVuIGBQUk9DX0ZTYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIGBDT05GSUdfUFJPQ19GU2Aga2V5IHRvIHByb3BlciBmdXp6aW5nIG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSBjb25maXJtLi4uIHllcywgYFBST0NfRlNgIGl0IGlzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHJpZ2h0IGZvY3VzIHN5bWJvbHMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaCBpcyBgcmVsZWFzZV90YXNrYCwgd2l0aCBgcHJvY19mbHVzaF9waWRgIGJlaW5nIHRoZSBjYWxsZWQgZnVuY3Rpb24gdXNpbmcgdGhlIHBpbm5lZCBwaWQuIEJvdGggYXJlIHJlbGV2YW50LCBidXQgbGV0JiMzOTtzIGJlIHN0cmF0ZWdpYyBhYm91dCB3aGF0IGdvZXMgaW4gdGhlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGJlc3QgcHJhY3RpY2VzLi4uIGF2b2lkIHRoZSBnZW5lcmljICYjMzQ7aG90LXBhdGgmIzM0OyBmdW5jdGlvbnMuIFdlIHdhbnQgZW50cnlwb2ludHMsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCwgc3RhdGljIGhlbHBlcnMgdGhhdCB0aGUgY29tcGlsZXIgaW5saW5lcyBhbmQgYXJlIHRoZW4ganVzdCBub2lzZS4KCklzIGByZWxlYXNlX3Rhc2tgIGEgaG90IHBhdGg/IE5vLCBgcmVsZWFzZV90YXNrYCBzZWVtcyB0byBiZSB0cmlnZ2VyZWQgZHVyaW5nIHRhc2sgcmVhcGluZyBvciByZWxlYXNlIOKAkyBgZXhpdF9ub3RpZnlgLCBgd2FpdF90YXNrX3pvbWJpZWAgYW5kIHNpbWlsYXIgZXZlbnRzLiBJdCYjMzk7cyBhbHNvIG5vdCBzdGF0aWMgYW5kIGFwcGVhcnMgdG8gYmUgYSBjbGVhciBlbnRyeSBwb2ludC4gSSYjMzk7bGwgaW5jbHVkZSBib3RoIGByZWxlYXNlX3Rhc2tgIGFuZCBgcHJvY19mbHVzaF9waWRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYC4KCk5leHQsIHRvIGRvdWJsZS1jaGVjayB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbi4gV2UmIzM5O3JlIGNsZWFyIHRoYXQgaXQgaXMgdGhlIGBQUk9DX0ZTYCBvcHRpb24uIEkgc2hvdWxkIG5vdGUgdGhhdCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGVyZSYjMzk7cyBubyBgQ09ORklHX2AgcHJlZml4IGhlcmUuCgpGaW5hbGx5LCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBmbGFnIGBXb3J0aEZ1enppbmdgIGFzIGB0cnVlYC4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBzdWNjaW5jdGx5IHN1bW1hcml6ZSB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZTogaXQgcmVzb2x2ZXMgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gdGhlIGNvcmUgcHJvY2VzcyBleGl0IGNvZGUgKGByZWxlYXNlX3Rhc2tgKSBieSBwaW5uaW5nIGB0aHJlYWRfcGlkYCB3aXRoIGBnZXRfcGlkKClgIGJlZm9yZSBgX191bmhhc2hfcHJvY2VzcygpYCBhbmQgcmVsZWFzaW5nIGl0IHdpdGggYHB1dF9waWQoKWAgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKClgLiBJJiMzOTt2ZSBnb3QgbXkgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtyZWxlYXNlX3Rhc2smIzM0OywgJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7XWAsIGFuZCBteSBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtQUk9DX0ZTJiMzNDtdYC4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlbGVhc2VfdGFzayYjMzQ7LAogICAgJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHRhc2sgcmVsZWFzZSBsb2dpYyBpbiByZWxlYXNlX3Rhc2soKSBieSBleHBsaWNpdGx5IGFjcXVpcmluZyBhIHJlZmVyZW5jZSB0byB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRhc2sgdGVhcmRvd24gYW5kIHByb2MgZGNhY2hlIGZsdXNoaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVsZWFzZV90YXNrJiMzNDssCiAgICAmIzM0O3Byb2NfZmx1c2hfcGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgdGFzayByZWxlYXNlIGxvZ2ljIGluIHJlbGVhc2VfdGFzaygpIGJ5IGV4cGxpY2l0bHkgYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHRvIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBhbmQgcmVsZWFzaW5nIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGFzayB0ZWFyZG93biBhbmQgcHJvYyBkY2FjaGUgZmx1c2hpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIC8gcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGluIHJlbGVhc2VfdGFzaygpIGJ5IHRha2luZyBhIHJlZmVyZW5jZSB0byB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGJlZm9yZSBfX2V4aXRfc2lnbmFsKCkgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBwaWQgc3RydWN0dXJlJiMzOTtzIHJlZmVyZW5jZSBjb3VudCBkcm9wcGVkIHRvIHplcm8gcHJlbWF0dXJlbHkuIFN1Y2ggbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIGZ1bGx5IGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGNvbXBsZXggc3RydWN0IGluaXRpYWxpemF0aW9ucywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGY0YTUwNGJhZjI2ZDc0Zjc4OWI3NjI1YTEzMzk3MzRlZDg0YzkxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggOTc2ODZhZjg5NTAxMy4uNDYxZTI4MzRmY2I0NSAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZXhpdC5jCkBAIC0yNjEsOCAmIzQzOzI2MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAlwaWRmc19leGl0KHApOwogCWNncm91cF90YXNrX3JlbGVhc2UocCk7CiAKLQkvKiBSZXRyaWV2ZSBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi8KLQl0aHJlYWRfcGlkID0gdGFza19waWQocCk7CiYjNDM7CS8qIFBpbiBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi8KJiM0MzsJdGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpOwogCiAJd3JpdGVfbG9ja19pcnEoJmFtcDt0YXNrbGlzdF9sb2NrKTsKIAlwdHJhY2VfcmVsZWFzZV90YXNrKHApOwpAQCAtMjkxLDggJiM0MzsyOTEsOCBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJfQogCiAJd3JpdGVfdW5sb2NrX2lycSgmYW1wO3Rhc2tsaXN0X2xvY2spOwotCS8qIEB0aHJlYWRfcGlkIGNhbiYjMzk7dCBnbyBhd2F5IHVudGlsIGZyZWVfcGlkcygpIGJlbG93ICovCiAJcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7CiYjNDM7CXB1dF9waWQodGhyZWFkX3BpZCk7CiAJZXhpdF9jcmVkX25hbWVzcGFjZXMocCk7CiAJYWRkX2RldmljZV9yYW5kb21uZXNzKCZhbXA7cC0mZ3Q7c2Uuc3VtX2V4ZWNfcnVudGltZSwKIAkJCSAgICAgIHNpemVvZihwLSZndDtzZS5zdW1fZXhlY19ydW50aW1lKSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHJlbGVhc2VfdGFza2AgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgY29udGV4dCBoZXJlIGlzIHRoZSBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC9leGl0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBrZXJuZWwgY2xlYW5zIHVwIGEgdGFzayB0aGF0JiMzOTtzIGV4aXRpbmcuIFRoZSBwYXRjaCBsb29rcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBsZXQmIzM5O3MgYnJlYWsgaXQgZG93biB0byBlbnN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKRmlyc3QsIEkgc2VlIHRoZSBjaGFuZ2UgZm9jdXNlcyBvbiBob3cgYEB0aHJlYWRfcGlkYCBpcyBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIHRoZSBpbnRlbnRpb24gaGVyZSBpcyB0byBlbnN1cmUgdGhhdCBgQHRocmVhZF9waWRgIHJlbWFpbnMgdmFsaWQgZXZlbiBhZnRlciBgX191bmhhc2hfcHJvY2VzcygpYCBpcyBjYWxsZWQsIHdoaWNoIGNhbiBwb3RlbnRpYWxseSBzZXQgaXQgdG8gTlVMTC4gIFByZXZpb3VzbHksIHdlIGp1c3QgZ3JhYmJlZCB0aGUgYHRhc2tfcGlkKHApYCB2YWx1ZSwgYnV0IG5vdyB0aGUgY29kZSBpcyBjYWxsaW5nIGBnZXRfcGlkKClgIHRvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBQSUQuIFRoaXMgaW5kaWNhdGVzIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHBvdGVudGlhbCByYWNlIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIHNhZmVseSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IGNvdWxkIGJlIGludmFsaWRhdGVkIGJ5IGFub3RoZXIgcGFydCBvZiB0aGUga2VybmVsLCBwYXJ0aWN1bGFybHkgaW4gYSBtdWx0aS10aHJlYWRlZCBvciBpbnRlcnJ1cHQtZHJpdmVuIGVudmlyb25tZW50LgoKVGhlIHN1YnNlcXVlbnQgYHByb2NfZmx1c2hfcGlkKClgIGZ1bmN0aW9uIGFwcGVhcnMgdG8gYmUgdXNpbmcgdGhlIHJlZmVyZW5jZWQgYHRocmVhZF9waWRgLCBhbmQgaXQmIzM5O3MgZm9sbG93ZWQgYnkgYSBjb3JyZXNwb25kaW5nIGBwdXRfcGlkKClgLiBUaGlzIGlzIGdyZWF0IGJlY2F1c2UgaXQgZW5zdXJlcyB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGRlY3JlbWVudGVkIG9uY2Ugd2UmIzM5O3JlIGRvbmUgd2l0aCB0aGUgUElELCB3aGljaCBpcyBjcnVjaWFsIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LiAgSSYjMzk7bSBnbGFkIHRvIHNlZSB0aGF0IGBwdXRfcGlkKClgIGlzIHByZXNlbnQgdG8gbWF0Y2ggdGhlIGluY3JlbWVudCBieSBgZ2V0X3BpZCgpYC4KCk92ZXJhbGwsIHRoaXMgaXMgYSB2ZXJ5IHJlYXNvbmFibGUgY2hhbmdlLiBJdCYjMzk7cyBhIHNtYWxsIGJ1dCBpbXBvcnRhbnQgZml4IHRvIHBvdGVudGlhbGx5IHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgUElEIGxvb2t1cCBkdXJpbmcgcHJvY2VzcyBleGl0LiBJdCYjMzk7cyB0aGUgc29ydCBvZiBjYXJlZnVsIHJlc291cmNlIG1hbmFnZW1lbnQgdGhhdCB3ZSBleHBlY3QgdG8gc2VlLiBJIGNhbuKAmXQgaW1tZWRpYXRlbHkgc2VlIGFueSBvYnZpb3VzIGlzc3VlcywgYW5kIEkmIzM5O2QgYmUgd2lsbGluZyB0byBnaXZlIHRoaXMgYSBxdWljayBzcG90IGNoZWNrIGFuZCBydW4gYSBmZXcgdGVzdHMgb24gbXkgZW5kIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBhcmUgaW50cm9kdWNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZXhpdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCBwb3N0O1xuIDI1MTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXI7XG4gMjUyOlx0XHRzdHJ1Y3QgcGlkICp0aHJlYWRfcGlkO1xuIDI1MzpcdFx0aW50IHphcF9sZWFkZXI7XG4gMjU0Olx0cmVwZWF0OlxuIDI1NTpcdFx0bWVtc2V0KFx1MDAyNnBvc3QsIDAsIHNpemVvZihwb3N0KSk7XG4gMjU2Olx0XG4gMjU3Olx0XHQvKiBkb24mIzM5O3QgbmVlZCB0byBnZXQgdGhlIFJDVSByZWFkbG9jayBoZXJlIC0gdGhlIHByb2Nlc3MgaXMgZGVhZCBhbmRcbiAyNTg6XHRcdCAqIGNhbiYjMzk7dCBiZSBtb2RpZnlpbmcgaXRzIG93biBjcmVkZW50aWFscy4gKi9cbiAyNTk6XHRcdGRlY19ybGltaXRfdWNvdW50cyh0YXNrX3Vjb3VudHMocCksIFVDT1VOVF9STElNSVRfTlBST0MsIDEpO1xuIDI2MDpcdFxuIDI2MTpcdFx0cGlkZnNfZXhpdChwKTtcbiAyNjI6XHRcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XG4gMjYzOlx0XG4gMjY0Olx0XHQvKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4gMjY1Olx0XHR0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7XG4gMjY2Olx0XG4gMjY3Olx0XHR3cml0ZV9sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiAyNjg6XHRcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XG4gMjY5Olx0XHRfX2V4aXRfc2lnbmFsKFx1MDAyNnBvc3QsIHApO1xuIDI3MDpcdFxuIDI3MTpcdFx0LypcbiAyNzI6XHRcdCAqIElmIHdlIGFyZSB0aGUgbGFzdCBub24tbGVhZGVyIG1lbWJlciBvZiB0aGUgdGhyZWFkXG4gMjczOlx0XHQgKiBncm91cCwgYW5kIHRoZSBsZWFkZXIgaXMgem9tYmllLCB0aGVuIG5vdGlmeSB0aGVcbiAyNzQ6XHRcdCAqIGdyb3VwIGxlYWRlciYjMzk7cyBwYXJlbnQgcHJvY2Vzcy4gKGlmIGl0IHdhbnRzIG5vdGlmaWNhdGlvbi4pXG4gMjc1Olx0XHQgKi9cbiAyNzY6XHRcdHphcF9sZWFkZXIgPSAwO1xuIDI3NzpcdFx0bGVhZGVyID0gcC1cdTAwM2Vncm91cF9sZWFkZXI7XG4gMjc4Olx0XHRpZiAobGVhZGVyICE9IHAgXHUwMDI2XHUwMDI2IHRocmVhZF9ncm91cF9lbXB0eShsZWFkZXIpXG4gMjc5Olx0XHRcdFx0XHUwMDI2XHUwMDI2IGxlYWRlci1cdTAwM2VleGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7XG4gMjgwOlx0XHRcdC8qIGZvciBwaWRmc19leGl0KCkgYW5kIGRvX25vdGlmeV9wYXJlbnQoKSAqL1xuIDI4MTpcdFx0XHRpZiAobGVhZGVyLVx1MDAzZXNpZ25hbC1cdTAwM2VmbGFncyBcdTAwMjYgU0lHTkFMX0dST1VQX0VYSVQpXG4gMjgyOlx0XHRcdFx0bGVhZGVyLVx1MDAzZWV4aXRfY29kZSA9IGxlYWRlci1cdTAwM2VzaWduYWwtXHUwMDNlZ3JvdXBfZXhpdF9jb2RlO1xuIDI4MzpcdFx0XHQvKlxuIDI4NDpcdFx0XHQgKiBJZiB3ZSB3ZXJlIHRoZSBsYXN0IGNoaWxkIHRocmVhZCBhbmQgdGhlIGxlYWRlciBoYXNcbiAyODU6XHRcdFx0ICogZXhpdGVkIGFscmVhZHksIGFuZCB0aGUgbGVhZGVyJiMzOTtzIHBhcmVudCBpZ25vcmVzIFNJR0NITEQsXG4gMjg2Olx0XHRcdCAqIHRoZW4gd2UgYXJlIHRoZSBvbmUgd2hvIHNob3VsZCByZWxlYXNlIHRoZSBsZWFkZXIuXG4gMjg3Olx0XHRcdCAqL1xuIDI4ODpcdFx0XHR6YXBfbGVhZGVyID0gZG9fbm90aWZ5X3BhcmVudChsZWFkZXIsIGxlYWRlci1cdTAwM2VleGl0X3NpZ25hbCk7XG4gMjg5Olx0XHRcdGlmICh6YXBfbGVhZGVyKVxuIDI5MDpcdFx0XHRcdGxlYWRlci1cdTAwM2VleGl0X3N0YXRlID0gRVhJVF9ERUFEO1xuIDI5MTpcdFx0fVxuIDI5MjpcdFxuIDI5MzpcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiAyOTQ6XHRcdHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpO1xuIDI5NTpcdFx0cHV0X3BpZCh0aHJlYWRfcGlkKTtcbiAyOTY6XHRcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xuIDI5NzpcdFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFx1MDAyNnAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcbiAyOTg6XHRcdFx0XHQgICAgICBzaXplb2YocC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XG4gMjk5Olx0XHRmcmVlX3BpZHMocG9zdC5waWRzKTtcbiAzMDA6XHRcdHJlbGVhc2VfdGhyZWFkKHApO1xuIDMwMTpcdFx0LypcbiAzMDI6XHRcdCAqIFRoaXMgdGFzayB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhlIHByb2Nlc3MvdGhyZWFkL3BpZCBsaXN0c1xuIDMwMzpcdFx0ICogYW5kIGxvY2tfdGFza19zaWdoYW5kKHApIGNhbiYjMzk7dCBzdWNjZWVkLiBOb2JvZHkgZWxzZSBjYW4gdG91Y2hcbiAzMDQ6XHRcdCAqIC1cdTAwM2VwZW5kaW5nIG9yLCBpZiBncm91cCBkZWFkLCBzaWduYWwtXHUwMDNlc2hhcmVkX3BlbmRpbmcuIFdlIGNhbiBjYWxsXG4gMzA1Olx0XHQgKiBmbHVzaF9zaWdxdWV1ZSgpIGxvY2tsZXNzLlxuIDMwNjpcdFx0ICovXG4gMzA3Olx0XHRmbHVzaF9zaWdxdWV1ZShcdTAwMjZwLVx1MDAzZXBlbmRpbmcpO1xuIDMwODpcdFx0aWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpXG4gMzA5Olx0XHRcdGZsdXNoX3NpZ3F1ZXVlKFx1MDAyNnAtXHUwMDNlc2lnbmFsLVx1MDAzZXNoYXJlZF9wZW5kaW5nKTtcbiAzMTA6XHRcbiAzMTE6XHRcdHB1dF90YXNrX3N0cnVjdF9yY3VfdXNlcihwKTtcbiAzMTI6XHRcbiAzMTM6XHRcdHAgPSBsZWFkZXI7XG4gMzE0Olx0XHRpZiAodW5saWtlbHkoemFwX2xlYWRlcikpXG4gMzE1Olx0XHRcdGdvdG8gcmVwZWF0O1xuIDMxNjpcdH1cbiAzMTc6XHRcbiAzMTg6XHRpbnQgcmN1d2FpdF93YWtlX3VwKHN0cnVjdCByY3V3YWl0ICp3KVxuIDMxOTpcdHtcbiAzMjA6XHRcdGludCByZXQgPSAwO1xuIDMyMTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuIDMyMjpcdFxuIDMyMzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDMyNDpcdFxuIDMyNTpcdFx0LypcbiAzMjY6XHRcdCAqIE9yZGVyIGNvbmRpdGlvbiB2cyBAdGFzaywgc3VjaCB0aGF0IGV2ZXJ5dGhpbmcgcHJpb3IgdG8gdGhlIGxvYWRcbiAzMjc6XHRcdCAqIG9mIEB0YXNrIGlzIHZpc2libGUuIFRoaXMgaXMgdGhlIGNvbmRpdGlvbiBhcyB0byB3aHkgdGhlIHVzZXIgY2FsbGVkXG4gMzI4Olx0XHQgKiByY3V3YWl0X3dha2UoKSBpbiB0aGUgZmlyc3QgcGxhY2UuIFBhaXJzIHdpdGggc2V0X2N1cnJlbnRfc3RhdGUoKVxuIDMyOTpcdFx0ICogYmFycmllciAoQSkgaW4gcmN1d2FpdF93YWl0X2V2ZW50KCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyOTAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGEgY29kZSBzbmlwcGV0IHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBgdGhyZWFkX3BpZGAgYW5kIFBJRCBtYW5hZ2VtZW50LiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogZ2V0IHRoZSBQSUQsIGZsdXNoIGl0LCBhbmQgdGhlbiBmcmVlIHNvbWUgUElEIHN0cnVjdHVyZXMuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBgZ2V0X3BpZCgpYCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGFuZCBgcHV0X3BpZCgpYCBhZnRlciBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB3aHkgdGhlIGNoYW5nZT8gQWgsIHJpZ2h0LCBpdCYjMzk7cyBsaWtlbHkgYSBsaWZldGltZSBpc3N1ZS4gVGhlIGNvbW1lbnQgaGl0cyB0aGUgbmFpbCBvbiB0aGUgaGVhZCDigJMgYHRocmVhZF9waWRgIG1pZ2h0IGhhdmUgYmVlbiBmcmVlZCBvciBoYXZlIGl0cyByZWZlcmVuY2UgY291bnQgZHJvcCB0byB6ZXJvIGJlZm9yZSBgcHJvY19mbHVzaF9waWQoKWAgaXMgY2FsbGVkLCBlc3BlY2lhbGx5IGR1cmluZyBgX19leGl0X3NpZ25hbCgpYCBvciBgX191bmhhc2hfcHJvY2Vzc2AgaWYgdGhlIFBJRCB3YXNuJiMzOTt0IHByb3Blcmx5IHBpbm5lZC4gVGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uCgpOb3csIGxldCYjMzk7cyBkbyBhIHF1aWNrIG1lbnRhbCBzd2VlcCBmb3Igb3RoZXIgcG90ZW50aWFsIGlzc3Vlcy4gSXMgdGhlcmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZD8gQW55IGNvcGllcyB0byB1c2VyLXNwYWNlPyBVbmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHM/IE9yIGFueXRoaW5nIHRoYXQgS01TQU4gbWlnaHQgZmxhZz8gTm8sIG5vdCB0aGF0IEkgY2FuIHNlZS4gYGdldF9waWQodGFza19waWQocCkpYCBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGBzdHJ1Y3QgcGlkYCwgYHB1dF9waWQodGhyZWFkX3BpZClgIGRlY3JlbWVudHMgaXQsIGFuZCBgcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZClgIGFjY2Vzc2VzIHRoZSBQSUQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgYXJlIHBvaW50ZXJzLCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IHN0cmFpZ2h0Zm9yd2FyZC4gTm8gc3RhY2sgYnVmZmVycywgaGVhcCBhbGxvY2F0aW9ucywgaW5mb3JtYXRpb24gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBjb3BpZXMuIEFueSByZWZlcmVuY2UgY291bnRpbmcgZXJyb3JzIOKAkyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBudWxsIGRlcmVmZXJlbmNlcyDigJMgYXJlIHRoZSBzdGFuZGFyZCBtZW1vcnkgYnVncywgYW5kIHNob3VsZCBiZSBwaWNrZWQgdXAgYnkgS0FTQU4gb3IgcmVmZXJlbmNlIGNvdW50aW5nIGNoZWNrZXJzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBnZXRfcGlkYCBhbmQgYHB1dF9waWRgIHRvIGNvbmZpcm0gdGhleSYjMzk7cmUgZG9pbmcgd2hhdCB0aGV5JiMzOTtyZSBzdXBwb3NlZCB0by4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRob3NlIHByaW1pdGl2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgc3RydWN0IHBpZCBcXCpnZXRfcGlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGlkLmg9ODU9dm9pZCBkb19ub3RpZnlfcGlkZmQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTtcbmluY2x1ZGUvbGludXgvcGlkLmgtODYtXG5pbmNsdWRlL2xpbnV4L3BpZC5oOjg3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBpZCAqZ2V0X3BpZChzdHJ1Y3QgcGlkICpwaWQpXG5pbmNsdWRlL2xpbnV4L3BpZC5oLTg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE4NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gTGludXggUElEIEludGVybmFscyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFBJRHMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNvIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYGluY2x1ZGUvbGludXgvcGlkLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSA4Ny4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdGhhdCBkZWZpbmUgaG93IFBJRHMgYXJlIGFsbG9jYXRlZCwgdHJhY2tlZCwgYW5kIHBvdGVudGlhbGx5IHJlY3ljbGVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgdGhlIGBwaWRfbmFtZXNwYWNlYCBzdHJ1Y3R1cmUsIHBvc3NpYmx5IHNvbWUgZ2xvYmFsIGhhc2ggdGFibGVzIG9yIGFycmF5cywgYW5kIGhvcGVmdWxseSBzb21lIGlubGluZSBmdW5jdGlvbnMgZm9yIHBpZCBsb29rdXBzIGFuZCBhbGxvY2F0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBQSUQgc3BhY2VzIGFzIHdlbGwuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZWxhdGVkIHRvIHRoZSBjb21wbGV4aXRpZXMgb2YgUElEIG5hbWVzcGFjZXMgYW5kIHByb2Nlc3MgaWRlbnRpZmljYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUga2VybmVsIGRldnMgY2FtZSB1cCB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGlkLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XG4gIDgxOlx0c3RydWN0IHBpZCAqcGlkZmRfcGlkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKTtcbiAgODI6XHRzdHJ1Y3QgcGlkICpwaWRmZF9nZXRfcGlkKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50ICpmbGFncyk7XG4gIDgzOlx0c3RydWN0IHRhc2tfc3RydWN0ICpwaWRmZF9nZXRfdGFzayhpbnQgcGlkZmQsIHVuc2lnbmVkIGludCAqZmxhZ3MpO1xuICA4NDpcdGludCBwaWRmZF9wcmVwYXJlKHN0cnVjdCBwaWQgKnBpZCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgZmlsZSAqKnJldF9maWxlKTtcbiAgODU6XHR2b2lkIGRvX25vdGlmeV9waWRmZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xuICA4NjpcdFxuICA4NzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHBpZCAqZ2V0X3BpZChzdHJ1Y3QgcGlkICpwaWQpXG4gIDg4Olx0e1xuICA4OTpcdFx0aWYgKHBpZClcbiAgOTA6XHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNnBpZC1cdTAwM2Vjb3VudCk7XG4gIDkxOlx0XHRyZXR1cm4gcGlkO1xuICA5MjpcdH1cbiAgOTM6XHRcbiAgOTQ6XHRleHRlcm4gdm9pZCBwdXRfcGlkKHN0cnVjdCBwaWQgKnBpZCk7XG4gIDk1Olx0ZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlkX3Rhc2soc3RydWN0IHBpZCAqcGlkLCBlbnVtIHBpZF90eXBlKTtcbiAgOTY6XHRzdGF0aWMgaW5saW5lIGJvb2wgcGlkX2hhc190YXNrKHN0cnVjdCBwaWQgKnBpZCwgZW51bSBwaWRfdHlwZSB0eXBlKVxuICA5NzpcdHtcbiAgOTg6XHRcdHJldHVybiAhaGxpc3RfZW1wdHkoXHUwMDI2cGlkLVx1MDAzZXRhc2tzW3R5cGVdKTtcbiAgOTk6XHR9XG4gMTAwOlx0ZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3BpZF90YXNrKHN0cnVjdCBwaWQgKnBpZCwgZW51bSBwaWRfdHlwZSk7XG4gMTAxOlx0XG4gMTAyOlx0ZXh0ZXJuIHN0cnVjdCBwaWQgKmdldF90YXNrX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVudW0gcGlkX3R5cGUgdHlwZSk7XG4gMTAzOlx0XG4gMTA0Olx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyOQoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIGNsYXNzaWMgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlLCBhICYjMzQ7VXNlLUFmdGVyLUZyZWUmIzM0OyBzaXR1YXRpb24uIFRoZSBwcm9ibGVtIGlzIGNsZWFyOiB0aGUgYHRocmVhZF9waWRgIHN0cnVjdHVyZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBmcmVlZCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGZpbmlzaGVzIHdpdGggaXQuIFRoZSBzb2x1dGlvbiBpcyBlbGVnYW50LiBXZSBhcmUgdXNpbmcgYGdldF9waWQoKWAgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGB0aHJlYWRfcGlkYCB3aXRoaW4gYHJlbGVhc2VfdGFzaygpYCBiZWZvcmUgYF9fZXhpdF9zaWduYWwoKWAgYW5kIHRoZW4gZGVjcmVtZW50aW5nIGl0IHdpdGggYHB1dF9waWQoKWAgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKClgLiBUaGlzIGVuc3VyZXMgdGhlIG9iamVjdCYjMzk7cyBsaWZldGltZSBtYXRjaGVzIGl0cyB1c2FnZS4KClRoaXMgaXMgZnVuZGFtZW50YWxseSBhYm91dCBjb3JyZWN0IG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LiBXZSYjMzk7cmUgdXNpbmcgc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcgdG8gZ3VhcmFudGVlIHRoYXQuIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBwZXJmZWN0bHkgc3VpdGVkIHRvIGRldGVjdCB0aGlzIGtpbmQgb2YgYnVnLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhpcyAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgS01TQU4tcmVsZXZhbnQgaXNzdWVzLiBXZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aDoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgYmUgdW5pbml0aWFsaXplZCAodGhhdCYjMzk7cyBhIGJpZyBLTVNBTiByZWQgZmxhZykuCjIuICBBbnkgcmVhZHMgb3IgYnJhbmNoZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGFub3RoZXIgS01TQU4gY29uY2Vybi4KMy4gIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zICh0aGF04oCZcyBhIGRpZmZlcmVudCBwcm9ibGVtIGFsdG9nZXRoZXIpLgo0LiAgVW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzZXMgd2hpY2ggS01TQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaC4KClNvLCBhZnRlciByZXZpZXdpbmcgZXZlcnl0aGluZywgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gVGhpcyBwYXRjaCBpcyBhIHNvbGlkIGZpeCBmb3IgYSBzdGFuZGFyZCByZWZjb3VudCBpc3N1ZSwgYW5kIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBJIGNhbiBnbyBhaGVhZCBhbmQgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIC8gcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGluIHJlbGVhc2VfdGFzaygpIGJ5IHRha2luZyBhIHJlZmVyZW5jZSB0byB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGJlZm9yZSBfX2V4aXRfc2lnbmFsKCkgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBwaWQgc3RydWN0dXJlJiMzOTtzIHJlZmVyZW5jZSBjb3VudCBkcm9wcGVkIHRvIHplcm8gcHJlbWF0dXJlbHkuIFN1Y2ggbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIGZ1bGx5IGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGNvbXBsZXggc3RydWN0IGluaXRpYWxpemF0aW9ucywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgLyByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gcmVsZWFzZV90YXNrKCkgYnkgdGFraW5nIGEgcmVmZXJlbmNlIHRvIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYmVmb3JlIF9fZXhpdF9zaWduYWwoKSBhbmQgcmVsZWFzaW5nIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIHBpZCBzdHJ1Y3R1cmUmIzM5O3MgcmVmZXJlbmNlIGNvdW50IGRyb3BwZWQgdG8gemVybyBwcmVtYXR1cmVseS4gU3VjaCBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgZnVsbHkgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSwgY29tcGxleCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MDo0My4yMzAwMjg5MjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk2MzE1MjE3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlbGVhc2VfdGFza1wiLFxuICAgIFwicHJvY19mbHVzaF9waWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgLyByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gcmVsZWFzZV90YXNrKCkgYnkgdGFraW5nIGEgcmVmZXJlbmNlIHRvIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYmVmb3JlIF9fZXhpdF9zaWduYWwoKSBhbmQgcmVsZWFzaW5nIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIHBpZCBzdHJ1Y3R1cmUncyByZWZlcmVuY2UgY291bnQgZHJvcHBlZCB0byB6ZXJvIHByZW1hdHVyZWx5LiBTdWNoIGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBjb21wbGV4IHN0cnVjdCBpbml0aWFsaXphdGlvbnMsIGtlcm5lbC10by11c2VyIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSB0YXNrIHJlbGVhc2UgbG9naWMgaW4gcmVsZWFzZV90YXNrKCkgYnkgZXhwbGljaXRseSBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIGFuZCByZWxlYXNpbmcgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0YXNrIHRlYXJkb3duIGFuZCBwcm9jIGRjYWNoZSBmbHVzaGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTA6NDMuMjMwMDM2OTA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkwNDcxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZjRhNTA0YmFmMjZkNzRmNzg5Yjc2MjVhMTMzOTczNGVkODRjOTFkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jXFxuaW5kZXggOTc2ODZhZjg5NTAxMy4uNDYxZTI4MzRmY2I0NSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZXhpdC5jXFxuKysrIGIva2VybmVsL2V4aXQuY1xcbkBAIC0yNjEsOCArMjYxLDggQEAgdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiBcXHRwaWRmc19leGl0KHApO1xcbiBcXHRjZ3JvdXBfdGFza19yZWxlYXNlKHApO1xcbiBcXG4tXFx0LyogUmV0cmlldmUgQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXFxuLVxcdHRocmVhZF9waWQgPSB0YXNrX3BpZChwKTtcXG4rXFx0LyogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgbWF5IHNldCBpdCB0byBOVUxMLiAqL1xcbitcXHR0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7XFxuIFxcbiBcXHR3cml0ZV9sb2NrX2lycShcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuIFxcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XFxuQEAgLTI5MSw4ICsyOTEsOCBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIFxcdH1cXG4gXFxuIFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNnRhc2tsaXN0X2xvY2spO1xcbi1cXHQvKiBAdGhyZWFkX3BpZCBjYW4ndCBnbyBhd2F5IHVudGlsIGZyZWVfcGlkcygpIGJlbG93ICovXFxuIFxcdHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpO1xcbitcXHRwdXRfcGlkKHRocmVhZF9waWQpO1xcbiBcXHRleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTtcXG4gXFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFxcdTAwMjZwLVxcdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lLFxcbiBcXHRcXHRcXHQgICAgICBzaXplb2YocC1cXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MDo0My42Njk3NDA3NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU1MzY2NTM4NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWxlYXNlX3Rhc2tcIixcbiAgICBcInByb2NfZmx1c2hfcGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSB0YXNrIHJlbGVhc2UgbG9naWMgaW4gcmVsZWFzZV90YXNrKCkgYnkgZXhwbGljaXRseSBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIGFuZCByZWxlYXNpbmcgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0YXNrIHRlYXJkb3duIGFuZCBwcm9jIGRjYWNoZSBmbHVzaGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGY0YTUwNGJhZjI2ZDc0Zjc4OWI3NjI1YTEzMzk3MzRlZDg0YzkxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmNcbmluZGV4IDk3Njg2YWY4OTUwMTMuLjQ2MWUyODM0ZmNiNDUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZXhpdC5jXG4rKysgYi9rZXJuZWwvZXhpdC5jXG5AQCAtMjYxLDggKzI2MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHBpZGZzX2V4aXQocCk7XG4gXHRjZ3JvdXBfdGFza19yZWxlYXNlKHApO1xuIFxuLVx0LyogUmV0cmlldmUgQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4tXHR0aHJlYWRfcGlkID0gdGFza19waWQocCk7XG4rXHQvKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4rXHR0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7XG4gXG4gXHR3cml0ZV9sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiBcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XG5AQCAtMjkxLDggKzI5MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdH1cbiBcbiBcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4tXHQvKiBAdGhyZWFkX3BpZCBjYW4ndCBnbyBhd2F5IHVudGlsIGZyZWVfcGlkcygpIGJlbG93ICovXG4gXHRwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKTtcbitcdHB1dF9waWQodGhyZWFkX3BpZCk7XG4gXHRleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTtcbiBcdGFkZF9kZXZpY2VfcmFuZG9tbmVzcyhcdTAwMjZwLVx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUsXG4gXHRcdFx0ICAgICAgc2l6ZW9mKHAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTA6NDMuNjY5NzQxOTY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ0MTA5OTE5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2g6IFJlbGVhc2UgVGFzayoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIG1vZGlmeWluZyBga2VybmVsL2V4aXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHJlbGVhc2VfdGFzaygpYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGNyaXRpY2FsIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSB0YXNrIGV4aXQgcGF0aC4gIFRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBhcm91bmQgdGhlIGhhbmRsaW5nIG9mIGBAdGhyZWFkX3BpZGAgYmVmb3JlIHRoZSB0YXNrIGlzIGZ1bGx5IHVuaGFzaGVkIGFuZCBkZWFsbG9jYXRlZC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCByZXRyaWV2ZXMgYEB0aHJlYWRfcGlkYCB3aXRoIGB0YXNrX3BpZChwKWAgYmVmb3JlIGRlYWxsb2NhdGlvbiBpbiB0aGUgb2xkIHZlcnNpb24gb2YgdGhlIGNvZGUuIFRoaXMgaXMgbGlrZWx5IHRvIGVuc3VyZSB0aGF0IHRoaXMgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIElEIGlzIHNhZmVseSBzdG9yZWQgYmVmb3JlIHRoZSB1bmRlcmx5aW5nIGRhdGEgaXMgcG90ZW50aWFsbHkgbW9kaWZpZWQgYnkgc3Vic2VxdWVudCBvcGVyYXRpb25zLlxuXG5Ob3csIHdpdGggdGhpcyBwYXRjaCwgdGhlcmUgYXJlIHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbiBjYWxscyB0aGF0IGFyZSBvZiBub3RlLiBUaGUgdXBkYXRlZCBjb2RlIG5vdyBcInBpbnNcIiBgQHRocmVhZF9waWRgIHVzaW5nIGBnZXRfcGlkKHRhc2tfcGlkKHApKWAgYmVmb3JlIHRoZSB1bmhhc2hpbmcgb2NjdXJzLiBUaGlzIGlzIGZvbGxvd2VkIGxhdGVyIGJ5IGBwdXRfcGlkKHRocmVhZF9waWQpYC4gVGhlIGNvbW1lbnQgaGlnaGxpZ2h0cyB0aGF0IGBAdGhyZWFkX3BpZGAgaXMgcHJvdGVjdGVkIHVudGlsIGBmcmVlX3BpZHMoKWAgaGFwcGVucyBhZnRlciB0aGUgbG9jayBpcyByZWxlYXNlZC4gQ2xlYXJseSwgdGhpcyBpcyB0byBlbnN1cmUgdGhhdCBhIHJlZmVyZW5jZSB0byB0aGUgUElEIGlzIHJldGFpbmVkLCBwcmV2ZW50aW5nIGl0IGZyb20gYmVjb21pbmcgcHJlbWF0dXJlbHkgaW52YWxpZC4gIEkgc3VzcGVjdCB0aGlzIFwicGlubmluZ1wiIG1lY2hhbmlzbSBpcyB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIFBJRCBjb3VsZCBiZSByZS11c2VkIGJlZm9yZSB0aGUgbmVjZXNzYXJ5IG9wZXJhdGlvbnMgdXNpbmcgaXQgYXJlIGNvbXBsZXRlLlxuXG5UaGUgc3Vic2VxdWVudCBgcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZClgIGNhbGwsIGp1c3QgYmVmb3JlIHJlbGVhc2luZyB0aGUgUElELCBpcyBhbm90aGVyIGNsdWUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgcHJvY2VzcyBJRCBpcyB1c2VkIGluIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0gYW5kIGxpa2VseSBuZWVkcyB0byBiZSBzeW5jaHJvbml6ZWQgb3IgZmx1c2hlZCBiZWZvcmUgaXQgaXMgZGVhbGxvY2F0ZWQuIFRoZSBhZGRpdGlvbiBvZiBgcHV0X3BpZCgpYCBlbnN1cmVzIHRoYXQgdGhlIHJlZmVyZW5jZSBpcyByZWxlYXNlZCBhZnRlciBmbHVzaGluZywgY29tcGxldGluZyB0aGUgbGlmZWN5Y2xlLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiBgcHV0X3BpZCgpYCBhbmQgdW5kZXJzdGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGludm9sdmVkLCBidXQgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIHJvYnVzdCBQSUQgbWFuYWdlbWVudCBpbiBwbGFjZSBoZXJlLiBNeSBndWVzcyBpcyB0aGlzIGlzIGEgZ29vZCBjaGFuZ2UgYW5kIHRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhIHN1YnRsZSBidWcgdGhhdCB0aGlzIGZpeCBhZGRyZXNzZXMuIEkgd291bGQgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIG1vcmUgZGV0YWlsIHRvIGJlIHN1cmUsIGJ1dCBpdCBsb29rcyBsaWtlIGEgd2VsbC10YXJnZXRlZCBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MDo1OC4wODA3MzY1MjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2V4aXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0e1xcbiAyNDY6XFx0fVxcbiAyNDc6XFx0XFxuIDI0ODpcXHR2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIDI0OTpcXHR7XFxuIDI1MDpcXHRcXHRzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgcG9zdDtcXG4gMjUxOlxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyO1xcbiAyNTI6XFx0XFx0c3RydWN0IHBpZCAqdGhyZWFkX3BpZDtcXG4gMjUzOlxcdFxcdGludCB6YXBfbGVhZGVyO1xcbiAyNTQ6XFx0cmVwZWF0OlxcbiAyNTU6XFx0XFx0bWVtc2V0KFxcdTAwMjZwb3N0LCAwLCBzaXplb2YocG9zdCkpO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHQvKiBkb24ndCBuZWVkIHRvIGdldCB0aGUgUkNVIHJlYWRsb2NrIGhlcmUgLSB0aGUgcHJvY2VzcyBpcyBkZWFkIGFuZFxcbiAyNTg6XFx0XFx0ICogY2FuJ3QgYmUgbW9kaWZ5aW5nIGl0cyBvd24gY3JlZGVudGlhbHMuICovXFxuIDI1OTpcXHRcXHRkZWNfcmxpbWl0X3Vjb3VudHModGFza191Y291bnRzKHApLCBVQ09VTlRfUkxJTUlUX05QUk9DLCAxKTtcXG4gMjYwOlxcdFxcbiAyNjE6XFx0XFx0cGlkZnNfZXhpdChwKTtcXG4gMjYyOlxcdFxcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdC8qIFBpbiBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi9cXG4gMjY1OlxcdFxcdHRocmVhZF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKHApKTtcXG4gMjY2OlxcdFxcbiAyNjc6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNnRhc2tsaXN0X2xvY2spO1xcbiAyNjg6XFx0XFx0cHRyYWNlX3JlbGVhc2VfdGFzayhwKTtcXG4gMjY5OlxcdFxcdF9fZXhpdF9zaWduYWwoXFx1MDAyNnBvc3QsIHApO1xcbiAyNzA6XFx0XFxuIDI3MTpcXHRcXHQvKlxcbiAyNzI6XFx0XFx0ICogSWYgd2UgYXJlIHRoZSBsYXN0IG5vbi1sZWFkZXIgbWVtYmVyIG9mIHRoZSB0aHJlYWRcXG4gMjczOlxcdFxcdCAqIGdyb3VwLCBhbmQgdGhlIGxlYWRlciBpcyB6b21iaWUsIHRoZW4gbm90aWZ5IHRoZVxcbiAyNzQ6XFx0XFx0ICogZ3JvdXAgbGVhZGVyJ3MgcGFyZW50IHByb2Nlc3MuIChpZiBpdCB3YW50cyBub3RpZmljYXRpb24uKVxcbiAyNzU6XFx0XFx0ICovXFxuIDI3NjpcXHRcXHR6YXBfbGVhZGVyID0gMDtcXG4gMjc3OlxcdFxcdGxlYWRlciA9IHAtXFx1MDAzZWdyb3VwX2xlYWRlcjtcXG4gMjc4OlxcdFxcdGlmIChsZWFkZXIgIT0gcCBcXHUwMDI2XFx1MDAyNiB0aHJlYWRfZ3JvdXBfZW1wdHkobGVhZGVyKVxcbiAyNzk6XFx0XFx0XFx0XFx0XFx1MDAyNlxcdTAwMjYgbGVhZGVyLVxcdTAwM2VleGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7XFxuIDI4MDpcXHRcXHRcXHQvKiBmb3IgcGlkZnNfZXhpdCgpIGFuZCBkb19ub3RpZnlfcGFyZW50KCkgKi9cXG4gMjgxOlxcdFxcdFxcdGlmIChsZWFkZXItXFx1MDAzZXNpZ25hbC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSUdOQUxfR1JPVVBfRVhJVClcXG4gMjgyOlxcdFxcdFxcdFxcdGxlYWRlci1cXHUwMDNlZXhpdF9jb2RlID0gbGVhZGVyLVxcdTAwM2VzaWduYWwtXFx1MDAzZWdyb3VwX2V4aXRfY29kZTtcXG4gMjgzOlxcdFxcdFxcdC8qXFxuIDI4NDpcXHRcXHRcXHQgKiBJZiB3ZSB3ZXJlIHRoZSBsYXN0IGNoaWxkIHRocmVhZCBhbmQgdGhlIGxlYWRlciBoYXNcXG4gMjg1OlxcdFxcdFxcdCAqIGV4aXRlZCBhbHJlYWR5LCBhbmQgdGhlIGxlYWRlcidzIHBhcmVudCBpZ25vcmVzIFNJR0NITEQsXFxuIDI4NjpcXHRcXHRcXHQgKiB0aGVuIHdlIGFyZSB0aGUgb25lIHdobyBzaG91bGQgcmVsZWFzZSB0aGUgbGVhZGVyLlxcbiAyODc6XFx0XFx0XFx0ICovXFxuIDI4ODpcXHRcXHRcXHR6YXBfbGVhZGVyID0gZG9fbm90aWZ5X3BhcmVudChsZWFkZXIsIGxlYWRlci1cXHUwMDNlZXhpdF9zaWduYWwpO1xcbiAyODk6XFx0XFx0XFx0aWYgKHphcF9sZWFkZXIpXFxuIDI5MDpcXHRcXHRcXHRcXHRsZWFkZXItXFx1MDAzZWV4aXRfc3RhdGUgPSBFWElUX0RFQUQ7XFxuIDI5MTpcXHRcXHR9XFxuIDI5MjpcXHRcXG4gMjkzOlxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNnRhc2tsaXN0X2xvY2spO1xcbiAyOTQ6XFx0XFx0cHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7XFxuIDI5NTpcXHRcXHRwdXRfcGlkKHRocmVhZF9waWQpO1xcbiAyOTY6XFx0XFx0ZXhpdF9jcmVkX25hbWVzcGFjZXMocCk7XFxuIDI5NzpcXHRcXHRhZGRfZGV2aWNlX3JhbmRvbW5lc3MoXFx1MDAyNnAtXFx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUsXFxuIDI5ODpcXHRcXHRcXHRcXHQgICAgICBzaXplb2YocC1cXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSkpO1xcbiAyOTk6XFx0XFx0ZnJlZV9waWRzKHBvc3QucGlkcyk7XFxuIDMwMDpcXHRcXHRyZWxlYXNlX3RocmVhZChwKTtcXG4gMzAxOlxcdFxcdC8qXFxuIDMwMjpcXHRcXHQgKiBUaGlzIHRhc2sgd2FzIGFscmVhZHkgcmVtb3ZlZCBmcm9tIHRoZSBwcm9jZXNzL3RocmVhZC9waWQgbGlzdHNcXG4gMzAzOlxcdFxcdCAqIGFuZCBsb2NrX3Rhc2tfc2lnaGFuZChwKSBjYW4ndCBzdWNjZWVkLiBOb2JvZHkgZWxzZSBjYW4gdG91Y2hcXG4gMzA0OlxcdFxcdCAqIC1cXHUwMDNlcGVuZGluZyBvciwgaWYgZ3JvdXAgZGVhZCwgc2lnbmFsLVxcdTAwM2VzaGFyZWRfcGVuZGluZy4gV2UgY2FuIGNhbGxcXG4gMzA1OlxcdFxcdCAqIGZsdXNoX3NpZ3F1ZXVlKCkgbG9ja2xlc3MuXFxuIDMwNjpcXHRcXHQgKi9cXG4gMzA3OlxcdFxcdGZsdXNoX3NpZ3F1ZXVlKFxcdTAwMjZwLVxcdTAwM2VwZW5kaW5nKTtcXG4gMzA4OlxcdFxcdGlmICh0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKVxcbiAzMDk6XFx0XFx0XFx0Zmx1c2hfc2lncXVldWUoXFx1MDAyNnAtXFx1MDAzZXNpZ25hbC1cXHUwMDNlc2hhcmVkX3BlbmRpbmcpO1xcbiAzMTA6XFx0XFxuIDMxMTpcXHRcXHRwdXRfdGFza19zdHJ1Y3RfcmN1X3VzZXIocCk7XFxuIDMxMjpcXHRcXG4gMzEzOlxcdFxcdHAgPSBsZWFkZXI7XFxuIDMxNDpcXHRcXHRpZiAodW5saWtlbHkoemFwX2xlYWRlcikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUwOjU4LjA4MDg1MjgyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2OTM1OTc0ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIGNoYW5nZSB0byBgcmVsZWFzZV90YXNrYCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCdzIGluIGNvcmUga2VybmVsIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgdGFzayBsaWZlY3ljbGUsIGFuZCBkZWFscyB3aXRoIFBJRCBtYW5hZ2VtZW50LiBJdCdzIHRyaWdnZXJlZCBkdXJpbmcgcHJvY2VzcyB0ZXJtaW5hdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBwcmV0dHkgZnVuZGFtZW50YWwuIFRoZSBwYXRjaCBpcyBmaXhpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBob3cgdGhlIGB0aHJlYWRfcGlkYCBpcyBoYW5kbGVkIGR1cmluZyB0YXNrIHJlbGVhc2UsIHNwZWNpZmljYWxseSBhcm91bmQgYHByb2NfZmx1c2hfcGlkYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgYXNzdW1lZCBgdGhyZWFkX3BpZGAgd291bGRuJ3QgZGlzYXBwZWFyLCBidXQgdGhpcyBjaGFuZ2UgYWRkcyBwcm9wZXIgcmVmZXJlbmNlIGNvdW50aW5nIChgZ2V0X3BpZCgpYCwgYHB1dF9waWQoKWApIHRvIGd1YXJhbnRlZSBpdHMgc2FmZXR5LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCdzIGNoZWNrIHRoZSBjcml0ZXJpYS4gSXQncyAqZGVmaW5pdGVseSogbm90IGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIGNvbnN0YW50IGNoYW5nZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCdzIG1vZGlmeWluZyAqcmVhY2hhYmxlLCBjb3JlIGtlcm5lbCBsb2dpYyouIFNwZWNpZmljYWxseSwgYGtlcm5lbC9leGl0LmNgIGRlYWxzIHdpdGggcHJvY2VzcyB0ZXJtaW5hdGlvbiwgYW5kIGByZWxlYXNlX3Rhc2tgIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgdGFzayBleGl0cy4gSXQncyBhIGtleSBwYXJ0IG9mIHRoZSBrZXJuZWwhXG5cbkkgbmVlZCB0byBkZWNpZGUgaWYgYHJlbGVhc2VfdGFza2AgaXMgYSBcImhvdCBwYXRoXCIgZnVuY3Rpb24uIElmIGl0IGlzLCBJIHNob3VsZCBhdm9pZCBsaXN0aW5nIGl0IGJlY2F1c2Ugb2Ygc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gSG1tLi4uIGByZWxlYXNlX3Rhc2tgIGlzIGNhbGxlZCAqZXZlcnkqIHRpbWUgYSB0YXNrIGV4aXRzIOKAkyB0aGF0IHNvdW5kcyBwcmV0dHkgaG90LiBCdXQgdGhlbiBhZ2FpbiwgaXMgaXQgaG90LXBhdGggKmdlbmVyaWMqIGxpa2UgYSBjb21tb24gc3lzdGVtIGNhbGwsIG9yIGlzIGl0IGEgc3BlY2lmaWMgZW50cnkgcG9pbnQ/IEl0IHNlZW1zIG1vcmUgc3BlY2lmaWMgdG8gdGFzayBleGl0LiBNYXliZSwgaW4gdGhpcyBjb250ZXh0LCBpdCdzICpub3QqIGEgXCJnZW5lcmljIGhvdCBwYXRoXCIgYXMgSSB0aGluayBhYm91dCB0aGlzLiBJdCBpcyBhIGtleSBlbnRyeSBwb2ludCBkdXJpbmcgYSBjZXJ0YWluIGFjdGlvbiwgYnV0IGl0IGlzbid0IGxpa2UgYSBmaWxlIHN5c3RlbSByZWFkIGNhbGwuXG5cbk9rYXksIGxldCdzIHRoaW5rIGFib3V0IGBGb2N1c1N5bWJvbHNgLiBTaG91bGQgSSBpbmNsdWRlIGByZWxlYXNlX3Rhc2tgPyBJdCBpcyAqdGhlKiBtb2RpZmllZCBmdW5jdGlvbi4gSXQgKnNlZW1zKiBsaWtlIEkgc2hvdWxkLiBJcyBgcHJvY19mbHVzaF9waWRgIGEgZnVuY3Rpb24gdG8gZm9jdXMgb24/IEkgc2hvdWxkIGxvb2sgZm9yIGNhbGxlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gbWFrZSBhIGJldHRlciBkZWNpc2lvbi4gSSB3aWxsIG5lZWQgdG8gY2hlY2sgdGhvc2UuIFRoaXMgYWJzb2x1dGVseSBzZWVtcyB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6MTUuMDE2ODMwMzMxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxODI0ODI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWxlYXNlX3Rhc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2V4aXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZXhpdC5jPTEyMz1sYXRlX2luaXRjYWxsKGtlcm5lbF9leGl0X3N5c2ZzX2luaXQpO1xcbi0tXFxua2VybmVsL2V4aXQuYy0xMjYtLypcXG5rZXJuZWwvZXhpdC5jOjEyNzogKiBGb3IgdGhpbmdzIHJlbGVhc2VfdGFzaygpIHdvdWxkIGxpa2UgdG8gZG8gKmFmdGVyKiB0YXNrbGlzdF9sb2NrIGlzIHJlbGVhc2VkLlxcbmtlcm5lbC9leGl0LmMtMTI4LSAqL1xcbmtlcm5lbC9leGl0LmM6MTI5OnN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCB7XFxua2VybmVsL2V4aXQuYy0xMzAtXFx0c3RydWN0IHBpZCAqcGlkc1tQSURUWVBFX01BWF07XFxuLS1cXG5rZXJuZWwvZXhpdC5jLTEzMi1cXG5rZXJuZWwvZXhpdC5jOjEzMzpzdGF0aWMgdm9pZCBfX3VuaGFzaF9wcm9jZXNzKHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCAqcG9zdCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbmtlcm5lbC9leGl0LmMtMTM0LVxcdFxcdFxcdCAgICAgYm9vbCBncm91cF9kZWFkKVxcbi0tXFxua2VybmVsL2V4aXQuYy0xNTctICovXFxua2VybmVsL2V4aXQuYzoxNTg6c3RhdGljIHZvaWQgX19leGl0X3NpZ25hbChzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgKnBvc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmtlcm5lbC9leGl0LmMtMTU5LXtcXG4tLVxcbmtlcm5lbC9leGl0LmM9MjQ0PXZvaWQgX193ZWFrIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqZGVhZF90YXNrKVxcbi0tXFxua2VybmVsL2V4aXQuYy0yNDctXFxua2VybmVsL2V4aXQuYzoyNDg6dm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbmtlcm5lbC9leGl0LmMtMjQ5LXtcXG5rZXJuZWwvZXhpdC5jOjI1MDpcXHRzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgcG9zdDtcXG5rZXJuZWwvZXhpdC5jLTI1MS1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxlYWRlcjtcXG4tLVxcbmtlcm5lbC9leGl0LmMtMjY3LVxcdHdyaXRlX2xvY2tfaXJxKFxcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcXG5rZXJuZWwvZXhpdC5jOjI2ODpcXHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xcbmtlcm5lbC9leGl0LmMtMjY5LVxcdF9fZXhpdF9zaWduYWwoXFx1MDAyNnBvc3QsIHApO1xcbi0tXFxua2VybmVsL2V4aXQuYz02MzA9c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZmluZF9jaGlsZF9yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTY1Mi1cXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZwLVxcdTAwM2VwdHJhY2VfZW50cnkpO1xcbmtlcm5lbC9leGl0LmM6NjUzOlxcdFxcdHJlbGVhc2VfdGFzayhwKTtcXG5rZXJuZWwvZXhpdC5jLTY1NC1cXHR9XFxuLS1cXG5rZXJuZWwvZXhpdC5jPTY2OT1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX25ld19yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTcwNC0vKlxcbmtlcm5lbC9leGl0LmM6NzA1OiogQW55IHRoYXQgbmVlZCB0byBiZSByZWxlYXNlX3Rhc2snZCBhcmUgcHV0IG9uIHRoZSBAZGVhZCBsaXN0Llxcbmtlcm5lbC9leGl0LmMtNzA2LSAqL1xcbi0tXFxua2VybmVsL2V4aXQuYz03NzA9c3RhdGljIHZvaWQgZXhpdF9ub3RpZnkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBncm91cF9kZWFkKVxcbi0tXFxua2VybmVsL2V4aXQuYy04MDgtXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cC1cXHUwMDNlcHRyYWNlX2VudHJ5KTtcXG5rZXJuZWwvZXhpdC5jOjgwOTpcXHRcXHRyZWxlYXNlX3Rhc2socCk7XFxua2VybmVsL2V4aXQuYy04MTAtXFx0fVxcbi0tXFxua2VybmVsL2V4aXQuYz0xMjA2PXN0YXRpYyBpbnQgd2FpdF90YXNrX3pvbWJpZShzdHJ1Y3Qgd2FpdF9vcHRzICp3bywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL2V4aXQuYy0xMzEyLVxcdGlmIChzdGF0ZSA9PSBFWElUX0RFQUQpXFxua2VybmVsL2V4aXQuYzoxMzEzOlxcdFxcdHJlbGVhc2VfdGFzayhwKTtcXG5rZXJuZWwvZXhpdC5jLTEzMTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjE1LjMzNTA4MzQ2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjEzMzYxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgZm9yIGByZWxlYXNlX3Rhc2tgJ3MgVmlzaWJpbGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgdGhpcyBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBkZXRlcm1pbmUgaWYgaXQncyBhY3R1YWxseSBtZWFudCB0byBiZSBhY2Nlc3NlZCBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgaW1wbGVtZW50YXRpb24uIElzIGl0IGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgZGVjbGFyZWQgaW4gYSBoZWFkZXIgZmlsZSBvciBtYXJrZWQgd2l0aCBhbiBhcHByb3ByaWF0ZSBsaW5rYWdlIHNwZWNpZmllcj8gT3IsIG1vcmUgYnJvYWRseSwgaXMgaXQgKnVzZWQqIGluIGFueSBoZWFkZXIgZmlsZXM/IFRoaXMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgaXQncyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBtZWFudCB0byBiZSB1c2VkIGJ5IG90aGVyIG1vZHVsZXMsIG9yIGlmIGl0J3MgbWVhbnQgdG8gYmUgYW4gaW50ZXJuYWwgdXRpbGl0eS4gVGhpcyBkZXRlcm1pbmF0aW9uIGluZmx1ZW5jZXMgaG93IEknbGwgdHJlYXQgaXQgaW4gYW55IHJlZmFjdG9yaW5nIG9yIGFuYWx5c2lzLiBVbmRlcnN0YW5kaW5nIGl0cyB2aXNpYmlsaXR5IGlzIGNydWNpYWwgYmVmb3JlIG1ha2luZyBhbnkgZnVydGhlciBkZWNpc2lvbnMgYWJvdXQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MToxOC4xOTY0MjE4MjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1MzQ3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVsZWFzZV90YXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oPTc5PWV4dGVybiB2b2lkIGZvcmtfaW5pdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaC04MC1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaDo4MTpleHRlcm4gdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICogcCk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtODItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjE4LjI0NTk1OTY1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MDQ0MzUwOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBwcm9jX2ZsdXNoX3BpZGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBJJ3ZlIGdvdCBhIHNwZWNpZmljIGlzc3VlIEknbSB0YWNrbGluZywgYW5kIEkgdGhpbmsgYHByb2NfZmx1c2hfcGlkYCBtaWdodCBiZSByZWxldmFudC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIGNoZWNrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGlucyBhbmQgb3V0cyBvZiB0aGlzIGZ1bmN0aW9uIOKAkyBzZWUgaG93IGl0J3MgdXNlZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgY29udGV4dCBvZiB0aGUgY29kZSwgbWF5YmUgSSBzaG91bGQgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGNsdWVzLiBUaGlzIGluaXRpYWwgc3RlcCBpcyBhYm91dCBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYmVoYXZpb3IuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBpbnZlc3RpZ2F0aW9uLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjIyLjY1MDM5ODA5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTUwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY19mbHVzaF9waWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9iYXNlLmM9MTk3Nj1zdGF0aWMgc3RydWN0IGlub2RlICpwcm9jX3BpZF9tYWtlX2Jhc2VfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTE5ODYtXFxuZnMvcHJvYy9iYXNlLmM6MTk4NzpcXHQvKiBMZXQgcHJvY19mbHVzaF9waWQgZmluZCB0aGlzIGRpcmVjdG9yeSBpbm9kZSAqL1xcbmZzL3Byb2MvYmFzZS5jLTE5ODgtXFx0ZWkgPSBQUk9DX0koaW5vZGUpO1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzQyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY190Z2lkX2Jhc2VfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTM0MzAtLyoqXFxuZnMvcHJvYy9iYXNlLmM6MzQzMTogKiBwcm9jX2ZsdXNoX3BpZCAtICBSZW1vdmUgZGNhY2hlIGVudHJpZXMgZm9yIEBwaWQgZnJvbSB0aGUgL3Byb2MgZGNhY2hlLlxcbmZzL3Byb2MvYmFzZS5jLTM0MzItICogQHBpZDogcGlkIHRoYXQgc2hvdWxkIGJlIGZsdXNoZWQuXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zNDQ4LVxcbmZzL3Byb2MvYmFzZS5jOjM0NDk6dm9pZCBwcm9jX2ZsdXNoX3BpZChzdHJ1Y3QgcGlkICpwaWQpXFxuZnMvcHJvYy9iYXNlLmMtMzQ1MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjIyLjY5NjcxNjMwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4Njc4MjQ0MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgS2VybmVsIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IGBDT05GSUdgIG9wdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGJlaGF2aW9yIG9mIGByZWxlYXNlX3Rhc2tgIG9yIHRoZSBga2VybmVsL2V4aXQuY2AgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBga2VybmVsL2V4aXQuY2AgaXMgZnVuZGFtZW50YWw7IGl0J3MgdW5jb25kaXRpb25hbGx5IGJha2VkIGludG8gdGhlIGtlcm5lbCBidWlsZCwgcmlnaHQ/IEJ1dCBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qLlxuXG5Ob3csIGBwcm9jX2ZsdXNoX3BpZGAgaXMgYSBkaWZmZXJlbnQgYW5pbWFsLiBJIHJlY2FsbCBpdCByZXNpZGluZyB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCwgYW5kIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXRzIGluY2x1c2lvbiBpcyBnYXRlZCBieSBgQ09ORklHX1BST0NfRlNgLiBIb3dldmVyLCByZWx5aW5nIG9uIG1lbW9yeSBhbG9uZSBpc24ndCBnb29kIGVub3VnaCwgYW5kIEkgZG9uJ3Qgd2FudCBhbnkgYXNzdW1wdGlvbnMsIHNvIGl0J3MgYmVzdCB0byB2ZXJpZnkgdGhpcyBkZWZpbml0aXZlbHkuIFRvIGRvIHRoYXQsIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBvZiB0cnV0aDogYGluY2x1ZGUvbGludXgvcHJvY19mcy5oYC4gVGhhdCBoZWFkZXIgZmlsZSBzaG91bGQgY2xhcmlmeSB3aGV0aGVyIGBwcm9jX2ZsdXNoX3BpZGAgaXMgYWx3YXlzIHByZXNlbnQgb3IgY29uZGl0aW9uYWxseSBjb21waWxlZC4gVGltZSB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk0NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjMxLjM3NDk2MzE2NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMzYzOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfZmx1c2hfcGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcHJvY19mcy5oPTg1PWV4dGVybiB2b2lkIHByb2Nfcm9vdF9pbml0KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvcHJvY19mcy5oOjg2OmV4dGVybiB2b2lkIHByb2NfZmx1c2hfcGlkKHN0cnVjdCBwaWQgKik7XFxuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgtODctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaD0xNzI9c3RhdGljIGlubGluZSB2b2lkIHByb2Nfcm9vdF9pbml0KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaC0xNzUtXFxuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmg6MTc2OnN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX2ZsdXNoX3BpZChzdHJ1Y3QgcGlkICpwaWQpXFxuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgtMTc3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6MzEuNTA3MzMyNTE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0NTA4NzI3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBwcm9jX2ZsdXNoX3BpZGAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBwcm9jX2ZsdXNoX3BpZGAgaXMgYSBwbGFjZWhvbGRlciB3aGVuIGBDT05GSUdfUFJPQ19GU2AgaXMgZGlzYWJsZWQsIGJ1dCBiZWNvbWVzIGNydWNpYWwgZm9yIGZsdXNoaW5nIHRoZSBwcm9jIGRjYWNoZSB3aGVuIGBQUk9DX0ZTYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIGBDT05GSUdfUFJPQ19GU2Aga2V5IHRvIHByb3BlciBmdXp6aW5nIG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSBjb25maXJtLi4uIHllcywgYFBST0NfRlNgIGl0IGlzLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSByaWdodCBmb2N1cyBzeW1ib2xzLiBUaGUgcHJpbWFyeSBmdW5jdGlvbiBtb2RpZmllZCBieSB0aGUgcGF0Y2ggaXMgYHJlbGVhc2VfdGFza2AsIHdpdGggYHByb2NfZmx1c2hfcGlkYCBiZWluZyB0aGUgY2FsbGVkIGZ1bmN0aW9uIHVzaW5nIHRoZSBwaW5uZWQgcGlkLiBCb3RoIGFyZSByZWxldmFudCwgYnV0IGxldCdzIGJlIHN0cmF0ZWdpYyBhYm91dCB3aGF0IGdvZXMgaW4gdGhlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGJlc3QgcHJhY3RpY2VzLi4uIGF2b2lkIHRoZSBnZW5lcmljIFwiaG90LXBhdGhcIiBmdW5jdGlvbnMuIFdlIHdhbnQgZW50cnlwb2ludHMsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCwgc3RhdGljIGhlbHBlcnMgdGhhdCB0aGUgY29tcGlsZXIgaW5saW5lcyBhbmQgYXJlIHRoZW4ganVzdCBub2lzZS5cblxuSXMgYHJlbGVhc2VfdGFza2AgYSBob3QgcGF0aD8gTm8sIGByZWxlYXNlX3Rhc2tgIHNlZW1zIHRvIGJlIHRyaWdnZXJlZCBkdXJpbmcgdGFzayByZWFwaW5nIG9yIHJlbGVhc2Ug4oCTIGBleGl0X25vdGlmeWAsIGB3YWl0X3Rhc2tfem9tYmllYCBhbmQgc2ltaWxhciBldmVudHMuIEl0J3MgYWxzbyBub3Qgc3RhdGljIGFuZCBhcHBlYXJzIHRvIGJlIGEgY2xlYXIgZW50cnkgcG9pbnQuIEknbGwgaW5jbHVkZSBib3RoIGByZWxlYXNlX3Rhc2tgIGFuZCBgcHJvY19mbHVzaF9waWRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuTmV4dCwgdG8gZG91YmxlLWNoZWNrIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uLiBXZSdyZSBjbGVhciB0aGF0IGl0IGlzIHRoZSBgUFJPQ19GU2Agb3B0aW9uLiBJIHNob3VsZCBub3RlIHRoYXQgaXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGVyZSdzIG5vIGBDT05GSUdfYCBwcmVmaXggaGVyZS5cblxuRmluYWxseSwgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gSSdsbCBmbGFnIGBXb3J0aEZ1enppbmdgIGFzIGB0cnVlYC4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBzdWNjaW5jdGx5IHN1bW1hcml6ZSB0aGUgcGF0Y2gncyBwdXJwb3NlOiBpdCByZXNvbHZlcyBhIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBpbiB0aGUgY29yZSBwcm9jZXNzIGV4aXQgY29kZSAoYHJlbGVhc2VfdGFza2ApIGJ5IHBpbm5pbmcgYHRocmVhZF9waWRgIHdpdGggYGdldF9waWQoKWAgYmVmb3JlIGBfX3VuaGFzaF9wcm9jZXNzKClgIGFuZCByZWxlYXNpbmcgaXQgd2l0aCBgcHV0X3BpZCgpYCBhZnRlciBgcHJvY19mbHVzaF9waWQoKWAuIEkndmUgZ290IG15IGBGb2N1c1N5bWJvbHNgOiBgW1wicmVsZWFzZV90YXNrXCIsIFwicHJvY19mbHVzaF9waWRcIl1gLCBhbmQgbXkgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiUFJPQ19GU1wiXWAuXG5cbkFscmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NDcsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjM4Ljk1ODIwODAyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDY4Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVsZWFzZV90YXNrXCIsXG4gICAgXCJwcm9jX2ZsdXNoX3BpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgdGFzayByZWxlYXNlIGxvZ2ljIGluIHJlbGVhc2VfdGFzaygpIGJ5IGV4cGxpY2l0bHkgYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHRvIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBhbmQgcmVsZWFzaW5nIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGFzayB0ZWFyZG93biBhbmQgcHJvYyBkY2FjaGUgZmx1c2hpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlbGVhc2VfdGFza1wiLFxuICAgIFwicHJvY19mbHVzaF9waWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHRhc2sgcmVsZWFzZSBsb2dpYyBpbiByZWxlYXNlX3Rhc2soKSBieSBleHBsaWNpdGx5IGFjcXVpcmluZyBhIHJlZmVyZW5jZSB0byB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRhc2sgdGVhcmRvd24gYW5kIHByb2MgZGNhY2hlIGZsdXNoaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MTozOS4wMzYyODMyNTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODI1MjU4NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6MzkuMDM2NzUwMjY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTM4MjQ3ODc0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgLyByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gcmVsZWFzZV90YXNrKCkgYnkgdGFraW5nIGEgcmVmZXJlbmNlIHRvIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYmVmb3JlIF9fZXhpdF9zaWduYWwoKSBhbmQgcmVsZWFzaW5nIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIHBpZCBzdHJ1Y3R1cmUncyByZWZlcmVuY2UgY291bnQgZHJvcHBlZCB0byB6ZXJvIHByZW1hdHVyZWx5LiBTdWNoIGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBjb21wbGV4IHN0cnVjdCBpbml0aWFsaXphdGlvbnMsIGtlcm5lbC10by11c2VyIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGY0YTUwNGJhZjI2ZDc0Zjc4OWI3NjI1YTEzMzk3MzRlZDg0YzkxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmNcbmluZGV4IDk3Njg2YWY4OTUwMTMuLjQ2MWUyODM0ZmNiNDUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZXhpdC5jXG4rKysgYi9rZXJuZWwvZXhpdC5jXG5AQCAtMjYxLDggKzI2MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHBpZGZzX2V4aXQocCk7XG4gXHRjZ3JvdXBfdGFza19yZWxlYXNlKHApO1xuIFxuLVx0LyogUmV0cmlldmUgQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4tXHR0aHJlYWRfcGlkID0gdGFza19waWQocCk7XG4rXHQvKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4rXHR0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7XG4gXG4gXHR3cml0ZV9sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiBcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XG5AQCAtMjkxLDggKzI5MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdH1cbiBcbiBcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4tXHQvKiBAdGhyZWFkX3BpZCBjYW4ndCBnbyBhd2F5IHVudGlsIGZyZWVfcGlkcygpIGJlbG93ICovXG4gXHRwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKTtcbitcdHB1dF9waWQodGhyZWFkX3BpZCk7XG4gXHRleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTtcbiBcdGFkZF9kZXZpY2VfcmFuZG9tbmVzcyhcdTAwMjZwLVx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUsXG4gXHRcdFx0ICAgICAgc2l6ZW9mKHAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6MzkuMDM2NzU2NDE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNjk0MTIxODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHJlbGVhc2VfdGFza2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGNvbnRleHQgaGVyZSBpcyB0aGUgYHJlbGVhc2VfdGFza2AgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvZXhpdC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGNsZWFucyB1cCBhIHRhc2sgdGhhdCdzIGV4aXRpbmcuIFRoZSBwYXRjaCBsb29rcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBsZXQncyBicmVhayBpdCBkb3duIHRvIGVuc3VyZSB3ZSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlIGZvY3VzZXMgb24gaG93IGBAdGhyZWFkX3BpZGAgaXMgaGFuZGxlZC4gSXQgbG9va3MgbGlrZSB0aGUgaW50ZW50aW9uIGhlcmUgaXMgdG8gZW5zdXJlIHRoYXQgYEB0aHJlYWRfcGlkYCByZW1haW5zIHZhbGlkIGV2ZW4gYWZ0ZXIgYF9fdW5oYXNoX3Byb2Nlc3MoKWAgaXMgY2FsbGVkLCB3aGljaCBjYW4gcG90ZW50aWFsbHkgc2V0IGl0IHRvIE5VTEwuICBQcmV2aW91c2x5LCB3ZSBqdXN0IGdyYWJiZWQgdGhlIGB0YXNrX3BpZChwKWAgdmFsdWUsIGJ1dCBub3cgdGhlIGNvZGUgaXMgY2FsbGluZyBgZ2V0X3BpZCgpYCB0byBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgUElELiBUaGlzIGluZGljYXRlcyB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBwb3RlbnRpYWwgcmFjZSBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBzYWZlbHkgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCBjb3VsZCBiZSBpbnZhbGlkYXRlZCBieSBhbm90aGVyIHBhcnQgb2YgdGhlIGtlcm5lbCwgcGFydGljdWxhcmx5IGluIGEgbXVsdGktdGhyZWFkZWQgb3IgaW50ZXJydXB0LWRyaXZlbiBlbnZpcm9ubWVudC5cblxuVGhlIHN1YnNlcXVlbnQgYHByb2NfZmx1c2hfcGlkKClgIGZ1bmN0aW9uIGFwcGVhcnMgdG8gYmUgdXNpbmcgdGhlIHJlZmVyZW5jZWQgYHRocmVhZF9waWRgLCBhbmQgaXQncyBmb2xsb3dlZCBieSBhIGNvcnJlc3BvbmRpbmcgYHB1dF9waWQoKWAuIFRoaXMgaXMgZ3JlYXQgYmVjYXVzZSBpdCBlbnN1cmVzIHRoZSByZWZlcmVuY2UgY291bnQgaXMgZGVjcmVtZW50ZWQgb25jZSB3ZSdyZSBkb25lIHdpdGggdGhlIFBJRCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gIEknbSBnbGFkIHRvIHNlZSB0aGF0IGBwdXRfcGlkKClgIGlzIHByZXNlbnQgdG8gbWF0Y2ggdGhlIGluY3JlbWVudCBieSBgZ2V0X3BpZCgpYC5cblxuT3ZlcmFsbCwgdGhpcyBpcyBhIHZlcnkgcmVhc29uYWJsZSBjaGFuZ2UuIEl0J3MgYSBzbWFsbCBidXQgaW1wb3J0YW50IGZpeCB0byBwb3RlbnRpYWxseSBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIFBJRCBsb29rdXAgZHVyaW5nIHByb2Nlc3MgZXhpdC4gSXQncyB0aGUgc29ydCBvZiBjYXJlZnVsIHJlc291cmNlIG1hbmFnZW1lbnQgdGhhdCB3ZSBleHBlY3QgdG8gc2VlLiBJIGNhbuKAmXQgaW1tZWRpYXRlbHkgc2VlIGFueSBvYnZpb3VzIGlzc3VlcywgYW5kIEknZCBiZSB3aWxsaW5nIHRvIGdpdmUgdGhpcyBhIHF1aWNrIHNwb3QgY2hlY2sgYW5kIHJ1biBhIGZldyB0ZXN0cyBvbiBteSBlbmQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6NTEuNzMwODgxNDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9leGl0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdFxcdHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCBwb3N0O1xcbiAyNTE6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXI7XFxuIDI1MjpcXHRcXHRzdHJ1Y3QgcGlkICp0aHJlYWRfcGlkO1xcbiAyNTM6XFx0XFx0aW50IHphcF9sZWFkZXI7XFxuIDI1NDpcXHRyZXBlYXQ6XFxuIDI1NTpcXHRcXHRtZW1zZXQoXFx1MDAyNnBvc3QsIDAsIHNpemVvZihwb3N0KSk7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdC8qIGRvbid0IG5lZWQgdG8gZ2V0IHRoZSBSQ1UgcmVhZGxvY2sgaGVyZSAtIHRoZSBwcm9jZXNzIGlzIGRlYWQgYW5kXFxuIDI1ODpcXHRcXHQgKiBjYW4ndCBiZSBtb2RpZnlpbmcgaXRzIG93biBjcmVkZW50aWFscy4gKi9cXG4gMjU5OlxcdFxcdGRlY19ybGltaXRfdWNvdW50cyh0YXNrX3Vjb3VudHMocCksIFVDT1VOVF9STElNSVRfTlBST0MsIDEpO1xcbiAyNjA6XFx0XFxuIDI2MTpcXHRcXHRwaWRmc19leGl0KHApO1xcbiAyNjI6XFx0XFx0Y2dyb3VwX3Rhc2tfcmVsZWFzZShwKTtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0LyogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgbWF5IHNldCBpdCB0byBOVUxMLiAqL1xcbiAyNjU6XFx0XFx0dGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpO1xcbiAyNjY6XFx0XFxuIDI2NzpcXHRcXHR3cml0ZV9sb2NrX2lycShcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuIDI2ODpcXHRcXHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xcbiAyNjk6XFx0XFx0X19leGl0X3NpZ25hbChcXHUwMDI2cG9zdCwgcCk7XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdC8qXFxuIDI3MjpcXHRcXHQgKiBJZiB3ZSBhcmUgdGhlIGxhc3Qgbm9uLWxlYWRlciBtZW1iZXIgb2YgdGhlIHRocmVhZFxcbiAyNzM6XFx0XFx0ICogZ3JvdXAsIGFuZCB0aGUgbGVhZGVyIGlzIHpvbWJpZSwgdGhlbiBub3RpZnkgdGhlXFxuIDI3NDpcXHRcXHQgKiBncm91cCBsZWFkZXIncyBwYXJlbnQgcHJvY2Vzcy4gKGlmIGl0IHdhbnRzIG5vdGlmaWNhdGlvbi4pXFxuIDI3NTpcXHRcXHQgKi9cXG4gMjc2OlxcdFxcdHphcF9sZWFkZXIgPSAwO1xcbiAyNzc6XFx0XFx0bGVhZGVyID0gcC1cXHUwMDNlZ3JvdXBfbGVhZGVyO1xcbiAyNzg6XFx0XFx0aWYgKGxlYWRlciAhPSBwIFxcdTAwMjZcXHUwMDI2IHRocmVhZF9ncm91cF9lbXB0eShsZWFkZXIpXFxuIDI3OTpcXHRcXHRcXHRcXHRcXHUwMDI2XFx1MDAyNiBsZWFkZXItXFx1MDAzZWV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpIHtcXG4gMjgwOlxcdFxcdFxcdC8qIGZvciBwaWRmc19leGl0KCkgYW5kIGRvX25vdGlmeV9wYXJlbnQoKSAqL1xcbiAyODE6XFx0XFx0XFx0aWYgKGxlYWRlci1cXHUwMDNlc2lnbmFsLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNJR05BTF9HUk9VUF9FWElUKVxcbiAyODI6XFx0XFx0XFx0XFx0bGVhZGVyLVxcdTAwM2VleGl0X2NvZGUgPSBsZWFkZXItXFx1MDAzZXNpZ25hbC1cXHUwMDNlZ3JvdXBfZXhpdF9jb2RlO1xcbiAyODM6XFx0XFx0XFx0LypcXG4gMjg0OlxcdFxcdFxcdCAqIElmIHdlIHdlcmUgdGhlIGxhc3QgY2hpbGQgdGhyZWFkIGFuZCB0aGUgbGVhZGVyIGhhc1xcbiAyODU6XFx0XFx0XFx0ICogZXhpdGVkIGFscmVhZHksIGFuZCB0aGUgbGVhZGVyJ3MgcGFyZW50IGlnbm9yZXMgU0lHQ0hMRCxcXG4gMjg2OlxcdFxcdFxcdCAqIHRoZW4gd2UgYXJlIHRoZSBvbmUgd2hvIHNob3VsZCByZWxlYXNlIHRoZSBsZWFkZXIuXFxuIDI4NzpcXHRcXHRcXHQgKi9cXG4gMjg4OlxcdFxcdFxcdHphcF9sZWFkZXIgPSBkb19ub3RpZnlfcGFyZW50KGxlYWRlciwgbGVhZGVyLVxcdTAwM2VleGl0X3NpZ25hbCk7XFxuIDI4OTpcXHRcXHRcXHRpZiAoemFwX2xlYWRlcilcXG4gMjkwOlxcdFxcdFxcdFxcdGxlYWRlci1cXHUwMDNlZXhpdF9zdGF0ZSA9IEVYSVRfREVBRDtcXG4gMjkxOlxcdFxcdH1cXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuIDI5NDpcXHRcXHRwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKTtcXG4gMjk1OlxcdFxcdHB1dF9waWQodGhyZWFkX3BpZCk7XFxuIDI5NjpcXHRcXHRleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTtcXG4gMjk3OlxcdFxcdGFkZF9kZXZpY2VfcmFuZG9tbmVzcyhcXHUwMDI2cC1cXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcXG4gMjk4OlxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihwLVxcdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XFxuIDI5OTpcXHRcXHRmcmVlX3BpZHMocG9zdC5waWRzKTtcXG4gMzAwOlxcdFxcdHJlbGVhc2VfdGhyZWFkKHApO1xcbiAzMDE6XFx0XFx0LypcXG4gMzAyOlxcdFxcdCAqIFRoaXMgdGFzayB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhlIHByb2Nlc3MvdGhyZWFkL3BpZCBsaXN0c1xcbiAzMDM6XFx0XFx0ICogYW5kIGxvY2tfdGFza19zaWdoYW5kKHApIGNhbid0IHN1Y2NlZWQuIE5vYm9keSBlbHNlIGNhbiB0b3VjaFxcbiAzMDQ6XFx0XFx0ICogLVxcdTAwM2VwZW5kaW5nIG9yLCBpZiBncm91cCBkZWFkLCBzaWduYWwtXFx1MDAzZXNoYXJlZF9wZW5kaW5nLiBXZSBjYW4gY2FsbFxcbiAzMDU6XFx0XFx0ICogZmx1c2hfc2lncXVldWUoKSBsb2NrbGVzcy5cXG4gMzA2OlxcdFxcdCAqL1xcbiAzMDc6XFx0XFx0Zmx1c2hfc2lncXVldWUoXFx1MDAyNnAtXFx1MDAzZXBlbmRpbmcpO1xcbiAzMDg6XFx0XFx0aWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpXFxuIDMwOTpcXHRcXHRcXHRmbHVzaF9zaWdxdWV1ZShcXHUwMDI2cC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VzaGFyZWRfcGVuZGluZyk7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdHB1dF90YXNrX3N0cnVjdF9yY3VfdXNlcihwKTtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0XFx0cCA9IGxlYWRlcjtcXG4gMzE0OlxcdFxcdGlmICh1bmxpa2VseSh6YXBfbGVhZGVyKSlcXG4gMzE1OlxcdFxcdFxcdGdvdG8gcmVwZWF0O1xcbiAzMTY6XFx0fVxcbiAzMTc6XFx0XFxuIDMxODpcXHRpbnQgcmN1d2FpdF93YWtlX3VwKHN0cnVjdCByY3V3YWl0ICp3KVxcbiAzMTk6XFx0e1xcbiAzMjA6XFx0XFx0aW50IHJldCA9IDA7XFxuIDMyMTpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuIDMyMjpcXHRcXG4gMzIzOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzI0OlxcdFxcbiAzMjU6XFx0XFx0LypcXG4gMzI2OlxcdFxcdCAqIE9yZGVyIGNvbmRpdGlvbiB2cyBAdGFzaywgc3VjaCB0aGF0IGV2ZXJ5dGhpbmcgcHJpb3IgdG8gdGhlIGxvYWRcXG4gMzI3OlxcdFxcdCAqIG9mIEB0YXNrIGlzIHZpc2libGUuIFRoaXMgaXMgdGhlIGNvbmRpdGlvbiBhcyB0byB3aHkgdGhlIHVzZXIgY2FsbGVkXFxuIDMyODpcXHRcXHQgKiByY3V3YWl0X3dha2UoKSBpbiB0aGUgZmlyc3QgcGxhY2UuIFBhaXJzIHdpdGggc2V0X2N1cnJlbnRfc3RhdGUoKVxcbiAzMjk6XFx0XFx0ICogYmFycmllciAoQSkgaW4gcmN1d2FpdF93YWl0X2V2ZW50KCkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjUxLjczMTAwMzg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MTgxMDY3OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgYSBjb2RlIHNuaXBwZXQgdGhhdCdzIGJlZW4gbW9kaWZpZWQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYHRocmVhZF9waWRgIGFuZCBQSUQgbWFuYWdlbWVudC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGdldCB0aGUgUElELCBmbHVzaCBpdCwgYW5kIHRoZW4gZnJlZSBzb21lIFBJRCBzdHJ1Y3R1cmVzLiBUaGUgY2hhbmdlIGludHJvZHVjZXMgYGdldF9waWQoKWAgYmVmb3JlIGBwcm9jX2ZsdXNoX3BpZCgpYCBhbmQgYHB1dF9waWQoKWAgYWZ0ZXIgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpczogd2h5IHRoZSBjaGFuZ2U/IEFoLCByaWdodCwgaXQncyBsaWtlbHkgYSBsaWZldGltZSBpc3N1ZS4gVGhlIGNvbW1lbnQgaGl0cyB0aGUgbmFpbCBvbiB0aGUgaGVhZCDigJMgYHRocmVhZF9waWRgIG1pZ2h0IGhhdmUgYmVlbiBmcmVlZCBvciBoYXZlIGl0cyByZWZlcmVuY2UgY291bnQgZHJvcCB0byB6ZXJvIGJlZm9yZSBgcHJvY19mbHVzaF9waWQoKWAgaXMgY2FsbGVkLCBlc3BlY2lhbGx5IGR1cmluZyBgX19leGl0X3NpZ25hbCgpYCBvciBgX191bmhhc2hfcHJvY2Vzc2AgaWYgdGhlIFBJRCB3YXNuJ3QgcHJvcGVybHkgcGlubmVkLiBUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby5cblxuTm93LCBsZXQncyBkbyBhIHF1aWNrIG1lbnRhbCBzd2VlcCBmb3Igb3RoZXIgcG90ZW50aWFsIGlzc3Vlcy4gSXMgdGhlcmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZD8gQW55IGNvcGllcyB0byB1c2VyLXNwYWNlPyBVbmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHM/IE9yIGFueXRoaW5nIHRoYXQgS01TQU4gbWlnaHQgZmxhZz8gTm8sIG5vdCB0aGF0IEkgY2FuIHNlZS4gYGdldF9waWQodGFza19waWQocCkpYCBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGBzdHJ1Y3QgcGlkYCwgYHB1dF9waWQodGhyZWFkX3BpZClgIGRlY3JlbWVudHMgaXQsIGFuZCBgcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZClgIGFjY2Vzc2VzIHRoZSBQSUQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgYXJlIHBvaW50ZXJzLCBhbmQgdGhhdCdzIHVzdWFsbHkgc3RyYWlnaHRmb3J3YXJkLiBObyBzdGFjayBidWZmZXJzLCBoZWFwIGFsbG9jYXRpb25zLCBpbmZvcm1hdGlvbiBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGNvcGllcy4gQW55IHJlZmVyZW5jZSBjb3VudGluZyBlcnJvcnMg4oCTIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIG51bGwgZGVyZWZlcmVuY2VzIOKAkyBhcmUgdGhlIHN0YW5kYXJkIG1lbW9yeSBidWdzLCBhbmQgc2hvdWxkIGJlIHBpY2tlZCB1cCBieSBLQVNBTiBvciByZWZlcmVuY2UgY291bnRpbmcgY2hlY2tlcnMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBnZXRfcGlkYCBhbmQgYHB1dF9waWRgIHRvIGNvbmZpcm0gdGhleSdyZSBkb2luZyB3aGF0IHRoZXkncmUgc3VwcG9zZWQgdG8uIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBwcmltaXRpdmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjkwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTI6MDcuOTEyMDc0MjA3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQxODUxNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgc3RydWN0IHBpZCBcXFxcKmdldF9waWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9waWQuaD04NT12b2lkIGRvX25vdGlmeV9waWRmZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbmluY2x1ZGUvbGludXgvcGlkLmgtODYtXFxuaW5jbHVkZS9saW51eC9waWQuaDo4NzpzdGF0aWMgaW5saW5lIHN0cnVjdCBwaWQgKmdldF9waWQoc3RydWN0IHBpZCAqcGlkKVxcbmluY2x1ZGUvbGludXgvcGlkLmgtODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MjoxMC4yNTM5MzE1MzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2MDU3NDUyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gTGludXggUElEIEludGVybmFscyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgUElEcyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc28gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGBpbmNsdWRlL2xpbnV4L3BpZC5oYC4gU3BlY2lmaWNhbGx5LCBJJ20gYWltaW5nIGZvciBhcm91bmQgbGluZSA4Ny4gSSdtIGhvcGluZyB0byBmaW5kIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IGRlZmluZSBob3cgUElEcyBhcmUgYWxsb2NhdGVkLCB0cmFja2VkLCBhbmQgcG90ZW50aWFsbHkgcmVjeWNsZWQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHRoZSBgcGlkX25hbWVzcGFjZWAgc3RydWN0dXJlLCBwb3NzaWJseSBzb21lIGdsb2JhbCBoYXNoIHRhYmxlcyBvciBhcnJheXMsIGFuZCBob3BlZnVsbHkgc29tZSBpbmxpbmUgZnVuY3Rpb25zIGZvciBwaWQgbG9va3VwcyBhbmQgYWxsb2NhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgUElEIHNwYWNlcyBhcyB3ZWxsLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZWxhdGVkIHRvIHRoZSBjb21wbGV4aXRpZXMgb2YgUElEIG5hbWVzcGFjZXMgYW5kIHByb2Nlc3MgaWRlbnRpZmljYXRpb24uIExldCdzIHNlZSB3aGF0IHRoZSBrZXJuZWwgZGV2cyBjYW1lIHVwIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MjoyMC44NTk2ODA1MzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9waWQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXG4gIDgxOlxcdHN0cnVjdCBwaWQgKnBpZGZkX3BpZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuICA4MjpcXHRzdHJ1Y3QgcGlkICpwaWRmZF9nZXRfcGlkKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50ICpmbGFncyk7XFxuICA4MzpcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpZGZkX2dldF90YXNrKGludCBwaWRmZCwgdW5zaWduZWQgaW50ICpmbGFncyk7XFxuICA4NDpcXHRpbnQgcGlkZmRfcHJlcGFyZShzdHJ1Y3QgcGlkICpwaWQsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGZpbGUgKipyZXRfZmlsZSk7XFxuICA4NTpcXHR2b2lkIGRvX25vdGlmeV9waWRmZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbiAgODY6XFx0XFxuICA4NzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwaWQgKmdldF9waWQoc3RydWN0IHBpZCAqcGlkKVxcbiAgODg6XFx0e1xcbiAgODk6XFx0XFx0aWYgKHBpZClcXG4gIDkwOlxcdFxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2cGlkLVxcdTAwM2Vjb3VudCk7XFxuICA5MTpcXHRcXHRyZXR1cm4gcGlkO1xcbiAgOTI6XFx0fVxcbiAgOTM6XFx0XFxuICA5NDpcXHRleHRlcm4gdm9pZCBwdXRfcGlkKHN0cnVjdCBwaWQgKnBpZCk7XFxuICA5NTpcXHRleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpwaWRfdGFzayhzdHJ1Y3QgcGlkICpwaWQsIGVudW0gcGlkX3R5cGUpO1xcbiAgOTY6XFx0c3RhdGljIGlubGluZSBib29sIHBpZF9oYXNfdGFzayhzdHJ1Y3QgcGlkICpwaWQsIGVudW0gcGlkX3R5cGUgdHlwZSlcXG4gIDk3OlxcdHtcXG4gIDk4OlxcdFxcdHJldHVybiAhaGxpc3RfZW1wdHkoXFx1MDAyNnBpZC1cXHUwMDNldGFza3NbdHlwZV0pO1xcbiAgOTk6XFx0fVxcbiAxMDA6XFx0ZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3BpZF90YXNrKHN0cnVjdCBwaWQgKnBpZCwgZW51bSBwaWRfdHlwZSk7XFxuIDEwMTpcXHRcXG4gMTAyOlxcdGV4dGVybiBzdHJ1Y3QgcGlkICpnZXRfdGFza19waWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBlbnVtIHBpZF90eXBlIHR5cGUpO1xcbiAxMDM6XFx0XFxuIDEwNDpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MjoyMC44NTk3NzM2MzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIwMDE3NDMzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0J3MgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIGNsYXNzaWMgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlLCBhIFwiVXNlLUFmdGVyLUZyZWVcIiBzaXR1YXRpb24uIFRoZSBwcm9ibGVtIGlzIGNsZWFyOiB0aGUgYHRocmVhZF9waWRgIHN0cnVjdHVyZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBmcmVlZCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGZpbmlzaGVzIHdpdGggaXQuIFRoZSBzb2x1dGlvbiBpcyBlbGVnYW50LiBXZSBhcmUgdXNpbmcgYGdldF9waWQoKWAgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGB0aHJlYWRfcGlkYCB3aXRoaW4gYHJlbGVhc2VfdGFzaygpYCBiZWZvcmUgYF9fZXhpdF9zaWduYWwoKWAgYW5kIHRoZW4gZGVjcmVtZW50aW5nIGl0IHdpdGggYHB1dF9waWQoKWAgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKClgLiBUaGlzIGVuc3VyZXMgdGhlIG9iamVjdCdzIGxpZmV0aW1lIG1hdGNoZXMgaXRzIHVzYWdlLlxuXG5UaGlzIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgY29ycmVjdCBvYmplY3QgbGlmZXRpbWUgbWFuYWdlbWVudC4gV2UncmUgdXNpbmcgc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcgdG8gZ3VhcmFudGVlIHRoYXQuIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBwZXJmZWN0bHkgc3VpdGVkIHRvIGRldGVjdCB0aGlzIGtpbmQgb2YgYnVnLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGF0IHRoaXMgKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgS01TQU4tcmVsZXZhbnQgaXNzdWVzLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQgKHRoYXQncyBhIGJpZyBLTVNBTiByZWQgZmxhZykuXG4yLiAgQW55IHJlYWRzIG9yIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBhbm90aGVyIEtNU0FOIGNvbmNlcm4uXG4zLiAgVW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMgKHRoYXTigJlzIGEgZGlmZmVyZW50IHByb2JsZW0gYWx0b2dldGhlcikuXG40LiAgVW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzZXMgd2hpY2ggS01TQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaC5cblxuU28sIGFmdGVyIHJldmlld2luZyBldmVyeXRoaW5nLCBJJ20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIFRoaXMgcGF0Y2ggaXMgYSBzb2xpZCBmaXggZm9yIGEgc3RhbmRhcmQgcmVmY291bnQgaXNzdWUsIGFuZCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gSSBjYW4gZ28gYWhlYWQgYW5kIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyOSwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MjozMi44NjE1MTkwMDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgLyByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gcmVsZWFzZV90YXNrKCkgYnkgdGFraW5nIGEgcmVmZXJlbmNlIHRvIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYmVmb3JlIF9fZXhpdF9zaWduYWwoKSBhbmQgcmVsZWFzaW5nIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIHBpZCBzdHJ1Y3R1cmUncyByZWZlcmVuY2UgY291bnQgZHJvcHBlZCB0byB6ZXJvIHByZW1hdHVyZWx5LiBTdWNoIGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBjb21wbGV4IHN0cnVjdCBpbml0aWFsaXphdGlvbnMsIGtlcm5lbC10by11c2VyIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSAvIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBpbiByZWxlYXNlX3Rhc2soKSBieSB0YWtpbmcgYSByZWZlcmVuY2UgdG8gdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBiZWZvcmUgX19leGl0X3NpZ25hbCgpIGFuZCByZWxlYXNpbmcgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKS4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpZiB0aGUgcGlkIHN0cnVjdHVyZSdzIHJlZmVyZW5jZSBjb3VudCBkcm9wcGVkIHRvIHplcm8gcHJlbWF0dXJlbHkuIFN1Y2ggbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIGZ1bGx5IGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGNvbXBsZXggc3RydWN0IGluaXRpYWxpemF0aW9ucywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsthfj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 10:37:08 +0000 UTC FinishedAt: 2026-08-29 10:52:35 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f78e0cb3fd377cfe90fe07a0eeec20584c0f4907", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "f78e0cb3fd377cfe90fe07a0eeec20584c0f4907", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS" ], "series_id": "ec641c38-3c0e-4b9b-9791-daef03ada094" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "release_task", "proc_flush_pid" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWxlYXNlX3Rhc2smIzM0OywKICAgICYjMzQ7cHJvY19mbHVzaF9waWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIC8gcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGluIHJlbGVhc2VfdGFzaygpIGJ5IHRha2luZyBhIHJlZmVyZW5jZSB0byB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGJlZm9yZSBfX2V4aXRfc2lnbmFsKCkgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBwaWQgc3RydWN0dXJlJiMzOTtzIHJlZmVyZW5jZSBjb3VudCBkcm9wcGVkIHRvIHplcm8gcHJlbWF0dXJlbHkuIFN1Y2ggbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIGZ1bGx5IGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGNvbXBsZXggc3RydWN0IGluaXRpYWxpemF0aW9ucywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSB0YXNrIHJlbGVhc2UgbG9naWMgaW4gcmVsZWFzZV90YXNrKCkgYnkgZXhwbGljaXRseSBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIGFuZCByZWxlYXNpbmcgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0YXNrIHRlYXJkb3duIGFuZCBwcm9jIGRjYWNoZSBmbHVzaGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhmNGE1MDRiYWYyNmQ3NGY3ODliNzYyNWExMzM5NzM0ZWQ4NGM5MWRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxMDo1MDo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuY1xuaW5kZXggOTc2ODZhZjg5NTAxMy4uNDYxZTI4MzRmY2I0NSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9leGl0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9leGl0LmNcbkBAIC0yNjEsOCAmIzQzOzI2MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHBpZGZzX2V4aXQocCk7XG4gXHRjZ3JvdXBfdGFza19yZWxlYXNlKHApO1xuIFxuLVx0LyogUmV0cmlldmUgQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4tXHR0aHJlYWRfcGlkID0gdGFza19waWQocCk7XG4mIzQzO1x0LyogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgbWF5IHNldCBpdCB0byBOVUxMLiAqL1xuJiM0MztcdHRocmVhZF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKHApKTtcbiBcbiBcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuIFx0cHRyYWNlX3JlbGVhc2VfdGFzayhwKTtcbkBAIC0yOTEsOCAmIzQzOzI5MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdH1cbiBcbiBcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4tXHQvKiBAdGhyZWFkX3BpZCBjYW4mIzM5O3QgZ28gYXdheSB1bnRpbCBmcmVlX3BpZHMoKSBiZWxvdyAqL1xuIFx0cHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7XG4mIzQzO1x0cHV0X3BpZCh0aHJlYWRfcGlkKTtcbiBcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xuIFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFx1MDAyNnAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcbiBcdFx0XHQgICAgICBzaXplb2YocC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlbGVhc2VfdGFzayYjMzQ7LAogICAgJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHRhc2sgcmVsZWFzZSBsb2dpYyBpbiByZWxlYXNlX3Rhc2soKSBieSBleHBsaWNpdGx5IGFjcXVpcmluZyBhIHJlZmVyZW5jZSB0byB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRhc2sgdGVhcmRvd24gYW5kIHByb2MgZGNhY2hlIGZsdXNoaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGY0YTUwNGJhZjI2ZDc0Zjc4OWI3NjI1YTEzMzk3MzRlZDg0YzkxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggOTc2ODZhZjg5NTAxMy4uNDYxZTI4MzRmY2I0NSAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZXhpdC5jCkBAIC0yNjEsOCAmIzQzOzI2MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAlwaWRmc19leGl0KHApOwogCWNncm91cF90YXNrX3JlbGVhc2UocCk7CiAKLQkvKiBSZXRyaWV2ZSBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi8KLQl0aHJlYWRfcGlkID0gdGFza19waWQocCk7CiYjNDM7CS8qIFBpbiBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi8KJiM0MzsJdGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpOwogCiAJd3JpdGVfbG9ja19pcnEoJmFtcDt0YXNrbGlzdF9sb2NrKTsKIAlwdHJhY2VfcmVsZWFzZV90YXNrKHApOwpAQCAtMjkxLDggJiM0MzsyOTEsOCBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJfQogCiAJd3JpdGVfdW5sb2NrX2lycSgmYW1wO3Rhc2tsaXN0X2xvY2spOwotCS8qIEB0aHJlYWRfcGlkIGNhbiYjMzk7dCBnbyBhd2F5IHVudGlsIGZyZWVfcGlkcygpIGJlbG93ICovCiAJcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7CiYjNDM7CXB1dF9waWQodGhyZWFkX3BpZCk7CiAJZXhpdF9jcmVkX25hbWVzcGFjZXMocCk7CiAJYWRkX2RldmljZV9yYW5kb21uZXNzKCZhbXA7cC0mZ3Q7c2Uuc3VtX2V4ZWNfcnVudGltZSwKIAkJCSAgICAgIHNpemVvZihwLSZndDtzZS5zdW1fZXhlY19ydW50aW1lKSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2g6IFJlbGVhc2UgVGFzayoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggbW9kaWZ5aW5nIGBrZXJuZWwvZXhpdC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcmVsZWFzZV90YXNrKClgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNyaXRpY2FsIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSB0YXNrIGV4aXQgcGF0aC4gIFRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBhcm91bmQgdGhlIGhhbmRsaW5nIG9mIGBAdGhyZWFkX3BpZGAgYmVmb3JlIHRoZSB0YXNrIGlzIGZ1bGx5IHVuaGFzaGVkIGFuZCBkZWFsbG9jYXRlZC4KCk15IGZpcnN0IHRob3VnaHQgaXMgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSwgYXMgZmFyIGFzIEkgY2FuIHNlZSwgcmV0cmlldmVzIGBAdGhyZWFkX3BpZGAgd2l0aCBgdGFza19waWQocClgIGJlZm9yZSBkZWFsbG9jYXRpb24gaW4gdGhlIG9sZCB2ZXJzaW9uIG9mIHRoZSBjb2RlLiBUaGlzIGlzIGxpa2VseSB0byBlbnN1cmUgdGhhdCB0aGlzIHJlZmVyZW5jZSB0byB0aGUgcHJvY2VzcyBJRCBpcyBzYWZlbHkgc3RvcmVkIGJlZm9yZSB0aGUgdW5kZXJseWluZyBkYXRhIGlzIHBvdGVudGlhbGx5IG1vZGlmaWVkIGJ5IHN1YnNlcXVlbnQgb3BlcmF0aW9ucy4KCk5vdywgd2l0aCB0aGlzIHBhdGNoLCB0aGVyZSBhcmUgc29tZSBhZGRpdGlvbmFsIGZ1bmN0aW9uIGNhbGxzIHRoYXQgYXJlIG9mIG5vdGUuIFRoZSB1cGRhdGVkIGNvZGUgbm93ICYjMzQ7cGlucyYjMzQ7IGBAdGhyZWFkX3BpZGAgdXNpbmcgYGdldF9waWQodGFza19waWQocCkpYCBiZWZvcmUgdGhlIHVuaGFzaGluZyBvY2N1cnMuIFRoaXMgaXMgZm9sbG93ZWQgbGF0ZXIgYnkgYHB1dF9waWQodGhyZWFkX3BpZClgLiBUaGUgY29tbWVudCBoaWdobGlnaHRzIHRoYXQgYEB0aHJlYWRfcGlkYCBpcyBwcm90ZWN0ZWQgdW50aWwgYGZyZWVfcGlkcygpYCBoYXBwZW5zIGFmdGVyIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBDbGVhcmx5LCB0aGlzIGlzIHRvIGVuc3VyZSB0aGF0IGEgcmVmZXJlbmNlIHRvIHRoZSBQSUQgaXMgcmV0YWluZWQsIHByZXZlbnRpbmcgaXQgZnJvbSBiZWNvbWluZyBwcmVtYXR1cmVseSBpbnZhbGlkLiAgSSBzdXNwZWN0IHRoaXMgJiMzNDtwaW5uaW5nJiMzNDsgbWVjaGFuaXNtIGlzIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgUElEIGNvdWxkIGJlIHJlLXVzZWQgYmVmb3JlIHRoZSBuZWNlc3Nhcnkgb3BlcmF0aW9ucyB1c2luZyBpdCBhcmUgY29tcGxldGUuCgpUaGUgc3Vic2VxdWVudCBgcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZClgIGNhbGwsIGp1c3QgYmVmb3JlIHJlbGVhc2luZyB0aGUgUElELCBpcyBhbm90aGVyIGNsdWUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgcHJvY2VzcyBJRCBpcyB1c2VkIGluIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0gYW5kIGxpa2VseSBuZWVkcyB0byBiZSBzeW5jaHJvbml6ZWQgb3IgZmx1c2hlZCBiZWZvcmUgaXQgaXMgZGVhbGxvY2F0ZWQuIFRoZSBhZGRpdGlvbiBvZiBgcHV0X3BpZCgpYCBlbnN1cmVzIHRoYXQgdGhlIHJlZmVyZW5jZSBpcyByZWxlYXNlZCBhZnRlciBmbHVzaGluZywgY29tcGxldGluZyB0aGUgbGlmZWN5Y2xlLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiBgcHV0X3BpZCgpYCBhbmQgdW5kZXJzdGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGludm9sdmVkLCBidXQgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIHJvYnVzdCBQSUQgbWFuYWdlbWVudCBpbiBwbGFjZSBoZXJlLiBNeSBndWVzcyBpcyB0aGlzIGlzIGEgZ29vZCBjaGFuZ2UgYW5kIHRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhIHN1YnRsZSBidWcgdGhhdCB0aGlzIGZpeCBhZGRyZXNzZXMuIEkgd291bGQgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIG1vcmUgZGV0YWlsIHRvIGJlIHN1cmUsIGJ1dCBpdCBsb29rcyBsaWtlIGEgd2VsbC10YXJnZXRlZCBmaXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZXhpdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNDU6XHR7XG4gMjQ2Olx0fVxuIDI0NzpcdFxuIDI0ODpcdHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiAyNDk6XHR7XG4gMjUwOlx0XHRzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgcG9zdDtcbiAyNTE6XHRcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyO1xuIDI1MjpcdFx0c3RydWN0IHBpZCAqdGhyZWFkX3BpZDtcbiAyNTM6XHRcdGludCB6YXBfbGVhZGVyO1xuIDI1NDpcdHJlcGVhdDpcbiAyNTU6XHRcdG1lbXNldChcdTAwMjZwb3N0LCAwLCBzaXplb2YocG9zdCkpO1xuIDI1NjpcdFxuIDI1NzpcdFx0LyogZG9uJiMzOTt0IG5lZWQgdG8gZ2V0IHRoZSBSQ1UgcmVhZGxvY2sgaGVyZSAtIHRoZSBwcm9jZXNzIGlzIGRlYWQgYW5kXG4gMjU4Olx0XHQgKiBjYW4mIzM5O3QgYmUgbW9kaWZ5aW5nIGl0cyBvd24gY3JlZGVudGlhbHMuICovXG4gMjU5Olx0XHRkZWNfcmxpbWl0X3Vjb3VudHModGFza191Y291bnRzKHApLCBVQ09VTlRfUkxJTUlUX05QUk9DLCAxKTtcbiAyNjA6XHRcbiAyNjE6XHRcdHBpZGZzX2V4aXQocCk7XG4gMjYyOlx0XHRjZ3JvdXBfdGFza19yZWxlYXNlKHApO1xuIDI2MzpcdFxuIDI2NDpcdFx0LyogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgbWF5IHNldCBpdCB0byBOVUxMLiAqL1xuIDI2NTpcdFx0dGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpO1xuIDI2NjpcdFxuIDI2NzpcdFx0d3JpdGVfbG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4gMjY4Olx0XHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xuIDI2OTpcdFx0X19leGl0X3NpZ25hbChcdTAwMjZwb3N0LCBwKTtcbiAyNzA6XHRcbiAyNzE6XHRcdC8qXG4gMjcyOlx0XHQgKiBJZiB3ZSBhcmUgdGhlIGxhc3Qgbm9uLWxlYWRlciBtZW1iZXIgb2YgdGhlIHRocmVhZFxuIDI3MzpcdFx0ICogZ3JvdXAsIGFuZCB0aGUgbGVhZGVyIGlzIHpvbWJpZSwgdGhlbiBub3RpZnkgdGhlXG4gMjc0Olx0XHQgKiBncm91cCBsZWFkZXImIzM5O3MgcGFyZW50IHByb2Nlc3MuIChpZiBpdCB3YW50cyBub3RpZmljYXRpb24uKVxuIDI3NTpcdFx0ICovXG4gMjc2Olx0XHR6YXBfbGVhZGVyID0gMDtcbiAyNzc6XHRcdGxlYWRlciA9IHAtXHUwMDNlZ3JvdXBfbGVhZGVyO1xuIDI3ODpcdFx0aWYgKGxlYWRlciAhPSBwIFx1MDAyNlx1MDAyNiB0aHJlYWRfZ3JvdXBfZW1wdHkobGVhZGVyKVxuIDI3OTpcdFx0XHRcdFx1MDAyNlx1MDAyNiBsZWFkZXItXHUwMDNlZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSkge1xuIDI4MDpcdFx0XHQvKiBmb3IgcGlkZnNfZXhpdCgpIGFuZCBkb19ub3RpZnlfcGFyZW50KCkgKi9cbiAyODE6XHRcdFx0aWYgKGxlYWRlci1cdTAwM2VzaWduYWwtXHUwMDNlZmxhZ3MgXHUwMDI2IFNJR05BTF9HUk9VUF9FWElUKVxuIDI4MjpcdFx0XHRcdGxlYWRlci1cdTAwM2VleGl0X2NvZGUgPSBsZWFkZXItXHUwMDNlc2lnbmFsLVx1MDAzZWdyb3VwX2V4aXRfY29kZTtcbiAyODM6XHRcdFx0LypcbiAyODQ6XHRcdFx0ICogSWYgd2Ugd2VyZSB0aGUgbGFzdCBjaGlsZCB0aHJlYWQgYW5kIHRoZSBsZWFkZXIgaGFzXG4gMjg1Olx0XHRcdCAqIGV4aXRlZCBhbHJlYWR5LCBhbmQgdGhlIGxlYWRlciYjMzk7cyBwYXJlbnQgaWdub3JlcyBTSUdDSExELFxuIDI4NjpcdFx0XHQgKiB0aGVuIHdlIGFyZSB0aGUgb25lIHdobyBzaG91bGQgcmVsZWFzZSB0aGUgbGVhZGVyLlxuIDI4NzpcdFx0XHQgKi9cbiAyODg6XHRcdFx0emFwX2xlYWRlciA9IGRvX25vdGlmeV9wYXJlbnQobGVhZGVyLCBsZWFkZXItXHUwMDNlZXhpdF9zaWduYWwpO1xuIDI4OTpcdFx0XHRpZiAoemFwX2xlYWRlcilcbiAyOTA6XHRcdFx0XHRsZWFkZXItXHUwMDNlZXhpdF9zdGF0ZSA9IEVYSVRfREVBRDtcbiAyOTE6XHRcdH1cbiAyOTI6XHRcbiAyOTM6XHRcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4gMjk0Olx0XHRwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKTtcbiAyOTU6XHRcdHB1dF9waWQodGhyZWFkX3BpZCk7XG4gMjk2Olx0XHRleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTtcbiAyOTc6XHRcdGFkZF9kZXZpY2VfcmFuZG9tbmVzcyhcdTAwMjZwLVx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUsXG4gMjk4Olx0XHRcdFx0ICAgICAgc2l6ZW9mKHAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSkpO1xuIDI5OTpcdFx0ZnJlZV9waWRzKHBvc3QucGlkcyk7XG4gMzAwOlx0XHRyZWxlYXNlX3RocmVhZChwKTtcbiAzMDE6XHRcdC8qXG4gMzAyOlx0XHQgKiBUaGlzIHRhc2sgd2FzIGFscmVhZHkgcmVtb3ZlZCBmcm9tIHRoZSBwcm9jZXNzL3RocmVhZC9waWQgbGlzdHNcbiAzMDM6XHRcdCAqIGFuZCBsb2NrX3Rhc2tfc2lnaGFuZChwKSBjYW4mIzM5O3Qgc3VjY2VlZC4gTm9ib2R5IGVsc2UgY2FuIHRvdWNoXG4gMzA0Olx0XHQgKiAtXHUwMDNlcGVuZGluZyBvciwgaWYgZ3JvdXAgZGVhZCwgc2lnbmFsLVx1MDAzZXNoYXJlZF9wZW5kaW5nLiBXZSBjYW4gY2FsbFxuIDMwNTpcdFx0ICogZmx1c2hfc2lncXVldWUoKSBsb2NrbGVzcy5cbiAzMDY6XHRcdCAqL1xuIDMwNzpcdFx0Zmx1c2hfc2lncXVldWUoXHUwMDI2cC1cdTAwM2VwZW5kaW5nKTtcbiAzMDg6XHRcdGlmICh0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKVxuIDMwOTpcdFx0XHRmbHVzaF9zaWdxdWV1ZShcdTAwMjZwLVx1MDAzZXNpZ25hbC1cdTAwM2VzaGFyZWRfcGVuZGluZyk7XG4gMzEwOlx0XG4gMzExOlx0XHRwdXRfdGFza19zdHJ1Y3RfcmN1X3VzZXIocCk7XG4gMzEyOlx0XG4gMzEzOlx0XHRwID0gbGVhZGVyO1xuIDMxNDpcdFx0aWYgKHVubGlrZWx5KHphcF9sZWFkZXIpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxODQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBjaGFuZ2UgdG8gYHJlbGVhc2VfdGFza2AgaXMgaW1wb3J0YW50IGJlY2F1c2UgaXQmIzM5O3MgaW4gY29yZSBrZXJuZWwgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSB0YXNrIGxpZmVjeWNsZSwgYW5kIGRlYWxzIHdpdGggUElEIG1hbmFnZW1lbnQuIEl0JiMzOTtzIHRyaWdnZXJlZCBkdXJpbmcgcHJvY2VzcyB0ZXJtaW5hdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgcHJldHR5IGZ1bmRhbWVudGFsLiBUaGUgcGF0Y2ggaXMgZml4aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gaG93IHRoZSBgdGhyZWFkX3BpZGAgaXMgaGFuZGxlZCBkdXJpbmcgdGFzayByZWxlYXNlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBwcm9jX2ZsdXNoX3BpZGAuIFByZXZpb3VzbHksIHRoZSBjb2RlIGFzc3VtZWQgYHRocmVhZF9waWRgIHdvdWxkbiYjMzk7dCBkaXNhcHBlYXIsIGJ1dCB0aGlzIGNoYW5nZSBhZGRzIHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgKGBnZXRfcGlkKClgLCBgcHV0X3BpZCgpYCkgdG8gZ3VhcmFudGVlIGl0cyBzYWZldHkuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBjaGVjayB0aGUgY3JpdGVyaWEuIEl0JiMzOTtzICpkZWZpbml0ZWx5KiBub3QgZG9jdW1lbnRhdGlvbiwgY29tbWVudHMsIGRlY29yYXRpdmUgbG9nZ2luZywgY29uc3RhbnQgY2hhbmdlcywgb3IgdW5yZWFjaGFibGUgY29kZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIEl0JiMzOTtzIG1vZGlmeWluZyAqcmVhY2hhYmxlLCBjb3JlIGtlcm5lbCBsb2dpYyouIFNwZWNpZmljYWxseSwgYGtlcm5lbC9leGl0LmNgIGRlYWxzIHdpdGggcHJvY2VzcyB0ZXJtaW5hdGlvbiwgYW5kIGByZWxlYXNlX3Rhc2tgIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgdGFzayBleGl0cy4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUga2VybmVsIQoKSSBuZWVkIHRvIGRlY2lkZSBpZiBgcmVsZWFzZV90YXNrYCBpcyBhICYjMzQ7aG90IHBhdGgmIzM0OyBmdW5jdGlvbi4gSWYgaXQgaXMsIEkgc2hvdWxkIGF2b2lkIGxpc3RpbmcgaXQgYmVjYXVzZSBvZiBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBIbW0uLi4gYHJlbGVhc2VfdGFza2AgaXMgY2FsbGVkICpldmVyeSogdGltZSBhIHRhc2sgZXhpdHMg4oCTIHRoYXQgc291bmRzIHByZXR0eSBob3QuIEJ1dCB0aGVuIGFnYWluLCBpcyBpdCBob3QtcGF0aCAqZ2VuZXJpYyogbGlrZSBhIGNvbW1vbiBzeXN0ZW0gY2FsbCwgb3IgaXMgaXQgYSBzcGVjaWZpYyBlbnRyeSBwb2ludD8gSXQgc2VlbXMgbW9yZSBzcGVjaWZpYyB0byB0YXNrIGV4aXQuIE1heWJlLCBpbiB0aGlzIGNvbnRleHQsIGl0JiMzOTtzICpub3QqIGEgJiMzNDtnZW5lcmljIGhvdCBwYXRoJiMzNDsgYXMgSSB0aGluayBhYm91dCB0aGlzLiBJdCBpcyBhIGtleSBlbnRyeSBwb2ludCBkdXJpbmcgYSBjZXJ0YWluIGFjdGlvbiwgYnV0IGl0IGlzbiYjMzk7dCBsaWtlIGEgZmlsZSBzeXN0ZW0gcmVhZCBjYWxsLgoKT2theSwgbGV0JiMzOTtzIHRoaW5rIGFib3V0IGBGb2N1c1N5bWJvbHNgLiBTaG91bGQgSSBpbmNsdWRlIGByZWxlYXNlX3Rhc2tgPyBJdCBpcyAqdGhlKiBtb2RpZmllZCBmdW5jdGlvbi4gSXQgKnNlZW1zKiBsaWtlIEkgc2hvdWxkLiBJcyBgcHJvY19mbHVzaF9waWRgIGEgZnVuY3Rpb24gdG8gZm9jdXMgb24/IEkgc2hvdWxkIGxvb2sgZm9yIGNhbGxlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gbWFrZSBhIGJldHRlciBkZWNpc2lvbi4gSSB3aWxsIG5lZWQgdG8gY2hlY2sgdGhvc2UuIFRoaXMgYWJzb2x1dGVseSBzZWVtcyB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3JlbGVhc2VfdGFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9leGl0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2V4aXQuYz0xMjM9bGF0ZV9pbml0Y2FsbChrZXJuZWxfZXhpdF9zeXNmc19pbml0KTtcbi0tXG5rZXJuZWwvZXhpdC5jLTEyNi0vKlxua2VybmVsL2V4aXQuYzoxMjc6ICogRm9yIHRoaW5ncyByZWxlYXNlX3Rhc2soKSB3b3VsZCBsaWtlIHRvIGRvICphZnRlciogdGFza2xpc3RfbG9jayBpcyByZWxlYXNlZC5cbmtlcm5lbC9leGl0LmMtMTI4LSAqL1xua2VybmVsL2V4aXQuYzoxMjk6c3RydWN0IHJlbGVhc2VfdGFza19wb3N0IHtcbmtlcm5lbC9leGl0LmMtMTMwLVx0c3RydWN0IHBpZCAqcGlkc1tQSURUWVBFX01BWF07XG4tLVxua2VybmVsL2V4aXQuYy0xMzItXG5rZXJuZWwvZXhpdC5jOjEzMzpzdGF0aWMgdm9pZCBfX3VuaGFzaF9wcm9jZXNzKHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCAqcG9zdCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxua2VybmVsL2V4aXQuYy0xMzQtXHRcdFx0ICAgICBib29sIGdyb3VwX2RlYWQpXG4tLVxua2VybmVsL2V4aXQuYy0xNTctICovXG5rZXJuZWwvZXhpdC5jOjE1ODpzdGF0aWMgdm9pZCBfX2V4aXRfc2lnbmFsKHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCAqcG9zdCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG5rZXJuZWwvZXhpdC5jLTE1OS17XG4tLVxua2VybmVsL2V4aXQuYz0yNDQ9dm9pZCBfX3dlYWsgcmVsZWFzZV90aHJlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpkZWFkX3Rhc2spXG4tLVxua2VybmVsL2V4aXQuYy0yNDctXG5rZXJuZWwvZXhpdC5jOjI0ODp2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5rZXJuZWwvZXhpdC5jLTI0OS17XG5rZXJuZWwvZXhpdC5jOjI1MDpcdHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCBwb3N0O1xua2VybmVsL2V4aXQuYy0yNTEtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxlYWRlcjtcbi0tXG5rZXJuZWwvZXhpdC5jLTI2Ny1cdHdyaXRlX2xvY2tfaXJxKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xua2VybmVsL2V4aXQuYzoyNjg6XHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xua2VybmVsL2V4aXQuYy0yNjktXHRfX2V4aXRfc2lnbmFsKFx1MDAyNnBvc3QsIHApO1xuLS1cbmtlcm5lbC9leGl0LmM9NjMwPXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZpbmRfY2hpbGRfcmVhcGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqZmF0aGVyLFxuLS1cbmtlcm5lbC9leGl0LmMtNjUyLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlcHRyYWNlX2VudHJ5KTtcbmtlcm5lbC9leGl0LmM6NjUzOlx0XHRyZWxlYXNlX3Rhc2socCk7XG5rZXJuZWwvZXhpdC5jLTY1NC1cdH1cbi0tXG5rZXJuZWwvZXhpdC5jPTY2OT1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX25ld19yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsXG4tLVxua2VybmVsL2V4aXQuYy03MDQtLypcbmtlcm5lbC9leGl0LmM6NzA1OiogQW55IHRoYXQgbmVlZCB0byBiZSByZWxlYXNlX3Rhc2smIzM5O2QgYXJlIHB1dCBvbiB0aGUgQGRlYWQgbGlzdC5cbmtlcm5lbC9leGl0LmMtNzA2LSAqL1xuLS1cbmtlcm5lbC9leGl0LmM9NzcwPXN0YXRpYyB2b2lkIGV4aXRfbm90aWZ5KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgZ3JvdXBfZGVhZClcbi0tXG5rZXJuZWwvZXhpdC5jLTgwOC1cdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZXB0cmFjZV9lbnRyeSk7XG5rZXJuZWwvZXhpdC5jOjgwOTpcdFx0cmVsZWFzZV90YXNrKHApO1xua2VybmVsL2V4aXQuYy04MTAtXHR9XG4tLVxua2VybmVsL2V4aXQuYz0xMjA2PXN0YXRpYyBpbnQgd2FpdF90YXNrX3pvbWJpZShzdHJ1Y3Qgd2FpdF9vcHRzICp3bywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9leGl0LmMtMTMxMi1cdGlmIChzdGF0ZSA9PSBFWElUX0RFQUQpXG5rZXJuZWwvZXhpdC5jOjEzMTM6XHRcdHJlbGVhc2VfdGFzayhwKTtcbmtlcm5lbC9leGl0LmMtMTMxNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTU2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgZm9yIGByZWxlYXNlX3Rhc2tgJiMzOTtzIFZpc2liaWxpdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgdGhpcyBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gZ29pbmcgdG8gZG8gaXMgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGFjdHVhbGx5IG1lYW50IHRvIGJlIGFjY2Vzc2VkIG91dHNpZGUgaXRzIGltbWVkaWF0ZSBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgZGVjbGFyZWQgaW4gYSBoZWFkZXIgZmlsZSBvciBtYXJrZWQgd2l0aCBhbiBhcHByb3ByaWF0ZSBsaW5rYWdlIHNwZWNpZmllcj8gT3IsIG1vcmUgYnJvYWRseSwgaXMgaXQgKnVzZWQqIGluIGFueSBoZWFkZXIgZmlsZXM/IFRoaXMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgaXQmIzM5O3MgcGFydCBvZiB0aGUgcHVibGljIEFQSSwgbWVhbnQgdG8gYmUgdXNlZCBieSBvdGhlciBtb2R1bGVzLCBvciBpZiBpdCYjMzk7cyBtZWFudCB0byBiZSBhbiBpbnRlcm5hbCB1dGlsaXR5LiBUaGlzIGRldGVybWluYXRpb24gaW5mbHVlbmNlcyBob3cgSSYjMzk7bGwgdHJlYXQgaXQgaW4gYW55IHJlZmFjdG9yaW5nIG9yIGFuYWx5c2lzLiBVbmRlcnN0YW5kaW5nIGl0cyB2aXNpYmlsaXR5IGlzIGNydWNpYWwgYmVmb3JlIG1ha2luZyBhbnkgZnVydGhlciBkZWNpc2lvbnMgYWJvdXQgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVsZWFzZV90YXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg9Nzk9ZXh0ZXJuIHZvaWQgZm9ya19pbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtODAtXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaDo4MTpleHRlcm4gdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICogcCk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaC04Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDU4CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIGBwcm9jX2ZsdXNoX3BpZGAqKgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhpcy4gSSYjMzk7dmUgZ290IGEgc3BlY2lmaWMgaXNzdWUgSSYjMzk7bSB0YWNrbGluZywgYW5kIEkgdGhpbmsgYHByb2NfZmx1c2hfcGlkYCBtaWdodCBiZSByZWxldmFudC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBjaGVjay4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBpbnMgYW5kIG91dHMgb2YgdGhpcyBmdW5jdGlvbiDigJMgc2VlIGhvdyBpdCYjMzk7cyB1c2VkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGUgY29udGV4dCBvZiB0aGUgY29kZSwgbWF5YmUgSSBzaG91bGQgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGNsdWVzLiBUaGlzIGluaXRpYWwgc3RlcCBpcyBhYm91dCBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYmVoYXZpb3IuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiB0aGUgaW52ZXN0aWdhdGlvbi4gR290dGEgYmUgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfZmx1c2hfcGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvcHJvYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9iYXNlLmM9MTk3Nj1zdGF0aWMgc3RydWN0IGlub2RlICpwcm9jX3BpZF9tYWtlX2Jhc2VfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9wcm9jL2Jhc2UuYy0xOTg2LVxuZnMvcHJvYy9iYXNlLmM6MTk4NzpcdC8qIExldCBwcm9jX2ZsdXNoX3BpZCBmaW5kIHRoaXMgZGlyZWN0b3J5IGlub2RlICovXG5mcy9wcm9jL2Jhc2UuYy0xOTg4LVx0ZWkgPSBQUk9DX0koaW5vZGUpO1xuLS1cbmZzL3Byb2MvYmFzZS5jPTM0MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2NfdGdpZF9iYXNlX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMzQzMC0vKipcbmZzL3Byb2MvYmFzZS5jOjM0MzE6ICogcHJvY19mbHVzaF9waWQgLSAgUmVtb3ZlIGRjYWNoZSBlbnRyaWVzIGZvciBAcGlkIGZyb20gdGhlIC9wcm9jIGRjYWNoZS5cbmZzL3Byb2MvYmFzZS5jLTM0MzItICogQHBpZDogcGlkIHRoYXQgc2hvdWxkIGJlIGZsdXNoZWQuXG4tLVxuZnMvcHJvYy9iYXNlLmMtMzQ0OC1cbmZzL3Byb2MvYmFzZS5jOjM0NDk6dm9pZCBwcm9jX2ZsdXNoX3BpZChzdHJ1Y3QgcGlkICpwaWQpXG5mcy9wcm9jL2Jhc2UuYy0zNDUwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk0NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgS2VybmVsIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZXJlIGFyZSBhbnkgYENPTkZJR2Agb3B0aW9ucyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgYmVoYXZpb3Igb2YgYHJlbGVhc2VfdGFza2Agb3IgdGhlIGBrZXJuZWwvZXhpdC5jYCBjb2RlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IGBrZXJuZWwvZXhpdC5jYCBpcyBmdW5kYW1lbnRhbDsgaXQmIzM5O3MgdW5jb25kaXRpb25hbGx5IGJha2VkIGludG8gdGhlIGtlcm5lbCBidWlsZCwgcmlnaHQ/IEJ1dCBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qLgoKTm93LCBgcHJvY19mbHVzaF9waWRgIGlzIGEgZGlmZmVyZW50IGFuaW1hbC4gSSByZWNhbGwgaXQgcmVzaWRpbmcgd2l0aGluIGBmcy9wcm9jL2Jhc2UuY2AsIGFuZCBteSBndXQgZmVlbGluZyBpcyB0aGF0IGl0cyBpbmNsdXNpb24gaXMgZ2F0ZWQgYnkgYENPTkZJR19QUk9DX0ZTYC4gSG93ZXZlciwgcmVseWluZyBvbiBtZW1vcnkgYWxvbmUgaXNuJiMzOTt0IGdvb2QgZW5vdWdoLCBhbmQgSSBkb24mIzM5O3Qgd2FudCBhbnkgYXNzdW1wdGlvbnMsIHNvIGl0JiMzOTtzIGJlc3QgdG8gdmVyaWZ5IHRoaXMgZGVmaW5pdGl2ZWx5LiBUbyBkbyB0aGF0LCBJJiMzOTtsbCBnbyBkaXJlY3RseSB0byB0aGUgc291cmNlIG9mIHRydXRoOiBgaW5jbHVkZS9saW51eC9wcm9jX2ZzLmhgLiBUaGF0IGhlYWRlciBmaWxlIHNob3VsZCBjbGFyaWZ5IHdoZXRoZXIgYHByb2NfZmx1c2hfcGlkYCBpcyBhbHdheXMgcHJlc2VudCBvciBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUaW1lIHRvIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcHJvY19mcy5oPTg1PWV4dGVybiB2b2lkIHByb2Nfcm9vdF9pbml0KHZvaWQpO1xuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmg6ODY6ZXh0ZXJuIHZvaWQgcHJvY19mbHVzaF9waWQoc3RydWN0IHBpZCAqKTtcbmluY2x1ZGUvbGludXgvcHJvY19mcy5oLTg3LVxuLS1cbmluY2x1ZGUvbGludXgvcHJvY19mcy5oPTE3Mj1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY19yb290X2luaXQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaC0xNzUtXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaDoxNzY6c3RhdGljIGlubGluZSB2b2lkIHByb2NfZmx1c2hfcGlkKHN0cnVjdCBwaWQgKnBpZClcbmluY2x1ZGUvbGludXgvcHJvY19mcy5oLTE3Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NDcKCQkJCQkJCW91dHB1dDogMTE4CgkJCQkJCQl0aG91Z2h0czogNDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBgcHJvY19mbHVzaF9waWRgIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBwcm9jX2ZsdXNoX3BpZGAgaXMgYSBwbGFjZWhvbGRlciB3aGVuIGBDT05GSUdfUFJPQ19GU2AgaXMgZGlzYWJsZWQsIGJ1dCBiZWNvbWVzIGNydWNpYWwgZm9yIGZsdXNoaW5nIHRoZSBwcm9jIGRjYWNoZSB3aGVuIGBQUk9DX0ZTYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIGBDT05GSUdfUFJPQ19GU2Aga2V5IHRvIHByb3BlciBmdXp6aW5nIG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSBjb25maXJtLi4uIHllcywgYFBST0NfRlNgIGl0IGlzLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHJpZ2h0IGZvY3VzIHN5bWJvbHMuIFRoZSBwcmltYXJ5IGZ1bmN0aW9uIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaCBpcyBgcmVsZWFzZV90YXNrYCwgd2l0aCBgcHJvY19mbHVzaF9waWRgIGJlaW5nIHRoZSBjYWxsZWQgZnVuY3Rpb24gdXNpbmcgdGhlIHBpbm5lZCBwaWQuIEJvdGggYXJlIHJlbGV2YW50LCBidXQgbGV0JiMzOTtzIGJlIHN0cmF0ZWdpYyBhYm91dCB3aGF0IGdvZXMgaW4gdGhlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGJlc3QgcHJhY3RpY2VzLi4uIGF2b2lkIHRoZSBnZW5lcmljICYjMzQ7aG90LXBhdGgmIzM0OyBmdW5jdGlvbnMuIFdlIHdhbnQgZW50cnlwb2ludHMsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCwgc3RhdGljIGhlbHBlcnMgdGhhdCB0aGUgY29tcGlsZXIgaW5saW5lcyBhbmQgYXJlIHRoZW4ganVzdCBub2lzZS4KCklzIGByZWxlYXNlX3Rhc2tgIGEgaG90IHBhdGg/IE5vLCBgcmVsZWFzZV90YXNrYCBzZWVtcyB0byBiZSB0cmlnZ2VyZWQgZHVyaW5nIHRhc2sgcmVhcGluZyBvciByZWxlYXNlIOKAkyBgZXhpdF9ub3RpZnlgLCBgd2FpdF90YXNrX3pvbWJpZWAgYW5kIHNpbWlsYXIgZXZlbnRzLiBJdCYjMzk7cyBhbHNvIG5vdCBzdGF0aWMgYW5kIGFwcGVhcnMgdG8gYmUgYSBjbGVhciBlbnRyeSBwb2ludC4gSSYjMzk7bGwgaW5jbHVkZSBib3RoIGByZWxlYXNlX3Rhc2tgIGFuZCBgcHJvY19mbHVzaF9waWRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYC4KCk5leHQsIHRvIGRvdWJsZS1jaGVjayB0aGUgZW5hYmxpbmcgY29uZmlndXJhdGlvbi4gV2UmIzM5O3JlIGNsZWFyIHRoYXQgaXQgaXMgdGhlIGBQUk9DX0ZTYCBvcHRpb24uIEkgc2hvdWxkIG5vdGUgdGhhdCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGVyZSYjMzk7cyBubyBgQ09ORklHX2AgcHJlZml4IGhlcmUuCgpGaW5hbGx5LCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBmbGFnIGBXb3J0aEZ1enppbmdgIGFzIGB0cnVlYC4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBzdWNjaW5jdGx5IHN1bW1hcml6ZSB0aGUgcGF0Y2gmIzM5O3MgcHVycG9zZTogaXQgcmVzb2x2ZXMgYSByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gdGhlIGNvcmUgcHJvY2VzcyBleGl0IGNvZGUgKGByZWxlYXNlX3Rhc2tgKSBieSBwaW5uaW5nIGB0aHJlYWRfcGlkYCB3aXRoIGBnZXRfcGlkKClgIGJlZm9yZSBgX191bmhhc2hfcHJvY2VzcygpYCBhbmQgcmVsZWFzaW5nIGl0IHdpdGggYHB1dF9waWQoKWAgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKClgLiBJJiMzOTt2ZSBnb3QgbXkgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtyZWxlYXNlX3Rhc2smIzM0OywgJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7XWAsIGFuZCBteSBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtQUk9DX0ZTJiMzNDtdYC4KCkFscmlnaHQsIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlbGVhc2VfdGFzayYjMzQ7LAogICAgJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHRhc2sgcmVsZWFzZSBsb2dpYyBpbiByZWxlYXNlX3Rhc2soKSBieSBleHBsaWNpdGx5IGFjcXVpcmluZyBhIHJlZmVyZW5jZSB0byB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRhc2sgdGVhcmRvd24gYW5kIHByb2MgZGNhY2hlIGZsdXNoaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVsZWFzZV90YXNrJiMzNDssCiAgICAmIzM0O3Byb2NfZmx1c2hfcGlkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgdGFzayByZWxlYXNlIGxvZ2ljIGluIHJlbGVhc2VfdGFzaygpIGJ5IGV4cGxpY2l0bHkgYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHRvIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBhbmQgcmVsZWFzaW5nIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGFzayB0ZWFyZG93biBhbmQgcHJvYyBkY2FjaGUgZmx1c2hpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIC8gcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGluIHJlbGVhc2VfdGFzaygpIGJ5IHRha2luZyBhIHJlZmVyZW5jZSB0byB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGJlZm9yZSBfX2V4aXRfc2lnbmFsKCkgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBwaWQgc3RydWN0dXJlJiMzOTtzIHJlZmVyZW5jZSBjb3VudCBkcm9wcGVkIHRvIHplcm8gcHJlbWF0dXJlbHkuIFN1Y2ggbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIGZ1bGx5IGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGNvbXBsZXggc3RydWN0IGluaXRpYWxpemF0aW9ucywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOGY0YTUwNGJhZjI2ZDc0Zjc4OWI3NjI1YTEzMzk3MzRlZDg0YzkxZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjQyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggOTc2ODZhZjg5NTAxMy4uNDYxZTI4MzRmY2I0NSAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvZXhpdC5jCkBAIC0yNjEsOCAmIzQzOzI2MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAlwaWRmc19leGl0KHApOwogCWNncm91cF90YXNrX3JlbGVhc2UocCk7CiAKLQkvKiBSZXRyaWV2ZSBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi8KLQl0aHJlYWRfcGlkID0gdGFza19waWQocCk7CiYjNDM7CS8qIFBpbiBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi8KJiM0MzsJdGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpOwogCiAJd3JpdGVfbG9ja19pcnEoJmFtcDt0YXNrbGlzdF9sb2NrKTsKIAlwdHJhY2VfcmVsZWFzZV90YXNrKHApOwpAQCAtMjkxLDggJiM0MzsyOTEsOCBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJfQogCiAJd3JpdGVfdW5sb2NrX2lycSgmYW1wO3Rhc2tsaXN0X2xvY2spOwotCS8qIEB0aHJlYWRfcGlkIGNhbiYjMzk7dCBnbyBhd2F5IHVudGlsIGZyZWVfcGlkcygpIGJlbG93ICovCiAJcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7CiYjNDM7CXB1dF9waWQodGhyZWFkX3BpZCk7CiAJZXhpdF9jcmVkX25hbWVzcGFjZXMocCk7CiAJYWRkX2RldmljZV9yYW5kb21uZXNzKCZhbXA7cC0mZ3Q7c2Uuc3VtX2V4ZWNfcnVudGltZSwKIAkJCSAgICAgIHNpemVvZihwLSZndDtzZS5zdW1fZXhlY19ydW50aW1lKSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjM2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHJlbGVhc2VfdGFza2AgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgY29udGV4dCBoZXJlIGlzIHRoZSBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC9leGl0LmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBrZXJuZWwgY2xlYW5zIHVwIGEgdGFzayB0aGF0JiMzOTtzIGV4aXRpbmcuIFRoZSBwYXRjaCBsb29rcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBsZXQmIzM5O3MgYnJlYWsgaXQgZG93biB0byBlbnN1cmUgd2UgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLgoKRmlyc3QsIEkgc2VlIHRoZSBjaGFuZ2UgZm9jdXNlcyBvbiBob3cgYEB0aHJlYWRfcGlkYCBpcyBoYW5kbGVkLiBJdCBsb29rcyBsaWtlIHRoZSBpbnRlbnRpb24gaGVyZSBpcyB0byBlbnN1cmUgdGhhdCBgQHRocmVhZF9waWRgIHJlbWFpbnMgdmFsaWQgZXZlbiBhZnRlciBgX191bmhhc2hfcHJvY2VzcygpYCBpcyBjYWxsZWQsIHdoaWNoIGNhbiBwb3RlbnRpYWxseSBzZXQgaXQgdG8gTlVMTC4gIFByZXZpb3VzbHksIHdlIGp1c3QgZ3JhYmJlZCB0aGUgYHRhc2tfcGlkKHApYCB2YWx1ZSwgYnV0IG5vdyB0aGUgY29kZSBpcyBjYWxsaW5nIGBnZXRfcGlkKClgIHRvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBQSUQuIFRoaXMgaW5kaWNhdGVzIHRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIHBvdGVudGlhbCByYWNlIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIHNhZmVseSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIGFuIG9iamVjdCB0aGF0IGNvdWxkIGJlIGludmFsaWRhdGVkIGJ5IGFub3RoZXIgcGFydCBvZiB0aGUga2VybmVsLCBwYXJ0aWN1bGFybHkgaW4gYSBtdWx0aS10aHJlYWRlZCBvciBpbnRlcnJ1cHQtZHJpdmVuIGVudmlyb25tZW50LgoKVGhlIHN1YnNlcXVlbnQgYHByb2NfZmx1c2hfcGlkKClgIGZ1bmN0aW9uIGFwcGVhcnMgdG8gYmUgdXNpbmcgdGhlIHJlZmVyZW5jZWQgYHRocmVhZF9waWRgLCBhbmQgaXQmIzM5O3MgZm9sbG93ZWQgYnkgYSBjb3JyZXNwb25kaW5nIGBwdXRfcGlkKClgLiBUaGlzIGlzIGdyZWF0IGJlY2F1c2UgaXQgZW5zdXJlcyB0aGUgcmVmZXJlbmNlIGNvdW50IGlzIGRlY3JlbWVudGVkIG9uY2Ugd2UmIzM5O3JlIGRvbmUgd2l0aCB0aGUgUElELCB3aGljaCBpcyBjcnVjaWFsIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LiAgSSYjMzk7bSBnbGFkIHRvIHNlZSB0aGF0IGBwdXRfcGlkKClgIGlzIHByZXNlbnQgdG8gbWF0Y2ggdGhlIGluY3JlbWVudCBieSBgZ2V0X3BpZCgpYC4KCk92ZXJhbGwsIHRoaXMgaXMgYSB2ZXJ5IHJlYXNvbmFibGUgY2hhbmdlLiBJdCYjMzk7cyBhIHNtYWxsIGJ1dCBpbXBvcnRhbnQgZml4IHRvIHBvdGVudGlhbGx5IHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgUElEIGxvb2t1cCBkdXJpbmcgcHJvY2VzcyBleGl0LiBJdCYjMzk7cyB0aGUgc29ydCBvZiBjYXJlZnVsIHJlc291cmNlIG1hbmFnZW1lbnQgdGhhdCB3ZSBleHBlY3QgdG8gc2VlLiBJIGNhbuKAmXQgaW1tZWRpYXRlbHkgc2VlIGFueSBvYnZpb3VzIGlzc3VlcywgYW5kIEkmIzM5O2QgYmUgd2lsbGluZyB0byBnaXZlIHRoaXMgYSBxdWljayBzcG90IGNoZWNrIGFuZCBydW4gYSBmZXcgdGVzdHMgb24gbXkgZW5kIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBhcmUgaW50cm9kdWNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZXhpdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCBwb3N0O1xuIDI1MTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXI7XG4gMjUyOlx0XHRzdHJ1Y3QgcGlkICp0aHJlYWRfcGlkO1xuIDI1MzpcdFx0aW50IHphcF9sZWFkZXI7XG4gMjU0Olx0cmVwZWF0OlxuIDI1NTpcdFx0bWVtc2V0KFx1MDAyNnBvc3QsIDAsIHNpemVvZihwb3N0KSk7XG4gMjU2Olx0XG4gMjU3Olx0XHQvKiBkb24mIzM5O3QgbmVlZCB0byBnZXQgdGhlIFJDVSByZWFkbG9jayBoZXJlIC0gdGhlIHByb2Nlc3MgaXMgZGVhZCBhbmRcbiAyNTg6XHRcdCAqIGNhbiYjMzk7dCBiZSBtb2RpZnlpbmcgaXRzIG93biBjcmVkZW50aWFscy4gKi9cbiAyNTk6XHRcdGRlY19ybGltaXRfdWNvdW50cyh0YXNrX3Vjb3VudHMocCksIFVDT1VOVF9STElNSVRfTlBST0MsIDEpO1xuIDI2MDpcdFxuIDI2MTpcdFx0cGlkZnNfZXhpdChwKTtcbiAyNjI6XHRcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XG4gMjYzOlx0XG4gMjY0Olx0XHQvKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4gMjY1Olx0XHR0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7XG4gMjY2Olx0XG4gMjY3Olx0XHR3cml0ZV9sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiAyNjg6XHRcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XG4gMjY5Olx0XHRfX2V4aXRfc2lnbmFsKFx1MDAyNnBvc3QsIHApO1xuIDI3MDpcdFxuIDI3MTpcdFx0LypcbiAyNzI6XHRcdCAqIElmIHdlIGFyZSB0aGUgbGFzdCBub24tbGVhZGVyIG1lbWJlciBvZiB0aGUgdGhyZWFkXG4gMjczOlx0XHQgKiBncm91cCwgYW5kIHRoZSBsZWFkZXIgaXMgem9tYmllLCB0aGVuIG5vdGlmeSB0aGVcbiAyNzQ6XHRcdCAqIGdyb3VwIGxlYWRlciYjMzk7cyBwYXJlbnQgcHJvY2Vzcy4gKGlmIGl0IHdhbnRzIG5vdGlmaWNhdGlvbi4pXG4gMjc1Olx0XHQgKi9cbiAyNzY6XHRcdHphcF9sZWFkZXIgPSAwO1xuIDI3NzpcdFx0bGVhZGVyID0gcC1cdTAwM2Vncm91cF9sZWFkZXI7XG4gMjc4Olx0XHRpZiAobGVhZGVyICE9IHAgXHUwMDI2XHUwMDI2IHRocmVhZF9ncm91cF9lbXB0eShsZWFkZXIpXG4gMjc5Olx0XHRcdFx0XHUwMDI2XHUwMDI2IGxlYWRlci1cdTAwM2VleGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7XG4gMjgwOlx0XHRcdC8qIGZvciBwaWRmc19leGl0KCkgYW5kIGRvX25vdGlmeV9wYXJlbnQoKSAqL1xuIDI4MTpcdFx0XHRpZiAobGVhZGVyLVx1MDAzZXNpZ25hbC1cdTAwM2VmbGFncyBcdTAwMjYgU0lHTkFMX0dST1VQX0VYSVQpXG4gMjgyOlx0XHRcdFx0bGVhZGVyLVx1MDAzZWV4aXRfY29kZSA9IGxlYWRlci1cdTAwM2VzaWduYWwtXHUwMDNlZ3JvdXBfZXhpdF9jb2RlO1xuIDI4MzpcdFx0XHQvKlxuIDI4NDpcdFx0XHQgKiBJZiB3ZSB3ZXJlIHRoZSBsYXN0IGNoaWxkIHRocmVhZCBhbmQgdGhlIGxlYWRlciBoYXNcbiAyODU6XHRcdFx0ICogZXhpdGVkIGFscmVhZHksIGFuZCB0aGUgbGVhZGVyJiMzOTtzIHBhcmVudCBpZ25vcmVzIFNJR0NITEQsXG4gMjg2Olx0XHRcdCAqIHRoZW4gd2UgYXJlIHRoZSBvbmUgd2hvIHNob3VsZCByZWxlYXNlIHRoZSBsZWFkZXIuXG4gMjg3Olx0XHRcdCAqL1xuIDI4ODpcdFx0XHR6YXBfbGVhZGVyID0gZG9fbm90aWZ5X3BhcmVudChsZWFkZXIsIGxlYWRlci1cdTAwM2VleGl0X3NpZ25hbCk7XG4gMjg5Olx0XHRcdGlmICh6YXBfbGVhZGVyKVxuIDI5MDpcdFx0XHRcdGxlYWRlci1cdTAwM2VleGl0X3N0YXRlID0gRVhJVF9ERUFEO1xuIDI5MTpcdFx0fVxuIDI5MjpcdFxuIDI5MzpcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiAyOTQ6XHRcdHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpO1xuIDI5NTpcdFx0cHV0X3BpZCh0aHJlYWRfcGlkKTtcbiAyOTY6XHRcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xuIDI5NzpcdFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFx1MDAyNnAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcbiAyOTg6XHRcdFx0XHQgICAgICBzaXplb2YocC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XG4gMjk5Olx0XHRmcmVlX3BpZHMocG9zdC5waWRzKTtcbiAzMDA6XHRcdHJlbGVhc2VfdGhyZWFkKHApO1xuIDMwMTpcdFx0LypcbiAzMDI6XHRcdCAqIFRoaXMgdGFzayB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhlIHByb2Nlc3MvdGhyZWFkL3BpZCBsaXN0c1xuIDMwMzpcdFx0ICogYW5kIGxvY2tfdGFza19zaWdoYW5kKHApIGNhbiYjMzk7dCBzdWNjZWVkLiBOb2JvZHkgZWxzZSBjYW4gdG91Y2hcbiAzMDQ6XHRcdCAqIC1cdTAwM2VwZW5kaW5nIG9yLCBpZiBncm91cCBkZWFkLCBzaWduYWwtXHUwMDNlc2hhcmVkX3BlbmRpbmcuIFdlIGNhbiBjYWxsXG4gMzA1Olx0XHQgKiBmbHVzaF9zaWdxdWV1ZSgpIGxvY2tsZXNzLlxuIDMwNjpcdFx0ICovXG4gMzA3Olx0XHRmbHVzaF9zaWdxdWV1ZShcdTAwMjZwLVx1MDAzZXBlbmRpbmcpO1xuIDMwODpcdFx0aWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpXG4gMzA5Olx0XHRcdGZsdXNoX3NpZ3F1ZXVlKFx1MDAyNnAtXHUwMDNlc2lnbmFsLVx1MDAzZXNoYXJlZF9wZW5kaW5nKTtcbiAzMTA6XHRcbiAzMTE6XHRcdHB1dF90YXNrX3N0cnVjdF9yY3VfdXNlcihwKTtcbiAzMTI6XHRcbiAzMTM6XHRcdHAgPSBsZWFkZXI7XG4gMzE0Olx0XHRpZiAodW5saWtlbHkoemFwX2xlYWRlcikpXG4gMzE1Olx0XHRcdGdvdG8gcmVwZWF0O1xuIDMxNjpcdH1cbiAzMTc6XHRcbiAzMTg6XHRpbnQgcmN1d2FpdF93YWtlX3VwKHN0cnVjdCByY3V3YWl0ICp3KVxuIDMxOTpcdHtcbiAzMjA6XHRcdGludCByZXQgPSAwO1xuIDMyMTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuIDMyMjpcdFxuIDMyMzpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDMyNDpcdFxuIDMyNTpcdFx0LypcbiAzMjY6XHRcdCAqIE9yZGVyIGNvbmRpdGlvbiB2cyBAdGFzaywgc3VjaCB0aGF0IGV2ZXJ5dGhpbmcgcHJpb3IgdG8gdGhlIGxvYWRcbiAzMjc6XHRcdCAqIG9mIEB0YXNrIGlzIHZpc2libGUuIFRoaXMgaXMgdGhlIGNvbmRpdGlvbiBhcyB0byB3aHkgdGhlIHVzZXIgY2FsbGVkXG4gMzI4Olx0XHQgKiByY3V3YWl0X3dha2UoKSBpbiB0aGUgZmlyc3QgcGxhY2UuIFBhaXJzIHdpdGggc2V0X2N1cnJlbnRfc3RhdGUoKVxuIDMyOTpcdFx0ICogYmFycmllciAoQSkgaW4gcmN1d2FpdF93YWl0X2V2ZW50KCkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyOTAKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAzODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGEgY29kZSBzbmlwcGV0IHRoYXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBgdGhyZWFkX3BpZGAgYW5kIFBJRCBtYW5hZ2VtZW50LiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDogZ2V0IHRoZSBQSUQsIGZsdXNoIGl0LCBhbmQgdGhlbiBmcmVlIHNvbWUgUElEIHN0cnVjdHVyZXMuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBgZ2V0X3BpZCgpYCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGFuZCBgcHV0X3BpZCgpYCBhZnRlciBpdC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB3aHkgdGhlIGNoYW5nZT8gQWgsIHJpZ2h0LCBpdCYjMzk7cyBsaWtlbHkgYSBsaWZldGltZSBpc3N1ZS4gVGhlIGNvbW1lbnQgaGl0cyB0aGUgbmFpbCBvbiB0aGUgaGVhZCDigJMgYHRocmVhZF9waWRgIG1pZ2h0IGhhdmUgYmVlbiBmcmVlZCBvciBoYXZlIGl0cyByZWZlcmVuY2UgY291bnQgZHJvcCB0byB6ZXJvIGJlZm9yZSBgcHJvY19mbHVzaF9waWQoKWAgaXMgY2FsbGVkLCBlc3BlY2lhbGx5IGR1cmluZyBgX19leGl0X3NpZ25hbCgpYCBvciBgX191bmhhc2hfcHJvY2Vzc2AgaWYgdGhlIFBJRCB3YXNuJiMzOTt0IHByb3Blcmx5IHBpbm5lZC4gVGhpcyBpcyBhIGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uCgpOb3csIGxldCYjMzk7cyBkbyBhIHF1aWNrIG1lbnRhbCBzd2VlcCBmb3Igb3RoZXIgcG90ZW50aWFsIGlzc3Vlcy4gSXMgdGhlcmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZD8gQW55IGNvcGllcyB0byB1c2VyLXNwYWNlPyBVbmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHM/IE9yIGFueXRoaW5nIHRoYXQgS01TQU4gbWlnaHQgZmxhZz8gTm8sIG5vdCB0aGF0IEkgY2FuIHNlZS4gYGdldF9waWQodGFza19waWQocCkpYCBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGBzdHJ1Y3QgcGlkYCwgYHB1dF9waWQodGhyZWFkX3BpZClgIGRlY3JlbWVudHMgaXQsIGFuZCBgcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZClgIGFjY2Vzc2VzIHRoZSBQSUQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgYXJlIHBvaW50ZXJzLCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IHN0cmFpZ2h0Zm9yd2FyZC4gTm8gc3RhY2sgYnVmZmVycywgaGVhcCBhbGxvY2F0aW9ucywgaW5mb3JtYXRpb24gbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBjb3BpZXMuIEFueSByZWZlcmVuY2UgY291bnRpbmcgZXJyb3JzIOKAkyB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBudWxsIGRlcmVmZXJlbmNlcyDigJMgYXJlIHRoZSBzdGFuZGFyZCBtZW1vcnkgYnVncywgYW5kIHNob3VsZCBiZSBwaWNrZWQgdXAgYnkgS0FTQU4gb3IgcmVmZXJlbmNlIGNvdW50aW5nIGNoZWNrZXJzLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCYjMzk7cyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBnZXRfcGlkYCBhbmQgYHB1dF9waWRgIHRvIGNvbmZpcm0gdGhleSYjMzk7cmUgZG9pbmcgd2hhdCB0aGV5JiMzOTtyZSBzdXBwb3NlZCB0by4gQWx3YXlzIGdvb2QgdG8gZG91YmxlLWNoZWNrIHRob3NlIHByaW1pdGl2ZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDEwOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgc3RydWN0IHBpZCBcXCpnZXRfcGlkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGlkLmg9ODU9dm9pZCBkb19ub3RpZnlfcGlkZmQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTtcbmluY2x1ZGUvbGludXgvcGlkLmgtODYtXG5pbmNsdWRlL2xpbnV4L3BpZC5oOjg3OnN0YXRpYyBpbmxpbmUgc3RydWN0IHBpZCAqZ2V0X3BpZChzdHJ1Y3QgcGlkICpwaWQpXG5pbmNsdWRlL2xpbnV4L3BpZC5oLTg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE4NQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gTGludXggUElEIEludGVybmFscyoqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IFBJRHMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwsIHNvIEkmIzM5O20gZ29pbmcgdG8gbmF2aWdhdGUgdG8gYGluY2x1ZGUvbGludXgvcGlkLmhgLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYWltaW5nIGZvciBhcm91bmQgbGluZSA4Ny4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCB0aGUgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgdGhhdCBkZWZpbmUgaG93IFBJRHMgYXJlIGFsbG9jYXRlZCwgdHJhY2tlZCwgYW5kIHBvdGVudGlhbGx5IHJlY3ljbGVkLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhpbmdzIGxpa2UgdGhlIGBwaWRfbmFtZXNwYWNlYCBzdHJ1Y3R1cmUsIHBvc3NpYmx5IHNvbWUgZ2xvYmFsIGhhc2ggdGFibGVzIG9yIGFycmF5cywgYW5kIGhvcGVmdWxseSBzb21lIGlubGluZSBmdW5jdGlvbnMgZm9yIHBpZCBsb29rdXBzIGFuZCBhbGxvY2F0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGhlIGRpZmZlcmVudCB0eXBlcyBvZiBQSUQgc3BhY2VzIGFzIHdlbGwuIEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZWxhdGVkIHRvIHRoZSBjb21wbGV4aXRpZXMgb2YgUElEIG5hbWVzcGFjZXMgYW5kIHByb2Nlc3MgaWRlbnRpZmljYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGUga2VybmVsIGRldnMgY2FtZSB1cCB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGlkLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDgwOlx0XG4gIDgxOlx0c3RydWN0IHBpZCAqcGlkZmRfcGlkKGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlKTtcbiAgODI6XHRzdHJ1Y3QgcGlkICpwaWRmZF9nZXRfcGlkKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50ICpmbGFncyk7XG4gIDgzOlx0c3RydWN0IHRhc2tfc3RydWN0ICpwaWRmZF9nZXRfdGFzayhpbnQgcGlkZmQsIHVuc2lnbmVkIGludCAqZmxhZ3MpO1xuICA4NDpcdGludCBwaWRmZF9wcmVwYXJlKHN0cnVjdCBwaWQgKnBpZCwgdW5zaWduZWQgaW50IGZsYWdzLCBzdHJ1Y3QgZmlsZSAqKnJldF9maWxlKTtcbiAgODU6XHR2b2lkIGRvX25vdGlmeV9waWRmZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xuICA4NjpcdFxuICA4NzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHBpZCAqZ2V0X3BpZChzdHJ1Y3QgcGlkICpwaWQpXG4gIDg4Olx0e1xuICA4OTpcdFx0aWYgKHBpZClcbiAgOTA6XHRcdFx0cmVmY291bnRfaW5jKFx1MDAyNnBpZC1cdTAwM2Vjb3VudCk7XG4gIDkxOlx0XHRyZXR1cm4gcGlkO1xuICA5MjpcdH1cbiAgOTM6XHRcbiAgOTQ6XHRleHRlcm4gdm9pZCBwdXRfcGlkKHN0cnVjdCBwaWQgKnBpZCk7XG4gIDk1Olx0ZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqcGlkX3Rhc2soc3RydWN0IHBpZCAqcGlkLCBlbnVtIHBpZF90eXBlKTtcbiAgOTY6XHRzdGF0aWMgaW5saW5lIGJvb2wgcGlkX2hhc190YXNrKHN0cnVjdCBwaWQgKnBpZCwgZW51bSBwaWRfdHlwZSB0eXBlKVxuICA5NzpcdHtcbiAgOTg6XHRcdHJldHVybiAhaGxpc3RfZW1wdHkoXHUwMDI2cGlkLVx1MDAzZXRhc2tzW3R5cGVdKTtcbiAgOTk6XHR9XG4gMTAwOlx0ZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3BpZF90YXNrKHN0cnVjdCBwaWQgKnBpZCwgZW51bSBwaWRfdHlwZSk7XG4gMTAxOlx0XG4gMTAyOlx0ZXh0ZXJuIHN0cnVjdCBwaWQgKmdldF90YXNrX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVudW0gcGlkX3R5cGUgdHlwZSk7XG4gMTAzOlx0XG4gMTA0Olx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTgyOQoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQmIzM5O3MgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIGNsYXNzaWMgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlLCBhICYjMzQ7VXNlLUFmdGVyLUZyZWUmIzM0OyBzaXR1YXRpb24uIFRoZSBwcm9ibGVtIGlzIGNsZWFyOiB0aGUgYHRocmVhZF9waWRgIHN0cnVjdHVyZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBmcmVlZCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGZpbmlzaGVzIHdpdGggaXQuIFRoZSBzb2x1dGlvbiBpcyBlbGVnYW50LiBXZSBhcmUgdXNpbmcgYGdldF9waWQoKWAgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGB0aHJlYWRfcGlkYCB3aXRoaW4gYHJlbGVhc2VfdGFzaygpYCBiZWZvcmUgYF9fZXhpdF9zaWduYWwoKWAgYW5kIHRoZW4gZGVjcmVtZW50aW5nIGl0IHdpdGggYHB1dF9waWQoKWAgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKClgLiBUaGlzIGVuc3VyZXMgdGhlIG9iamVjdCYjMzk7cyBsaWZldGltZSBtYXRjaGVzIGl0cyB1c2FnZS4KClRoaXMgaXMgZnVuZGFtZW50YWxseSBhYm91dCBjb3JyZWN0IG9iamVjdCBsaWZldGltZSBtYW5hZ2VtZW50LiBXZSYjMzk7cmUgdXNpbmcgc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcgdG8gZ3VhcmFudGVlIHRoYXQuIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBwZXJmZWN0bHkgc3VpdGVkIHRvIGRldGVjdCB0aGlzIGtpbmQgb2YgYnVnLgoKTm93LCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgdGhpcyAqZG9lc24mIzM5O3QqIGludHJvZHVjZSBhbnkgS01TQU4tcmVsZXZhbnQgaXNzdWVzLiBXZSYjMzk7cmUgbm90IGRlYWxpbmcgd2l0aDoKCjEuICBLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgbWlnaHQgYmUgdW5pbml0aWFsaXplZCAodGhhdCYjMzk7cyBhIGJpZyBLTVNBTiByZWQgZmxhZykuCjIuICBBbnkgcmVhZHMgb3IgYnJhbmNoZXMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIHdoaWNoIGlzIGFub3RoZXIgS01TQU4gY29uY2Vybi4KMy4gIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zICh0aGF04oCZcyBhIGRpZmZlcmVudCBwcm9ibGVtIGFsdG9nZXRoZXIpLgo0LiAgVW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzZXMgd2hpY2ggS01TQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaC4KClNvLCBhZnRlciByZXZpZXdpbmcgZXZlcnl0aGluZywgSSYjMzk7bSBjb25maWRlbnQgaW4gbXkgYXNzZXNzbWVudC4gVGhpcyBwYXRjaCBpcyBhIHNvbGlkIGZpeCBmb3IgYSBzdGFuZGFyZCByZWZjb3VudCBpc3N1ZSwgYW5kIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBgZmFsc2VgLiBJIGNhbiBnbyBhaGVhZCBhbmQgc2V0IHRoZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxMDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIC8gcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlIGluIHJlbGVhc2VfdGFzaygpIGJ5IHRha2luZyBhIHJlZmVyZW5jZSB0byB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGJlZm9yZSBfX2V4aXRfc2lnbmFsKCkgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLiBUaGlzIHByZXZlbnRzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGlmIHRoZSBwaWQgc3RydWN0dXJlJiMzOTtzIHJlZmVyZW5jZSBjb3VudCBkcm9wcGVkIHRvIHplcm8gcHJlbWF0dXJlbHkuIFN1Y2ggbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIGZ1bGx5IGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGNvbXBsZXggc3RydWN0IGluaXRpYWxpemF0aW9ucywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgLyByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gcmVsZWFzZV90YXNrKCkgYnkgdGFraW5nIGEgcmVmZXJlbmNlIHRvIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYmVmb3JlIF9fZXhpdF9zaWduYWwoKSBhbmQgcmVsZWFzaW5nIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIHBpZCBzdHJ1Y3R1cmUmIzM5O3MgcmVmZXJlbmNlIGNvdW50IGRyb3BwZWQgdG8gemVybyBwcmVtYXR1cmVseS4gU3VjaCBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgYnVncyBhcmUgZnVsbHkgZGV0ZWN0YWJsZSBieSBLQVNBTiBhbmQgc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcuIFRoZSBjaGFuZ2UgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSB1bmluaXRpYWxpemVkIG1lbW9yeSwgY29tcGxleCBzdHJ1Y3QgaW5pdGlhbGl6YXRpb25zLCBrZXJuZWwtdG8tdXNlciBjb3BpZXMsIG9yIHVuaW5pdGlhbGl6ZWQgYnJhbmNoIGNvbmRpdGlvbnMuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MDo0My4yMzAwMjg5MjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk2MzE1MjE3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlbGVhc2VfdGFza1wiLFxuICAgIFwicHJvY19mbHVzaF9waWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgLyByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gcmVsZWFzZV90YXNrKCkgYnkgdGFraW5nIGEgcmVmZXJlbmNlIHRvIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYmVmb3JlIF9fZXhpdF9zaWduYWwoKSBhbmQgcmVsZWFzaW5nIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIHBpZCBzdHJ1Y3R1cmUncyByZWZlcmVuY2UgY291bnQgZHJvcHBlZCB0byB6ZXJvIHByZW1hdHVyZWx5LiBTdWNoIGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBjb21wbGV4IHN0cnVjdCBpbml0aWFsaXphdGlvbnMsIGtlcm5lbC10by11c2VyIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSB0YXNrIHJlbGVhc2UgbG9naWMgaW4gcmVsZWFzZV90YXNrKCkgYnkgZXhwbGljaXRseSBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIGFuZCByZWxlYXNpbmcgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0YXNrIHRlYXJkb3duIGFuZCBwcm9jIGRjYWNoZSBmbHVzaGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTA6NDMuMjMwMDM2OTA5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzkwNDcxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZjRhNTA0YmFmMjZkNzRmNzg5Yjc2MjVhMTMzOTczNGVkODRjOTFkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjQyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jXFxuaW5kZXggOTc2ODZhZjg5NTAxMy4uNDYxZTI4MzRmY2I0NSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZXhpdC5jXFxuKysrIGIva2VybmVsL2V4aXQuY1xcbkBAIC0yNjEsOCArMjYxLDggQEAgdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiBcXHRwaWRmc19leGl0KHApO1xcbiBcXHRjZ3JvdXBfdGFza19yZWxlYXNlKHApO1xcbiBcXG4tXFx0LyogUmV0cmlldmUgQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXFxuLVxcdHRocmVhZF9waWQgPSB0YXNrX3BpZChwKTtcXG4rXFx0LyogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgbWF5IHNldCBpdCB0byBOVUxMLiAqL1xcbitcXHR0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7XFxuIFxcbiBcXHR3cml0ZV9sb2NrX2lycShcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuIFxcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XFxuQEAgLTI5MSw4ICsyOTEsOCBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIFxcdH1cXG4gXFxuIFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNnRhc2tsaXN0X2xvY2spO1xcbi1cXHQvKiBAdGhyZWFkX3BpZCBjYW4ndCBnbyBhd2F5IHVudGlsIGZyZWVfcGlkcygpIGJlbG93ICovXFxuIFxcdHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpO1xcbitcXHRwdXRfcGlkKHRocmVhZF9waWQpO1xcbiBcXHRleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTtcXG4gXFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFxcdTAwMjZwLVxcdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lLFxcbiBcXHRcXHRcXHQgICAgICBzaXplb2YocC1cXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSkpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MDo0My42Njk3NDA3NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjU1MzY2NTM4NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWxlYXNlX3Rhc2tcIixcbiAgICBcInByb2NfZmx1c2hfcGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSB0YXNrIHJlbGVhc2UgbG9naWMgaW4gcmVsZWFzZV90YXNrKCkgYnkgZXhwbGljaXRseSBhY3F1aXJpbmcgYSByZWZlcmVuY2UgdG8gdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIGFuZCByZWxlYXNpbmcgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKS4gVGhpcyBwcmV2ZW50cyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb25zIGR1cmluZyB0YXNrIHRlYXJkb3duIGFuZCBwcm9jIGRjYWNoZSBmbHVzaGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGY0YTUwNGJhZjI2ZDc0Zjc4OWI3NjI1YTEzMzk3MzRlZDg0YzkxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmNcbmluZGV4IDk3Njg2YWY4OTUwMTMuLjQ2MWUyODM0ZmNiNDUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZXhpdC5jXG4rKysgYi9rZXJuZWwvZXhpdC5jXG5AQCAtMjYxLDggKzI2MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHBpZGZzX2V4aXQocCk7XG4gXHRjZ3JvdXBfdGFza19yZWxlYXNlKHApO1xuIFxuLVx0LyogUmV0cmlldmUgQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4tXHR0aHJlYWRfcGlkID0gdGFza19waWQocCk7XG4rXHQvKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4rXHR0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7XG4gXG4gXHR3cml0ZV9sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiBcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XG5AQCAtMjkxLDggKzI5MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdH1cbiBcbiBcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4tXHQvKiBAdGhyZWFkX3BpZCBjYW4ndCBnbyBhd2F5IHVudGlsIGZyZWVfcGlkcygpIGJlbG93ICovXG4gXHRwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKTtcbitcdHB1dF9waWQodGhyZWFkX3BpZCk7XG4gXHRleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTtcbiBcdGFkZF9kZXZpY2VfcmFuZG9tbmVzcyhcdTAwMjZwLVx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUsXG4gXHRcdFx0ICAgICAgc2l6ZW9mKHAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTA6NDMuNjY5NzQxOTY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTQ0MTA5OTE5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2g6IFJlbGVhc2UgVGFzayoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIG1vZGlmeWluZyBga2VybmVsL2V4aXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHJlbGVhc2VfdGFzaygpYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGNyaXRpY2FsIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSB0YXNrIGV4aXQgcGF0aC4gIFRoZSBjaGFuZ2UgaXMgZm9jdXNlZCBhcm91bmQgdGhlIGhhbmRsaW5nIG9mIGBAdGhyZWFkX3BpZGAgYmVmb3JlIHRoZSB0YXNrIGlzIGZ1bGx5IHVuaGFzaGVkIGFuZCBkZWFsbG9jYXRlZC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlLCBhcyBmYXIgYXMgSSBjYW4gc2VlLCByZXRyaWV2ZXMgYEB0aHJlYWRfcGlkYCB3aXRoIGB0YXNrX3BpZChwKWAgYmVmb3JlIGRlYWxsb2NhdGlvbiBpbiB0aGUgb2xkIHZlcnNpb24gb2YgdGhlIGNvZGUuIFRoaXMgaXMgbGlrZWx5IHRvIGVuc3VyZSB0aGF0IHRoaXMgcmVmZXJlbmNlIHRvIHRoZSBwcm9jZXNzIElEIGlzIHNhZmVseSBzdG9yZWQgYmVmb3JlIHRoZSB1bmRlcmx5aW5nIGRhdGEgaXMgcG90ZW50aWFsbHkgbW9kaWZpZWQgYnkgc3Vic2VxdWVudCBvcGVyYXRpb25zLlxuXG5Ob3csIHdpdGggdGhpcyBwYXRjaCwgdGhlcmUgYXJlIHNvbWUgYWRkaXRpb25hbCBmdW5jdGlvbiBjYWxscyB0aGF0IGFyZSBvZiBub3RlLiBUaGUgdXBkYXRlZCBjb2RlIG5vdyBcInBpbnNcIiBgQHRocmVhZF9waWRgIHVzaW5nIGBnZXRfcGlkKHRhc2tfcGlkKHApKWAgYmVmb3JlIHRoZSB1bmhhc2hpbmcgb2NjdXJzLiBUaGlzIGlzIGZvbGxvd2VkIGxhdGVyIGJ5IGBwdXRfcGlkKHRocmVhZF9waWQpYC4gVGhlIGNvbW1lbnQgaGlnaGxpZ2h0cyB0aGF0IGBAdGhyZWFkX3BpZGAgaXMgcHJvdGVjdGVkIHVudGlsIGBmcmVlX3BpZHMoKWAgaGFwcGVucyBhZnRlciB0aGUgbG9jayBpcyByZWxlYXNlZC4gQ2xlYXJseSwgdGhpcyBpcyB0byBlbnN1cmUgdGhhdCBhIHJlZmVyZW5jZSB0byB0aGUgUElEIGlzIHJldGFpbmVkLCBwcmV2ZW50aW5nIGl0IGZyb20gYmVjb21pbmcgcHJlbWF0dXJlbHkgaW52YWxpZC4gIEkgc3VzcGVjdCB0aGlzIFwicGlubmluZ1wiIG1lY2hhbmlzbSBpcyB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIFBJRCBjb3VsZCBiZSByZS11c2VkIGJlZm9yZSB0aGUgbmVjZXNzYXJ5IG9wZXJhdGlvbnMgdXNpbmcgaXQgYXJlIGNvbXBsZXRlLlxuXG5UaGUgc3Vic2VxdWVudCBgcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZClgIGNhbGwsIGp1c3QgYmVmb3JlIHJlbGVhc2luZyB0aGUgUElELCBpcyBhbm90aGVyIGNsdWUuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgcHJvY2VzcyBJRCBpcyB1c2VkIGluIHRoZSBgL3Byb2NgIGZpbGVzeXN0ZW0gYW5kIGxpa2VseSBuZWVkcyB0byBiZSBzeW5jaHJvbml6ZWQgb3IgZmx1c2hlZCBiZWZvcmUgaXQgaXMgZGVhbGxvY2F0ZWQuIFRoZSBhZGRpdGlvbiBvZiBgcHV0X3BpZCgpYCBlbnN1cmVzIHRoYXQgdGhlIHJlZmVyZW5jZSBpcyByZWxlYXNlZCBhZnRlciBmbHVzaGluZywgY29tcGxldGluZyB0aGUgbGlmZWN5Y2xlLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGltcGxpY2F0aW9ucyBvZiBgcHV0X3BpZCgpYCBhbmQgdW5kZXJzdGFuZCB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIGludm9sdmVkLCBidXQgaXQgc2VlbXMgbGlrZSB3ZSBoYXZlIHJvYnVzdCBQSUQgbWFuYWdlbWVudCBpbiBwbGFjZSBoZXJlLiBNeSBndWVzcyBpcyB0aGlzIGlzIGEgZ29vZCBjaGFuZ2UgYW5kIHRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhIHN1YnRsZSBidWcgdGhhdCB0aGlzIGZpeCBhZGRyZXNzZXMuIEkgd291bGQgbmVlZCB0byBhbmFseXplIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIG1vcmUgZGV0YWlsIHRvIGJlIHN1cmUsIGJ1dCBpdCBsb29rcyBsaWtlIGEgd2VsbC10YXJnZXRlZCBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MDo1OC4wODA3MzY1MjlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2V4aXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0e1xcbiAyNDY6XFx0fVxcbiAyNDc6XFx0XFxuIDI0ODpcXHR2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIDI0OTpcXHR7XFxuIDI1MDpcXHRcXHRzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgcG9zdDtcXG4gMjUxOlxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyO1xcbiAyNTI6XFx0XFx0c3RydWN0IHBpZCAqdGhyZWFkX3BpZDtcXG4gMjUzOlxcdFxcdGludCB6YXBfbGVhZGVyO1xcbiAyNTQ6XFx0cmVwZWF0OlxcbiAyNTU6XFx0XFx0bWVtc2V0KFxcdTAwMjZwb3N0LCAwLCBzaXplb2YocG9zdCkpO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHQvKiBkb24ndCBuZWVkIHRvIGdldCB0aGUgUkNVIHJlYWRsb2NrIGhlcmUgLSB0aGUgcHJvY2VzcyBpcyBkZWFkIGFuZFxcbiAyNTg6XFx0XFx0ICogY2FuJ3QgYmUgbW9kaWZ5aW5nIGl0cyBvd24gY3JlZGVudGlhbHMuICovXFxuIDI1OTpcXHRcXHRkZWNfcmxpbWl0X3Vjb3VudHModGFza191Y291bnRzKHApLCBVQ09VTlRfUkxJTUlUX05QUk9DLCAxKTtcXG4gMjYwOlxcdFxcbiAyNjE6XFx0XFx0cGlkZnNfZXhpdChwKTtcXG4gMjYyOlxcdFxcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdC8qIFBpbiBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi9cXG4gMjY1OlxcdFxcdHRocmVhZF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKHApKTtcXG4gMjY2OlxcdFxcbiAyNjc6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNnRhc2tsaXN0X2xvY2spO1xcbiAyNjg6XFx0XFx0cHRyYWNlX3JlbGVhc2VfdGFzayhwKTtcXG4gMjY5OlxcdFxcdF9fZXhpdF9zaWduYWwoXFx1MDAyNnBvc3QsIHApO1xcbiAyNzA6XFx0XFxuIDI3MTpcXHRcXHQvKlxcbiAyNzI6XFx0XFx0ICogSWYgd2UgYXJlIHRoZSBsYXN0IG5vbi1sZWFkZXIgbWVtYmVyIG9mIHRoZSB0aHJlYWRcXG4gMjczOlxcdFxcdCAqIGdyb3VwLCBhbmQgdGhlIGxlYWRlciBpcyB6b21iaWUsIHRoZW4gbm90aWZ5IHRoZVxcbiAyNzQ6XFx0XFx0ICogZ3JvdXAgbGVhZGVyJ3MgcGFyZW50IHByb2Nlc3MuIChpZiBpdCB3YW50cyBub3RpZmljYXRpb24uKVxcbiAyNzU6XFx0XFx0ICovXFxuIDI3NjpcXHRcXHR6YXBfbGVhZGVyID0gMDtcXG4gMjc3OlxcdFxcdGxlYWRlciA9IHAtXFx1MDAzZWdyb3VwX2xlYWRlcjtcXG4gMjc4OlxcdFxcdGlmIChsZWFkZXIgIT0gcCBcXHUwMDI2XFx1MDAyNiB0aHJlYWRfZ3JvdXBfZW1wdHkobGVhZGVyKVxcbiAyNzk6XFx0XFx0XFx0XFx0XFx1MDAyNlxcdTAwMjYgbGVhZGVyLVxcdTAwM2VleGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7XFxuIDI4MDpcXHRcXHRcXHQvKiBmb3IgcGlkZnNfZXhpdCgpIGFuZCBkb19ub3RpZnlfcGFyZW50KCkgKi9cXG4gMjgxOlxcdFxcdFxcdGlmIChsZWFkZXItXFx1MDAzZXNpZ25hbC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSUdOQUxfR1JPVVBfRVhJVClcXG4gMjgyOlxcdFxcdFxcdFxcdGxlYWRlci1cXHUwMDNlZXhpdF9jb2RlID0gbGVhZGVyLVxcdTAwM2VzaWduYWwtXFx1MDAzZWdyb3VwX2V4aXRfY29kZTtcXG4gMjgzOlxcdFxcdFxcdC8qXFxuIDI4NDpcXHRcXHRcXHQgKiBJZiB3ZSB3ZXJlIHRoZSBsYXN0IGNoaWxkIHRocmVhZCBhbmQgdGhlIGxlYWRlciBoYXNcXG4gMjg1OlxcdFxcdFxcdCAqIGV4aXRlZCBhbHJlYWR5LCBhbmQgdGhlIGxlYWRlcidzIHBhcmVudCBpZ25vcmVzIFNJR0NITEQsXFxuIDI4NjpcXHRcXHRcXHQgKiB0aGVuIHdlIGFyZSB0aGUgb25lIHdobyBzaG91bGQgcmVsZWFzZSB0aGUgbGVhZGVyLlxcbiAyODc6XFx0XFx0XFx0ICovXFxuIDI4ODpcXHRcXHRcXHR6YXBfbGVhZGVyID0gZG9fbm90aWZ5X3BhcmVudChsZWFkZXIsIGxlYWRlci1cXHUwMDNlZXhpdF9zaWduYWwpO1xcbiAyODk6XFx0XFx0XFx0aWYgKHphcF9sZWFkZXIpXFxuIDI5MDpcXHRcXHRcXHRcXHRsZWFkZXItXFx1MDAzZWV4aXRfc3RhdGUgPSBFWElUX0RFQUQ7XFxuIDI5MTpcXHRcXHR9XFxuIDI5MjpcXHRcXG4gMjkzOlxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNnRhc2tsaXN0X2xvY2spO1xcbiAyOTQ6XFx0XFx0cHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7XFxuIDI5NTpcXHRcXHRwdXRfcGlkKHRocmVhZF9waWQpO1xcbiAyOTY6XFx0XFx0ZXhpdF9jcmVkX25hbWVzcGFjZXMocCk7XFxuIDI5NzpcXHRcXHRhZGRfZGV2aWNlX3JhbmRvbW5lc3MoXFx1MDAyNnAtXFx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUsXFxuIDI5ODpcXHRcXHRcXHRcXHQgICAgICBzaXplb2YocC1cXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSkpO1xcbiAyOTk6XFx0XFx0ZnJlZV9waWRzKHBvc3QucGlkcyk7XFxuIDMwMDpcXHRcXHRyZWxlYXNlX3RocmVhZChwKTtcXG4gMzAxOlxcdFxcdC8qXFxuIDMwMjpcXHRcXHQgKiBUaGlzIHRhc2sgd2FzIGFscmVhZHkgcmVtb3ZlZCBmcm9tIHRoZSBwcm9jZXNzL3RocmVhZC9waWQgbGlzdHNcXG4gMzAzOlxcdFxcdCAqIGFuZCBsb2NrX3Rhc2tfc2lnaGFuZChwKSBjYW4ndCBzdWNjZWVkLiBOb2JvZHkgZWxzZSBjYW4gdG91Y2hcXG4gMzA0OlxcdFxcdCAqIC1cXHUwMDNlcGVuZGluZyBvciwgaWYgZ3JvdXAgZGVhZCwgc2lnbmFsLVxcdTAwM2VzaGFyZWRfcGVuZGluZy4gV2UgY2FuIGNhbGxcXG4gMzA1OlxcdFxcdCAqIGZsdXNoX3NpZ3F1ZXVlKCkgbG9ja2xlc3MuXFxuIDMwNjpcXHRcXHQgKi9cXG4gMzA3OlxcdFxcdGZsdXNoX3NpZ3F1ZXVlKFxcdTAwMjZwLVxcdTAwM2VwZW5kaW5nKTtcXG4gMzA4OlxcdFxcdGlmICh0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKVxcbiAzMDk6XFx0XFx0XFx0Zmx1c2hfc2lncXVldWUoXFx1MDAyNnAtXFx1MDAzZXNpZ25hbC1cXHUwMDNlc2hhcmVkX3BlbmRpbmcpO1xcbiAzMTA6XFx0XFxuIDMxMTpcXHRcXHRwdXRfdGFza19zdHJ1Y3RfcmN1X3VzZXIocCk7XFxuIDMxMjpcXHRcXG4gMzEzOlxcdFxcdHAgPSBsZWFkZXI7XFxuIDMxNDpcXHRcXHRpZiAodW5saWtlbHkoemFwX2xlYWRlcikpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUwOjU4LjA4MDg1MjgyOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2OTM1OTc0ODUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIGNoYW5nZSB0byBgcmVsZWFzZV90YXNrYCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCdzIGluIGNvcmUga2VybmVsIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgdGFzayBsaWZlY3ljbGUsIGFuZCBkZWFscyB3aXRoIFBJRCBtYW5hZ2VtZW50LiBJdCdzIHRyaWdnZXJlZCBkdXJpbmcgcHJvY2VzcyB0ZXJtaW5hdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBwcmV0dHkgZnVuZGFtZW50YWwuIFRoZSBwYXRjaCBpcyBmaXhpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBob3cgdGhlIGB0aHJlYWRfcGlkYCBpcyBoYW5kbGVkIGR1cmluZyB0YXNrIHJlbGVhc2UsIHNwZWNpZmljYWxseSBhcm91bmQgYHByb2NfZmx1c2hfcGlkYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgYXNzdW1lZCBgdGhyZWFkX3BpZGAgd291bGRuJ3QgZGlzYXBwZWFyLCBidXQgdGhpcyBjaGFuZ2UgYWRkcyBwcm9wZXIgcmVmZXJlbmNlIGNvdW50aW5nIChgZ2V0X3BpZCgpYCwgYHB1dF9waWQoKWApIHRvIGd1YXJhbnRlZSBpdHMgc2FmZXR5LlxuXG5Ob3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCdzIGNoZWNrIHRoZSBjcml0ZXJpYS4gSXQncyAqZGVmaW5pdGVseSogbm90IGRvY3VtZW50YXRpb24sIGNvbW1lbnRzLCBkZWNvcmF0aXZlIGxvZ2dpbmcsIGNvbnN0YW50IGNoYW5nZXMsIG9yIHVucmVhY2hhYmxlIGNvZGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBJdCdzIG1vZGlmeWluZyAqcmVhY2hhYmxlLCBjb3JlIGtlcm5lbCBsb2dpYyouIFNwZWNpZmljYWxseSwgYGtlcm5lbC9leGl0LmNgIGRlYWxzIHdpdGggcHJvY2VzcyB0ZXJtaW5hdGlvbiwgYW5kIGByZWxlYXNlX3Rhc2tgIGdldHMgY2FsbGVkIHdoZW5ldmVyIGEgdGFzayBleGl0cy4gSXQncyBhIGtleSBwYXJ0IG9mIHRoZSBrZXJuZWwhXG5cbkkgbmVlZCB0byBkZWNpZGUgaWYgYHJlbGVhc2VfdGFza2AgaXMgYSBcImhvdCBwYXRoXCIgZnVuY3Rpb24uIElmIGl0IGlzLCBJIHNob3VsZCBhdm9pZCBsaXN0aW5nIGl0IGJlY2F1c2Ugb2Ygc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4gSG1tLi4uIGByZWxlYXNlX3Rhc2tgIGlzIGNhbGxlZCAqZXZlcnkqIHRpbWUgYSB0YXNrIGV4aXRzIOKAkyB0aGF0IHNvdW5kcyBwcmV0dHkgaG90LiBCdXQgdGhlbiBhZ2FpbiwgaXMgaXQgaG90LXBhdGggKmdlbmVyaWMqIGxpa2UgYSBjb21tb24gc3lzdGVtIGNhbGwsIG9yIGlzIGl0IGEgc3BlY2lmaWMgZW50cnkgcG9pbnQ/IEl0IHNlZW1zIG1vcmUgc3BlY2lmaWMgdG8gdGFzayBleGl0LiBNYXliZSwgaW4gdGhpcyBjb250ZXh0LCBpdCdzICpub3QqIGEgXCJnZW5lcmljIGhvdCBwYXRoXCIgYXMgSSB0aGluayBhYm91dCB0aGlzLiBJdCBpcyBhIGtleSBlbnRyeSBwb2ludCBkdXJpbmcgYSBjZXJ0YWluIGFjdGlvbiwgYnV0IGl0IGlzbid0IGxpa2UgYSBmaWxlIHN5c3RlbSByZWFkIGNhbGwuXG5cbk9rYXksIGxldCdzIHRoaW5rIGFib3V0IGBGb2N1c1N5bWJvbHNgLiBTaG91bGQgSSBpbmNsdWRlIGByZWxlYXNlX3Rhc2tgPyBJdCBpcyAqdGhlKiBtb2RpZmllZCBmdW5jdGlvbi4gSXQgKnNlZW1zKiBsaWtlIEkgc2hvdWxkLiBJcyBgcHJvY19mbHVzaF9waWRgIGEgZnVuY3Rpb24gdG8gZm9jdXMgb24/IEkgc2hvdWxkIGxvb2sgZm9yIGNhbGxlcnMgb3IgcmVsYXRlZCBmdW5jdGlvbnMgdG8gbWFrZSBhIGJldHRlciBkZWNpc2lvbi4gSSB3aWxsIG5lZWQgdG8gY2hlY2sgdGhvc2UuIFRoaXMgYWJzb2x1dGVseSBzZWVtcyB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTg0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6MTUuMDE2ODMwMzMxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxODI0ODI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWxlYXNlX3Rhc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2V4aXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZXhpdC5jPTEyMz1sYXRlX2luaXRjYWxsKGtlcm5lbF9leGl0X3N5c2ZzX2luaXQpO1xcbi0tXFxua2VybmVsL2V4aXQuYy0xMjYtLypcXG5rZXJuZWwvZXhpdC5jOjEyNzogKiBGb3IgdGhpbmdzIHJlbGVhc2VfdGFzaygpIHdvdWxkIGxpa2UgdG8gZG8gKmFmdGVyKiB0YXNrbGlzdF9sb2NrIGlzIHJlbGVhc2VkLlxcbmtlcm5lbC9leGl0LmMtMTI4LSAqL1xcbmtlcm5lbC9leGl0LmM6MTI5OnN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCB7XFxua2VybmVsL2V4aXQuYy0xMzAtXFx0c3RydWN0IHBpZCAqcGlkc1tQSURUWVBFX01BWF07XFxuLS1cXG5rZXJuZWwvZXhpdC5jLTEzMi1cXG5rZXJuZWwvZXhpdC5jOjEzMzpzdGF0aWMgdm9pZCBfX3VuaGFzaF9wcm9jZXNzKHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCAqcG9zdCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbmtlcm5lbC9leGl0LmMtMTM0LVxcdFxcdFxcdCAgICAgYm9vbCBncm91cF9kZWFkKVxcbi0tXFxua2VybmVsL2V4aXQuYy0xNTctICovXFxua2VybmVsL2V4aXQuYzoxNTg6c3RhdGljIHZvaWQgX19leGl0X3NpZ25hbChzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgKnBvc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmtlcm5lbC9leGl0LmMtMTU5LXtcXG4tLVxcbmtlcm5lbC9leGl0LmM9MjQ0PXZvaWQgX193ZWFrIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqZGVhZF90YXNrKVxcbi0tXFxua2VybmVsL2V4aXQuYy0yNDctXFxua2VybmVsL2V4aXQuYzoyNDg6dm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbmtlcm5lbC9leGl0LmMtMjQ5LXtcXG5rZXJuZWwvZXhpdC5jOjI1MDpcXHRzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgcG9zdDtcXG5rZXJuZWwvZXhpdC5jLTI1MS1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxlYWRlcjtcXG4tLVxcbmtlcm5lbC9leGl0LmMtMjY3LVxcdHdyaXRlX2xvY2tfaXJxKFxcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcXG5rZXJuZWwvZXhpdC5jOjI2ODpcXHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xcbmtlcm5lbC9leGl0LmMtMjY5LVxcdF9fZXhpdF9zaWduYWwoXFx1MDAyNnBvc3QsIHApO1xcbi0tXFxua2VybmVsL2V4aXQuYz02MzA9c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZmluZF9jaGlsZF9yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTY1Mi1cXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZwLVxcdTAwM2VwdHJhY2VfZW50cnkpO1xcbmtlcm5lbC9leGl0LmM6NjUzOlxcdFxcdHJlbGVhc2VfdGFzayhwKTtcXG5rZXJuZWwvZXhpdC5jLTY1NC1cXHR9XFxuLS1cXG5rZXJuZWwvZXhpdC5jPTY2OT1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX25ld19yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTcwNC0vKlxcbmtlcm5lbC9leGl0LmM6NzA1OiogQW55IHRoYXQgbmVlZCB0byBiZSByZWxlYXNlX3Rhc2snZCBhcmUgcHV0IG9uIHRoZSBAZGVhZCBsaXN0Llxcbmtlcm5lbC9leGl0LmMtNzA2LSAqL1xcbi0tXFxua2VybmVsL2V4aXQuYz03NzA9c3RhdGljIHZvaWQgZXhpdF9ub3RpZnkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBncm91cF9kZWFkKVxcbi0tXFxua2VybmVsL2V4aXQuYy04MDgtXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cC1cXHUwMDNlcHRyYWNlX2VudHJ5KTtcXG5rZXJuZWwvZXhpdC5jOjgwOTpcXHRcXHRyZWxlYXNlX3Rhc2socCk7XFxua2VybmVsL2V4aXQuYy04MTAtXFx0fVxcbi0tXFxua2VybmVsL2V4aXQuYz0xMjA2PXN0YXRpYyBpbnQgd2FpdF90YXNrX3pvbWJpZShzdHJ1Y3Qgd2FpdF9vcHRzICp3bywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL2V4aXQuYy0xMzEyLVxcdGlmIChzdGF0ZSA9PSBFWElUX0RFQUQpXFxua2VybmVsL2V4aXQuYzoxMzEzOlxcdFxcdHJlbGVhc2VfdGFzayhwKTtcXG5rZXJuZWwvZXhpdC5jLTEzMTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjE1LjMzNTA4MzQ2N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NjEzMzYxNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgZm9yIGByZWxlYXNlX3Rhc2tgJ3MgVmlzaWJpbGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2NvcGUgb2YgdGhpcyBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbi4gVGhlIGZpcnN0IHRoaW5nIEknbSBnb2luZyB0byBkbyBpcyBkZXRlcm1pbmUgaWYgaXQncyBhY3R1YWxseSBtZWFudCB0byBiZSBhY2Nlc3NlZCBvdXRzaWRlIGl0cyBpbW1lZGlhdGUgaW1wbGVtZW50YXRpb24uIElzIGl0IGV4cG9ydGVkLCBtZWFuaW5nIGl0J3MgZGVjbGFyZWQgaW4gYSBoZWFkZXIgZmlsZSBvciBtYXJrZWQgd2l0aCBhbiBhcHByb3ByaWF0ZSBsaW5rYWdlIHNwZWNpZmllcj8gT3IsIG1vcmUgYnJvYWRseSwgaXMgaXQgKnVzZWQqIGluIGFueSBoZWFkZXIgZmlsZXM/IFRoaXMgd2lsbCB0ZWxsIG1lIHdoZXRoZXIgaXQncyBwYXJ0IG9mIHRoZSBwdWJsaWMgQVBJLCBtZWFudCB0byBiZSB1c2VkIGJ5IG90aGVyIG1vZHVsZXMsIG9yIGlmIGl0J3MgbWVhbnQgdG8gYmUgYW4gaW50ZXJuYWwgdXRpbGl0eS4gVGhpcyBkZXRlcm1pbmF0aW9uIGluZmx1ZW5jZXMgaG93IEknbGwgdHJlYXQgaXQgaW4gYW55IHJlZmFjdG9yaW5nIG9yIGFuYWx5c2lzLiBVbmRlcnN0YW5kaW5nIGl0cyB2aXNpYmlsaXR5IGlzIGNydWNpYWwgYmVmb3JlIG1ha2luZyBhbnkgZnVydGhlciBkZWNpc2lvbnMgYWJvdXQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MToxOC4xOTY0MjE4MjJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk1MzQ3NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVsZWFzZV90YXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oPTc5PWV4dGVybiB2b2lkIGZvcmtfaW5pdCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaC04MC1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaDo4MTpleHRlcm4gdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICogcCk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtODItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjE4LjI0NTk1OTY1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ0MDQ0MzUwOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSdtIHNwZWFraW5nIHRvIGEgZmVsbG93IGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIGBwcm9jX2ZsdXNoX3BpZGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBJJ3ZlIGdvdCBhIHNwZWNpZmljIGlzc3VlIEknbSB0YWNrbGluZywgYW5kIEkgdGhpbmsgYHByb2NfZmx1c2hfcGlkYCBtaWdodCBiZSByZWxldmFudC4gTGV0J3Mgc3RhcnQgd2l0aCBhIHF1aWNrIGNoZWNrLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGlucyBhbmQgb3V0cyBvZiB0aGlzIGZ1bmN0aW9uIOKAkyBzZWUgaG93IGl0J3MgdXNlZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGUgY29udGV4dCBvZiB0aGUgY29kZSwgbWF5YmUgSSBzaG91bGQgY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGNsdWVzLiBUaGlzIGluaXRpYWwgc3RlcCBpcyBhYm91dCBnZXR0aW5nIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYmVoYXZpb3IuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBpbnZlc3RpZ2F0aW9uLiBHb3R0YSBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ1OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjIyLjY1MDM5ODA5OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYzMTUwMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY19mbHVzaF9waWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9iYXNlLmM9MTk3Nj1zdGF0aWMgc3RydWN0IGlub2RlICpwcm9jX3BpZF9tYWtlX2Jhc2VfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTE5ODYtXFxuZnMvcHJvYy9iYXNlLmM6MTk4NzpcXHQvKiBMZXQgcHJvY19mbHVzaF9waWQgZmluZCB0aGlzIGRpcmVjdG9yeSBpbm9kZSAqL1xcbmZzL3Byb2MvYmFzZS5jLTE5ODgtXFx0ZWkgPSBQUk9DX0koaW5vZGUpO1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzQyMz1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgcHJvY190Z2lkX2Jhc2VfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTM0MzAtLyoqXFxuZnMvcHJvYy9iYXNlLmM6MzQzMTogKiBwcm9jX2ZsdXNoX3BpZCAtICBSZW1vdmUgZGNhY2hlIGVudHJpZXMgZm9yIEBwaWQgZnJvbSB0aGUgL3Byb2MgZGNhY2hlLlxcbmZzL3Byb2MvYmFzZS5jLTM0MzItICogQHBpZDogcGlkIHRoYXQgc2hvdWxkIGJlIGZsdXNoZWQuXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zNDQ4LVxcbmZzL3Byb2MvYmFzZS5jOjM0NDk6dm9pZCBwcm9jX2ZsdXNoX3BpZChzdHJ1Y3QgcGlkICpwaWQpXFxuZnMvcHJvYy9iYXNlLmMtMzQ1MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjIyLjY5NjcxNjMwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4Njc4MjQ0MTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgS2VybmVsIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IGBDT05GSUdgIG9wdGlvbnMgdGhhdCBtaWdodCBpbXBhY3QgdGhlIGJlaGF2aW9yIG9mIGByZWxlYXNlX3Rhc2tgIG9yIHRoZSBga2VybmVsL2V4aXQuY2AgY29kZS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBga2VybmVsL2V4aXQuY2AgaXMgZnVuZGFtZW50YWw7IGl0J3MgdW5jb25kaXRpb25hbGx5IGJha2VkIGludG8gdGhlIGtlcm5lbCBidWlsZCwgcmlnaHQ/IEJ1dCBJIHdhbnQgdG8gYmUgKmNlcnRhaW4qLlxuXG5Ob3csIGBwcm9jX2ZsdXNoX3BpZGAgaXMgYSBkaWZmZXJlbnQgYW5pbWFsLiBJIHJlY2FsbCBpdCByZXNpZGluZyB3aXRoaW4gYGZzL3Byb2MvYmFzZS5jYCwgYW5kIG15IGd1dCBmZWVsaW5nIGlzIHRoYXQgaXRzIGluY2x1c2lvbiBpcyBnYXRlZCBieSBgQ09ORklHX1BST0NfRlNgLiBIb3dldmVyLCByZWx5aW5nIG9uIG1lbW9yeSBhbG9uZSBpc24ndCBnb29kIGVub3VnaCwgYW5kIEkgZG9uJ3Qgd2FudCBhbnkgYXNzdW1wdGlvbnMsIHNvIGl0J3MgYmVzdCB0byB2ZXJpZnkgdGhpcyBkZWZpbml0aXZlbHkuIFRvIGRvIHRoYXQsIEknbGwgZ28gZGlyZWN0bHkgdG8gdGhlIHNvdXJjZSBvZiB0cnV0aDogYGluY2x1ZGUvbGludXgvcHJvY19mcy5oYC4gVGhhdCBoZWFkZXIgZmlsZSBzaG91bGQgY2xhcmlmeSB3aGV0aGVyIGBwcm9jX2ZsdXNoX3BpZGAgaXMgYWx3YXlzIHByZXNlbnQgb3IgY29uZGl0aW9uYWxseSBjb21waWxlZC4gVGltZSB0byBjaGVjay5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk0NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjMxLjM3NDk2MzE2NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMyMzYzOTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfZmx1c2hfcGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvcHJvY19mcy5oPTg1PWV4dGVybiB2b2lkIHByb2Nfcm9vdF9pbml0KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvcHJvY19mcy5oOjg2OmV4dGVybiB2b2lkIHByb2NfZmx1c2hfcGlkKHN0cnVjdCBwaWQgKik7XFxuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgtODctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaD0xNzI9c3RhdGljIGlubGluZSB2b2lkIHByb2Nfcm9vdF9pbml0KHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaC0xNzUtXFxuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmg6MTc2OnN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX2ZsdXNoX3BpZChzdHJ1Y3QgcGlkICpwaWQpXFxuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgtMTc3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6MzEuNTA3MzMyNTE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0NTA4NzI3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIGBwcm9jX2ZsdXNoX3BpZGAgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBwcm9jX2ZsdXNoX3BpZGAgaXMgYSBwbGFjZWhvbGRlciB3aGVuIGBDT05GSUdfUFJPQ19GU2AgaXMgZGlzYWJsZWQsIGJ1dCBiZWNvbWVzIGNydWNpYWwgZm9yIGZsdXNoaW5nIHRoZSBwcm9jIGRjYWNoZSB3aGVuIGBQUk9DX0ZTYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIGBDT05GSUdfUFJPQ19GU2Aga2V5IHRvIHByb3BlciBmdXp6aW5nIG9mIHRoaXMgZnVuY3Rpb24uIExldCBtZSBjb25maXJtLi4uIHllcywgYFBST0NfRlNgIGl0IGlzLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSByaWdodCBmb2N1cyBzeW1ib2xzLiBUaGUgcHJpbWFyeSBmdW5jdGlvbiBtb2RpZmllZCBieSB0aGUgcGF0Y2ggaXMgYHJlbGVhc2VfdGFza2AsIHdpdGggYHByb2NfZmx1c2hfcGlkYCBiZWluZyB0aGUgY2FsbGVkIGZ1bmN0aW9uIHVzaW5nIHRoZSBwaW5uZWQgcGlkLiBCb3RoIGFyZSByZWxldmFudCwgYnV0IGxldCdzIGJlIHN0cmF0ZWdpYyBhYm91dCB3aGF0IGdvZXMgaW4gdGhlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGJlc3QgcHJhY3RpY2VzLi4uIGF2b2lkIHRoZSBnZW5lcmljIFwiaG90LXBhdGhcIiBmdW5jdGlvbnMuIFdlIHdhbnQgZW50cnlwb2ludHMsIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCwgc3RhdGljIGhlbHBlcnMgdGhhdCB0aGUgY29tcGlsZXIgaW5saW5lcyBhbmQgYXJlIHRoZW4ganVzdCBub2lzZS5cblxuSXMgYHJlbGVhc2VfdGFza2AgYSBob3QgcGF0aD8gTm8sIGByZWxlYXNlX3Rhc2tgIHNlZW1zIHRvIGJlIHRyaWdnZXJlZCBkdXJpbmcgdGFzayByZWFwaW5nIG9yIHJlbGVhc2Ug4oCTIGBleGl0X25vdGlmeWAsIGB3YWl0X3Rhc2tfem9tYmllYCBhbmQgc2ltaWxhciBldmVudHMuIEl0J3MgYWxzbyBub3Qgc3RhdGljIGFuZCBhcHBlYXJzIHRvIGJlIGEgY2xlYXIgZW50cnkgcG9pbnQuIEknbGwgaW5jbHVkZSBib3RoIGByZWxlYXNlX3Rhc2tgIGFuZCBgcHJvY19mbHVzaF9waWRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYC5cblxuTmV4dCwgdG8gZG91YmxlLWNoZWNrIHRoZSBlbmFibGluZyBjb25maWd1cmF0aW9uLiBXZSdyZSBjbGVhciB0aGF0IGl0IGlzIHRoZSBgUFJPQ19GU2Agb3B0aW9uLiBJIHNob3VsZCBub3RlIHRoYXQgaXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGVyZSdzIG5vIGBDT05GSUdfYCBwcmVmaXggaGVyZS5cblxuRmluYWxseSwgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gSSdsbCBmbGFnIGBXb3J0aEZ1enppbmdgIGFzIGB0cnVlYC4gVGhlIGBSZWFzb25pbmdgIHNob3VsZCBzdWNjaW5jdGx5IHN1bW1hcml6ZSB0aGUgcGF0Y2gncyBwdXJwb3NlOiBpdCByZXNvbHZlcyBhIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBpbiB0aGUgY29yZSBwcm9jZXNzIGV4aXQgY29kZSAoYHJlbGVhc2VfdGFza2ApIGJ5IHBpbm5pbmcgYHRocmVhZF9waWRgIHdpdGggYGdldF9waWQoKWAgYmVmb3JlIGBfX3VuaGFzaF9wcm9jZXNzKClgIGFuZCByZWxlYXNpbmcgaXQgd2l0aCBgcHV0X3BpZCgpYCBhZnRlciBgcHJvY19mbHVzaF9waWQoKWAuIEkndmUgZ290IG15IGBGb2N1c1N5bWJvbHNgOiBgW1wicmVsZWFzZV90YXNrXCIsIFwicHJvY19mbHVzaF9waWRcIl1gLCBhbmQgbXkgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiUFJPQ19GU1wiXWAuXG5cbkFscmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NDcsIk91dHB1dFRva2VucyI6MTE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjM4Ljk1ODIwODAyMloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDY4Mzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVsZWFzZV90YXNrXCIsXG4gICAgXCJwcm9jX2ZsdXNoX3BpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgdGFzayByZWxlYXNlIGxvZ2ljIGluIHJlbGVhc2VfdGFzaygpIGJ5IGV4cGxpY2l0bHkgYWNxdWlyaW5nIGEgcmVmZXJlbmNlIHRvIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBhbmQgcmVsZWFzaW5nIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCkuIFRoaXMgcHJldmVudHMgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgdGFzayB0ZWFyZG93biBhbmQgcHJvYyBkY2FjaGUgZmx1c2hpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlbGVhc2VfdGFza1wiLFxuICAgIFwicHJvY19mbHVzaF9waWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIHRhc2sgcmVsZWFzZSBsb2dpYyBpbiByZWxlYXNlX3Rhc2soKSBieSBleHBsaWNpdGx5IGFjcXVpcmluZyBhIHJlZmVyZW5jZSB0byB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgYW5kIHJlbGVhc2luZyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLiBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBvciByYWNlIGNvbmRpdGlvbnMgZHVyaW5nIHRhc2sgdGVhcmRvd24gYW5kIHByb2MgZGNhY2hlIGZsdXNoaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MTozOS4wMzYyODMyNTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODI1MjU4NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6MzkuMDM2NzUwMjY2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NTM4MjQ3ODc0MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgLyByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gcmVsZWFzZV90YXNrKCkgYnkgdGFraW5nIGEgcmVmZXJlbmNlIHRvIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYmVmb3JlIF9fZXhpdF9zaWduYWwoKSBhbmQgcmVsZWFzaW5nIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIHBpZCBzdHJ1Y3R1cmUncyByZWZlcmVuY2UgY291bnQgZHJvcHBlZCB0byB6ZXJvIHByZW1hdHVyZWx5LiBTdWNoIGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBjb21wbGV4IHN0cnVjdCBpbml0aWFsaXphdGlvbnMsIGtlcm5lbC10by11c2VyIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGY0YTUwNGJhZjI2ZDc0Zjc4OWI3NjI1YTEzMzk3MzRlZDg0YzkxZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDI5IDEwOjUwOjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmNcbmluZGV4IDk3Njg2YWY4OTUwMTMuLjQ2MWUyODM0ZmNiNDUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZXhpdC5jXG4rKysgYi9rZXJuZWwvZXhpdC5jXG5AQCAtMjYxLDggKzI2MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHBpZGZzX2V4aXQocCk7XG4gXHRjZ3JvdXBfdGFza19yZWxlYXNlKHApO1xuIFxuLVx0LyogUmV0cmlldmUgQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4tXHR0aHJlYWRfcGlkID0gdGFza19waWQocCk7XG4rXHQvKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4rXHR0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7XG4gXG4gXHR3cml0ZV9sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiBcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XG5AQCAtMjkxLDggKzI5MSw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdH1cbiBcbiBcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4tXHQvKiBAdGhyZWFkX3BpZCBjYW4ndCBnbyBhd2F5IHVudGlsIGZyZWVfcGlkcygpIGJlbG93ICovXG4gXHRwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKTtcbitcdHB1dF9waWQodGhyZWFkX3BpZCk7XG4gXHRleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTtcbiBcdGFkZF9kZXZpY2VfcmFuZG9tbmVzcyhcdTAwMjZwLVx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUsXG4gXHRcdFx0ICAgICAgc2l6ZW9mKHAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSkpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6MzkuMDM2NzU2NDE3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNjk0MTIxODYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHJlbGVhc2VfdGFza2AgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGNvbnRleHQgaGVyZSBpcyB0aGUgYHJlbGVhc2VfdGFza2AgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvZXhpdC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUga2VybmVsIGNsZWFucyB1cCBhIHRhc2sgdGhhdCdzIGV4aXRpbmcuIFRoZSBwYXRjaCBsb29rcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBsZXQncyBicmVhayBpdCBkb3duIHRvIGVuc3VyZSB3ZSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMuXG5cbkZpcnN0LCBJIHNlZSB0aGUgY2hhbmdlIGZvY3VzZXMgb24gaG93IGBAdGhyZWFkX3BpZGAgaXMgaGFuZGxlZC4gSXQgbG9va3MgbGlrZSB0aGUgaW50ZW50aW9uIGhlcmUgaXMgdG8gZW5zdXJlIHRoYXQgYEB0aHJlYWRfcGlkYCByZW1haW5zIHZhbGlkIGV2ZW4gYWZ0ZXIgYF9fdW5oYXNoX3Byb2Nlc3MoKWAgaXMgY2FsbGVkLCB3aGljaCBjYW4gcG90ZW50aWFsbHkgc2V0IGl0IHRvIE5VTEwuICBQcmV2aW91c2x5LCB3ZSBqdXN0IGdyYWJiZWQgdGhlIGB0YXNrX3BpZChwKWAgdmFsdWUsIGJ1dCBub3cgdGhlIGNvZGUgaXMgY2FsbGluZyBgZ2V0X3BpZCgpYCB0byBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgUElELiBUaGlzIGluZGljYXRlcyB0aGUgb3JpZ2luYWwgY29kZSBoYWQgYSBwb3RlbnRpYWwgcmFjZSBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBzYWZlbHkgaG9sZGluZyBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgdGhhdCBjb3VsZCBiZSBpbnZhbGlkYXRlZCBieSBhbm90aGVyIHBhcnQgb2YgdGhlIGtlcm5lbCwgcGFydGljdWxhcmx5IGluIGEgbXVsdGktdGhyZWFkZWQgb3IgaW50ZXJydXB0LWRyaXZlbiBlbnZpcm9ubWVudC5cblxuVGhlIHN1YnNlcXVlbnQgYHByb2NfZmx1c2hfcGlkKClgIGZ1bmN0aW9uIGFwcGVhcnMgdG8gYmUgdXNpbmcgdGhlIHJlZmVyZW5jZWQgYHRocmVhZF9waWRgLCBhbmQgaXQncyBmb2xsb3dlZCBieSBhIGNvcnJlc3BvbmRpbmcgYHB1dF9waWQoKWAuIFRoaXMgaXMgZ3JlYXQgYmVjYXVzZSBpdCBlbnN1cmVzIHRoZSByZWZlcmVuY2UgY291bnQgaXMgZGVjcmVtZW50ZWQgb25jZSB3ZSdyZSBkb25lIHdpdGggdGhlIFBJRCwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4gIEknbSBnbGFkIHRvIHNlZSB0aGF0IGBwdXRfcGlkKClgIGlzIHByZXNlbnQgdG8gbWF0Y2ggdGhlIGluY3JlbWVudCBieSBgZ2V0X3BpZCgpYC5cblxuT3ZlcmFsbCwgdGhpcyBpcyBhIHZlcnkgcmVhc29uYWJsZSBjaGFuZ2UuIEl0J3MgYSBzbWFsbCBidXQgaW1wb3J0YW50IGZpeCB0byBwb3RlbnRpYWxseSBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaW52b2x2aW5nIFBJRCBsb29rdXAgZHVyaW5nIHByb2Nlc3MgZXhpdC4gSXQncyB0aGUgc29ydCBvZiBjYXJlZnVsIHJlc291cmNlIG1hbmFnZW1lbnQgdGhhdCB3ZSBleHBlY3QgdG8gc2VlLiBJIGNhbuKAmXQgaW1tZWRpYXRlbHkgc2VlIGFueSBvYnZpb3VzIGlzc3VlcywgYW5kIEknZCBiZSB3aWxsaW5nIHRvIGdpdmUgdGhpcyBhIHF1aWNrIHNwb3QgY2hlY2sgYW5kIHJ1biBhIGZldyB0ZXN0cyBvbiBteSBlbmQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGFyZSBpbnRyb2R1Y2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjM2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTE6NTEuNzMwODgxNDJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9leGl0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiA4MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdFxcdHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCBwb3N0O1xcbiAyNTE6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXI7XFxuIDI1MjpcXHRcXHRzdHJ1Y3QgcGlkICp0aHJlYWRfcGlkO1xcbiAyNTM6XFx0XFx0aW50IHphcF9sZWFkZXI7XFxuIDI1NDpcXHRyZXBlYXQ6XFxuIDI1NTpcXHRcXHRtZW1zZXQoXFx1MDAyNnBvc3QsIDAsIHNpemVvZihwb3N0KSk7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdC8qIGRvbid0IG5lZWQgdG8gZ2V0IHRoZSBSQ1UgcmVhZGxvY2sgaGVyZSAtIHRoZSBwcm9jZXNzIGlzIGRlYWQgYW5kXFxuIDI1ODpcXHRcXHQgKiBjYW4ndCBiZSBtb2RpZnlpbmcgaXRzIG93biBjcmVkZW50aWFscy4gKi9cXG4gMjU5OlxcdFxcdGRlY19ybGltaXRfdWNvdW50cyh0YXNrX3Vjb3VudHMocCksIFVDT1VOVF9STElNSVRfTlBST0MsIDEpO1xcbiAyNjA6XFx0XFxuIDI2MTpcXHRcXHRwaWRmc19leGl0KHApO1xcbiAyNjI6XFx0XFx0Y2dyb3VwX3Rhc2tfcmVsZWFzZShwKTtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0LyogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgbWF5IHNldCBpdCB0byBOVUxMLiAqL1xcbiAyNjU6XFx0XFx0dGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpO1xcbiAyNjY6XFx0XFxuIDI2NzpcXHRcXHR3cml0ZV9sb2NrX2lycShcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuIDI2ODpcXHRcXHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xcbiAyNjk6XFx0XFx0X19leGl0X3NpZ25hbChcXHUwMDI2cG9zdCwgcCk7XFxuIDI3MDpcXHRcXG4gMjcxOlxcdFxcdC8qXFxuIDI3MjpcXHRcXHQgKiBJZiB3ZSBhcmUgdGhlIGxhc3Qgbm9uLWxlYWRlciBtZW1iZXIgb2YgdGhlIHRocmVhZFxcbiAyNzM6XFx0XFx0ICogZ3JvdXAsIGFuZCB0aGUgbGVhZGVyIGlzIHpvbWJpZSwgdGhlbiBub3RpZnkgdGhlXFxuIDI3NDpcXHRcXHQgKiBncm91cCBsZWFkZXIncyBwYXJlbnQgcHJvY2Vzcy4gKGlmIGl0IHdhbnRzIG5vdGlmaWNhdGlvbi4pXFxuIDI3NTpcXHRcXHQgKi9cXG4gMjc2OlxcdFxcdHphcF9sZWFkZXIgPSAwO1xcbiAyNzc6XFx0XFx0bGVhZGVyID0gcC1cXHUwMDNlZ3JvdXBfbGVhZGVyO1xcbiAyNzg6XFx0XFx0aWYgKGxlYWRlciAhPSBwIFxcdTAwMjZcXHUwMDI2IHRocmVhZF9ncm91cF9lbXB0eShsZWFkZXIpXFxuIDI3OTpcXHRcXHRcXHRcXHRcXHUwMDI2XFx1MDAyNiBsZWFkZXItXFx1MDAzZWV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpIHtcXG4gMjgwOlxcdFxcdFxcdC8qIGZvciBwaWRmc19leGl0KCkgYW5kIGRvX25vdGlmeV9wYXJlbnQoKSAqL1xcbiAyODE6XFx0XFx0XFx0aWYgKGxlYWRlci1cXHUwMDNlc2lnbmFsLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNJR05BTF9HUk9VUF9FWElUKVxcbiAyODI6XFx0XFx0XFx0XFx0bGVhZGVyLVxcdTAwM2VleGl0X2NvZGUgPSBsZWFkZXItXFx1MDAzZXNpZ25hbC1cXHUwMDNlZ3JvdXBfZXhpdF9jb2RlO1xcbiAyODM6XFx0XFx0XFx0LypcXG4gMjg0OlxcdFxcdFxcdCAqIElmIHdlIHdlcmUgdGhlIGxhc3QgY2hpbGQgdGhyZWFkIGFuZCB0aGUgbGVhZGVyIGhhc1xcbiAyODU6XFx0XFx0XFx0ICogZXhpdGVkIGFscmVhZHksIGFuZCB0aGUgbGVhZGVyJ3MgcGFyZW50IGlnbm9yZXMgU0lHQ0hMRCxcXG4gMjg2OlxcdFxcdFxcdCAqIHRoZW4gd2UgYXJlIHRoZSBvbmUgd2hvIHNob3VsZCByZWxlYXNlIHRoZSBsZWFkZXIuXFxuIDI4NzpcXHRcXHRcXHQgKi9cXG4gMjg4OlxcdFxcdFxcdHphcF9sZWFkZXIgPSBkb19ub3RpZnlfcGFyZW50KGxlYWRlciwgbGVhZGVyLVxcdTAwM2VleGl0X3NpZ25hbCk7XFxuIDI4OTpcXHRcXHRcXHRpZiAoemFwX2xlYWRlcilcXG4gMjkwOlxcdFxcdFxcdFxcdGxlYWRlci1cXHUwMDNlZXhpdF9zdGF0ZSA9IEVYSVRfREVBRDtcXG4gMjkxOlxcdFxcdH1cXG4gMjkyOlxcdFxcbiAyOTM6XFx0XFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuIDI5NDpcXHRcXHRwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKTtcXG4gMjk1OlxcdFxcdHB1dF9waWQodGhyZWFkX3BpZCk7XFxuIDI5NjpcXHRcXHRleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTtcXG4gMjk3OlxcdFxcdGFkZF9kZXZpY2VfcmFuZG9tbmVzcyhcXHUwMDI2cC1cXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcXG4gMjk4OlxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihwLVxcdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XFxuIDI5OTpcXHRcXHRmcmVlX3BpZHMocG9zdC5waWRzKTtcXG4gMzAwOlxcdFxcdHJlbGVhc2VfdGhyZWFkKHApO1xcbiAzMDE6XFx0XFx0LypcXG4gMzAyOlxcdFxcdCAqIFRoaXMgdGFzayB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhlIHByb2Nlc3MvdGhyZWFkL3BpZCBsaXN0c1xcbiAzMDM6XFx0XFx0ICogYW5kIGxvY2tfdGFza19zaWdoYW5kKHApIGNhbid0IHN1Y2NlZWQuIE5vYm9keSBlbHNlIGNhbiB0b3VjaFxcbiAzMDQ6XFx0XFx0ICogLVxcdTAwM2VwZW5kaW5nIG9yLCBpZiBncm91cCBkZWFkLCBzaWduYWwtXFx1MDAzZXNoYXJlZF9wZW5kaW5nLiBXZSBjYW4gY2FsbFxcbiAzMDU6XFx0XFx0ICogZmx1c2hfc2lncXVldWUoKSBsb2NrbGVzcy5cXG4gMzA2OlxcdFxcdCAqL1xcbiAzMDc6XFx0XFx0Zmx1c2hfc2lncXVldWUoXFx1MDAyNnAtXFx1MDAzZXBlbmRpbmcpO1xcbiAzMDg6XFx0XFx0aWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpXFxuIDMwOTpcXHRcXHRcXHRmbHVzaF9zaWdxdWV1ZShcXHUwMDI2cC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VzaGFyZWRfcGVuZGluZyk7XFxuIDMxMDpcXHRcXG4gMzExOlxcdFxcdHB1dF90YXNrX3N0cnVjdF9yY3VfdXNlcihwKTtcXG4gMzEyOlxcdFxcbiAzMTM6XFx0XFx0cCA9IGxlYWRlcjtcXG4gMzE0OlxcdFxcdGlmICh1bmxpa2VseSh6YXBfbGVhZGVyKSlcXG4gMzE1OlxcdFxcdFxcdGdvdG8gcmVwZWF0O1xcbiAzMTY6XFx0fVxcbiAzMTc6XFx0XFxuIDMxODpcXHRpbnQgcmN1d2FpdF93YWtlX3VwKHN0cnVjdCByY3V3YWl0ICp3KVxcbiAzMTk6XFx0e1xcbiAzMjA6XFx0XFx0aW50IHJldCA9IDA7XFxuIDMyMTpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuIDMyMjpcXHRcXG4gMzIzOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMzI0OlxcdFxcbiAzMjU6XFx0XFx0LypcXG4gMzI2OlxcdFxcdCAqIE9yZGVyIGNvbmRpdGlvbiB2cyBAdGFzaywgc3VjaCB0aGF0IGV2ZXJ5dGhpbmcgcHJpb3IgdG8gdGhlIGxvYWRcXG4gMzI3OlxcdFxcdCAqIG9mIEB0YXNrIGlzIHZpc2libGUuIFRoaXMgaXMgdGhlIGNvbmRpdGlvbiBhcyB0byB3aHkgdGhlIHVzZXIgY2FsbGVkXFxuIDMyODpcXHRcXHQgKiByY3V3YWl0X3dha2UoKSBpbiB0aGUgZmlyc3QgcGxhY2UuIFBhaXJzIHdpdGggc2V0X2N1cnJlbnRfc3RhdGUoKVxcbiAzMjk6XFx0XFx0ICogYmFycmllciAoQSkgaW4gcmN1d2FpdF93YWl0X2V2ZW50KCkuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDEwOjUxOjUxLjczMTAwMzg1WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MTgxMDY3OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFJlY2VudCBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgYSBjb2RlIHNuaXBwZXQgdGhhdCdzIGJlZW4gbW9kaWZpZWQsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYHRocmVhZF9waWRgIGFuZCBQSUQgbWFuYWdlbWVudC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGdldCB0aGUgUElELCBmbHVzaCBpdCwgYW5kIHRoZW4gZnJlZSBzb21lIFBJRCBzdHJ1Y3R1cmVzLiBUaGUgY2hhbmdlIGludHJvZHVjZXMgYGdldF9waWQoKWAgYmVmb3JlIGBwcm9jX2ZsdXNoX3BpZCgpYCBhbmQgYHB1dF9waWQoKWAgYWZ0ZXIgaXQuIE15IGluaXRpYWwgdGhvdWdodCBpczogd2h5IHRoZSBjaGFuZ2U/IEFoLCByaWdodCwgaXQncyBsaWtlbHkgYSBsaWZldGltZSBpc3N1ZS4gVGhlIGNvbW1lbnQgaGl0cyB0aGUgbmFpbCBvbiB0aGUgaGVhZCDigJMgYHRocmVhZF9waWRgIG1pZ2h0IGhhdmUgYmVlbiBmcmVlZCBvciBoYXZlIGl0cyByZWZlcmVuY2UgY291bnQgZHJvcCB0byB6ZXJvIGJlZm9yZSBgcHJvY19mbHVzaF9waWQoKWAgaXMgY2FsbGVkLCBlc3BlY2lhbGx5IGR1cmluZyBgX19leGl0X3NpZ25hbCgpYCBvciBgX191bmhhc2hfcHJvY2Vzc2AgaWYgdGhlIFBJRCB3YXNuJ3QgcHJvcGVybHkgcGlubmVkLiBUaGlzIGlzIGEgY2xhc3NpYyB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby5cblxuTm93LCBsZXQncyBkbyBhIHF1aWNrIG1lbnRhbCBzd2VlcCBmb3Igb3RoZXIgcG90ZW50aWFsIGlzc3Vlcy4gSXMgdGhlcmUgYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZD8gQW55IGNvcGllcyB0byB1c2VyLXNwYWNlPyBVbmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHM/IE9yIGFueXRoaW5nIHRoYXQgS01TQU4gbWlnaHQgZmxhZz8gTm8sIG5vdCB0aGF0IEkgY2FuIHNlZS4gYGdldF9waWQodGFza19waWQocCkpYCBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGBzdHJ1Y3QgcGlkYCwgYHB1dF9waWQodGhyZWFkX3BpZClgIGRlY3JlbWVudHMgaXQsIGFuZCBgcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZClgIGFjY2Vzc2VzIHRoZSBQSUQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgYXJlIHBvaW50ZXJzLCBhbmQgdGhhdCdzIHVzdWFsbHkgc3RyYWlnaHRmb3J3YXJkLiBObyBzdGFjayBidWZmZXJzLCBoZWFwIGFsbG9jYXRpb25zLCBpbmZvcm1hdGlvbiBsZWFrcywgb3IgdW5pbml0aWFsaXplZCBwYWRkaW5nIGNvcGllcy4gQW55IHJlZmVyZW5jZSBjb3VudGluZyBlcnJvcnMg4oCTIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZXMsIG51bGwgZGVyZWZlcmVuY2VzIOKAkyBhcmUgdGhlIHN0YW5kYXJkIG1lbW9yeSBidWdzLCBhbmQgc2hvdWxkIGJlIHBpY2tlZCB1cCBieSBLQVNBTiBvciByZWZlcmVuY2UgY291bnRpbmcgY2hlY2tlcnMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgaW1wbGVtZW50YXRpb25zIG9mIGBnZXRfcGlkYCBhbmQgYHB1dF9waWRgIHRvIGNvbmZpcm0gdGhleSdyZSBkb2luZyB3aGF0IHRoZXkncmUgc3VwcG9zZWQgdG8uIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aG9zZSBwcmltaXRpdmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjkwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTA6NTI6MDcuOTEyMDc0MjA3WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQxODUxNDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgc3RydWN0IHBpZCBcXFxcKmdldF9waWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9waWQuaD04NT12b2lkIGRvX25vdGlmeV9waWRmZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbmluY2x1ZGUvbGludXgvcGlkLmgtODYtXFxuaW5jbHVkZS9saW51eC9waWQuaDo4NzpzdGF0aWMgaW5saW5lIHN0cnVjdCBwaWQgKmdldF9waWQoc3RydWN0IHBpZCAqcGlkKVxcbmluY2x1ZGUvbGludXgvcGlkLmgtODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MjoxMC4yNTM5MzE1MzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2MDU3NDUyNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gTGludXggUElEIEludGVybmFscyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgUElEcyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbCwgc28gSSdtIGdvaW5nIHRvIG5hdmlnYXRlIHRvIGBpbmNsdWRlL2xpbnV4L3BpZC5oYC4gU3BlY2lmaWNhbGx5LCBJJ20gYWltaW5nIGZvciBhcm91bmQgbGluZSA4Ny4gSSdtIGhvcGluZyB0byBmaW5kIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IGRlZmluZSBob3cgUElEcyBhcmUgYWxsb2NhdGVkLCB0cmFja2VkLCBhbmQgcG90ZW50aWFsbHkgcmVjeWNsZWQuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHRoZSBgcGlkX25hbWVzcGFjZWAgc3RydWN0dXJlLCBwb3NzaWJseSBzb21lIGdsb2JhbCBoYXNoIHRhYmxlcyBvciBhcnJheXMsIGFuZCBob3BlZnVsbHkgc29tZSBpbmxpbmUgZnVuY3Rpb25zIGZvciBwaWQgbG9va3VwcyBhbmQgYWxsb2NhdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgUElEIHNwYWNlcyBhcyB3ZWxsLiBJJ20gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyByZWxhdGVkIHRvIHRoZSBjb21wbGV4aXRpZXMgb2YgUElEIG5hbWVzcGFjZXMgYW5kIHByb2Nlc3MgaWRlbnRpZmljYXRpb24uIExldCdzIHNlZSB3aGF0IHRoZSBrZXJuZWwgZGV2cyBjYW1lIHVwIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxODUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MjoyMC44NTk2ODA1MzJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA2MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9waWQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXG4gIDgxOlxcdHN0cnVjdCBwaWQgKnBpZGZkX3BpZChjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSk7XFxuICA4MjpcXHRzdHJ1Y3QgcGlkICpwaWRmZF9nZXRfcGlkKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50ICpmbGFncyk7XFxuICA4MzpcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpZGZkX2dldF90YXNrKGludCBwaWRmZCwgdW5zaWduZWQgaW50ICpmbGFncyk7XFxuICA4NDpcXHRpbnQgcGlkZmRfcHJlcGFyZShzdHJ1Y3QgcGlkICpwaWQsIHVuc2lnbmVkIGludCBmbGFncywgc3RydWN0IGZpbGUgKipyZXRfZmlsZSk7XFxuICA4NTpcXHR2b2lkIGRvX25vdGlmeV9waWRmZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spO1xcbiAgODY6XFx0XFxuICA4NzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwaWQgKmdldF9waWQoc3RydWN0IHBpZCAqcGlkKVxcbiAgODg6XFx0e1xcbiAgODk6XFx0XFx0aWYgKHBpZClcXG4gIDkwOlxcdFxcdFxcdHJlZmNvdW50X2luYyhcXHUwMDI2cGlkLVxcdTAwM2Vjb3VudCk7XFxuICA5MTpcXHRcXHRyZXR1cm4gcGlkO1xcbiAgOTI6XFx0fVxcbiAgOTM6XFx0XFxuICA5NDpcXHRleHRlcm4gdm9pZCBwdXRfcGlkKHN0cnVjdCBwaWQgKnBpZCk7XFxuICA5NTpcXHRleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpwaWRfdGFzayhzdHJ1Y3QgcGlkICpwaWQsIGVudW0gcGlkX3R5cGUpO1xcbiAgOTY6XFx0c3RhdGljIGlubGluZSBib29sIHBpZF9oYXNfdGFzayhzdHJ1Y3QgcGlkICpwaWQsIGVudW0gcGlkX3R5cGUgdHlwZSlcXG4gIDk3OlxcdHtcXG4gIDk4OlxcdFxcdHJldHVybiAhaGxpc3RfZW1wdHkoXFx1MDAyNnBpZC1cXHUwMDNldGFza3NbdHlwZV0pO1xcbiAgOTk6XFx0fVxcbiAxMDA6XFx0ZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2V0X3BpZF90YXNrKHN0cnVjdCBwaWQgKnBpZCwgZW51bSBwaWRfdHlwZSk7XFxuIDEwMTpcXHRcXG4gMTAyOlxcdGV4dGVybiBzdHJ1Y3QgcGlkICpnZXRfdGFza19waWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBlbnVtIHBpZF90eXBlIHR5cGUpO1xcbiAxMDM6XFx0XFxuIDEwNDpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MjoyMC44NTk3NzM2MzJaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIwMDE3NDMzMzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0J3MgYSBzdHJhaWdodGZvcndhcmQgZml4IGZvciBhIGNsYXNzaWMgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlLCBhIFwiVXNlLUFmdGVyLUZyZWVcIiBzaXR1YXRpb24uIFRoZSBwcm9ibGVtIGlzIGNsZWFyOiB0aGUgYHRocmVhZF9waWRgIHN0cnVjdHVyZSBjb3VsZCBwb3RlbnRpYWxseSBiZSBmcmVlZCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGZpbmlzaGVzIHdpdGggaXQuIFRoZSBzb2x1dGlvbiBpcyBlbGVnYW50LiBXZSBhcmUgdXNpbmcgYGdldF9waWQoKWAgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGB0aHJlYWRfcGlkYCB3aXRoaW4gYHJlbGVhc2VfdGFzaygpYCBiZWZvcmUgYF9fZXhpdF9zaWduYWwoKWAgYW5kIHRoZW4gZGVjcmVtZW50aW5nIGl0IHdpdGggYHB1dF9waWQoKWAgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKClgLiBUaGlzIGVuc3VyZXMgdGhlIG9iamVjdCdzIGxpZmV0aW1lIG1hdGNoZXMgaXRzIHVzYWdlLlxuXG5UaGlzIGlzIGZ1bmRhbWVudGFsbHkgYWJvdXQgY29ycmVjdCBvYmplY3QgbGlmZXRpbWUgbWFuYWdlbWVudC4gV2UncmUgdXNpbmcgc3RhbmRhcmQgcmVmY291bnQgdHJhY2tpbmcgdG8gZ3VhcmFudGVlIHRoYXQuIEtBU0FOIGFuZCBzdGFuZGFyZCBzYW5pdGl6ZXJzIGFyZSBwZXJmZWN0bHkgc3VpdGVkIHRvIGRldGVjdCB0aGlzIGtpbmQgb2YgYnVnLlxuXG5Ob3csIGxldCdzIHZlcmlmeSB0aGF0IHRoaXMgKmRvZXNuJ3QqIGludHJvZHVjZSBhbnkgS01TQU4tcmVsZXZhbnQgaXNzdWVzLiBXZSdyZSBub3QgZGVhbGluZyB3aXRoOlxuXG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQgKHRoYXQncyBhIGJpZyBLTVNBTiByZWQgZmxhZykuXG4yLiAgQW55IHJlYWRzIG9yIGJyYW5jaGVzIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBpcyBhbm90aGVyIEtNU0FOIGNvbmNlcm4uXG4zLiAgVW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMgKHRoYXTigJlzIGEgZGlmZmVyZW50IHByb2JsZW0gYWx0b2dldGhlcikuXG40LiAgVW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzZXMgd2hpY2ggS01TQU4gd291bGQgZGVmaW5pdGVseSBjYXRjaC5cblxuU28sIGFmdGVyIHJldmlld2luZyBldmVyeXRoaW5nLCBJJ20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIFRoaXMgcGF0Y2ggaXMgYSBzb2xpZCBmaXggZm9yIGEgc3RhbmRhcmQgcmVmY291bnQgaXNzdWUsIGFuZCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgYGZhbHNlYC4gSSBjYW4gZ28gYWhlYWQgYW5kIHNldCB0aGUgcmVzdWx0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyOSwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxMDo1MjozMi44NjE1MTkwMDRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgLyByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUgaW4gcmVsZWFzZV90YXNrKCkgYnkgdGFraW5nIGEgcmVmZXJlbmNlIHRvIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYmVmb3JlIF9fZXhpdF9zaWduYWwoKSBhbmQgcmVsZWFzaW5nIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCkuIFRoaXMgcHJldmVudHMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgaWYgdGhlIHBpZCBzdHJ1Y3R1cmUncyByZWZlcmVuY2UgY291bnQgZHJvcHBlZCB0byB6ZXJvIHByZW1hdHVyZWx5LiBTdWNoIGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSBmdWxseSBkZXRlY3RhYmxlIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCByZWZjb3VudCB0cmFja2luZy4gVGhlIGNoYW5nZSBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBjb21wbGV4IHN0cnVjdCBpbml0aWFsaXphdGlvbnMsIGtlcm5lbC10by11c2VyIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBicmFuY2ggY29uZGl0aW9ucy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSAvIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSBpbiByZWxlYXNlX3Rhc2soKSBieSB0YWtpbmcgYSByZWZlcmVuY2UgdG8gdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBiZWZvcmUgX19leGl0X3NpZ25hbCgpIGFuZCByZWxlYXNpbmcgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKS4gVGhpcyBwcmV2ZW50cyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBpZiB0aGUgcGlkIHN0cnVjdHVyZSdzIHJlZmVyZW5jZSBjb3VudCBkcm9wcGVkIHRvIHplcm8gcHJlbWF0dXJlbHkuIFN1Y2ggbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIGZ1bGx5IGRldGVjdGFibGUgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHJlZmNvdW50IHRyYWNraW5nLiBUaGUgY2hhbmdlIGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgdW5pbml0aWFsaXplZCBtZW1vcnksIGNvbXBsZXggc3RydWN0IGluaXRpYWxpemF0aW9ucywga2VybmVsLXRvLXVzZXIgY29waWVzLCBvciB1bmluaXRpYWxpemVkIGJyYW5jaCBjb25kaXRpb25zLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowsthfj[1] Phase: Succeeded StartedAt: 2026-08-29 10:52:44 +0000 UTC FinishedAt: 2026-08-29 10:52:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 10:52:44 +0000 UTC FinishedAt: 2026-08-29 10:52:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2] Phase: Succeeded StartedAt: 2026-08-29 10:52:44 +0000 UTC FinishedAt: 2026-08-29 14:33:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-29 10:52:44 +0000 UTC FinishedAt: 2026-08-29 14:33:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-29 10:52:44 +0000 UTC FinishedAt: 2026-08-29 10:52:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-29 10:52:44 +0000 UTC FinishedAt: 2026-08-29 10:52:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowsthfj/series-workflowsthfj-convert-artifact-1059001920/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-29 10:52:54 +0000 UTC FinishedAt: 2026-08-29 11:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-29 10:52:54 +0000 UTC FinishedAt: 2026-08-29 11:09:40 +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:*2793753f-61a4-4d6a-88bb-2f67a043de29,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-workflowsthfj/series-workflowsthfj-convert-artifact-1059001920/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": "f9e45498-a074-4304-9649-da4083814f90", "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-workflowsthfj/series-workflowsthfj-build-action-3817995782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-29 10:52:54 +0000 UTC FinishedAt: 2026-08-29 11:09:30 +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:*2793753f-61a4-4d6a-88bb-2f67a043de29,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-workflowsthfj/series-workflowsthfj-convert-artifact-1059001920/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": "f9e45498-a074-4304-9649-da4083814f90", "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-workflowsthfj/series-workflowsthfj-build-action-3817995782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-29 11:09:40 +0000 UTC FinishedAt: 2026-08-29 11:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-29 11:09:40 +0000 UTC FinishedAt: 2026-08-29 11:09:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-29 11:09:40 +0000 UTC FinishedAt: 2026-08-29 11:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-29 11:09:40 +0000 UTC FinishedAt: 2026-08-29 11:09:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowsthfj/series-workflowsthfj-convert-artifact-3878398439/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-29 11:09:50 +0000 UTC FinishedAt: 2026-08-29 11:11:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-29 11:09:50 +0000 UTC FinishedAt: 2026-08-29 11:11:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f9e45498-a074-4304-9649-da4083814f90,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-workflowsthfj/series-workflowsthfj-build-action-3817995782/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-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-29 11:11:58 +0000 UTC FinishedAt: 2026-08-29 11:11:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-29 11:11:58 +0000 UTC FinishedAt: 2026-08-29 11:11:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-29 11:11:58 +0000 UTC FinishedAt: 2026-08-29 11:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-29 11:11:58 +0000 UTC FinishedAt: 2026-08-29 11:29:16 +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:*2793753f-61a4-4d6a-88bb-2f67a043de29,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-workflowsthfj/series-workflowsthfj-convert-artifact-3878398439/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": "f56c4986-2c38-43b9-b256-a494904ce1b0", "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-workflowsthfj/series-workflowsthfj-build-action-3455607147/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-29 11:11:58 +0000 UTC FinishedAt: 2026-08-29 11:29:06 +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:*2793753f-61a4-4d6a-88bb-2f67a043de29,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-workflowsthfj/series-workflowsthfj-convert-artifact-3878398439/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": "f56c4986-2c38-43b9-b256-a494904ce1b0", "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-workflowsthfj/series-workflowsthfj-build-action-3455607147/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-29 11:29:16 +0000 UTC FinishedAt: 2026-08-29 11:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-29 11:29:16 +0000 UTC FinishedAt: 2026-08-29 11:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-29 11:29:16 +0000 UTC FinishedAt: 2026-08-29 11:31:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-29 11:29:16 +0000 UTC FinishedAt: 2026-08-29 11:31:06 +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:*f56c4986-2c38-43b9-b256-a494904ce1b0,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-workflowsthfj/series-workflowsthfj-build-action-3455607147/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-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-29 11:31:16 +0000 UTC FinishedAt: 2026-08-29 14:33:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-29 11:31:16 +0000 UTC FinishedAt: 2026-08-29 14:33:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"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:*f9e45498-a074-4304-9649-da4083814f90,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f56c4986-2c38-43b9-b256-a494904ce1b0,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-workflowsthfj/series-workflowsthfj-build-action-3817995782/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-workflowsthfj/series-workflowsthfj-build-action-3455607147/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-29 11:31:16 +0000 UTC FinishedAt: 2026-08-29 11:31:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-29 11:31:16 +0000 UTC FinishedAt: 2026-08-29 11:31:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"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-workflowsthfj/series-workflowsthfj-convert-artifact-1333838656/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-29 11:31:16 +0000 UTC FinishedAt: 2026-08-29 11:31:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-29 11:31:16 +0000 UTC FinishedAt: 2026-08-29 11:31:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-29 11:31:16 +0000 UTC FinishedAt: 2026-08-29 11:31:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-29 11:31:26 +0000 UTC FinishedAt: 2026-08-29 14:33:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowsthfj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["release_task","proc_flush_pid"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f78e0cb3fd377cfe90fe07a0eeec20584c0f4907","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS"],"series_id":"ec641c38-3c0e-4b9b-9791-daef03ada094","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-29 11:31:26 +0000 UTC FinishedAt: 2026-08-29 14:33:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f9e45498-a074-4304-9649-da4083814f90,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f56c4986-2c38-43b9-b256-a494904ce1b0,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-workflowsthfj/series-workflowsthfj-build-action-3817995782/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-workflowsthfj/series-workflowsthfj-build-action-3455607147/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-workflowsthfj/series-workflowsthfj-convert-artifact-1333838656/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,}