Name: series-workflowzfgtr Phase: Succeeded StartedAt: 2026-08-31 00:24:03 +0000 UTC FinishedAt: 2026-08-31 04:45:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[0] Phase: Succeeded StartedAt: 2026-08-31 00:24:03 +0000 UTC FinishedAt: 2026-08-31 01:04:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 00:24:03 +0000 UTC FinishedAt: 2026-08-31 01:04:23 +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": "3d28a38e-75ea-4297-aec0-c76208a1b58a" }, "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWxlYXNlX3Rhc2smIzM0OywKICAgICYjMzQ7cHJvY19mbHVzaF9waWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIC8gdXNlLWFmdGVyLWZyZWUgaXNzdWUgaW4gYHJlbGVhc2VfdGFzaygpYCB3aGVyZSBgdGhyZWFkX3BpZGAgY291bGQgYmUgZnJlZWQgcHJpb3IgdG8gYHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpYCB3aGVuIHRoZSBsYXN0IFBJRFRZUEUgaXMgZGV0YWNoZWQgZHVyaW5nIHByb2Nlc3MgdW5oYXNoaW5nLiBJdCBmaXhlcyB0aGlzIGJ5IHBpbm5pbmcgYHRocmVhZF9waWRgIHVzaW5nIGBnZXRfcGlkKClgIGFuZCBzdWJzZXF1ZW50bHkgcmVsZWFzaW5nIGl0IHdpdGggYHB1dF9waWQoKWAuXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIG9iamVjdCByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgKHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSkuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIG1lbW9yeSBsaWZldGltZSBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAoaW5mb2xlYWtzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBpbiByZWxlYXNlX3Rhc2soKSB3aGVyZSB0aHJlYWRfcGlkIGNvdWxkIGJlIGZyZWVkIGR1cmluZyBQSURUWVBFIGRldGFjaG1lbnQgaW4gX191bmhhc2hfcHJvY2VzcygpIGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpIGFjY2Vzc2VkIGl0LiBJdCBwaW5zIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYW5kIHJlbGVhc2VzIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCksIGFmZmVjdGluZyBjb3JlIHRhc2sgdGVybWluYXRpb24gYW5kIHByb2NmcyBkY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzMwZmYwZDUxODI0ZWI4MTMyNzlhMTI1NGVhZDQ1OThjNjU2OTJlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDAxOjAzOjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jXG5pbmRleCA5NzY4NmFmODk1MDEzLi40ZTAyOGYxNTc1OTc4IDEwMDY0NFxuLS0tIGEva2VybmVsL2V4aXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2V4aXQuY1xuQEAgLTI2MSw4ICYjNDM7MjYxLDExIEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHBpZGZzX2V4aXQocCk7XG4gXHRjZ3JvdXBfdGFza19yZWxlYXNlKHApO1xuIFxuLVx0LyogUmV0cmlldmUgQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4tXHR0aHJlYWRfcGlkID0gdGFza19waWQocCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBjbGVhcnMgaXQuIFRoZSBsYXN0XG4mIzQzO1x0ICogUElEVFlQRSBkZXRhY2ggY2FuIG90aGVyd2lzZSBmcmVlIGl0IGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHRocmVhZF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKHApKTtcbiBcbiBcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuIFx0cHRyYWNlX3JlbGVhc2VfdGFzayhwKTtcbkBAIC0yOTEsOCAmIzQzOzI5NCw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdH1cbiBcbiBcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4tXHQvKiBAdGhyZWFkX3BpZCBjYW4mIzM5O3QgZ28gYXdheSB1bnRpbCBmcmVlX3BpZHMoKSBiZWxvdyAqL1xuIFx0cHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7XG4mIzQzO1x0cHV0X3BpZCh0aHJlYWRfcGlkKTtcbiBcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xuIFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFx1MDAyNnAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcbiBcdFx0XHQgICAgICBzaXplb2YocC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlbGVhc2VfdGFzayYjMzQ7LAogICAgJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNvbHZlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSByYWNlIGluIHJlbGVhc2VfdGFzaygpIHdoZXJlIHRocmVhZF9waWQgY291bGQgYmUgZnJlZWQgZHVyaW5nIFBJRFRZUEUgZGV0YWNobWVudCBpbiBfX3VuaGFzaF9wcm9jZXNzKCkgYmVmb3JlIHByb2NfZmx1c2hfcGlkKCkgYWNjZXNzZWQgaXQuIEl0IHBpbnMgdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBhbmQgcmVsZWFzZXMgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKSwgYWZmZWN0aW5nIGNvcmUgdGFzayB0ZXJtaW5hdGlvbiBhbmQgcHJvY2ZzIGRjYWNoZSBpbnZhbGlkYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MzBmZjBkNTE4MjRlYjgxMzI3OWExMjU0ZWFkNDU5OGM2NTY5MmU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDE6MDM6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCA5NzY4NmFmODk1MDEzLi40ZTAyOGYxNTc1OTc4IDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9leGl0LmMKQEAgLTI2MSw4ICYjNDM7MjYxLDExIEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAlwaWRmc19leGl0KHApOwogCWNncm91cF90YXNrX3JlbGVhc2UocCk7CiAKLQkvKiBSZXRyaWV2ZSBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi8KLQl0aHJlYWRfcGlkID0gdGFza19waWQocCk7CiYjNDM7CS8qCiYjNDM7CSAqIFBpbiBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIGNsZWFycyBpdC4gVGhlIGxhc3QKJiM0MzsJICogUElEVFlQRSBkZXRhY2ggY2FuIG90aGVyd2lzZSBmcmVlIGl0IGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpLgomIzQzOwkgKi8KJiM0MzsJdGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpOwogCiAJd3JpdGVfbG9ja19pcnEoJmFtcDt0YXNrbGlzdF9sb2NrKTsKIAlwdHJhY2VfcmVsZWFzZV90YXNrKHApOwpAQCAtMjkxLDggJiM0MzsyOTQsOCBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJfQogCiAJd3JpdGVfdW5sb2NrX2lycSgmYW1wO3Rhc2tsaXN0X2xvY2spOwotCS8qIEB0aHJlYWRfcGlkIGNhbiYjMzk7dCBnbyBhd2F5IHVudGlsIGZyZWVfcGlkcygpIGJlbG93ICovCiAJcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7CiYjNDM7CXB1dF9waWQodGhyZWFkX3BpZCk7CiAJZXhpdF9jcmVkX25hbWVzcGFjZXMocCk7CiAJYWRkX2RldmljZV9yYW5kb21uZXNzKCZhbXA7cC0mZ3Q7c2Uuc3VtX2V4ZWNfcnVudGltZSwKIAkJCSAgICAgIHNpemVvZihwLSZndDtzZS5zdW1fZXhlY19ydW50aW1lKSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggUmV2aWV3OiBGdXp6aW5nIFBvdGVudGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRvIGxvb2sgYXQsIGFuZCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgaXQgaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZz8gTGV0JiMzOTtzIGRpdmUgaW4uIFRoZSB0YXJnZXQgZmlsZSBpcyBga2VybmVsL2V4aXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHJlbGVhc2VfdGFzaygpYCBmdW5jdGlvbi4gVGhlIGRpZmYgZm9jdXNlcyBvbiBob3cgYHRocmVhZF9waWRgIGlzIGhhbmRsZWQsIHJpZ2h0IGJlZm9yZSB0aGUgcHJvY2VzcyBpcyB1bmhhc2hlZCBhbmQgZnJlZWQuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgUElEIGNvdWxkIGJlIGZyZWVkIGJlZm9yZSBgcHJvY19mbHVzaF9waWQoKWAgaGFzIGEgY2hhbmNlIHRvIGRvIGl0cyBqb2IuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaXMgYWRkaW5nIGBnZXRfcGlkKClgIHRvIHBpbiB0aGUgUElELCBhbmQgYHB1dF9waWQoKWAgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKClgIHRvIHJlbGVhc2UgdGhlIHBpbm5lZCBQSUQuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIGRhdGEgcmFjZSBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhlIGFkZGVkIGNvbW1lbnRzIGNvbmZpcm0gdGhpcywgY2xhcmlmeWluZyB0aGF0IHRoZXkmIzM5O3JlIGVuc3VyaW5nIHRoZSBQSUQgcGVyc2lzdHMgdW50aWwgaXQgY2FuIGJlIHByb3Blcmx5IGhhbmRsZWQuIFRoZSBsYXN0IGxpbmUgb2YgdGhlIG9yaWdpbmFsIGNvZGUsIHRoZSBwcm9jX2ZsdXNoX3BpZCgpIGNhbGwsIHNlZW1zIGltcG9ydGFudCBpbiB0aGlzIGNvbnRleHQuCgpOb3csIHRoaXMgdHlwZSBvZiBmaXgg4oCTIG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbiBhdm9pZGFuY2Ug4oCTIGlzICpkZWZpbml0ZWx5KiBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQgZGlyZWN0bHkgYWRkcmVzc2VzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IsIHBvdGVudGlhbGx5LCBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGJldHRlci4gTGV0JiMzOTtzIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBga2VybmVsL2V4aXQuY2AgYW5kIHNlZSBpZiB3ZSBjYW4gaWRlbnRpZnkgb3RoZXIgcmVsYXRlZCBhcmVhcyBvciBvdGhlciBwb3RlbnRpYWwgZW50cnlwb2ludHMgYWZmZWN0ZWQgYnkgdGhlIGZpeC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW50ZXJhY3Rpb25zIHdpdGggUElEIG1hbmFnZW1lbnQsIHRhc2sgY2xlYW51cCwgYW5kIHByb2Nlc3MgZXhpdCBwYXRocyBpbiBnZW5lcmFsLiBBIG1vcmUgZGV0YWlsZWQgZXhhbWluYXRpb24gb2YgdGhpcyBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgaXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZXhpdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCBwb3N0O1xuIDI1MTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXI7XG4gMjUyOlx0XHRzdHJ1Y3QgcGlkICp0aHJlYWRfcGlkO1xuIDI1MzpcdFx0aW50IHphcF9sZWFkZXI7XG4gMjU0Olx0cmVwZWF0OlxuIDI1NTpcdFx0bWVtc2V0KFx1MDAyNnBvc3QsIDAsIHNpemVvZihwb3N0KSk7XG4gMjU2Olx0XG4gMjU3Olx0XHQvKiBkb24mIzM5O3QgbmVlZCB0byBnZXQgdGhlIFJDVSByZWFkbG9jayBoZXJlIC0gdGhlIHByb2Nlc3MgaXMgZGVhZCBhbmRcbiAyNTg6XHRcdCAqIGNhbiYjMzk7dCBiZSBtb2RpZnlpbmcgaXRzIG93biBjcmVkZW50aWFscy4gKi9cbiAyNTk6XHRcdGRlY19ybGltaXRfdWNvdW50cyh0YXNrX3Vjb3VudHMocCksIFVDT1VOVF9STElNSVRfTlBST0MsIDEpO1xuIDI2MDpcdFxuIDI2MTpcdFx0cGlkZnNfZXhpdChwKTtcbiAyNjI6XHRcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XG4gMjYzOlx0XG4gMjY0Olx0XHQvKlxuIDI2NTpcdFx0ICogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgY2xlYXJzIGl0LiBUaGUgbGFzdFxuIDI2NjpcdFx0ICogUElEVFlQRSBkZXRhY2ggY2FuIG90aGVyd2lzZSBmcmVlIGl0IGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpLlxuIDI2NzpcdFx0ICovXG4gMjY4Olx0XHR0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7XG4gMjY5Olx0XG4gMjcwOlx0XHR3cml0ZV9sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiAyNzE6XHRcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XG4gMjcyOlx0XHRfX2V4aXRfc2lnbmFsKFx1MDAyNnBvc3QsIHApO1xuIDI3MzpcdFxuIDI3NDpcdFx0LypcbiAyNzU6XHRcdCAqIElmIHdlIGFyZSB0aGUgbGFzdCBub24tbGVhZGVyIG1lbWJlciBvZiB0aGUgdGhyZWFkXG4gMjc2Olx0XHQgKiBncm91cCwgYW5kIHRoZSBsZWFkZXIgaXMgem9tYmllLCB0aGVuIG5vdGlmeSB0aGVcbiAyNzc6XHRcdCAqIGdyb3VwIGxlYWRlciYjMzk7cyBwYXJlbnQgcHJvY2Vzcy4gKGlmIGl0IHdhbnRzIG5vdGlmaWNhdGlvbi4pXG4gMjc4Olx0XHQgKi9cbiAyNzk6XHRcdHphcF9sZWFkZXIgPSAwO1xuIDI4MDpcdFx0bGVhZGVyID0gcC1cdTAwM2Vncm91cF9sZWFkZXI7XG4gMjgxOlx0XHRpZiAobGVhZGVyICE9IHAgXHUwMDI2XHUwMDI2IHRocmVhZF9ncm91cF9lbXB0eShsZWFkZXIpXG4gMjgyOlx0XHRcdFx0XHUwMDI2XHUwMDI2IGxlYWRlci1cdTAwM2VleGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7XG4gMjgzOlx0XHRcdC8qIGZvciBwaWRmc19leGl0KCkgYW5kIGRvX25vdGlmeV9wYXJlbnQoKSAqL1xuIDI4NDpcdFx0XHRpZiAobGVhZGVyLVx1MDAzZXNpZ25hbC1cdTAwM2VmbGFncyBcdTAwMjYgU0lHTkFMX0dST1VQX0VYSVQpXG4gMjg1Olx0XHRcdFx0bGVhZGVyLVx1MDAzZWV4aXRfY29kZSA9IGxlYWRlci1cdTAwM2VzaWduYWwtXHUwMDNlZ3JvdXBfZXhpdF9jb2RlO1xuIDI4NjpcdFx0XHQvKlxuIDI4NzpcdFx0XHQgKiBJZiB3ZSB3ZXJlIHRoZSBsYXN0IGNoaWxkIHRocmVhZCBhbmQgdGhlIGxlYWRlciBoYXNcbiAyODg6XHRcdFx0ICogZXhpdGVkIGFscmVhZHksIGFuZCB0aGUgbGVhZGVyJiMzOTtzIHBhcmVudCBpZ25vcmVzIFNJR0NITEQsXG4gMjg5Olx0XHRcdCAqIHRoZW4gd2UgYXJlIHRoZSBvbmUgd2hvIHNob3VsZCByZWxlYXNlIHRoZSBsZWFkZXIuXG4gMjkwOlx0XHRcdCAqL1xuIDI5MTpcdFx0XHR6YXBfbGVhZGVyID0gZG9fbm90aWZ5X3BhcmVudChsZWFkZXIsIGxlYWRlci1cdTAwM2VleGl0X3NpZ25hbCk7XG4gMjkyOlx0XHRcdGlmICh6YXBfbGVhZGVyKVxuIDI5MzpcdFx0XHRcdGxlYWRlci1cdTAwM2VleGl0X3N0YXRlID0gRVhJVF9ERUFEO1xuIDI5NDpcdFx0fVxuIDI5NTpcdFxuIDI5NjpcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiAyOTc6XHRcdHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpO1xuIDI5ODpcdFx0cHV0X3BpZCh0aHJlYWRfcGlkKTtcbiAyOTk6XHRcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xuIDMwMDpcdFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFx1MDAyNnAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcbiAzMDE6XHRcdFx0XHQgICAgICBzaXplb2YocC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XG4gMzAyOlx0XHRmcmVlX3BpZHMocG9zdC5waWRzKTtcbiAzMDM6XHRcdHJlbGVhc2VfdGhyZWFkKHApO1xuIDMwNDpcdFx0LypcbiAzMDU6XHRcdCAqIFRoaXMgdGFzayB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhlIHByb2Nlc3MvdGhyZWFkL3BpZCBsaXN0c1xuIDMwNjpcdFx0ICogYW5kIGxvY2tfdGFza19zaWdoYW5kKHApIGNhbiYjMzk7dCBzdWNjZWVkLiBOb2JvZHkgZWxzZSBjYW4gdG91Y2hcbiAzMDc6XHRcdCAqIC1cdTAwM2VwZW5kaW5nIG9yLCBpZiBncm91cCBkZWFkLCBzaWduYWwtXHUwMDNlc2hhcmVkX3BlbmRpbmcuIFdlIGNhbiBjYWxsXG4gMzA4Olx0XHQgKiBmbHVzaF9zaWdxdWV1ZSgpIGxvY2tsZXNzLlxuIDMwOTpcdFx0ICovXG4gMzEwOlx0XHRmbHVzaF9zaWdxdWV1ZShcdTAwMjZwLVx1MDAzZXBlbmRpbmcpO1xuIDMxMTpcdFx0aWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpXG4gMzEyOlx0XHRcdGZsdXNoX3NpZ3F1ZXVlKFx1MDAyNnAtXHUwMDNlc2lnbmFsLVx1MDAzZXNoYXJlZF9wZW5kaW5nKTtcbiAzMTM6XHRcbiAzMTQ6XHRcdHB1dF90YXNrX3N0cnVjdF9yY3VfdXNlcihwKTtcbiAzMTU6XHRcbiAzMTY6XHRcdHAgPSBsZWFkZXI7XG4gMzE3Olx0XHRpZiAodW5saWtlbHkoemFwX2xlYWRlcikpXG4gMzE4Olx0XHRcdGdvdG8gcmVwZWF0O1xuIDMxOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTkwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNzQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGZpeGluZyBhIG5hc3R5IHJhY2UgY29uZGl0aW9uIOKAkyBhIHVzZS1hZnRlci1mcmVlIOKAkyB3aXRoaW4gdGhlIGByZWxlYXNlX3Rhc2soKWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiBga2VybmVsL2V4aXQuY2AuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gaG93IFBJRHMgYXJlIGhhbmRsZWQgZHVyaW5nIHRocmVhZCBleGl0IGFuZCB0aGUgdGltaW5nIG9mIGBwcm9jX2ZsdXNoX3BpZGAuICBFc3NlbnRpYWxseSwgdGhlIGNvZGUgd2FzIHZ1bG5lcmFibGUgYmVjYXVzZSBgX19leGl0X3NpZ25hbCgpYCBjYW4gZGV0YWNoIGEgUElELCBwb3RlbnRpYWxseSBmcmVlaW5nIHRoZSBgc3RydWN0IHBpZGAgYmVmb3JlIGBwcm9jX2ZsdXNoX3BpZCgpYCBnZXRzIGEgY2hhbmNlIHRvIHVzZSBpdC4gVGhlIGZpeCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZlcmVuY2UgY291bnQgbWFuYWdlbWVudCBzdHJhdGVneSB1c2luZyBgZ2V0X3BpZCgpYCBhbmQgYHB1dF9waWQoKWAgdG8gZW5zdXJlIHRoZSBQSUQgc3RydWN0dXJlIHJlbWFpbnMgdmFsaWQgZm9yIHRoZSBkdXJhdGlvbiBvZiBpdHMgdXNlIGluIGBwcm9jX2ZsdXNoX3BpZCgpYC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBhcHBseSB0aGUgc3RhbmRhcmQgY3JpdGVyaWEuIEl0JiMzOTtzIG5vdCBkb2N1bWVudGF0aW9uLCBhIGNvbmZpZyBmaWxlIGNoYW5nZSwgb3IgYSBsb2dnaW5nIGFkZGl0aW9uLiBJdCBkaXJlY3RseSBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gYHJlbGVhc2VfdGFzaygpYCwgd2hpY2ggaXMgYSBjcml0aWNhbCBmdW5jdGlvbiBleGVjdXRlZCBvbiBldmVyeSBwcm9jZXNzL3RocmVhZCBleGl0LiBHaXZlbiB0aGF0IGByZWxlYXNlX3Rhc2soKWAgaGFuZGxlcyBwcm9jZXNzIGV4aXQsIEkgbmVlZCB0byBlbnN1cmUgaXQmIzM5O3Mgbm90IGEgaG90LXBhdGggZnVuY3Rpb24gdGhhdCBtaWdodCBza2V3IGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSByZWxlYXNlL2V4aXQgaGFuZGxpbmcsIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQsIHRodXMgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTmV4dCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgaGVhdnkgZnV6emluZy4gVGhlIGNyaXRlcmlhIGRpY3RhdGUgSSBwdWxsIG91dCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIE15IGZpcnN0IHRob3VnaHQgaXMgd2hldGhlciB0byBpbmNsdWRlIGByZWxlYXNlX3Rhc2tgIGluIGBGb2N1c1N5bWJvbHNgLiBJcyB0aGlzIGEgaG90LXBhdGggZnVuY3Rpb24/IExldCYjMzk7cyBjb25zaWRlciBob3cgb2Z0ZW4gYHJlbGVhc2VfdGFza2AgZ2V0cyBjYWxsZWQgb24gcHJvY2VzcyBleGl0L3dhaXQuIEkgbmVlZCB0byByZXNlYXJjaCB0aGlzIGJlZm9yZSBtYWtpbmcgdGhlIGNhbGwuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBgcmVsZWFzZV90YXNrYCBkaXJlY3RseSwgaXMgaXQgdGhlIG9ubHkgZm9jdXM/IEkgbmVlZCB0byBhbmFseXplIGl0cyBjYWxsZXJzLCBhbmQgbWF5YmUgcmVsYXRlZCBmdW5jdGlvbnMgdG8gZW5zdXJlIG5vdGhpbmcgcmVsYXRlZCB0byB0aGUgYHN0cnVjdCBwaWRgIGlzc3VlIGhhcyBiZWVuIG1pc3NlZC4gSSYjMzk7bGwgdXNlIGBnaXQgZ3JlcGAgdG8gY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVsZWFzZV90YXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZXhpdC5jPTEyMz1sYXRlX2luaXRjYWxsKGtlcm5lbF9leGl0X3N5c2ZzX2luaXQpO1xuLS1cbmtlcm5lbC9leGl0LmMtMTI2LS8qXG5rZXJuZWwvZXhpdC5jOjEyNzogKiBGb3IgdGhpbmdzIHJlbGVhc2VfdGFzaygpIHdvdWxkIGxpa2UgdG8gZG8gKmFmdGVyKiB0YXNrbGlzdF9sb2NrIGlzIHJlbGVhc2VkLlxua2VybmVsL2V4aXQuYy0xMjgtICovXG5rZXJuZWwvZXhpdC5jOjEyOTpzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3Qge1xua2VybmVsL2V4aXQuYy0xMzAtXHRzdHJ1Y3QgcGlkICpwaWRzW1BJRFRZUEVfTUFYXTtcbi0tXG5rZXJuZWwvZXhpdC5jLTEzMi1cbmtlcm5lbC9leGl0LmM6MTMzOnN0YXRpYyB2b2lkIF9fdW5oYXNoX3Byb2Nlc3Moc3RydWN0IHJlbGVhc2VfdGFza19wb3N0ICpwb3N0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXG5rZXJuZWwvZXhpdC5jLTEzNC1cdFx0XHQgICAgIGJvb2wgZ3JvdXBfZGVhZClcbi0tXG5rZXJuZWwvZXhpdC5jLTE1Ny0gKi9cbmtlcm5lbC9leGl0LmM6MTU4OnN0YXRpYyB2b2lkIF9fZXhpdF9zaWduYWwoc3RydWN0IHJlbGVhc2VfdGFza19wb3N0ICpwb3N0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmtlcm5lbC9leGl0LmMtMTU5LXtcbi0tXG5rZXJuZWwvZXhpdC5jPTI0ND12b2lkIF9fd2VhayByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRlYWRfdGFzaylcbi0tXG5rZXJuZWwvZXhpdC5jLTI0Ny1cbmtlcm5lbC9leGl0LmM6MjQ4OnZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbmtlcm5lbC9leGl0LmMtMjQ5LXtcbmtlcm5lbC9leGl0LmM6MjUwOlx0c3RydWN0IHJlbGVhc2VfdGFza19wb3N0IHBvc3Q7XG5rZXJuZWwvZXhpdC5jLTI1MS1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyO1xuLS1cbmtlcm5lbC9leGl0LmMtMjcwLVx0d3JpdGVfbG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG5rZXJuZWwvZXhpdC5jOjI3MTpcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XG5rZXJuZWwvZXhpdC5jLTI3Mi1cdF9fZXhpdF9zaWduYWwoXHUwMDI2cG9zdCwgcCk7XG4tLVxua2VybmVsL2V4aXQuYz02MzM9c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZmluZF9jaGlsZF9yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsXG4tLVxua2VybmVsL2V4aXQuYy02NTUtXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cC1cdTAwM2VwdHJhY2VfZW50cnkpO1xua2VybmVsL2V4aXQuYzo2NTY6XHRcdHJlbGVhc2VfdGFzayhwKTtcbmtlcm5lbC9leGl0LmMtNjU3LVx0fVxuLS1cbmtlcm5lbC9leGl0LmM9NjcyPXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZpbmRfbmV3X3JlYXBlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZhdGhlcixcbi0tXG5rZXJuZWwvZXhpdC5jLTcwNy0vKlxua2VybmVsL2V4aXQuYzo3MDg6KiBBbnkgdGhhdCBuZWVkIHRvIGJlIHJlbGVhc2VfdGFzayYjMzk7ZCBhcmUgcHV0IG9uIHRoZSBAZGVhZCBsaXN0Llxua2VybmVsL2V4aXQuYy03MDktICovXG4tLVxua2VybmVsL2V4aXQuYz03NzM9c3RhdGljIHZvaWQgZXhpdF9ub3RpZnkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBncm91cF9kZWFkKVxuLS1cbmtlcm5lbC9leGl0LmMtODExLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlcHRyYWNlX2VudHJ5KTtcbmtlcm5lbC9leGl0LmM6ODEyOlx0XHRyZWxlYXNlX3Rhc2socCk7XG5rZXJuZWwvZXhpdC5jLTgxMy1cdH1cbi0tXG5rZXJuZWwvZXhpdC5jPTEyMDk9c3RhdGljIGludCB3YWl0X3Rhc2tfem9tYmllKHN0cnVjdCB3YWl0X29wdHMgKndvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL2V4aXQuYy0xMzE1LVx0aWYgKHN0YXRlID09IEVYSVRfREVBRClcbmtlcm5lbC9leGl0LmM6MTMxNjpcdFx0cmVsZWFzZV90YXNrKHApO1xua2VybmVsL2V4aXQuYy0xMzE3LVxuLS1cbmtlcm5lbC9mb3JrLmM9MTY5PWludCBucl9wcm9jZXNzZXModm9pZClcbi0tXG5rZXJuZWwvZm9yay5jLTE3OS1cbmtlcm5lbC9mb3JrLmM6MTgwOnZvaWQgX193ZWFrIGFyY2hfcmVsZWFzZV90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmtlcm5lbC9mb3JrLmMtMTgxLXtcbi0tXG5rZXJuZWwvZm9yay5jPTUwMz12b2lkIGV4aXRfdGFza19zdGFja19hY2NvdW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmtlcm5lbC9mb3JrLmMtNTE2LVxua2VybmVsL2ZvcmsuYzo1MTc6c3RhdGljIHZvaWQgcmVsZWFzZV90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxua2VybmVsL2ZvcmsuYy01MTgte1xuLS1cbmtlcm5lbC9mb3JrLmM9NTI2PXZvaWQgcHV0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL2ZvcmsuYy01MjgtXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnRzay1cdTAwM2VzdGFja19yZWZjb3VudCkpXG5rZXJuZWwvZm9yay5jOjUyOTpcdFx0cmVsZWFzZV90YXNrX3N0YWNrKHRzayk7XG5rZXJuZWwvZm9yay5jLTUzMC19XG4tLVxua2VybmVsL2ZvcmsuYz01MzM9dm9pZCBmcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL2ZvcmsuYy01NDYtXHQgKi9cbmtlcm5lbC9mb3JrLmM6NTQ3Olx0cmVsZWFzZV90YXNrX3N0YWNrKHRzayk7XG5rZXJuZWwvZm9yay5jLTU0OC0jZWxzZVxuLS1cbmtlcm5lbC9mb3JrLmMtNTU2LVx0ZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0c2spO1xua2VybmVsL2ZvcmsuYzo1NTc6XHRhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3QodHNrKTtcbmtlcm5lbC9mb3JrLmMtNTU4LVx0aWYgKHRzay1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRClcbi0tXG5rZXJuZWwvcHRyYWNlLmM9MjU3PXN0YXRpYyBpbnQgcHRyYWNlX2NoZWNrX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBib29sIGlnbm9yZV9zdGF0ZSlcbi0tXG5rZXJuZWwvcHRyYWNlLmMtMjcwLVx0XHQvKlxua2VybmVsL3B0cmFjZS5jOjI3MTpcdFx0ICogY2hpbGQtXHUwMDNlc2lnaGFuZCBjYW4mIzM5O3QgYmUgTlVMTCwgcmVsZWFzZV90YXNrKClcbmtlcm5lbC9wdHJhY2UuYy0yNzItXHRcdCAqIGRvZXMgcHRyYWNlX3VubGluaygpIGJlZm9yZSBfX2V4aXRfc2lnbmFsKCkuXG4tLVxua2VybmVsL3B0cmFjZS5jPTUzOD1zdGF0aWMgaW50IGlnbm9yaW5nX2NoaWxkcmVuKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaClcbi0tXG5rZXJuZWwvcHRyYWNlLmMtNTUwLSAqIFVubGluayBhIHRyYWNlZCB0YXNrLCBhbmQgY2xlYW4gaXQgdXAgaWYgaXQgd2FzIGEgdHJhY2VkIHpvbWJpZS5cbmtlcm5lbC9wdHJhY2UuYzo1NTE6ICogUmV0dXJuIHRydWUgaWYgaXQgbmVlZHMgdG8gYmUgcmVhcGVkIHdpdGggcmVsZWFzZV90YXNrKCkuXG5rZXJuZWwvcHRyYWNlLmM6NTUyOiAqIChXZSBjYW4mIzM5O3QgY2FsbCByZWxlYXNlX3Rhc2soKSBoZXJlIGJlY2F1c2Ugd2UgYWxyZWFkeSBob2xkIHRhc2tsaXN0X2xvY2suKVxua2VybmVsL3B0cmFjZS5jLTU1My0gKlxuLS1cbmtlcm5lbC9zaWduYWwuYz0yMTY4PWJvb2wgZG9fbm90aWZ5X3BhcmVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHNpZylcbi0tXG5rZXJuZWwvc2lnbmFsLmMtMjIwMy1cdCAqIHRhc2tfYWN0aXZlX3BpZF9ucyB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcGlkIG5hbWVzcGFjZVxua2VybmVsL3NpZ25hbC5jOjIyMDQ6XHQgKiB1bnRpbCBhIHRhc2sgcGFzc2VzIHRocm91Z2ggcmVsZWFzZV90YXNrLlxua2VybmVsL3NpZ25hbC5jLTIyMDUtXHQgKlxuLS1cbmtlcm5lbC9zeXMuYz0xMDA1PVNZU0NBTExfREVGSU5FMChnZXR0aWQpXG4tLVxua2VybmVsL3N5cy5jLTEwMTMtICogdmFsdWUgb2YgLVx1MDAzZXJlYWxfcGFyZW50IHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc2VlXG5rZXJuZWwvc3lzLmM6MTAxNDogKiByZWxlYXNlX3Rhc2soKS1cdTAwM2VjYWxsX3JjdShkZWxheWVkX3B1dF90YXNrX3N0cnVjdCkuXG5rZXJuZWwvc3lzLmMtMTAxNS0gKi9cbi0tXG5rZXJuZWwvdGltZS9wb3NpeC1jcHUtdGltZXJzLmM9NDUxPXN0YXRpYyB2b2lkIGRpc2FybV90aW1lcihzdHJ1Y3Qga19pdGltZXIgKnRpbWVyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jLTUwMC0gKlx0XHRcdFx0XHRzd2l0Y2hfbGVhZGVyKClcbmtlcm5lbC90aW1lL3Bvc2l4LWNwdS10aW1lcnMuYzo1MDE6ICpcdFx0XHRcdFx0cmVsZWFzZV90YXNrKG9sZCBsZWFkZXIpXG5rZXJuZWwvdGltZS9wb3NpeC1jcHUtdGltZXJzLmMtNTAyLSAqXHRcdFx0XHRcdCAgX19leGl0X3NpZ25hbCgpXG4tLVxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jPTE0NjQ9dm9pZCBydW5fcG9zaXhfY3B1X3RpbWVycyh2b2lkKVxuLS1cbmtlcm5lbC90aW1lL3Bvc2l4LWNwdS10aW1lcnMuYy0xNDcwLVx0Lypcbmtlcm5lbC90aW1lL3Bvc2l4LWNwdS10aW1lcnMuYzoxNDcxOlx0ICogRW5zdXJlIHRoYXQgcmVsZWFzZV90YXNrKHRzaykgY2FuJiMzOTt0IGhhcHBlbiB3aGlsZVxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jLTE0NzItXHQgKiBoYW5kbGVfcG9zaXhfY3B1X3RpbWVycygpIGlzIHJ1bm5pbmcuIE90aGVyd2lzZSwgYSBjb25jdXJyZW50XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA4OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGByZWxlYXNlX3Rhc2tgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbi4gSXQgc2VlbXMgaXQmIzM5O3MgdGhlIGtleSB0byBjbGVhbmluZyB1cCBhZnRlciBhIHRhc2sgaGFzIGV4aXRlZCBvciBiZWVuIHJlYXBlZCDigJMgdHJpZ2dlcmVkIGJ5IHRoaW5ncyBsaWtlIGBleGl0X25vdGlmeWAsIGB3YWl0X3Rhc2tfem9tYmllYCwgb3IgYGZpbmRfY2hpbGRfcmVhcGVyYC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogaXMgdGhpcyBhIHB1YmxpYy1mYWNpbmcgZW50cnlwb2ludCwgYSBub24tc3RhdGljIGZ1bmN0aW9uIHdlIGNhbiBjYWxsIGZyb20gZWxzZXdoZXJlLCBvciBpcyBpdCBoaWRkZW4gYXdheT8gUmlnaHQsIGxvb2tzIGxpa2UgYHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClgIGluIGBrZXJuZWwvZXhpdC5jYCBpcyBub24tc3RhdGljLiBHb29kLiBUaGF0IGNsYXJpZmllcyB0aGF0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBXaGF0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9yIGF2YWlsYWJpbGl0eSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgY29kZSBhcm91bmQgaXQ/IEkgc2hvdWxkIGNoZWNrIGlmIGBrZXJuZWwvZXhpdC5jYCBvciBwYXJ0cyBvZiBpdCBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBhbnkgQ09ORklHIG9wdGlvbnMuIFRpbWUgdG8gbG9vayBhdCBga2VybmVsL01ha2VmaWxlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIHByb3ZpZGUgdmFsdWFibGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleGl0XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL01ha2VmaWxlPTY9b2JqLXkgICAgID0gZm9yay5vIGV4ZWNfZG9tYWluLm8gZXhlY19zdGF0ZS5vIHBhbmljLm8gXFxcbmtlcm5lbC9NYWtlZmlsZTo3Olx0ICAgIGNwdS5vIGV4aXQubyBzb2Z0aXJxLm8gcmVzb3VyY2UubyBcXFxua2VybmVsL01ha2VmaWxlLTgtXHQgICAgc3lzY3RsLm8gY2FwYWJpbGl0eS5vIHB0cmFjZS5vIHVzZXIubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGV4aXQub2AgTW9kdWxlIGFuZCBgcmVsZWFzZV90YXNrYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgZXhpdC5vYCBpcyBjb25zaXN0ZW50bHkgaW5jbHVkZWQgaW4gYG9iai15YCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlIGNvZGUgc3Vycm91bmRpbmcgYHJlbGVhc2VfdGFza2AsIG9yIHRoZSBtb2RpZmllZCBwYXJ0cyBvZiBpdCwgYXJlIGd1YXJkZWQgYnkgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGxpa2UgYCNpZmRlZmAuIEkgbmVlZCB0byBydWxlIG91dCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KClRvIHRoYXQgZW5kLCBsZXQgbWUgY2hlY2sgbGluZXMgMjQwIHRocm91Z2ggMzMwIG9mIGBrZXJuZWwvZXhpdC5jYC4gUmlnaHQsIGhlcmUmIzM5O3MgYHJlbGVhc2VfdGFza2AuIE9rYXksIGdvb2QsIG5vIGAjaWZkZWZgcy4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gVGhpcyBtZWFucyB0aGlzIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW91ciBzaG91bGQgYmUgY29uc2lzdGVudCB1bmxlc3Mgc29tZXRoaW5nIHVwc3RyZWFtLCBvciBkb3duc3RyZWFtIGNhbGxzIGl0IGluIGRpZmZlcmVudCBwbGFjZXMuCgpOb3csIGluc2lkZSBgcmVsZWFzZV90YXNrYCwgSSBzZWUgY2FsbHMgdG8gYHByb2NfZmx1c2hfcGlkYCwgYGdldF9waWRgLCBhbmQgYHB1dF9waWRgLiBUaGVzZSBhcmUgYWxsIHByZXR0eSBmdW5kYW1lbnRhbCBrZXJuZWwgZnVuY3Rpb25zLCBubyBzdXJwcmlzZXMgdGhlcmUuIFNpbmNlIGBwcm9jX2ZsdXNoX3BpZGAgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIHNvbWUgd2VpcmRuZXNzLCBJJiMzOTtsbCBjaGVjayBpdHMgY29uZmlnIGRlcGVuZGVuY2llcywganVzdCB0byBiZSBzdXJlLiBJJiMzOTttIGFmdGVyIGFueXRoaW5nIHRoYXQgbWlnaHQgaW50cm9kdWNlIHBsYXRmb3JtLXNwZWNpZmljIG9yIGJ1aWxkLXRpbWUgdmFyaWF0aW9ucyBpbiBpdHMgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTE5NzY9c3RhdGljIHN0cnVjdCBpbm9kZSAqcHJvY19waWRfbWFrZV9iYXNlX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvcHJvYy9iYXNlLmMtMTk4Ni1cbmZzL3Byb2MvYmFzZS5jOjE5ODc6XHQvKiBMZXQgcHJvY19mbHVzaF9waWQgZmluZCB0aGlzIGRpcmVjdG9yeSBpbm9kZSAqL1xuZnMvcHJvYy9iYXNlLmMtMTk4OC1cdGVpID0gUFJPQ19JKGlub2RlKTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0zNDIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX3RnaWRfYmFzZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTM0MzAtLyoqXG5mcy9wcm9jL2Jhc2UuYzozNDMxOiAqIHByb2NfZmx1c2hfcGlkIC0gIFJlbW92ZSBkY2FjaGUgZW50cmllcyBmb3IgQHBpZCBmcm9tIHRoZSAvcHJvYyBkY2FjaGUuXG5mcy9wcm9jL2Jhc2UuYy0zNDMyLSAqIEBwaWQ6IHBpZCB0aGF0IHNob3VsZCBiZSBmbHVzaGVkLlxuLS1cbmZzL3Byb2MvYmFzZS5jLTM0NDgtXG5mcy9wcm9jL2Jhc2UuYzozNDQ5OnZvaWQgcHJvY19mbHVzaF9waWQoc3RydWN0IHBpZCAqcGlkKVxuZnMvcHJvYy9iYXNlLmMtMzQ1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBgcHJvY19mbHVzaF9waWRgIGFuZCBpdHMgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBgcHJvY19mbHVzaF9waWRgLiBGaXJzdCwgSSB3YW50IHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBqdXN0IGEgc3R1YiBmdW5jdGlvbuKAlG1lYW5pbmcsIGRvZXMgaXQgZXhpc3QgcHJpbWFyaWx5IGZvciBpbnRlcmZhY2UgY29tcGF0aWJpbGl0eSBvciBpcyBpdCBkb2luZyBhY3R1YWwgd29yaz8gSWYgaXTigJlzIG5vdCBqdXN0IGEgcGxhY2Vob2xkZXIsIHRoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgcmVsaWVzIG9uIHRoZSBwcmVzZW5jZSBvZiBgUFJPQ19GU2AuIFRoZSBmaWxlIHN5c3RlbSBpbnRlcmFjdGlvbiBhc3BlY3QgaXMgY3J1Y2lhbC4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIHRvIGBQUk9DX0ZTYCB3aWxsIHRlbGwgbWUgaWYgdGhpcyBmdW5jdGlvbiBpcyB0aWdodGx5IGNvdXBsZWQgd2l0aCBhIHBhcnRpY3VsYXIga2VybmVsIGNvbmZpZ3VyYXRpb24gb3IgaWYgaXQmIzM5O3MgbW9yZSBtb2R1bGFyIGFuZCBwb3RlbnRpYWxseSBhZGFwdGFibGUuIEl0JiMzOTtzIGEgcXVpY2sgYW5hbHlzaXMsIGJ1dCBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciB1c2FnZSBpbiBhIGRpZmZlcmVudCBjb250ZXh0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfZmx1c2hfcGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wcm9jX2ZzLmg9ODU9ZXh0ZXJuIHZvaWQgcHJvY19yb290X2luaXQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaDo4NjpleHRlcm4gdm9pZCBwcm9jX2ZsdXNoX3BpZChzdHJ1Y3QgcGlkICopO1xuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgtODctXG4tLVxuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmg9MTcyPXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX3Jvb3RfaW5pdCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvcHJvY19mcy5oLTE3NS1cbmluY2x1ZGUvbGludXgvcHJvY19mcy5oOjE3NjpzdGF0aWMgaW5saW5lIHZvaWQgcHJvY19mbHVzaF9waWQoc3RydWN0IHBpZCAqcGlkKVxuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgtMTc3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgYHByb2NfZmx1c2hfcGlkYCBhbmQgaXRzIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHByb2NfZmx1c2hfcGlkYCBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZywgJiMzNDtSaWdodCwgdGhhdCYjMzk7cyBwYXJ0IG9mIHRoZSBgUFJPQ19GU2AgY29uZmlndXJhdGlvbiwgaXNuJiMzOTt0IGl0PyYjMzQ7IEl0JiMzOTtzIGJlZW4gYSB3aGlsZSBzaW5jZSBJJiMzOTt2ZSBkaXZlZCBpbnRvIHRoaXMgcGFydGljdWxhciBhcmVhLCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfUFJPQ19GU2AuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhhdCBpcyB0aGUgaW5jbHVkZSBmaWxlLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBpbmNsdWRlL2xpbnV4L3Byb2NfZnMuaGAgYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX1BST0NfRlNgIHJlYWxseSBpcyB0aGUga2V5LiBPbmNlIEkmIzM5O3ZlIHZlcmlmaWVkIGl0cyByb2xlLCB0aGVuIEkgd2lsbCBrbm93IG1vcmUgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcHJvY19mcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjU6XHQjZW5kaWYgLyogQ09ORklHX1BST0NfUElEX0FSQ0hfU1RBVFVTICovXG4gMTY2Olx0XG4gMTY3Olx0dm9pZCBhcmNoX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSk7XG4gMTY4Olx0dm9pZCBhcmNoX3Byb2NfcGlkX3RocmVhZF9mZWF0dXJlcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7XG4gMTY5Olx0XG4gMTcwOlx0I2Vsc2UgLyogQ09ORklHX1BST0NfRlMgKi9cbiAxNzE6XHRcbiAxNzI6XHRzdGF0aWMgaW5saW5lIHZvaWQgcHJvY19yb290X2luaXQodm9pZClcbiAxNzM6XHR7XG4gMTc0Olx0fVxuIDE3NTpcdFxuIDE3NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX2ZsdXNoX3BpZChzdHJ1Y3QgcGlkICpwaWQpXG4gMTc3Olx0e1xuIDE3ODpcdH1cbiAxNzk6XHRcbiAxODA6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19zeW1saW5rKGNvbnN0IGNoYXIgKm5hbWUsXG4gMTgxOlx0XHRcdHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50LGNvbnN0IGNoYXIgKmRlc3QpIHsgcmV0dXJuIE5VTEw7fVxuIDE4MjpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX21rZGlyKGNvbnN0IGNoYXIgKm5hbWUsXG4gMTgzOlx0XHRzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCkge3JldHVybiBOVUxMO31cbiAxODQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19jcmVhdGVfbW91bnRfcG9pbnQoY29uc3QgY2hhciAqbmFtZSkgeyByZXR1cm4gTlVMTDsgfVxuIDE4NTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpfcHJvY19ta2Rpcihjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUsXG4gMTg2Olx0XHRcdHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50LCB2b2lkICpkYXRhLCBib29sIGZvcmNlX2xvb2t1cClcbiAxODc6XHR7XG4gMTg4Olx0XHRyZXR1cm4gTlVMTDtcbiAxODk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMTAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgQ09ORklHX1BST0NfRlNgIGFuZCBgcHJvY19mbHVzaF9waWQoKWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHByb2NfZmx1c2hfcGlkKClgIGZ1bmN0aW9uIGFuZCBpdHMgY29ubmVjdGlvbiB0byBgdGhyZWFkX3BpZGAuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGl0IHJlbGllcyBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIHByb2MgZmlsZXN5c3RlbS4gSXQmIzM5O3MgZ290IHRvIGJlIHN0YW5kYXJkIGFuZCBuZWNlc3NhcnkgdG8gZmx1c2ggdGhvc2UgZGNhY2hlIGVudHJpZXMgcmVsYXRlZCB0byBwcm9jZXNzZXMsIHJpZ2h0PyBUaGlzIGlzIGZ1bmRhbWVudGFsLCBlc3NlbnRpYWwgc3R1ZmYuIEFuZCB0aGUgY29kZSBhY2Nlc3NlcyB0aGF0IGB0aHJlYWRfcGlkYCB2YXJpYWJsZS4gU28sIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHdpdGhvdXQgdGhlIHByb2MgZmlsZXN5c3RlbSBlbmFibGVkLCB0aGlzIGZ1bmN0aW9uIGNhbiYjMzk7dCBiZSBzYWZlbHkgZXhlY3V0ZWQuIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGF0IHRoZSBgUFJPQ19GU2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgdGhlIGtleSB0byBhbGwgdGhpcywgYW5kIHRoYXQgZW5hYmxpbmcgaXQgZGlyZWN0bHkgdGllcyBpbnRvIHdoZXRoZXIgb3Igbm90IHdlIGNhbiBydW4gdGhpcyBmdW5jdGlvbiBhbmQgY29ycmVjdGx5IGZsdXNoIHRob3NlIFBJRCByZWxhdGVkIGNhY2hlIGVudHJpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgYW5kIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIGFpcnRpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFJPQ19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvcHJvYy9LY29uZmlnOjI6Y29uZmlnIFBST0NfRlNcbmZzL3Byb2MvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njc3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHF1aWNrIHNjYW4gb2YgYGZzL3Byb2MvS2NvbmZpZ2AuIExldCYjMzk7cyBqdXN0IGdyYWIgdGhlIGZpcnN0IHR3ZW50eSBsaW5lcywgdG8gc3RhcnQuIEkgd2FudCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcg4oCTIHNlZSBpZiBJIGNhbiBnZXQgYSBzZW5zZSBmb3Igd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIG9yIGVuYWJsZWQgaW4gdGhlIGBwcm9jYCBmaWxlc3lzdGVtIGNvbnRleHQuIFRoaXMgdXN1YWxseSBnaXZlcyBtZSBhIGdvb2QgZW50cnkgcG9pbnQgd2hlbiBJIGFtIHRyeWluZyB0byBjaGFuZ2UgcmVsYXRlZCBjb25maWd1cmF0aW9uLCBvciB1bmRlcnN0YW5kIGludGVyYWN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgaW5pdGlhbCBsaW5lcyBmcmFtZSB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgcHJvY2ZzIGNvbmZpZ3VyYXRpb24sIHlvdSBrbm93LCB1bmRlcnN0YW5kIGl0cyBhcmNoaXRlY3R1cmFsIGRlc2lnbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGluaXRpYWwgc2VnbWVudCBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBQUk9DX0ZTXG4gICAzOlx0XHRib29sIFwmIzM0Oy9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4gICA0Olx0XHRkZWZhdWx0IHlcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgVGhpcyBpcyBhIHZpcnR1YWwgZmlsZSBzeXN0ZW0gcHJvdmlkaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0dXNcbiAgIDc6XHRcdCAgb2YgdGhlIHN5c3RlbS4gXCYjMzQ7VmlydHVhbFwmIzM0OyBtZWFucyB0aGF0IGl0IGRvZXNuJiMzOTt0IHRha2UgdXAgYW55IHNwYWNlIG9uXG4gICA4Olx0XHQgIHlvdXIgaGFyZCBkaXNrOiB0aGUgZmlsZXMgYXJlIGNyZWF0ZWQgb24gdGhlIGZseSBieSB0aGUga2VybmVsIHdoZW5cbiAgIDk6XHRcdCAgeW91IHRyeSB0byBhY2Nlc3MgdGhlbS4gQWxzbywgeW91IGNhbm5vdCByZWFkIHRoZSBmaWxlcyB3aXRoIG9sZGVyXG4gIDEwOlx0XHQgIHZlcnNpb24gb2YgdGhlIHByb2dyYW0gbGVzczogeW91IG5lZWQgdG8gdXNlIG1vcmUgb3IgY2F0LlxuICAxMTpcdFxuICAxMjpcdFx0ICBJdCYjMzk7cyB0b3RhbGx5IGNvb2w7IGZvciBleGFtcGxlLCBcJiMzNDtjYXQgL3Byb2MvaW50ZXJydXB0c1wmIzM0OyBnaXZlc1xuICAxMzpcdFx0ICBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoZSBkaWZmZXJlbnQgSVJRcyBhcmUgdXNlZCBmb3IgYXQgdGhlIG1vbWVudFxuICAxNDpcdFx0ICAodGhlcmUgaXMgYSBzbWFsbCBudW1iZXIgb2YgSW50ZXJydXB0IFJlUXVlc3QgbGluZXMgaW4geW91ciBjb21wdXRlclxuICAxNTpcdFx0ICB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBhdHRhY2hlZCBkZXZpY2VzIHRvIGdhaW4gdGhlIENQVSYjMzk7cyBhdHRlbnRpb24gLS1cbiAgMTY6XHRcdCAgb2Z0ZW4gYSBzb3VyY2Ugb2YgdHJvdWJsZSBpZiB0d28gZGV2aWNlcyBhcmUgbWlzdGFrZW5seSBjb25maWd1cmVkXG4gIDE3Olx0XHQgIHRvIHVzZSB0aGUgc2FtZSBJUlEpLiBUaGUgcHJvZ3JhbSBwcm9jaW5mbyB0byBkaXNwbGF5IHNvbWVcbiAgMTg6XHRcdCAgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBzeXN0ZW0gZ2F0aGVyZWQgZnJvbSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0uXG4gIDE5Olx0XG4gIDIwOlx0XHQgIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0sIGl0IGhhcyB0byBiZSBtb3VudGVkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgcHJvY19mbHVzaF9waWRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBwcm9jX2ZsdXNoX3BpZGAgaXMgaW1wbGVtZW50ZWQuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGZzL3Byb2MvYmFzZS5jYCBmaWxlLiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yOiBob3cgZXhhY3RseSBkb2VzIHRoZSBrZXJuZWwgaGFuZGxlIHRoZSBjbGVhcmluZyBvZiBwcm9jZXNzLXNwZWNpZmljIGluZm9ybWF0aW9uIHdpdGhpbiB0aGUgYC9wcm9jYCBmaWxlc3lzdGVtPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCBoZXJlPyBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIGludGVyYWN0aW9ucyB3aXRoIHRhc2sgc3RydWN0dXJlcywgZmlsZSBkZXNjcmlwdG9ycywgYW5kIHBvdGVudGlhbGx5IHNvbWUga2luZCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgbG9ja2luZyBtZWNoYW5pc20gdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5LiBMZXQmIzM5O3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBpcyBjb3JyZWN0Li4uIG9yIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucyBvciBkZXNpZ24gY2hvaWNlcyB0aGF0IEkgaGFkbiYjMzk7dCBjb25zaWRlcmVkLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQ0NTpcdCAqICAgICAgIHRoYXQgbm8gZGNhY2hlIGVudHJpZXMgd2lsbCBleGlzdCBhZnRlciBhIHByb2Nlc3MgaXMgcmVhcGVkXG4zNDQ2Olx0ICogICAgICAgaXQganVzdCBtYWtlcyBpdCB2ZXJ5IHVubGlrZWx5IHRoYXQgYW55IHdpbGwgcGVyc2lzdC5cbjM0NDc6XHQgKi9cbjM0NDg6XHRcbjM0NDk6XHR2b2lkIHByb2NfZmx1c2hfcGlkKHN0cnVjdCBwaWQgKnBpZClcbjM0NTA6XHR7XG4zNDUxOlx0XHRwcm9jX2ludmFsaWRhdGVfc2libGluZ3NfZGNhY2hlKFx1MDAyNnBpZC1cdTAwM2Vpbm9kZXMsIFx1MDAyNnBpZC1cdTAwM2Vsb2NrKTtcbjM0NTI6XHR9XG4zNDUzOlx0XG4zNDU0Olx0c3RhdGljIHN0cnVjdCBkZW50cnkgKnByb2NfcGlkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKiBkZW50cnksXG4zNDU1Olx0XHRcdFx0XHQgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNvbnN0IHZvaWQgKnB0cilcbjM0NTY6XHR7XG4zNDU3Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuMzQ1ODpcdFxuMzQ1OTpcdFx0aW5vZGUgPSBwcm9jX3BpZF9tYWtlX2Jhc2VfaW5vZGUoZGVudHJ5LVx1MDAzZWRfc2IsIHRhc2ssXG4zNDYwOlx0XHRcdFx0XHRcdCBTX0lGRElSIHwgU19JUlVHTyB8IFNfSVhVR08pO1xuMzQ2MTpcdFx0aWYgKCFpbm9kZSlcbjM0NjI6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4zNDYzOlx0XG4zNDY0Olx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2cHJvY190Z2lkX2Jhc2VfaW5vZGVfb3BlcmF0aW9ucztcbjM0NjU6XHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2cHJvY190Z2lkX2Jhc2Vfb3BlcmF0aW9ucztcbjM0NjY6XHRcdGlub2RlLVx1MDAzZWlfZmxhZ3N8PVNfSU1NVVRBQkxFO1xuMzQ2NzpcdFxuMzQ2ODpcdFx0c2V0X25saW5rKGlub2RlLCBubGlua190Z2lkKTtcbjM0Njk6XHRcdHBpZF91cGRhdGVfaW5vZGUodGFzaywgaW5vZGUpO1xuMzQ3MDpcdFxuMzQ3MTpcdFx0cmV0dXJuIGRfc3BsaWNlX2FsaWFzX29wcyhpbm9kZSwgZGVudHJ5LCBcdTAwMjZwaWRfZGVudHJ5X29wZXJhdGlvbnMpO1xuMzQ3MjpcdH1cbjM0NzM6XHRcbjM0NzQ6XHRzdHJ1Y3QgZGVudHJ5ICpwcm9jX3BpZF9sb29rdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4zNDc1Olx0e1xuMzQ3NjpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuMzQ3NzpcdFx0dW5zaWduZWQgdGdpZDtcbjM0Nzg6XHRcdHN0cnVjdCBwcm9jX2ZzX2luZm8gKmZzX2luZm87XG4zNDc5Olx0XHRzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnM7XG4zNDgwOlx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXN1bHQgPSBFUlJfUFRSKC1FTk9FTlQpO1xuMzQ4MTpcdFxuMzQ4MjpcdFx0dGdpZCA9IG5hbWVfdG9faW50KFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUpO1xuMzQ4MzpcdFx0aWYgKHRnaWQgPT0gfjBVKVxuMzQ4NDpcdFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMTQKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiBQcm9jZXNzIFRlcm1pbmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYHByb2NfZmx1c2hfcGlkYCBpbnRlcmFjdHMgd2l0aCBwcm9jZXNzIGlkZW50aWZpZXJzIChgcGlkYCkuIEl0IGFjY2Vzc2VzIGBwaWQtJmd0O2lub2Rlc2AgYW5kIGBwaWQtJmd0O2xvY2tgLiBJbiB0aGUgYHJlbGVhc2VfdGFza2AgZnVuY3Rpb24sIEkgc2VlIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2U6IGEgYHRocmVhZF9waWRgIGlzIHJldHJpZXZlZCB1c2luZyBgZ2V0X3BpZGAsIHRoZW4gcGFzc2VkIHRvIGBwcm9jX2ZsdXNoX3BpZGAsIGFuZCBmaW5hbGx5IHJlbGVhc2VkIHVzaW5nIGBwdXRfcGlkYC4KCk15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHN5bWJvbHM6IGByZWxlYXNlX3Rhc2tgIGFuZCBgcHJvY19mbHVzaF9waWRgLiBMZXQmIzM5O3MgY2hlY2sgdGhlIHJlbGV2YW50IEVuYWJsZUNvbmZpZ3M6IHNlZW1zIGxpa2UgYFBST0NfRlNgIGlzIGludm9sdmVkIGhlcmUuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBmdXp6aW5nIHJlYWRpbmVzcy4gWWVwLCB0aGlzIGxvb2tzIHByb21pc2luZy4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qtb246IGByZWxlYXNlX3Rhc2tgIGFuZCBgcHJvY19mbHVzaF9waWRgLiBUaGUgZW5hYmxpbmcgY29uZGl0aW9uLCBgUFJPQ19GU2AsIGFsc28gY2hlY2tzIG91dC4KCkhlcmUmIzM5O3MgdGhlIHJlYXNvbmluZzogdGhlIHBhdGNoIGlzIGFib3V0IGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuICBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGEgcmlzayB0aGF0IGB0aHJlYWRfcGlkYCBjb3VsZCBiZSBmcmVlZCBieSBgX191bmhhc2hfcHJvY2VzcygpYCBkdXJpbmcgcHJvY2VzcyB0ZXJtaW5hdGlvbiBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGdldHMgYSBjaGFuY2UgdG8gdXNlIGl0LiBUaGlzIGBnZXRfcGlkKClgL2BwdXRfcGlkKClgIHBhaXIgaW4gYHJlbGVhc2VfdGFza2Agc2VlbXMgdG8gYmUgdGhlIGZpeC4gVGFraW5nIGEgcmVmZXJlbmNlIHdpdGggYGdldF9waWQoKWAgYmVmb3JlIGBfX2V4aXRfc2lnbmFsKClgIGFuZCBkcm9wcGluZyBpdCBhZnRlciBgcHJvY19mbHVzaF9waWQoKWAgZW5zdXJlcyB0aGF0IGB0aHJlYWRfcGlkYCBpcyB2YWxpZCB3aGlsZSBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZC4gVGhpcyBsb29rcyBsaWtlIGNvcmUgcHJvY2VzcyBleGl0IGxvZ2ljIGFuZCB0b3VjaGVzIHByb2NmcyBjbGVhbnVwLCBzbyB0aGUgZml4IG1ha2VzIHNlbnNlLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlbGVhc2VfdGFzayYjMzQ7LAogICAgJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNvbHZlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSByYWNlIGluIHJlbGVhc2VfdGFzaygpIHdoZXJlIHRocmVhZF9waWQgY291bGQgYmUgZnJlZWQgZHVyaW5nIFBJRFRZUEUgZGV0YWNobWVudCBpbiBfX3VuaGFzaF9wcm9jZXNzKCkgYmVmb3JlIHByb2NfZmx1c2hfcGlkKCkgYWNjZXNzZWQgaXQuIEl0IHBpbnMgdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBhbmQgcmVsZWFzZXMgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKSwgYWZmZWN0aW5nIGNvcmUgdGFzayB0ZXJtaW5hdGlvbiBhbmQgcHJvY2ZzIGRjYWNoZSBpbnZhbGlkYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWxlYXNlX3Rhc2smIzM0OywKICAgICYjMzQ7cHJvY19mbHVzaF9waWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBpbiByZWxlYXNlX3Rhc2soKSB3aGVyZSB0aHJlYWRfcGlkIGNvdWxkIGJlIGZyZWVkIGR1cmluZyBQSURUWVBFIGRldGFjaG1lbnQgaW4gX191bmhhc2hfcHJvY2VzcygpIGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpIGFjY2Vzc2VkIGl0LiBJdCBwaW5zIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYW5kIHJlbGVhc2VzIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCksIGFmZmVjdGluZyBjb3JlIHRhc2sgdGVybWluYXRpb24gYW5kIHByb2NmcyBkY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSAvIHVzZS1hZnRlci1mcmVlIGlzc3VlIGluIGByZWxlYXNlX3Rhc2soKWAgd2hlcmUgYHRocmVhZF9waWRgIGNvdWxkIGJlIGZyZWVkIHByaW9yIHRvIGBwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKWAgd2hlbiB0aGUgbGFzdCBQSURUWVBFIGlzIGRldGFjaGVkIGR1cmluZyBwcm9jZXNzIHVuaGFzaGluZy4gSXQgZml4ZXMgdGhpcyBieSBwaW5uaW5nIGB0aHJlYWRfcGlkYCB1c2luZyBgZ2V0X3BpZCgpYCBhbmQgc3Vic2VxdWVudGx5IHJlbGVhc2luZyBpdCB3aXRoIGBwdXRfcGlkKClgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IChwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUpLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFuZCBtZW1vcnkgbGlmZXRpbWUgaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGRvZXMgbm90IGFsdGVyIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgKGluZm9sZWFrcyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDczMGZmMGQ1MTgyNGViODEzMjc5YTEyNTRlYWQ0NTk4YzY1NjkyZTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwMTowMzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDk3Njg2YWY4OTUwMTMuLjRlMDI4ZjE1NzU5NzggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2V4aXQuYwpAQCAtMjYxLDggJiM0MzsyNjEsMTEgQEAgdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCXBpZGZzX2V4aXQocCk7CiAJY2dyb3VwX3Rhc2tfcmVsZWFzZShwKTsKIAotCS8qIFJldHJpZXZlIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgbWF5IHNldCBpdCB0byBOVUxMLiAqLwotCXRocmVhZF9waWQgPSB0YXNrX3BpZChwKTsKJiM0MzsJLyoKJiM0MzsJICogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgY2xlYXJzIGl0LiBUaGUgbGFzdAomIzQzOwkgKiBQSURUWVBFIGRldGFjaCBjYW4gb3RoZXJ3aXNlIGZyZWUgaXQgYmVmb3JlIHByb2NfZmx1c2hfcGlkKCkuCiYjNDM7CSAqLwomIzQzOwl0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7CiAKIAl3cml0ZV9sb2NrX2lycSgmYW1wO3Rhc2tsaXN0X2xvY2spOwogCXB0cmFjZV9yZWxlYXNlX3Rhc2socCk7CkBAIC0yOTEsOCAmIzQzOzI5NCw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAl9CiAKIAl3cml0ZV91bmxvY2tfaXJxKCZhbXA7dGFza2xpc3RfbG9jayk7Ci0JLyogQHRocmVhZF9waWQgY2FuJiMzOTt0IGdvIGF3YXkgdW50aWwgZnJlZV9waWRzKCkgYmVsb3cgKi8KIAlwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKTsKJiM0MzsJcHV0X3BpZCh0aHJlYWRfcGlkKTsKIAlleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTsKIAlhZGRfZGV2aWNlX3JhbmRvbW5lc3MoJmFtcDtwLSZndDtzZS5zdW1fZXhlY19ydW50aW1lLAogCQkJICAgICAgc2l6ZW9mKHAtJmd0O3NlLnN1bV9leGVjX3J1bnRpbWUpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGluIGBrZXJuZWwvZXhpdC5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYHJlbGVhc2VfdGFza2AgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvZXhpdC5jYC4gVGhlIGNvcmUgY2hhbmdlIGlzIGNsZWFybHkgYXJvdW5kIFBJRCBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGB0aHJlYWRfcGlkYC4gSSBzZWUgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSByZXRyaWV2YWwgYW5kIHVzYWdlIG9mIGB0aHJlYWRfcGlkYCB3aXRoaW4gYHJlbGVhc2VfdGFza2AuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGUgaW50ZW50OiBUaGV5IGFyZSBtb3ZpbmcgZnJvbSBhIHNpbXBsZSBhc3NpZ25tZW50IHRvIGBnZXRfcGlkKClgIGJlZm9yZSBgX191bmhhc2hfcHJvY2VzcygpYCwgYW5kIGFkZGluZyBhIGBwdXRfcGlkKClgIGFmdGVyIGBwcm9jX2ZsdXNoX3BpZCgpYCBjYWxsLCB0byBlbnN1cmUgdGhlIFBJRCBpc24mIzM5O3QgcHJlbWF0dXJlbHkgZnJlZWQuIFRoZSBjb21tZW50IG1lbnRpb25zIGEgcmFjZSBjb25kaXRpb246IGBQSURUWVBFYCBkZXRhY2ggY291bGQgZnJlZSB0aGUgUElEIGJlZm9yZSBgcHJvY19mbHVzaF9waWQoKWAgaXMgY2FsbGVkLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludC4gRXNzZW50aWFsbHksIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBQSUQgaXNuJiMzOTt0IHVucmVmZXJlbmNlZCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGNhbiBvcGVyYXRlIG9uIGl0LgoKVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNvIEkmIzM5O2xsIGp1bXAgb3ZlciB0byBsaW5lIDI2MSBvZiBga2VybmVsL2V4aXQuY2AuIEkgbmVlZCB0aGF0IGZ1bGwgY29udGV4dCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBhcHByb2FjaCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwcm9jZXNzIHRlcm1pbmF0aW9uIHNlcXVlbmNlLiBUaGlzIGxvb2tzIGxpa2UgYSBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBjcml0aWNhbCBmaXggZm9yIGEgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBQSUQgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJpbmcgdGFzayBleGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9leGl0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdHtcbiAyNDY6XHR9XG4gMjQ3Olx0XG4gMjQ4Olx0dm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIDI0OTpcdHtcbiAyNTA6XHRcdHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCBwb3N0O1xuIDI1MTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXI7XG4gMjUyOlx0XHRzdHJ1Y3QgcGlkICp0aHJlYWRfcGlkO1xuIDI1MzpcdFx0aW50IHphcF9sZWFkZXI7XG4gMjU0Olx0cmVwZWF0OlxuIDI1NTpcdFx0bWVtc2V0KFx1MDAyNnBvc3QsIDAsIHNpemVvZihwb3N0KSk7XG4gMjU2Olx0XG4gMjU3Olx0XHQvKiBkb24mIzM5O3QgbmVlZCB0byBnZXQgdGhlIFJDVSByZWFkbG9jayBoZXJlIC0gdGhlIHByb2Nlc3MgaXMgZGVhZCBhbmRcbiAyNTg6XHRcdCAqIGNhbiYjMzk7dCBiZSBtb2RpZnlpbmcgaXRzIG93biBjcmVkZW50aWFscy4gKi9cbiAyNTk6XHRcdGRlY19ybGltaXRfdWNvdW50cyh0YXNrX3Vjb3VudHMocCksIFVDT1VOVF9STElNSVRfTlBST0MsIDEpO1xuIDI2MDpcdFxuIDI2MTpcdFx0cGlkZnNfZXhpdChwKTtcbiAyNjI6XHRcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XG4gMjYzOlx0XG4gMjY0Olx0XHQvKlxuIDI2NTpcdFx0ICogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgY2xlYXJzIGl0LiBUaGUgbGFzdFxuIDI2NjpcdFx0ICogUElEVFlQRSBkZXRhY2ggY2FuIG90aGVyd2lzZSBmcmVlIGl0IGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpLlxuIDI2NzpcdFx0ICovXG4gMjY4Olx0XHR0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7XG4gMjY5Olx0XG4gMjcwOlx0XHR3cml0ZV9sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiAyNzE6XHRcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XG4gMjcyOlx0XHRfX2V4aXRfc2lnbmFsKFx1MDAyNnBvc3QsIHApO1xuIDI3MzpcdFxuIDI3NDpcdFx0LypcbiAyNzU6XHRcdCAqIElmIHdlIGFyZSB0aGUgbGFzdCBub24tbGVhZGVyIG1lbWJlciBvZiB0aGUgdGhyZWFkXG4gMjc2Olx0XHQgKiBncm91cCwgYW5kIHRoZSBsZWFkZXIgaXMgem9tYmllLCB0aGVuIG5vdGlmeSB0aGVcbiAyNzc6XHRcdCAqIGdyb3VwIGxlYWRlciYjMzk7cyBwYXJlbnQgcHJvY2Vzcy4gKGlmIGl0IHdhbnRzIG5vdGlmaWNhdGlvbi4pXG4gMjc4Olx0XHQgKi9cbiAyNzk6XHRcdHphcF9sZWFkZXIgPSAwO1xuIDI4MDpcdFx0bGVhZGVyID0gcC1cdTAwM2Vncm91cF9sZWFkZXI7XG4gMjgxOlx0XHRpZiAobGVhZGVyICE9IHAgXHUwMDI2XHUwMDI2IHRocmVhZF9ncm91cF9lbXB0eShsZWFkZXIpXG4gMjgyOlx0XHRcdFx0XHUwMDI2XHUwMDI2IGxlYWRlci1cdTAwM2VleGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7XG4gMjgzOlx0XHRcdC8qIGZvciBwaWRmc19leGl0KCkgYW5kIGRvX25vdGlmeV9wYXJlbnQoKSAqL1xuIDI4NDpcdFx0XHRpZiAobGVhZGVyLVx1MDAzZXNpZ25hbC1cdTAwM2VmbGFncyBcdTAwMjYgU0lHTkFMX0dST1VQX0VYSVQpXG4gMjg1Olx0XHRcdFx0bGVhZGVyLVx1MDAzZWV4aXRfY29kZSA9IGxlYWRlci1cdTAwM2VzaWduYWwtXHUwMDNlZ3JvdXBfZXhpdF9jb2RlO1xuIDI4NjpcdFx0XHQvKlxuIDI4NzpcdFx0XHQgKiBJZiB3ZSB3ZXJlIHRoZSBsYXN0IGNoaWxkIHRocmVhZCBhbmQgdGhlIGxlYWRlciBoYXNcbiAyODg6XHRcdFx0ICogZXhpdGVkIGFscmVhZHksIGFuZCB0aGUgbGVhZGVyJiMzOTtzIHBhcmVudCBpZ25vcmVzIFNJR0NITEQsXG4gMjg5Olx0XHRcdCAqIHRoZW4gd2UgYXJlIHRoZSBvbmUgd2hvIHNob3VsZCByZWxlYXNlIHRoZSBsZWFkZXIuXG4gMjkwOlx0XHRcdCAqL1xuIDI5MTpcdFx0XHR6YXBfbGVhZGVyID0gZG9fbm90aWZ5X3BhcmVudChsZWFkZXIsIGxlYWRlci1cdTAwM2VleGl0X3NpZ25hbCk7XG4gMjkyOlx0XHRcdGlmICh6YXBfbGVhZGVyKVxuIDI5MzpcdFx0XHRcdGxlYWRlci1cdTAwM2VleGl0X3N0YXRlID0gRVhJVF9ERUFEO1xuIDI5NDpcdFx0fVxuIDI5NTpcdFxuIDI5NjpcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiAyOTc6XHRcdHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpO1xuIDI5ODpcdFx0cHV0X3BpZCh0aHJlYWRfcGlkKTtcbiAyOTk6XHRcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xuIDMwMDpcdFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFx1MDAyNnAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcbiAzMDE6XHRcdFx0XHQgICAgICBzaXplb2YocC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XG4gMzAyOlx0XHRmcmVlX3BpZHMocG9zdC5waWRzKTtcbiAzMDM6XHRcdHJlbGVhc2VfdGhyZWFkKHApO1xuIDMwNDpcdFx0LypcbiAzMDU6XHRcdCAqIFRoaXMgdGFzayB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhlIHByb2Nlc3MvdGhyZWFkL3BpZCBsaXN0c1xuIDMwNjpcdFx0ICogYW5kIGxvY2tfdGFza19zaWdoYW5kKHApIGNhbiYjMzk7dCBzdWNjZWVkLiBOb2JvZHkgZWxzZSBjYW4gdG91Y2hcbiAzMDc6XHRcdCAqIC1cdTAwM2VwZW5kaW5nIG9yLCBpZiBncm91cCBkZWFkLCBzaWduYWwtXHUwMDNlc2hhcmVkX3BlbmRpbmcuIFdlIGNhbiBjYWxsXG4gMzA4Olx0XHQgKiBmbHVzaF9zaWdxdWV1ZSgpIGxvY2tsZXNzLlxuIDMwOTpcdFx0ICovXG4gMzEwOlx0XHRmbHVzaF9zaWdxdWV1ZShcdTAwMjZwLVx1MDAzZXBlbmRpbmcpO1xuIDMxMTpcdFx0aWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpXG4gMzEyOlx0XHRcdGZsdXNoX3NpZ3F1ZXVlKFx1MDAyNnAtXHUwMDNlc2lnbmFsLVx1MDAzZXNoYXJlZF9wZW5kaW5nKTtcbiAzMTM6XHRcbiAzMTQ6XHRcdHB1dF90YXNrX3N0cnVjdF9yY3VfdXNlcihwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzOQoJCQkJCQkJb3V0cHV0OiAxOTYKCQkJCQkJCXRob3VnaHRzOiA1NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gaXNzdWUuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBgdGhyZWFkX3BpZGAgd2FzIGJlaW5nIGFjY2Vzc2VkIHdpdGhvdXQgcHJvcGVyIHJlZmVyZW5jZSBjb3VudGluZyB2aWEgYGdldF9waWQoKWAuIFRoZSB2dWxuZXJhYmlsaXR5IGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBgX191bmhhc2hfcHJvY2VzcygpYCAoY2FsbGVkIHZpYSBgX19leGl0X3NpZ25hbGApIGNvdWxkIHBvdGVudGlhbGx5IGRldGFjaCB0aGUgbGFzdCBgUElEVFlQRWAsIGxlYWRpbmcgdG8gYSBzaXR1YXRpb24gd2hlcmUgYHRocmVhZF9waWRgIGlzIGZyZWVkIHByZW1hdHVyZWx5LCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpYCBvciBvdGhlciBhY2Nlc3NlcyBoYXBwZW4uIFRoZSBmaXg/IFVzaW5nIGBnZXRfcGlkKHRhc2tfcGlkKHApKWAgdG8gZ3JhYiBhIHJlZmVyZW5jZSBvbiBgdGhyZWFkX3BpZGAgYW5kIHRoZW4gZHJvcHBpbmcgaXQgd2l0aCBgcHV0X3BpZCh0aHJlYWRfcGlkKWAgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpYC4gQSBzb2xpZCwgc3RhbmRhcmQgYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSBQSUQmIzM5O3MgbGlmZXRpbWUgaXMgbWFuYWdlZCBjb3JyZWN0bHkuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBLQVNBTiBhbmQgS01TQU4uIFRoaXMgcGF0Y2ggKmRpcmVjdGx5KiBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZS4gVGhhdCYjMzk7cyBhIEtBU0FOIGJyZWFkLWFuZC1idXR0ZXIga2luZCBvZiBidWcuIFNvLCBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0ICpyZXNvbHZlcyogYSBVQUYgYnVnIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBvbmVzLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBhbGxvY2F0ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZSBleGlzdGluZyBgc3RydWN0IHBpZGAgaXMgYmVpbmcgcHJvcGVybHkgcmVmZXJlbmNlZCBhbmQgbWFuYWdlZCB3aXRoIGBnZXRfcGlkKClgIGFuZCBgcHV0X3BpZCgpYC4gYHRocmVhZF9waWRgIGlzIGluaXRpYWxpemVkIHdpdGggYGdldF9waWQoKWAgYXMgd2VsbC4gU28sIG5vIEtNU0FOIHJpc2tzIGhlcmUuCgpUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O3ZlIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSYjMzk7cyBubyByZWxpYW5jZSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMuIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIHBvdGVudGlhbGx5IHJlYWQgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW5kLCB0aGUgY29kZSBjaGFuZ2VzIGRvbiYjMzk7dCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzIHZpYSBib3VuZCBjaGVja3Mgb3IgYW55dGhpbmcgbGlrZSB0aGF0LgoKSW4gc2hvcnQsIHRoaXMgaXMgcHJpbWFyaWx5IGEgbWVtb3J5IGxpZmV0aW1lIGNvbmNlcm4sIGJlc3QgaGFuZGxlZCBieSBLQVNBTi4gSXQmIzM5O3MgYSAmIzM0O05lZWRzS01TQU49ZmFsc2UmIzM0OyBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSAvIHVzZS1hZnRlci1mcmVlIGlzc3VlIGluIGByZWxlYXNlX3Rhc2soKWAgd2hlcmUgYHRocmVhZF9waWRgIGNvdWxkIGJlIGZyZWVkIHByaW9yIHRvIGBwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKWAgd2hlbiB0aGUgbGFzdCBQSURUWVBFIGlzIGRldGFjaGVkIGR1cmluZyBwcm9jZXNzIHVuaGFzaGluZy4gSXQgZml4ZXMgdGhpcyBieSBwaW5uaW5nIGB0aHJlYWRfcGlkYCB1c2luZyBgZ2V0X3BpZCgpYCBhbmQgc3Vic2VxdWVudGx5IHJlbGVhc2luZyBpdCB3aXRoIGBwdXRfcGlkKClgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IChwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUpLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFuZCBtZW1vcnkgbGlmZXRpbWUgaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGRvZXMgbm90IGFsdGVyIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgKGluZm9sZWFrcyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIC8gdXNlLWFmdGVyLWZyZWUgaXNzdWUgaW4gYHJlbGVhc2VfdGFzaygpYCB3aGVyZSBgdGhyZWFkX3BpZGAgY291bGQgYmUgZnJlZWQgcHJpb3IgdG8gYHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpYCB3aGVuIHRoZSBsYXN0IFBJRFRZUEUgaXMgZGV0YWNoZWQgZHVyaW5nIHByb2Nlc3MgdW5oYXNoaW5nLiBJdCBmaXhlcyB0aGlzIGJ5IHBpbm5pbmcgYHRocmVhZF9waWRgIHVzaW5nIGBnZXRfcGlkKClgIGFuZCBzdWJzZXF1ZW50bHkgcmVsZWFzaW5nIGl0IHdpdGggYHB1dF9waWQoKWAuXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIG9iamVjdCByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgKHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSkuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIG1lbW9yeSBsaWZldGltZSBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAoaW5mb2xlYWtzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6MTIuNjY4Mjg5MzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODc1ODIwNTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVsZWFzZV90YXNrXCIsXG4gICAgXCJwcm9jX2ZsdXNoX3BpZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSAvIHVzZS1hZnRlci1mcmVlIGlzc3VlIGluIGByZWxlYXNlX3Rhc2soKWAgd2hlcmUgYHRocmVhZF9waWRgIGNvdWxkIGJlIGZyZWVkIHByaW9yIHRvIGBwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKWAgd2hlbiB0aGUgbGFzdCBQSURUWVBFIGlzIGRldGFjaGVkIGR1cmluZyBwcm9jZXNzIHVuaGFzaGluZy4gSXQgZml4ZXMgdGhpcyBieSBwaW5uaW5nIGB0aHJlYWRfcGlkYCB1c2luZyBgZ2V0X3BpZCgpYCBhbmQgc3Vic2VxdWVudGx5IHJlbGVhc2luZyBpdCB3aXRoIGBwdXRfcGlkKClgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIG9iamVjdCByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgKHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSkuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIG1lbW9yeSBsaWZldGltZSBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAoaW5mb2xlYWtzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSByYWNlIGluIHJlbGVhc2VfdGFzaygpIHdoZXJlIHRocmVhZF9waWQgY291bGQgYmUgZnJlZWQgZHVyaW5nIFBJRFRZUEUgZGV0YWNobWVudCBpbiBfX3VuaGFzaF9wcm9jZXNzKCkgYmVmb3JlIHByb2NfZmx1c2hfcGlkKCkgYWNjZXNzZWQgaXQuIEl0IHBpbnMgdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBhbmQgcmVsZWFzZXMgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKSwgYWZmZWN0aW5nIGNvcmUgdGFzayB0ZXJtaW5hdGlvbiBhbmQgcHJvY2ZzIGRjYWNoZSBpbnZhbGlkYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAxOjAzOjEyLjY2ODI5Mzg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAyMTExNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzMwZmYwZDUxODI0ZWI4MTMyNzlhMTI1NGVhZDQ1OThjNjU2OTJlNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMTowMzoxMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuY1xcbmluZGV4IDk3Njg2YWY4OTUwMTMuLjRlMDI4ZjE1NzU5NzggMTAwNjQ0XFxuLS0tIGEva2VybmVsL2V4aXQuY1xcbisrKyBiL2tlcm5lbC9leGl0LmNcXG5AQCAtMjYxLDggKzI2MSwxMSBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIFxcdHBpZGZzX2V4aXQocCk7XFxuIFxcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XFxuIFxcbi1cXHQvKiBSZXRyaWV2ZSBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi9cXG4tXFx0dGhyZWFkX3BpZCA9IHRhc2tfcGlkKHApO1xcbitcXHQvKlxcbitcXHQgKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBjbGVhcnMgaXQuIFRoZSBsYXN0XFxuK1xcdCAqIFBJRFRZUEUgZGV0YWNoIGNhbiBvdGhlcndpc2UgZnJlZSBpdCBiZWZvcmUgcHJvY19mbHVzaF9waWQoKS5cXG4rXFx0ICovXFxuK1xcdHRocmVhZF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKHApKTtcXG4gXFxuIFxcdHdyaXRlX2xvY2tfaXJxKFxcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcXG4gXFx0cHRyYWNlX3JlbGVhc2VfdGFzayhwKTtcXG5AQCAtMjkxLDggKzI5NCw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4gXFx0fVxcbiBcXG4gXFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuLVxcdC8qIEB0aHJlYWRfcGlkIGNhbid0IGdvIGF3YXkgdW50aWwgZnJlZV9waWRzKCkgYmVsb3cgKi9cXG4gXFx0cHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7XFxuK1xcdHB1dF9waWQodGhyZWFkX3BpZCk7XFxuIFxcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xcbiBcXHRhZGRfZGV2aWNlX3JhbmRvbW5lc3MoXFx1MDAyNnAtXFx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUsXFxuIFxcdFxcdFxcdCAgICAgIHNpemVvZihwLVxcdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAxOjAzOjEzLjk3MDk5Nzk3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NDkwOTc3MjQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVsZWFzZV90YXNrXCIsXG4gICAgXCJwcm9jX2ZsdXNoX3BpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc29sdmVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHJhY2UgaW4gcmVsZWFzZV90YXNrKCkgd2hlcmUgdGhyZWFkX3BpZCBjb3VsZCBiZSBmcmVlZCBkdXJpbmcgUElEVFlQRSBkZXRhY2htZW50IGluIF9fdW5oYXNoX3Byb2Nlc3MoKSBiZWZvcmUgcHJvY19mbHVzaF9waWQoKSBhY2Nlc3NlZCBpdC4gSXQgcGlucyB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGFuZCByZWxlYXNlcyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLCBhZmZlY3RpbmcgY29yZSB0YXNrIHRlcm1pbmF0aW9uIGFuZCBwcm9jZnMgZGNhY2hlIGludmFsaWRhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzMwZmYwZDUxODI0ZWI4MTMyNzlhMTI1NGVhZDQ1OThjNjU2OTJlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDAxOjAzOjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmNcbmluZGV4IDk3Njg2YWY4OTUwMTMuLjRlMDI4ZjE1NzU5NzggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZXhpdC5jXG4rKysgYi9rZXJuZWwvZXhpdC5jXG5AQCAtMjYxLDggKzI2MSwxMSBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHRwaWRmc19leGl0KHApO1xuIFx0Y2dyb3VwX3Rhc2tfcmVsZWFzZShwKTtcbiBcbi1cdC8qIFJldHJpZXZlIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgbWF5IHNldCBpdCB0byBOVUxMLiAqL1xuLVx0dGhyZWFkX3BpZCA9IHRhc2tfcGlkKHApO1xuK1x0LypcbitcdCAqIFBpbiBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIGNsZWFycyBpdC4gVGhlIGxhc3RcbitcdCAqIFBJRFRZUEUgZGV0YWNoIGNhbiBvdGhlcndpc2UgZnJlZSBpdCBiZWZvcmUgcHJvY19mbHVzaF9waWQoKS5cbitcdCAqL1xuK1x0dGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpO1xuIFxuIFx0d3JpdGVfbG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4gXHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xuQEAgLTI5MSw4ICsyOTQsOCBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHR9XG4gXG4gXHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuLVx0LyogQHRocmVhZF9waWQgY2FuJ3QgZ28gYXdheSB1bnRpbCBmcmVlX3BpZHMoKSBiZWxvdyAqL1xuIFx0cHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7XG4rXHRwdXRfcGlkKHRocmVhZF9waWQpO1xuIFx0ZXhpdF9jcmVkX25hbWVzcGFjZXMocCk7XG4gXHRhZGRfZGV2aWNlX3JhbmRvbW5lc3MoXHUwMDI2cC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lLFxuIFx0XHRcdCAgICAgIHNpemVvZihwLVx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAxOjAzOjEzLjk3MDk5OTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTk1MjU4MDAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBSZXZpZXc6IEZ1enppbmcgUG90ZW50aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRvIGxvb2sgYXQsIGFuZCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgaXQgaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZz8gTGV0J3MgZGl2ZSBpbi4gVGhlIHRhcmdldCBmaWxlIGlzIGBrZXJuZWwvZXhpdC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcmVsZWFzZV90YXNrKClgIGZ1bmN0aW9uLiBUaGUgZGlmZiBmb2N1c2VzIG9uIGhvdyBgdGhyZWFkX3BpZGAgaXMgaGFuZGxlZCwgcmlnaHQgYmVmb3JlIHRoZSBwcm9jZXNzIGlzIHVuaGFzaGVkIGFuZCBmcmVlZC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIFBJRCBjb3VsZCBiZSBmcmVlZCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGhhcyBhIGNoYW5jZSB0byBkbyBpdHMgam9iLiBFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIGFkZGluZyBgZ2V0X3BpZCgpYCB0byBwaW4gdGhlIFBJRCwgYW5kIGBwdXRfcGlkKClgIGFmdGVyIGBwcm9jX2ZsdXNoX3BpZCgpYCB0byByZWxlYXNlIHRoZSBwaW5uZWQgUElELiBUaGlzIGluZGljYXRlcyBhIHBvdGVudGlhbCBkYXRhIHJhY2Ugb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSBhZGRlZCBjb21tZW50cyBjb25maXJtIHRoaXMsIGNsYXJpZnlpbmcgdGhhdCB0aGV5J3JlIGVuc3VyaW5nIHRoZSBQSUQgcGVyc2lzdHMgdW50aWwgaXQgY2FuIGJlIHByb3Blcmx5IGhhbmRsZWQuIFRoZSBsYXN0IGxpbmUgb2YgdGhlIG9yaWdpbmFsIGNvZGUsIHRoZSBwcm9jX2ZsdXNoX3BpZCgpIGNhbGwsIHNlZW1zIGltcG9ydGFudCBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgdGhpcyB0eXBlIG9mIGZpeCDigJMgbWVtb3J5IG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgYW5kIHJhY2UgY29uZGl0aW9uIGF2b2lkYW5jZSDigJMgaXMgKmRlZmluaXRlbHkqIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJdCBkaXJlY3RseSBhZGRyZXNzZXMgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciwgcG90ZW50aWFsbHksIGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcy5cblxuSSdtIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGJldHRlci4gTGV0J3MgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGBrZXJuZWwvZXhpdC5jYCBhbmQgc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBvdGhlciByZWxhdGVkIGFyZWFzIG9yIG90aGVyIHBvdGVudGlhbCBlbnRyeXBvaW50cyBhZmZlY3RlZCBieSB0aGUgZml4LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGludGVyYWN0aW9ucyB3aXRoIFBJRCBtYW5hZ2VtZW50LCB0YXNrIGNsZWFudXAsIGFuZCBwcm9jZXNzIGV4aXQgcGF0aHMgaW4gZ2VuZXJhbC4gQSBtb3JlIGRldGFpbGVkIGV4YW1pbmF0aW9uIG9mIHRoaXMgc2VjdGlvbiBvZiB0aGUga2VybmVsIGlzIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjYzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6MjMuOTIzNTgwODA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9leGl0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdFxcdHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCBwb3N0O1xcbiAyNTE6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXI7XFxuIDI1MjpcXHRcXHRzdHJ1Y3QgcGlkICp0aHJlYWRfcGlkO1xcbiAyNTM6XFx0XFx0aW50IHphcF9sZWFkZXI7XFxuIDI1NDpcXHRyZXBlYXQ6XFxuIDI1NTpcXHRcXHRtZW1zZXQoXFx1MDAyNnBvc3QsIDAsIHNpemVvZihwb3N0KSk7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdC8qIGRvbid0IG5lZWQgdG8gZ2V0IHRoZSBSQ1UgcmVhZGxvY2sgaGVyZSAtIHRoZSBwcm9jZXNzIGlzIGRlYWQgYW5kXFxuIDI1ODpcXHRcXHQgKiBjYW4ndCBiZSBtb2RpZnlpbmcgaXRzIG93biBjcmVkZW50aWFscy4gKi9cXG4gMjU5OlxcdFxcdGRlY19ybGltaXRfdWNvdW50cyh0YXNrX3Vjb3VudHMocCksIFVDT1VOVF9STElNSVRfTlBST0MsIDEpO1xcbiAyNjA6XFx0XFxuIDI2MTpcXHRcXHRwaWRmc19leGl0KHApO1xcbiAyNjI6XFx0XFx0Y2dyb3VwX3Rhc2tfcmVsZWFzZShwKTtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0LypcXG4gMjY1OlxcdFxcdCAqIFBpbiBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIGNsZWFycyBpdC4gVGhlIGxhc3RcXG4gMjY2OlxcdFxcdCAqIFBJRFRZUEUgZGV0YWNoIGNhbiBvdGhlcndpc2UgZnJlZSBpdCBiZWZvcmUgcHJvY19mbHVzaF9waWQoKS5cXG4gMjY3OlxcdFxcdCAqL1xcbiAyNjg6XFx0XFx0dGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpO1xcbiAyNjk6XFx0XFxuIDI3MDpcXHRcXHR3cml0ZV9sb2NrX2lycShcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuIDI3MTpcXHRcXHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xcbiAyNzI6XFx0XFx0X19leGl0X3NpZ25hbChcXHUwMDI2cG9zdCwgcCk7XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdC8qXFxuIDI3NTpcXHRcXHQgKiBJZiB3ZSBhcmUgdGhlIGxhc3Qgbm9uLWxlYWRlciBtZW1iZXIgb2YgdGhlIHRocmVhZFxcbiAyNzY6XFx0XFx0ICogZ3JvdXAsIGFuZCB0aGUgbGVhZGVyIGlzIHpvbWJpZSwgdGhlbiBub3RpZnkgdGhlXFxuIDI3NzpcXHRcXHQgKiBncm91cCBsZWFkZXIncyBwYXJlbnQgcHJvY2Vzcy4gKGlmIGl0IHdhbnRzIG5vdGlmaWNhdGlvbi4pXFxuIDI3ODpcXHRcXHQgKi9cXG4gMjc5OlxcdFxcdHphcF9sZWFkZXIgPSAwO1xcbiAyODA6XFx0XFx0bGVhZGVyID0gcC1cXHUwMDNlZ3JvdXBfbGVhZGVyO1xcbiAyODE6XFx0XFx0aWYgKGxlYWRlciAhPSBwIFxcdTAwMjZcXHUwMDI2IHRocmVhZF9ncm91cF9lbXB0eShsZWFkZXIpXFxuIDI4MjpcXHRcXHRcXHRcXHRcXHUwMDI2XFx1MDAyNiBsZWFkZXItXFx1MDAzZWV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpIHtcXG4gMjgzOlxcdFxcdFxcdC8qIGZvciBwaWRmc19leGl0KCkgYW5kIGRvX25vdGlmeV9wYXJlbnQoKSAqL1xcbiAyODQ6XFx0XFx0XFx0aWYgKGxlYWRlci1cXHUwMDNlc2lnbmFsLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNJR05BTF9HUk9VUF9FWElUKVxcbiAyODU6XFx0XFx0XFx0XFx0bGVhZGVyLVxcdTAwM2VleGl0X2NvZGUgPSBsZWFkZXItXFx1MDAzZXNpZ25hbC1cXHUwMDNlZ3JvdXBfZXhpdF9jb2RlO1xcbiAyODY6XFx0XFx0XFx0LypcXG4gMjg3OlxcdFxcdFxcdCAqIElmIHdlIHdlcmUgdGhlIGxhc3QgY2hpbGQgdGhyZWFkIGFuZCB0aGUgbGVhZGVyIGhhc1xcbiAyODg6XFx0XFx0XFx0ICogZXhpdGVkIGFscmVhZHksIGFuZCB0aGUgbGVhZGVyJ3MgcGFyZW50IGlnbm9yZXMgU0lHQ0hMRCxcXG4gMjg5OlxcdFxcdFxcdCAqIHRoZW4gd2UgYXJlIHRoZSBvbmUgd2hvIHNob3VsZCByZWxlYXNlIHRoZSBsZWFkZXIuXFxuIDI5MDpcXHRcXHRcXHQgKi9cXG4gMjkxOlxcdFxcdFxcdHphcF9sZWFkZXIgPSBkb19ub3RpZnlfcGFyZW50KGxlYWRlciwgbGVhZGVyLVxcdTAwM2VleGl0X3NpZ25hbCk7XFxuIDI5MjpcXHRcXHRcXHRpZiAoemFwX2xlYWRlcilcXG4gMjkzOlxcdFxcdFxcdFxcdGxlYWRlci1cXHUwMDNlZXhpdF9zdGF0ZSA9IEVYSVRfREVBRDtcXG4gMjk0OlxcdFxcdH1cXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuIDI5NzpcXHRcXHRwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKTtcXG4gMjk4OlxcdFxcdHB1dF9waWQodGhyZWFkX3BpZCk7XFxuIDI5OTpcXHRcXHRleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTtcXG4gMzAwOlxcdFxcdGFkZF9kZXZpY2VfcmFuZG9tbmVzcyhcXHUwMDI2cC1cXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcXG4gMzAxOlxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihwLVxcdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XFxuIDMwMjpcXHRcXHRmcmVlX3BpZHMocG9zdC5waWRzKTtcXG4gMzAzOlxcdFxcdHJlbGVhc2VfdGhyZWFkKHApO1xcbiAzMDQ6XFx0XFx0LypcXG4gMzA1OlxcdFxcdCAqIFRoaXMgdGFzayB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhlIHByb2Nlc3MvdGhyZWFkL3BpZCBsaXN0c1xcbiAzMDY6XFx0XFx0ICogYW5kIGxvY2tfdGFza19zaWdoYW5kKHApIGNhbid0IHN1Y2NlZWQuIE5vYm9keSBlbHNlIGNhbiB0b3VjaFxcbiAzMDc6XFx0XFx0ICogLVxcdTAwM2VwZW5kaW5nIG9yLCBpZiBncm91cCBkZWFkLCBzaWduYWwtXFx1MDAzZXNoYXJlZF9wZW5kaW5nLiBXZSBjYW4gY2FsbFxcbiAzMDg6XFx0XFx0ICogZmx1c2hfc2lncXVldWUoKSBsb2NrbGVzcy5cXG4gMzA5OlxcdFxcdCAqL1xcbiAzMTA6XFx0XFx0Zmx1c2hfc2lncXVldWUoXFx1MDAyNnAtXFx1MDAzZXBlbmRpbmcpO1xcbiAzMTE6XFx0XFx0aWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpXFxuIDMxMjpcXHRcXHRcXHRmbHVzaF9zaWdxdWV1ZShcXHUwMDI2cC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VzaGFyZWRfcGVuZGluZyk7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdHB1dF90YXNrX3N0cnVjdF9yY3VfdXNlcihwKTtcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0cCA9IGxlYWRlcjtcXG4gMzE3OlxcdFxcdGlmICh1bmxpa2VseSh6YXBfbGVhZGVyKSlcXG4gMzE4OlxcdFxcdFxcdGdvdG8gcmVwZWF0O1xcbiAzMTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzoyMy45MjM3Mjg2MzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTc3MjI5NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGZpeGluZyBhIG5hc3R5IHJhY2UgY29uZGl0aW9uIOKAkyBhIHVzZS1hZnRlci1mcmVlIOKAkyB3aXRoaW4gdGhlIGByZWxlYXNlX3Rhc2soKWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiBga2VybmVsL2V4aXQuY2AuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gaG93IFBJRHMgYXJlIGhhbmRsZWQgZHVyaW5nIHRocmVhZCBleGl0IGFuZCB0aGUgdGltaW5nIG9mIGBwcm9jX2ZsdXNoX3BpZGAuICBFc3NlbnRpYWxseSwgdGhlIGNvZGUgd2FzIHZ1bG5lcmFibGUgYmVjYXVzZSBgX19leGl0X3NpZ25hbCgpYCBjYW4gZGV0YWNoIGEgUElELCBwb3RlbnRpYWxseSBmcmVlaW5nIHRoZSBgc3RydWN0IHBpZGAgYmVmb3JlIGBwcm9jX2ZsdXNoX3BpZCgpYCBnZXRzIGEgY2hhbmNlIHRvIHVzZSBpdC4gVGhlIGZpeCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZlcmVuY2UgY291bnQgbWFuYWdlbWVudCBzdHJhdGVneSB1c2luZyBgZ2V0X3BpZCgpYCBhbmQgYHB1dF9waWQoKWAgdG8gZW5zdXJlIHRoZSBQSUQgc3RydWN0dXJlIHJlbWFpbnMgdmFsaWQgZm9yIHRoZSBkdXJhdGlvbiBvZiBpdHMgdXNlIGluIGBwcm9jX2ZsdXNoX3BpZCgpYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0J3MgYXBwbHkgdGhlIHN0YW5kYXJkIGNyaXRlcmlhLiBJdCdzIG5vdCBkb2N1bWVudGF0aW9uLCBhIGNvbmZpZyBmaWxlIGNoYW5nZSwgb3IgYSBsb2dnaW5nIGFkZGl0aW9uLiBJdCBkaXJlY3RseSBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gYHJlbGVhc2VfdGFzaygpYCwgd2hpY2ggaXMgYSBjcml0aWNhbCBmdW5jdGlvbiBleGVjdXRlZCBvbiBldmVyeSBwcm9jZXNzL3RocmVhZCBleGl0LiBHaXZlbiB0aGF0IGByZWxlYXNlX3Rhc2soKWAgaGFuZGxlcyBwcm9jZXNzIGV4aXQsIEkgbmVlZCB0byBlbnN1cmUgaXQncyBub3QgYSBob3QtcGF0aCBmdW5jdGlvbiB0aGF0IG1pZ2h0IHNrZXcgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIHJlbGVhc2UvZXhpdCBoYW5kbGluZywgc28gSSdtIHRoaW5raW5nIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGlzIHNpZ25pZmljYW50LCB0aHVzIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuTmV4dCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgaGVhdnkgZnV6emluZy4gVGhlIGNyaXRlcmlhIGRpY3RhdGUgSSBwdWxsIG91dCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIE15IGZpcnN0IHRob3VnaHQgaXMgd2hldGhlciB0byBpbmNsdWRlIGByZWxlYXNlX3Rhc2tgIGluIGBGb2N1c1N5bWJvbHNgLiBJcyB0aGlzIGEgaG90LXBhdGggZnVuY3Rpb24/IExldCdzIGNvbnNpZGVyIGhvdyBvZnRlbiBgcmVsZWFzZV90YXNrYCBnZXRzIGNhbGxlZCBvbiBwcm9jZXNzIGV4aXQvd2FpdC4gSSBuZWVkIHRvIHJlc2VhcmNoIHRoaXMgYmVmb3JlIG1ha2luZyB0aGUgY2FsbC4gU2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIGByZWxlYXNlX3Rhc2tgIGRpcmVjdGx5LCBpcyBpdCB0aGUgb25seSBmb2N1cz8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGNhbGxlcnMsIGFuZCBtYXliZSByZWxhdGVkIGZ1bmN0aW9ucyB0byBlbnN1cmUgbm90aGluZyByZWxhdGVkIHRvIHRoZSBgc3RydWN0IHBpZGAgaXNzdWUgaGFzIGJlZW4gbWlzc2VkLiBJJ2xsIHVzZSBgZ2l0IGdyZXBgIHRvIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTkwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6MjkuMTAwOTYwNDA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjg1MjU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWxlYXNlX3Rhc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZXhpdC5jPTEyMz1sYXRlX2luaXRjYWxsKGtlcm5lbF9leGl0X3N5c2ZzX2luaXQpO1xcbi0tXFxua2VybmVsL2V4aXQuYy0xMjYtLypcXG5rZXJuZWwvZXhpdC5jOjEyNzogKiBGb3IgdGhpbmdzIHJlbGVhc2VfdGFzaygpIHdvdWxkIGxpa2UgdG8gZG8gKmFmdGVyKiB0YXNrbGlzdF9sb2NrIGlzIHJlbGVhc2VkLlxcbmtlcm5lbC9leGl0LmMtMTI4LSAqL1xcbmtlcm5lbC9leGl0LmM6MTI5OnN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCB7XFxua2VybmVsL2V4aXQuYy0xMzAtXFx0c3RydWN0IHBpZCAqcGlkc1tQSURUWVBFX01BWF07XFxuLS1cXG5rZXJuZWwvZXhpdC5jLTEzMi1cXG5rZXJuZWwvZXhpdC5jOjEzMzpzdGF0aWMgdm9pZCBfX3VuaGFzaF9wcm9jZXNzKHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCAqcG9zdCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbmtlcm5lbC9leGl0LmMtMTM0LVxcdFxcdFxcdCAgICAgYm9vbCBncm91cF9kZWFkKVxcbi0tXFxua2VybmVsL2V4aXQuYy0xNTctICovXFxua2VybmVsL2V4aXQuYzoxNTg6c3RhdGljIHZvaWQgX19leGl0X3NpZ25hbChzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgKnBvc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmtlcm5lbC9leGl0LmMtMTU5LXtcXG4tLVxcbmtlcm5lbC9leGl0LmM9MjQ0PXZvaWQgX193ZWFrIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqZGVhZF90YXNrKVxcbi0tXFxua2VybmVsL2V4aXQuYy0yNDctXFxua2VybmVsL2V4aXQuYzoyNDg6dm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbmtlcm5lbC9leGl0LmMtMjQ5LXtcXG5rZXJuZWwvZXhpdC5jOjI1MDpcXHRzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgcG9zdDtcXG5rZXJuZWwvZXhpdC5jLTI1MS1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxlYWRlcjtcXG4tLVxcbmtlcm5lbC9leGl0LmMtMjcwLVxcdHdyaXRlX2xvY2tfaXJxKFxcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcXG5rZXJuZWwvZXhpdC5jOjI3MTpcXHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xcbmtlcm5lbC9leGl0LmMtMjcyLVxcdF9fZXhpdF9zaWduYWwoXFx1MDAyNnBvc3QsIHApO1xcbi0tXFxua2VybmVsL2V4aXQuYz02MzM9c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZmluZF9jaGlsZF9yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTY1NS1cXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZwLVxcdTAwM2VwdHJhY2VfZW50cnkpO1xcbmtlcm5lbC9leGl0LmM6NjU2OlxcdFxcdHJlbGVhc2VfdGFzayhwKTtcXG5rZXJuZWwvZXhpdC5jLTY1Ny1cXHR9XFxuLS1cXG5rZXJuZWwvZXhpdC5jPTY3Mj1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX25ld19yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTcwNy0vKlxcbmtlcm5lbC9leGl0LmM6NzA4OiogQW55IHRoYXQgbmVlZCB0byBiZSByZWxlYXNlX3Rhc2snZCBhcmUgcHV0IG9uIHRoZSBAZGVhZCBsaXN0Llxcbmtlcm5lbC9leGl0LmMtNzA5LSAqL1xcbi0tXFxua2VybmVsL2V4aXQuYz03NzM9c3RhdGljIHZvaWQgZXhpdF9ub3RpZnkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBncm91cF9kZWFkKVxcbi0tXFxua2VybmVsL2V4aXQuYy04MTEtXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cC1cXHUwMDNlcHRyYWNlX2VudHJ5KTtcXG5rZXJuZWwvZXhpdC5jOjgxMjpcXHRcXHRyZWxlYXNlX3Rhc2socCk7XFxua2VybmVsL2V4aXQuYy04MTMtXFx0fVxcbi0tXFxua2VybmVsL2V4aXQuYz0xMjA5PXN0YXRpYyBpbnQgd2FpdF90YXNrX3pvbWJpZShzdHJ1Y3Qgd2FpdF9vcHRzICp3bywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL2V4aXQuYy0xMzE1LVxcdGlmIChzdGF0ZSA9PSBFWElUX0RFQUQpXFxua2VybmVsL2V4aXQuYzoxMzE2OlxcdFxcdHJlbGVhc2VfdGFzayhwKTtcXG5rZXJuZWwvZXhpdC5jLTEzMTctXFxuLS1cXG5rZXJuZWwvZm9yay5jPTE2OT1pbnQgbnJfcHJvY2Vzc2VzKHZvaWQpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTE3OS1cXG5rZXJuZWwvZm9yay5jOjE4MDp2b2lkIF9fd2VhayBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxua2VybmVsL2ZvcmsuYy0xODEte1xcbi0tXFxua2VybmVsL2ZvcmsuYz01MDM9dm9pZCBleGl0X3Rhc2tfc3RhY2tfYWNjb3VudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmtlcm5lbC9mb3JrLmMtNTE2LVxcbmtlcm5lbC9mb3JrLmM6NTE3OnN0YXRpYyB2b2lkIHJlbGVhc2VfdGFza19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5rZXJuZWwvZm9yay5jLTUxOC17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTUyNj12b2lkIHB1dF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxua2VybmVsL2ZvcmsuYy01MjgtXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2dHNrLVxcdTAwM2VzdGFja19yZWZjb3VudCkpXFxua2VybmVsL2ZvcmsuYzo1Mjk6XFx0XFx0cmVsZWFzZV90YXNrX3N0YWNrKHRzayk7XFxua2VybmVsL2ZvcmsuYy01MzAtfVxcbi0tXFxua2VybmVsL2ZvcmsuYz01MzM9dm9pZCBmcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5rZXJuZWwvZm9yay5jLTU0Ni1cXHQgKi9cXG5rZXJuZWwvZm9yay5jOjU0NzpcXHRyZWxlYXNlX3Rhc2tfc3RhY2sodHNrKTtcXG5rZXJuZWwvZm9yay5jLTU0OC0jZWxzZVxcbi0tXFxua2VybmVsL2ZvcmsuYy01NTYtXFx0ZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0c2spO1xcbmtlcm5lbC9mb3JrLmM6NTU3OlxcdGFyY2hfcmVsZWFzZV90YXNrX3N0cnVjdCh0c2spO1xcbmtlcm5lbC9mb3JrLmMtNTU4LVxcdGlmICh0c2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfS1RIUkVBRClcXG4tLVxcbmtlcm5lbC9wdHJhY2UuYz0yNTc9c3RhdGljIGludCBwdHJhY2VfY2hlY2tfYXR0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGJvb2wgaWdub3JlX3N0YXRlKVxcbi0tXFxua2VybmVsL3B0cmFjZS5jLTI3MC1cXHRcXHQvKlxcbmtlcm5lbC9wdHJhY2UuYzoyNzE6XFx0XFx0ICogY2hpbGQtXFx1MDAzZXNpZ2hhbmQgY2FuJ3QgYmUgTlVMTCwgcmVsZWFzZV90YXNrKClcXG5rZXJuZWwvcHRyYWNlLmMtMjcyLVxcdFxcdCAqIGRvZXMgcHRyYWNlX3VubGluaygpIGJlZm9yZSBfX2V4aXRfc2lnbmFsKCkuXFxuLS1cXG5rZXJuZWwvcHRyYWNlLmM9NTM4PXN0YXRpYyBpbnQgaWdub3JpbmdfY2hpbGRyZW4oc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoKVxcbi0tXFxua2VybmVsL3B0cmFjZS5jLTU1MC0gKiBVbmxpbmsgYSB0cmFjZWQgdGFzaywgYW5kIGNsZWFuIGl0IHVwIGlmIGl0IHdhcyBhIHRyYWNlZCB6b21iaWUuXFxua2VybmVsL3B0cmFjZS5jOjU1MTogKiBSZXR1cm4gdHJ1ZSBpZiBpdCBuZWVkcyB0byBiZSByZWFwZWQgd2l0aCByZWxlYXNlX3Rhc2soKS5cXG5rZXJuZWwvcHRyYWNlLmM6NTUyOiAqIChXZSBjYW4ndCBjYWxsIHJlbGVhc2VfdGFzaygpIGhlcmUgYmVjYXVzZSB3ZSBhbHJlYWR5IGhvbGQgdGFza2xpc3RfbG9jay4pXFxua2VybmVsL3B0cmFjZS5jLTU1My0gKlxcbi0tXFxua2VybmVsL3NpZ25hbC5jPTIxNjg9Ym9vbCBkb19ub3RpZnlfcGFyZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgc2lnKVxcbi0tXFxua2VybmVsL3NpZ25hbC5jLTIyMDMtXFx0ICogdGFza19hY3RpdmVfcGlkX25zIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBwaWQgbmFtZXNwYWNlXFxua2VybmVsL3NpZ25hbC5jOjIyMDQ6XFx0ICogdW50aWwgYSB0YXNrIHBhc3NlcyB0aHJvdWdoIHJlbGVhc2VfdGFzay5cXG5rZXJuZWwvc2lnbmFsLmMtMjIwNS1cXHQgKlxcbi0tXFxua2VybmVsL3N5cy5jPTEwMDU9U1lTQ0FMTF9ERUZJTkUwKGdldHRpZClcXG4tLVxcbmtlcm5lbC9zeXMuYy0xMDEzLSAqIHZhbHVlIG9mIC1cXHUwMDNlcmVhbF9wYXJlbnQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLCBzZWVcXG5rZXJuZWwvc3lzLmM6MTAxNDogKiByZWxlYXNlX3Rhc2soKS1cXHUwMDNlY2FsbF9yY3UoZGVsYXllZF9wdXRfdGFza19zdHJ1Y3QpLlxcbmtlcm5lbC9zeXMuYy0xMDE1LSAqL1xcbi0tXFxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jPTQ1MT1zdGF0aWMgdm9pZCBkaXNhcm1fdGltZXIoc3RydWN0IGtfaXRpbWVyICp0aW1lciwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jLTUwMC0gKlxcdFxcdFxcdFxcdFxcdHN3aXRjaF9sZWFkZXIoKVxcbmtlcm5lbC90aW1lL3Bvc2l4LWNwdS10aW1lcnMuYzo1MDE6ICpcXHRcXHRcXHRcXHRcXHRyZWxlYXNlX3Rhc2sob2xkIGxlYWRlcilcXG5rZXJuZWwvdGltZS9wb3NpeC1jcHUtdGltZXJzLmMtNTAyLSAqXFx0XFx0XFx0XFx0XFx0ICBfX2V4aXRfc2lnbmFsKClcXG4tLVxcbmtlcm5lbC90aW1lL3Bvc2l4LWNwdS10aW1lcnMuYz0xNDY0PXZvaWQgcnVuX3Bvc2l4X2NwdV90aW1lcnModm9pZClcXG4tLVxcbmtlcm5lbC90aW1lL3Bvc2l4LWNwdS10aW1lcnMuYy0xNDcwLVxcdC8qXFxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jOjE0NzE6XFx0ICogRW5zdXJlIHRoYXQgcmVsZWFzZV90YXNrKHRzaykgY2FuJ3QgaGFwcGVuIHdoaWxlXFxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jLTE0NzItXFx0ICogaGFuZGxlX3Bvc2l4X2NwdV90aW1lcnMoKSBpcyBydW5uaW5nLiBPdGhlcndpc2UsIGEgY29uY3VycmVudFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzoyOS44MzM4MjIzOTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTMxNDA5MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHJlbGVhc2VfdGFza2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbi4gSXQgc2VlbXMgaXQncyB0aGUga2V5IHRvIGNsZWFuaW5nIHVwIGFmdGVyIGEgdGFzayBoYXMgZXhpdGVkIG9yIGJlZW4gcmVhcGVkIOKAkyB0cmlnZ2VyZWQgYnkgdGhpbmdzIGxpa2UgYGV4aXRfbm90aWZ5YCwgYHdhaXRfdGFza196b21iaWVgLCBvciBgZmluZF9jaGlsZF9yZWFwZXJgLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGEgcHVibGljLWZhY2luZyBlbnRyeXBvaW50LCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gd2UgY2FuIGNhbGwgZnJvbSBlbHNld2hlcmUsIG9yIGlzIGl0IGhpZGRlbiBhd2F5PyBSaWdodCwgbG9va3MgbGlrZSBgdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKWAgaW4gYGtlcm5lbC9leGl0LmNgIGlzIG5vbi1zdGF0aWMuIEdvb2QuIFRoYXQgY2xhcmlmaWVzIHRoYXQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGRlcGVuZGVuY2llcy4gV2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvciBhdmFpbGFiaWxpdHkgb2YgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGNvZGUgYXJvdW5kIGl0PyBJIHNob3VsZCBjaGVjayBpZiBga2VybmVsL2V4aXQuY2Agb3IgcGFydHMgb2YgaXQgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYW55IENPTkZJRyBvcHRpb25zLiBUaW1lIHRvIGxvb2sgYXQgYGtlcm5lbC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6MzUuMzY1MjMzMjcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTU4ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4aXRcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvTWFrZWZpbGU9Nj1vYmoteSAgICAgPSBmb3JrLm8gZXhlY19kb21haW4ubyBleGVjX3N0YXRlLm8gcGFuaWMubyBcXFxcXFxua2VybmVsL01ha2VmaWxlOjc6XFx0ICAgIGNwdS5vIGV4aXQubyBzb2Z0aXJxLm8gcmVzb3VyY2UubyBcXFxcXFxua2VybmVsL01ha2VmaWxlLTgtXFx0ICAgIHN5c2N0bC5vIGNhcGFiaWxpdHkubyBwdHJhY2UubyB1c2VyLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzozNS40MjYxOTY5N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MjU5OTcwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGV4aXQub2AgTW9kdWxlIGFuZCBgcmVsZWFzZV90YXNrYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBleGl0Lm9gIGlzIGNvbnNpc3RlbnRseSBpbmNsdWRlZCBpbiBgb2JqLXlgLCB0aGF0J3MgYSBnaXZlbi4gTm93LCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBjb2RlIHN1cnJvdW5kaW5nIGByZWxlYXNlX3Rhc2tgLCBvciB0aGUgbW9kaWZpZWQgcGFydHMgb2YgaXQsIGFyZSBndWFyZGVkIGJ5IGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBsaWtlIGAjaWZkZWZgLiBJIG5lZWQgdG8gcnVsZSBvdXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblRvIHRoYXQgZW5kLCBsZXQgbWUgY2hlY2sgbGluZXMgMjQwIHRocm91Z2ggMzMwIG9mIGBrZXJuZWwvZXhpdC5jYC4gUmlnaHQsIGhlcmUncyBgcmVsZWFzZV90YXNrYC4gT2theSwgZ29vZCwgbm8gYCNpZmRlZmBzLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBUaGlzIG1lYW5zIHRoaXMgZnVuY3Rpb24ncyBiZWhhdmlvdXIgc2hvdWxkIGJlIGNvbnNpc3RlbnQgdW5sZXNzIHNvbWV0aGluZyB1cHN0cmVhbSwgb3IgZG93bnN0cmVhbSBjYWxscyBpdCBpbiBkaWZmZXJlbnQgcGxhY2VzLlxuXG5Ob3csIGluc2lkZSBgcmVsZWFzZV90YXNrYCwgSSBzZWUgY2FsbHMgdG8gYHByb2NfZmx1c2hfcGlkYCwgYGdldF9waWRgLCBhbmQgYHB1dF9waWRgLiBUaGVzZSBhcmUgYWxsIHByZXR0eSBmdW5kYW1lbnRhbCBrZXJuZWwgZnVuY3Rpb25zLCBubyBzdXJwcmlzZXMgdGhlcmUuIFNpbmNlIGBwcm9jX2ZsdXNoX3BpZGAgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIHNvbWUgd2VpcmRuZXNzLCBJJ2xsIGNoZWNrIGl0cyBjb25maWcgZGVwZW5kZW5jaWVzLCBqdXN0IHRvIGJlIHN1cmUuIEknbSBhZnRlciBhbnl0aGluZyB0aGF0IG1pZ2h0IGludHJvZHVjZSBwbGF0Zm9ybS1zcGVjaWZpYyBvciBidWlsZC10aW1lIHZhcmlhdGlvbnMgaW4gaXRzIGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU2MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzozOC4zNTIxOTYwODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzg4NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfZmx1c2hfcGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTE5NzY9c3RhdGljIHN0cnVjdCBpbm9kZSAqcHJvY19waWRfbWFrZV9iYXNlX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xOTg2LVxcbmZzL3Byb2MvYmFzZS5jOjE5ODc6XFx0LyogTGV0IHByb2NfZmx1c2hfcGlkIGZpbmQgdGhpcyBkaXJlY3RvcnkgaW5vZGUgKi9cXG5mcy9wcm9jL2Jhc2UuYy0xOTg4LVxcdGVpID0gUFJPQ19JKGlub2RlKTtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTM0MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2NfdGdpZF9iYXNlX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zNDMwLS8qKlxcbmZzL3Byb2MvYmFzZS5jOjM0MzE6ICogcHJvY19mbHVzaF9waWQgLSAgUmVtb3ZlIGRjYWNoZSBlbnRyaWVzIGZvciBAcGlkIGZyb20gdGhlIC9wcm9jIGRjYWNoZS5cXG5mcy9wcm9jL2Jhc2UuYy0zNDMyLSAqIEBwaWQ6IHBpZCB0aGF0IHNob3VsZCBiZSBmbHVzaGVkLlxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMzQ0OC1cXG5mcy9wcm9jL2Jhc2UuYzozNDQ5OnZvaWQgcHJvY19mbHVzaF9waWQoc3RydWN0IHBpZCAqcGlkKVxcbmZzL3Byb2MvYmFzZS5jLTM0NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzozOC4zOTk5OTAxNjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2MTkwNDM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYHByb2NfZmx1c2hfcGlkYCBhbmQgaXRzIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoIGBwcm9jX2ZsdXNoX3BpZGAuIEZpcnN0LCBJIHdhbnQgdG8gZGV0ZXJtaW5lIGlmIGl0J3MganVzdCBhIHN0dWIgZnVuY3Rpb27igJRtZWFuaW5nLCBkb2VzIGl0IGV4aXN0IHByaW1hcmlseSBmb3IgaW50ZXJmYWNlIGNvbXBhdGliaWxpdHkgb3IgaXMgaXQgZG9pbmcgYWN0dWFsIHdvcms/IElmIGl04oCZcyBub3QganVzdCBhIHBsYWNlaG9sZGVyLCB0aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IHJlbGllcyBvbiB0aGUgcHJlc2VuY2Ugb2YgYFBST0NfRlNgLiBUaGUgZmlsZSBzeXN0ZW0gaW50ZXJhY3Rpb24gYXNwZWN0IGlzIGNydWNpYWwuIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCB0byBgUFJPQ19GU2Agd2lsbCB0ZWxsIG1lIGlmIHRoaXMgZnVuY3Rpb24gaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggYSBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWd1cmF0aW9uIG9yIGlmIGl0J3MgbW9yZSBtb2R1bGFyIGFuZCBwb3RlbnRpYWxseSBhZGFwdGFibGUuIEl0J3MgYSBxdWljayBhbmFseXNpcywgYnV0IGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIHVzYWdlIGluIGEgZGlmZmVyZW50IGNvbnRleHQuIExldCdzIGRpZyBpbiBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjMyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NDAuNDYxODk3OTY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwMTE3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY19mbHVzaF9waWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wcm9jX2ZzLmg9ODU9ZXh0ZXJuIHZvaWQgcHJvY19yb290X2luaXQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmg6ODY6ZXh0ZXJuIHZvaWQgcHJvY19mbHVzaF9waWQoc3RydWN0IHBpZCAqKTtcXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaC04Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHJvY19mcy5oPTE3Mj1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY19yb290X2luaXQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcHJvY19mcy5oLTE3NS1cXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaDoxNzY6c3RhdGljIGlubGluZSB2b2lkIHByb2NfZmx1c2hfcGlkKHN0cnVjdCBwaWQgKnBpZClcXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaC0xNzcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzo0MC41ODA5MTQ4MzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzNjMyNzE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBgcHJvY19mbHVzaF9waWRgIGFuZCBpdHMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHByb2NfZmx1c2hfcGlkYCBhbmQgaW1tZWRpYXRlbHkgSSdtIHRoaW5raW5nLCBcIlJpZ2h0LCB0aGF0J3MgcGFydCBvZiB0aGUgYFBST0NfRlNgIGNvbmZpZ3VyYXRpb24sIGlzbid0IGl0P1wiIEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkndmUgZGl2ZWQgaW50byB0aGlzIHBhcnRpY3VsYXIgYXJlYSwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgQ09ORklHX1BST0NfRlNgLiBUaGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoYXQgaXMgdGhlIGluY2x1ZGUgZmlsZS4gTGV0J3MgaGVhZCBvdmVyIHRvIGBpbmNsdWRlL2xpbnV4L3Byb2NfZnMuaGAgYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX1BST0NfRlNgIHJlYWxseSBpcyB0aGUga2V5LiBPbmNlIEkndmUgdmVyaWZpZWQgaXRzIHJvbGUsIHRoZW4gSSB3aWxsIGtub3cgbW9yZSBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzIGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzo0Mi41MTcyNDQyNzVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wcm9jX2ZzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY1OlxcdCNlbmRpZiAvKiBDT05GSUdfUFJPQ19QSURfQVJDSF9TVEFUVVMgKi9cXG4gMTY2OlxcdFxcbiAxNjc6XFx0dm9pZCBhcmNoX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSk7XFxuIDE2ODpcXHR2b2lkIGFyY2hfcHJvY19waWRfdGhyZWFkX2ZlYXR1cmVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTtcXG4gMTY5OlxcdFxcbiAxNzA6XFx0I2Vsc2UgLyogQ09ORklHX1BST0NfRlMgKi9cXG4gMTcxOlxcdFxcbiAxNzI6XFx0c3RhdGljIGlubGluZSB2b2lkIHByb2Nfcm9vdF9pbml0KHZvaWQpXFxuIDE3MzpcXHR7XFxuIDE3NDpcXHR9XFxuIDE3NTpcXHRcXG4gMTc2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX2ZsdXNoX3BpZChzdHJ1Y3QgcGlkICpwaWQpXFxuIDE3NzpcXHR7XFxuIDE3ODpcXHR9XFxuIDE3OTpcXHRcXG4gMTgwOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3N5bWxpbmsoY29uc3QgY2hhciAqbmFtZSxcXG4gMTgxOlxcdFxcdFxcdHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50LGNvbnN0IGNoYXIgKmRlc3QpIHsgcmV0dXJuIE5VTEw7fVxcbiAxODI6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbWtkaXIoY29uc3QgY2hhciAqbmFtZSxcXG4gMTgzOlxcdFxcdHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50KSB7cmV0dXJuIE5VTEw7fVxcbiAxODQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfY3JlYXRlX21vdW50X3BvaW50KGNvbnN0IGNoYXIgKm5hbWUpIHsgcmV0dXJuIE5VTEw7IH1cXG4gMTg1OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpfcHJvY19ta2Rpcihjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUsXFxuIDE4NjpcXHRcXHRcXHRzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCwgdm9pZCAqZGF0YSwgYm9vbCBmb3JjZV9sb29rdXApXFxuIDE4NzpcXHR7XFxuIDE4ODpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTg5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NDIuNTE3MzE3NTY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyMDI0NTM4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYENPTkZJR19QUk9DX0ZTYCBhbmQgYHByb2NfZmx1c2hfcGlkKClgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcHJvY19mbHVzaF9waWQoKWAgZnVuY3Rpb24gYW5kIGl0cyBjb25uZWN0aW9uIHRvIGB0aHJlYWRfcGlkYC4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgcHJvYyBmaWxlc3lzdGVtLiBJdCdzIGdvdCB0byBiZSBzdGFuZGFyZCBhbmQgbmVjZXNzYXJ5IHRvIGZsdXNoIHRob3NlIGRjYWNoZSBlbnRyaWVzIHJlbGF0ZWQgdG8gcHJvY2Vzc2VzLCByaWdodD8gVGhpcyBpcyBmdW5kYW1lbnRhbCwgZXNzZW50aWFsIHN0dWZmLiBBbmQgdGhlIGNvZGUgYWNjZXNzZXMgdGhhdCBgdGhyZWFkX3BpZGAgdmFyaWFibGUuIFNvLCB0aGUgaW1wbGljYXRpb24gaXMgdGhhdCB3aXRob3V0IHRoZSBwcm9jIGZpbGVzeXN0ZW0gZW5hYmxlZCwgdGhpcyBmdW5jdGlvbiBjYW4ndCBiZSBzYWZlbHkgZXhlY3V0ZWQuIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBMZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYGZzL3Byb2MvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgdGhlIGBQUk9DX0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aGUga2V5IHRvIGFsbCB0aGlzLCBhbmQgdGhhdCBlbmFibGluZyBpdCBkaXJlY3RseSB0aWVzIGludG8gd2hldGhlciBvciBub3Qgd2UgY2FuIHJ1biB0aGlzIGZ1bmN0aW9uIGFuZCBjb3JyZWN0bHkgZmx1c2ggdGhvc2UgUElEIHJlbGF0ZWQgY2FjaGUgZW50cmllcy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBhaXJ0aWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMxMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NDkuNzE5NzczNDQ2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUyMjk4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBST0NfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvcHJvYy9LY29uZmlnOjI6Y29uZmlnIFBST0NfRlNcXG5mcy9wcm9jL0tjb25maWctMy1cXHRib29sIFxcXCIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NTAuMjE1MDExOTc4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzE1MjExMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBxdWljayBzY2FuIG9mIGBmcy9wcm9jL0tjb25maWdgLiBMZXQncyBqdXN0IGdyYWIgdGhlIGZpcnN0IHR3ZW50eSBsaW5lcywgdG8gc3RhcnQuIEkgd2FudCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcg4oCTIHNlZSBpZiBJIGNhbiBnZXQgYSBzZW5zZSBmb3Igd2hhdCdzIGJlaW5nIGRlZmluZWQgb3IgZW5hYmxlZCBpbiB0aGUgYHByb2NgIGZpbGVzeXN0ZW0gY29udGV4dC4gVGhpcyB1c3VhbGx5IGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB3aGVuIEkgYW0gdHJ5aW5nIHRvIGNoYW5nZSByZWxhdGVkIGNvbmZpZ3VyYXRpb24sIG9yIHVuZGVyc3RhbmQgaW50ZXJhY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBpbml0aWFsIGxpbmVzIGZyYW1lIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBwcm9jZnMgY29uZmlndXJhdGlvbiwgeW91IGtub3csIHVuZGVyc3RhbmQgaXRzIGFyY2hpdGVjdHVyYWwgZGVzaWduLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBjb250YWluZWQgaW4gdGhpcyBpbml0aWFsIHNlZ21lbnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY3NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAxOjAzOjUyLjI0NjUzNTQ1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBQUk9DX0ZTXFxuICAgMzpcXHRcXHRib29sIFxcXCIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4gICA0OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBUaGlzIGlzIGEgdmlydHVhbCBmaWxlIHN5c3RlbSBwcm92aWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXR1c1xcbiAgIDc6XFx0XFx0ICBvZiB0aGUgc3lzdGVtLiBcXFwiVmlydHVhbFxcXCIgbWVhbnMgdGhhdCBpdCBkb2Vzbid0IHRha2UgdXAgYW55IHNwYWNlIG9uXFxuICAgODpcXHRcXHQgIHlvdXIgaGFyZCBkaXNrOiB0aGUgZmlsZXMgYXJlIGNyZWF0ZWQgb24gdGhlIGZseSBieSB0aGUga2VybmVsIHdoZW5cXG4gICA5OlxcdFxcdCAgeW91IHRyeSB0byBhY2Nlc3MgdGhlbS4gQWxzbywgeW91IGNhbm5vdCByZWFkIHRoZSBmaWxlcyB3aXRoIG9sZGVyXFxuICAxMDpcXHRcXHQgIHZlcnNpb24gb2YgdGhlIHByb2dyYW0gbGVzczogeW91IG5lZWQgdG8gdXNlIG1vcmUgb3IgY2F0LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIEl0J3MgdG90YWxseSBjb29sOyBmb3IgZXhhbXBsZSwgXFxcImNhdCAvcHJvYy9pbnRlcnJ1cHRzXFxcIiBnaXZlc1xcbiAgMTM6XFx0XFx0ICBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoZSBkaWZmZXJlbnQgSVJRcyBhcmUgdXNlZCBmb3IgYXQgdGhlIG1vbWVudFxcbiAgMTQ6XFx0XFx0ICAodGhlcmUgaXMgYSBzbWFsbCBudW1iZXIgb2YgSW50ZXJydXB0IFJlUXVlc3QgbGluZXMgaW4geW91ciBjb21wdXRlclxcbiAgMTU6XFx0XFx0ICB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBhdHRhY2hlZCBkZXZpY2VzIHRvIGdhaW4gdGhlIENQVSdzIGF0dGVudGlvbiAtLVxcbiAgMTY6XFx0XFx0ICBvZnRlbiBhIHNvdXJjZSBvZiB0cm91YmxlIGlmIHR3byBkZXZpY2VzIGFyZSBtaXN0YWtlbmx5IGNvbmZpZ3VyZWRcXG4gIDE3OlxcdFxcdCAgdG8gdXNlIHRoZSBzYW1lIElSUSkuIFRoZSBwcm9ncmFtIHByb2NpbmZvIHRvIGRpc3BsYXkgc29tZVxcbiAgMTg6XFx0XFx0ICBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHN5c3RlbSBnYXRoZXJlZCBmcm9tIHRoZSAvcHJvYyBmaWxlIHN5c3RlbS5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBCZWZvcmUgeW91IGNhbiB1c2UgdGhlIC9wcm9jIGZpbGUgc3lzdGVtLCBpdCBoYXMgdG8gYmUgbW91bnRlZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NTIuMjQ2NTk3ODc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNTIxNjE0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBwcm9jX2ZsdXNoX3BpZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBwcm9jX2ZsdXNoX3BpZGAgaXMgaW1wbGVtZW50ZWQuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGZzL3Byb2MvYmFzZS5jYCBmaWxlLiBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB3aGF0IEknbSBsb29raW5nIGZvcjogaG93IGV4YWN0bHkgZG9lcyB0aGUga2VybmVsIGhhbmRsZSB0aGUgY2xlYXJpbmcgb2YgcHJvY2Vzcy1zcGVjaWZpYyBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGAvcHJvY2AgZmlsZXN5c3RlbT8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQgaGVyZT8gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBpbnRlcmFjdGlvbnMgd2l0aCB0YXNrIHN0cnVjdHVyZXMsIGZpbGUgZGVzY3JpcHRvcnMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGtpbmQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGxvY2tpbmcgbWVjaGFuaXNtIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gTGV0J3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBpcyBjb3JyZWN0Li4uIG9yIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucyBvciBkZXNpZ24gY2hvaWNlcyB0aGF0IEkgaGFkbid0IGNvbnNpZGVyZWQuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI0OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NTUuMjk4NzYxNjgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL2Jhc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDQ1OlxcdCAqICAgICAgIHRoYXQgbm8gZGNhY2hlIGVudHJpZXMgd2lsbCBleGlzdCBhZnRlciBhIHByb2Nlc3MgaXMgcmVhcGVkXFxuMzQ0NjpcXHQgKiAgICAgICBpdCBqdXN0IG1ha2VzIGl0IHZlcnkgdW5saWtlbHkgdGhhdCBhbnkgd2lsbCBwZXJzaXN0LlxcbjM0NDc6XFx0ICovXFxuMzQ0ODpcXHRcXG4zNDQ5OlxcdHZvaWQgcHJvY19mbHVzaF9waWQoc3RydWN0IHBpZCAqcGlkKVxcbjM0NTA6XFx0e1xcbjM0NTE6XFx0XFx0cHJvY19pbnZhbGlkYXRlX3NpYmxpbmdzX2RjYWNoZShcXHUwMDI2cGlkLVxcdTAwM2Vpbm9kZXMsIFxcdTAwMjZwaWQtXFx1MDAzZWxvY2spO1xcbjM0NTI6XFx0fVxcbjM0NTM6XFx0XFxuMzQ1NDpcXHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqcHJvY19waWRfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSxcXG4zNDU1OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY29uc3Qgdm9pZCAqcHRyKVxcbjM0NTY6XFx0e1xcbjM0NTc6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4zNDU4OlxcdFxcbjM0NTk6XFx0XFx0aW5vZGUgPSBwcm9jX3BpZF9tYWtlX2Jhc2VfaW5vZGUoZGVudHJ5LVxcdTAwM2VkX3NiLCB0YXNrLFxcbjM0NjA6XFx0XFx0XFx0XFx0XFx0XFx0IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTyk7XFxuMzQ2MTpcXHRcXHRpZiAoIWlub2RlKVxcbjM0NjI6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuMzQ2MzpcXHRcXG4zNDY0OlxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnByb2NfdGdpZF9iYXNlX2lub2RlX29wZXJhdGlvbnM7XFxuMzQ2NTpcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2cHJvY190Z2lkX2Jhc2Vfb3BlcmF0aW9ucztcXG4zNDY2OlxcdFxcdGlub2RlLVxcdTAwM2VpX2ZsYWdzfD1TX0lNTVVUQUJMRTtcXG4zNDY3OlxcdFxcbjM0Njg6XFx0XFx0c2V0X25saW5rKGlub2RlLCBubGlua190Z2lkKTtcXG4zNDY5OlxcdFxcdHBpZF91cGRhdGVfaW5vZGUodGFzaywgaW5vZGUpO1xcbjM0NzA6XFx0XFxuMzQ3MTpcXHRcXHRyZXR1cm4gZF9zcGxpY2VfYWxpYXNfb3BzKGlub2RlLCBkZW50cnksIFxcdTAwMjZwaWRfZGVudHJ5X29wZXJhdGlvbnMpO1xcbjM0NzI6XFx0fVxcbjM0NzM6XFx0XFxuMzQ3NDpcXHRzdHJ1Y3QgZGVudHJ5ICpwcm9jX3BpZF9sb29rdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuMzQ3NTpcXHR7XFxuMzQ3NjpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuMzQ3NzpcXHRcXHR1bnNpZ25lZCB0Z2lkO1xcbjM0Nzg6XFx0XFx0c3RydWN0IHByb2NfZnNfaW5mbyAqZnNfaW5mbztcXG4zNDc5OlxcdFxcdHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucztcXG4zNDgwOlxcdFxcdHN0cnVjdCBkZW50cnkgKnJlc3VsdCA9IEVSUl9QVFIoLUVOT0VOVCk7XFxuMzQ4MTpcXHRcXG4zNDgyOlxcdFxcdHRnaWQgPSBuYW1lX3RvX2ludChcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX25hbWUpO1xcbjM0ODM6XFx0XFx0aWYgKHRnaWQgPT0gfjBVKVxcbjM0ODQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAxOjAzOjU1LjI5OTM3NzUzM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTA2ODc5NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiBQcm9jZXNzIFRlcm1pbmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBwcm9jX2ZsdXNoX3BpZGAgaW50ZXJhY3RzIHdpdGggcHJvY2VzcyBpZGVudGlmaWVycyAoYHBpZGApLiBJdCBhY2Nlc3NlcyBgcGlkLVx1MDAzZWlub2Rlc2AgYW5kIGBwaWQtXHUwMDNlbG9ja2AuIEluIHRoZSBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbiwgSSBzZWUgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZTogYSBgdGhyZWFkX3BpZGAgaXMgcmV0cmlldmVkIHVzaW5nIGBnZXRfcGlkYCwgdGhlbiBwYXNzZWQgdG8gYHByb2NfZmx1c2hfcGlkYCwgYW5kIGZpbmFsbHkgcmVsZWFzZWQgdXNpbmcgYHB1dF9waWRgLlxuXG5NeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzOiBgcmVsZWFzZV90YXNrYCBhbmQgYHByb2NfZmx1c2hfcGlkYC4gTGV0J3MgY2hlY2sgdGhlIHJlbGV2YW50IEVuYWJsZUNvbmZpZ3M6IHNlZW1zIGxpa2UgYFBST0NfRlNgIGlzIGludm9sdmVkIGhlcmUuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgZnV6emluZyByZWFkaW5lc3MuIFllcCwgdGhpcyBsb29rcyBwcm9taXNpbmcuIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90LW9uOiBgcmVsZWFzZV90YXNrYCBhbmQgYHByb2NfZmx1c2hfcGlkYC4gVGhlIGVuYWJsaW5nIGNvbmRpdGlvbiwgYFBST0NfRlNgLCBhbHNvIGNoZWNrcyBvdXQuXG5cbkhlcmUncyB0aGUgcmVhc29uaW5nOiB0aGUgcGF0Y2ggaXMgYWJvdXQgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eS4gIFNwZWNpZmljYWxseSwgdGhlcmUncyBhIHJpc2sgdGhhdCBgdGhyZWFkX3BpZGAgY291bGQgYmUgZnJlZWQgYnkgYF9fdW5oYXNoX3Byb2Nlc3MoKWAgZHVyaW5nIHByb2Nlc3MgdGVybWluYXRpb24gYmVmb3JlIGBwcm9jX2ZsdXNoX3BpZCgpYCBnZXRzIGEgY2hhbmNlIHRvIHVzZSBpdC4gVGhpcyBgZ2V0X3BpZCgpYC9gcHV0X3BpZCgpYCBwYWlyIGluIGByZWxlYXNlX3Rhc2tgIHNlZW1zIHRvIGJlIHRoZSBmaXguIFRha2luZyBhIHJlZmVyZW5jZSB3aXRoIGBnZXRfcGlkKClgIGJlZm9yZSBgX19leGl0X3NpZ25hbCgpYCBhbmQgZHJvcHBpbmcgaXQgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKClgIGVuc3VyZXMgdGhhdCBgdGhyZWFkX3BpZGAgaXMgdmFsaWQgd2hpbGUgaXQncyBiZWluZyBhY2Nlc3NlZC4gVGhpcyBsb29rcyBsaWtlIGNvcmUgcHJvY2VzcyBleGl0IGxvZ2ljIGFuZCB0b3VjaGVzIHByb2NmcyBjbGVhbnVwLCBzbyB0aGUgZml4IG1ha2VzIHNlbnNlLlxuXG5Ob3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTQsIk91dHB1dFRva2VucyI6MTMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NTguODA2MjYwMDgxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1MDc5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWxlYXNlX3Rhc2tcIixcbiAgICBcInByb2NfZmx1c2hfcGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBpbiByZWxlYXNlX3Rhc2soKSB3aGVyZSB0aHJlYWRfcGlkIGNvdWxkIGJlIGZyZWVkIGR1cmluZyBQSURUWVBFIGRldGFjaG1lbnQgaW4gX191bmhhc2hfcHJvY2VzcygpIGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpIGFjY2Vzc2VkIGl0LiBJdCBwaW5zIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYW5kIHJlbGVhc2VzIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCksIGFmZmVjdGluZyBjb3JlIHRhc2sgdGVybWluYXRpb24gYW5kIHByb2NmcyBkY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWxlYXNlX3Rhc2tcIixcbiAgICBcInByb2NfZmx1c2hfcGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBpbiByZWxlYXNlX3Rhc2soKSB3aGVyZSB0aHJlYWRfcGlkIGNvdWxkIGJlIGZyZWVkIGR1cmluZyBQSURUWVBFIGRldGFjaG1lbnQgaW4gX191bmhhc2hfcHJvY2VzcygpIGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpIGFjY2Vzc2VkIGl0LiBJdCBwaW5zIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYW5kIHJlbGVhc2VzIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCksIGFmZmVjdGluZyBjb3JlIHRhc2sgdGVybWluYXRpb24gYW5kIHByb2NmcyBkY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzo1OC44ODA3NzQwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NDU3MTA5NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzo1OC44ODExOTA1MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyNTQ1Mjg5Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIC8gdXNlLWFmdGVyLWZyZWUgaXNzdWUgaW4gYHJlbGVhc2VfdGFzaygpYCB3aGVyZSBgdGhyZWFkX3BpZGAgY291bGQgYmUgZnJlZWQgcHJpb3IgdG8gYHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpYCB3aGVuIHRoZSBsYXN0IFBJRFRZUEUgaXMgZGV0YWNoZWQgZHVyaW5nIHByb2Nlc3MgdW5oYXNoaW5nLiBJdCBmaXhlcyB0aGlzIGJ5IHBpbm5pbmcgYHRocmVhZF9waWRgIHVzaW5nIGBnZXRfcGlkKClgIGFuZCBzdWJzZXF1ZW50bHkgcmVsZWFzaW5nIGl0IHdpdGggYHB1dF9waWQoKWAuXFxuXFxuVGhpcyBjaGFuZ2Ugc29sZWx5IGFmZmVjdHMgb2JqZWN0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCAocHJldmVudGluZyBhIHVzZS1hZnRlci1mcmVlKS4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgbWVtb3J5IGxpZmV0aW1lIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBkb2VzIG5vdCBhbHRlciBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlIChpbmZvbGVha3MpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDczMGZmMGQ1MTgyNGViODEzMjc5YTEyNTRlYWQ0NTk4YzY1NjkyZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMTowMzoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jXG5pbmRleCA5NzY4NmFmODk1MDEzLi40ZTAyOGYxNTc1OTc4IDEwMDY0NFxuLS0tIGEva2VybmVsL2V4aXQuY1xuKysrIGIva2VybmVsL2V4aXQuY1xuQEAgLTI2MSw4ICsyNjEsMTEgQEAgdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0cGlkZnNfZXhpdChwKTtcbiBcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XG4gXG4tXHQvKiBSZXRyaWV2ZSBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi9cbi1cdHRocmVhZF9waWQgPSB0YXNrX3BpZChwKTtcbitcdC8qXG4rXHQgKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBjbGVhcnMgaXQuIFRoZSBsYXN0XG4rXHQgKiBQSURUWVBFIGRldGFjaCBjYW4gb3RoZXJ3aXNlIGZyZWUgaXQgYmVmb3JlIHByb2NfZmx1c2hfcGlkKCkuXG4rXHQgKi9cbitcdHRocmVhZF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKHApKTtcbiBcbiBcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuIFx0cHRyYWNlX3JlbGVhc2VfdGFzayhwKTtcbkBAIC0yOTEsOCArMjk0LDggQEAgdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0fVxuIFxuIFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbi1cdC8qIEB0aHJlYWRfcGlkIGNhbid0IGdvIGF3YXkgdW50aWwgZnJlZV9waWRzKCkgYmVsb3cgKi9cbiBcdHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpO1xuK1x0cHV0X3BpZCh0aHJlYWRfcGlkKTtcbiBcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xuIFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFx1MDAyNnAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcbiBcdFx0XHQgICAgICBzaXplb2YocC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzo1OC44ODExOTE1MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDE5ODYxOTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBpbiBga2VybmVsL2V4aXQuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC9leGl0LmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgY2xlYXJseSBhcm91bmQgUElEIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgYHRocmVhZF9waWRgLiBJIHNlZSB0aGV5J3JlIG1vZGlmeWluZyB0aGUgcmV0cmlldmFsIGFuZCB1c2FnZSBvZiBgdGhyZWFkX3BpZGAgd2l0aGluIGByZWxlYXNlX3Rhc2tgLlxuXG5MZXQncyBkaXNzZWN0IHRoZSBpbnRlbnQ6IFRoZXkgYXJlIG1vdmluZyBmcm9tIGEgc2ltcGxlIGFzc2lnbm1lbnQgdG8gYGdldF9waWQoKWAgYmVmb3JlIGBfX3VuaGFzaF9wcm9jZXNzKClgLCBhbmQgYWRkaW5nIGEgYHB1dF9waWQoKWAgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKClgIGNhbGwsIHRvIGVuc3VyZSB0aGUgUElEIGlzbid0IHByZW1hdHVyZWx5IGZyZWVkLiBUaGUgY29tbWVudCBtZW50aW9ucyBhIHJhY2UgY29uZGl0aW9uOiBgUElEVFlQRWAgZGV0YWNoIGNvdWxkIGZyZWUgdGhlIFBJRCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGlzIGNhbGxlZC4gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludC4gRXNzZW50aWFsbHksIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBQSUQgaXNuJ3QgdW5yZWZlcmVuY2VkIGJlZm9yZSBgcHJvY19mbHVzaF9waWQoKWAgY2FuIG9wZXJhdGUgb24gaXQuXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzbyBJJ2xsIGp1bXAgb3ZlciB0byBsaW5lIDI2MSBvZiBga2VybmVsL2V4aXQuY2AuIEkgbmVlZCB0aGF0IGZ1bGwgY29udGV4dCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBhcHByb2FjaCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwcm9jZXNzIHRlcm1pbmF0aW9uIHNlcXVlbmNlLiBUaGlzIGxvb2tzIGxpa2UgYSBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBjcml0aWNhbCBmaXggZm9yIGEgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBQSUQgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJpbmcgdGFzayBleGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDQ6MDQuMzAxMDU2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2V4aXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0e1xcbiAyNDY6XFx0fVxcbiAyNDc6XFx0XFxuIDI0ODpcXHR2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIDI0OTpcXHR7XFxuIDI1MDpcXHRcXHRzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgcG9zdDtcXG4gMjUxOlxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyO1xcbiAyNTI6XFx0XFx0c3RydWN0IHBpZCAqdGhyZWFkX3BpZDtcXG4gMjUzOlxcdFxcdGludCB6YXBfbGVhZGVyO1xcbiAyNTQ6XFx0cmVwZWF0OlxcbiAyNTU6XFx0XFx0bWVtc2V0KFxcdTAwMjZwb3N0LCAwLCBzaXplb2YocG9zdCkpO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHQvKiBkb24ndCBuZWVkIHRvIGdldCB0aGUgUkNVIHJlYWRsb2NrIGhlcmUgLSB0aGUgcHJvY2VzcyBpcyBkZWFkIGFuZFxcbiAyNTg6XFx0XFx0ICogY2FuJ3QgYmUgbW9kaWZ5aW5nIGl0cyBvd24gY3JlZGVudGlhbHMuICovXFxuIDI1OTpcXHRcXHRkZWNfcmxpbWl0X3Vjb3VudHModGFza191Y291bnRzKHApLCBVQ09VTlRfUkxJTUlUX05QUk9DLCAxKTtcXG4gMjYwOlxcdFxcbiAyNjE6XFx0XFx0cGlkZnNfZXhpdChwKTtcXG4gMjYyOlxcdFxcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdC8qXFxuIDI2NTpcXHRcXHQgKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBjbGVhcnMgaXQuIFRoZSBsYXN0XFxuIDI2NjpcXHRcXHQgKiBQSURUWVBFIGRldGFjaCBjYW4gb3RoZXJ3aXNlIGZyZWUgaXQgYmVmb3JlIHByb2NfZmx1c2hfcGlkKCkuXFxuIDI2NzpcXHRcXHQgKi9cXG4gMjY4OlxcdFxcdHRocmVhZF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKHApKTtcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNnRhc2tsaXN0X2xvY2spO1xcbiAyNzE6XFx0XFx0cHRyYWNlX3JlbGVhc2VfdGFzayhwKTtcXG4gMjcyOlxcdFxcdF9fZXhpdF9zaWduYWwoXFx1MDAyNnBvc3QsIHApO1xcbiAyNzM6XFx0XFxuIDI3NDpcXHRcXHQvKlxcbiAyNzU6XFx0XFx0ICogSWYgd2UgYXJlIHRoZSBsYXN0IG5vbi1sZWFkZXIgbWVtYmVyIG9mIHRoZSB0aHJlYWRcXG4gMjc2OlxcdFxcdCAqIGdyb3VwLCBhbmQgdGhlIGxlYWRlciBpcyB6b21iaWUsIHRoZW4gbm90aWZ5IHRoZVxcbiAyNzc6XFx0XFx0ICogZ3JvdXAgbGVhZGVyJ3MgcGFyZW50IHByb2Nlc3MuIChpZiBpdCB3YW50cyBub3RpZmljYXRpb24uKVxcbiAyNzg6XFx0XFx0ICovXFxuIDI3OTpcXHRcXHR6YXBfbGVhZGVyID0gMDtcXG4gMjgwOlxcdFxcdGxlYWRlciA9IHAtXFx1MDAzZWdyb3VwX2xlYWRlcjtcXG4gMjgxOlxcdFxcdGlmIChsZWFkZXIgIT0gcCBcXHUwMDI2XFx1MDAyNiB0aHJlYWRfZ3JvdXBfZW1wdHkobGVhZGVyKVxcbiAyODI6XFx0XFx0XFx0XFx0XFx1MDAyNlxcdTAwMjYgbGVhZGVyLVxcdTAwM2VleGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7XFxuIDI4MzpcXHRcXHRcXHQvKiBmb3IgcGlkZnNfZXhpdCgpIGFuZCBkb19ub3RpZnlfcGFyZW50KCkgKi9cXG4gMjg0OlxcdFxcdFxcdGlmIChsZWFkZXItXFx1MDAzZXNpZ25hbC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSUdOQUxfR1JPVVBfRVhJVClcXG4gMjg1OlxcdFxcdFxcdFxcdGxlYWRlci1cXHUwMDNlZXhpdF9jb2RlID0gbGVhZGVyLVxcdTAwM2VzaWduYWwtXFx1MDAzZWdyb3VwX2V4aXRfY29kZTtcXG4gMjg2OlxcdFxcdFxcdC8qXFxuIDI4NzpcXHRcXHRcXHQgKiBJZiB3ZSB3ZXJlIHRoZSBsYXN0IGNoaWxkIHRocmVhZCBhbmQgdGhlIGxlYWRlciBoYXNcXG4gMjg4OlxcdFxcdFxcdCAqIGV4aXRlZCBhbHJlYWR5LCBhbmQgdGhlIGxlYWRlcidzIHBhcmVudCBpZ25vcmVzIFNJR0NITEQsXFxuIDI4OTpcXHRcXHRcXHQgKiB0aGVuIHdlIGFyZSB0aGUgb25lIHdobyBzaG91bGQgcmVsZWFzZSB0aGUgbGVhZGVyLlxcbiAyOTA6XFx0XFx0XFx0ICovXFxuIDI5MTpcXHRcXHRcXHR6YXBfbGVhZGVyID0gZG9fbm90aWZ5X3BhcmVudChsZWFkZXIsIGxlYWRlci1cXHUwMDNlZXhpdF9zaWduYWwpO1xcbiAyOTI6XFx0XFx0XFx0aWYgKHphcF9sZWFkZXIpXFxuIDI5MzpcXHRcXHRcXHRcXHRsZWFkZXItXFx1MDAzZWV4aXRfc3RhdGUgPSBFWElUX0RFQUQ7XFxuIDI5NDpcXHRcXHR9XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNnRhc2tsaXN0X2xvY2spO1xcbiAyOTc6XFx0XFx0cHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7XFxuIDI5ODpcXHRcXHRwdXRfcGlkKHRocmVhZF9waWQpO1xcbiAyOTk6XFx0XFx0ZXhpdF9jcmVkX25hbWVzcGFjZXMocCk7XFxuIDMwMDpcXHRcXHRhZGRfZGV2aWNlX3JhbmRvbW5lc3MoXFx1MDAyNnAtXFx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUsXFxuIDMwMTpcXHRcXHRcXHRcXHQgICAgICBzaXplb2YocC1cXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSkpO1xcbiAzMDI6XFx0XFx0ZnJlZV9waWRzKHBvc3QucGlkcyk7XFxuIDMwMzpcXHRcXHRyZWxlYXNlX3RocmVhZChwKTtcXG4gMzA0OlxcdFxcdC8qXFxuIDMwNTpcXHRcXHQgKiBUaGlzIHRhc2sgd2FzIGFscmVhZHkgcmVtb3ZlZCBmcm9tIHRoZSBwcm9jZXNzL3RocmVhZC9waWQgbGlzdHNcXG4gMzA2OlxcdFxcdCAqIGFuZCBsb2NrX3Rhc2tfc2lnaGFuZChwKSBjYW4ndCBzdWNjZWVkLiBOb2JvZHkgZWxzZSBjYW4gdG91Y2hcXG4gMzA3OlxcdFxcdCAqIC1cXHUwMDNlcGVuZGluZyBvciwgaWYgZ3JvdXAgZGVhZCwgc2lnbmFsLVxcdTAwM2VzaGFyZWRfcGVuZGluZy4gV2UgY2FuIGNhbGxcXG4gMzA4OlxcdFxcdCAqIGZsdXNoX3NpZ3F1ZXVlKCkgbG9ja2xlc3MuXFxuIDMwOTpcXHRcXHQgKi9cXG4gMzEwOlxcdFxcdGZsdXNoX3NpZ3F1ZXVlKFxcdTAwMjZwLVxcdTAwM2VwZW5kaW5nKTtcXG4gMzExOlxcdFxcdGlmICh0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKVxcbiAzMTI6XFx0XFx0XFx0Zmx1c2hfc2lncXVldWUoXFx1MDAyNnAtXFx1MDAzZXNpZ25hbC1cXHUwMDNlc2hhcmVkX3BlbmRpbmcpO1xcbiAzMTM6XFx0XFxuIDMxNDpcXHRcXHRwdXRfdGFza19zdHJ1Y3RfcmN1X3VzZXIocCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAxOjA0OjA0LjMwMTIxNDkzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxMjUyNDQwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGlzc3VlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgYHRocmVhZF9waWRgIHdhcyBiZWluZyBhY2Nlc3NlZCB3aXRob3V0IHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgdmlhIGBnZXRfcGlkKClgLiBUaGUgdnVsbmVyYWJpbGl0eSBsaWVzIGluIHRoZSBmYWN0IHRoYXQgYF9fdW5oYXNoX3Byb2Nlc3MoKWAgKGNhbGxlZCB2aWEgYF9fZXhpdF9zaWduYWxgKSBjb3VsZCBwb3RlbnRpYWxseSBkZXRhY2ggdGhlIGxhc3QgYFBJRFRZUEVgLCBsZWFkaW5nIHRvIGEgc2l0dWF0aW9uIHdoZXJlIGB0aHJlYWRfcGlkYCBpcyBmcmVlZCBwcmVtYXR1cmVseSwgYmVmb3JlIGBwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKWAgb3Igb3RoZXIgYWNjZXNzZXMgaGFwcGVuLiBUaGUgZml4PyBVc2luZyBgZ2V0X3BpZCh0YXNrX3BpZChwKSlgIHRvIGdyYWIgYSByZWZlcmVuY2Ugb24gYHRocmVhZF9waWRgIGFuZCB0aGVuIGRyb3BwaW5nIGl0IHdpdGggYHB1dF9waWQodGhyZWFkX3BpZClgIGFmdGVyIGBwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKWAuIEEgc29saWQsIHN0YW5kYXJkIGFwcHJvYWNoIHRvIGVuc3VyZSB0aGUgUElEJ3MgbGlmZXRpbWUgaXMgbWFuYWdlZCBjb3JyZWN0bHkuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgS0FTQU4gYW5kIEtNU0FOLiBUaGlzIHBhdGNoICpkaXJlY3RseSogYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUgaXNzdWUuIFRoYXQncyBhIEtBU0FOIGJyZWFkLWFuZC1idXR0ZXIga2luZCBvZiBidWcuIFNvLCBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgKnJlc29sdmVzKiBhIFVBRiBidWcgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgb25lcy4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBhbGxvY2F0ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZSBleGlzdGluZyBgc3RydWN0IHBpZGAgaXMgYmVpbmcgcHJvcGVybHkgcmVmZXJlbmNlZCBhbmQgbWFuYWdlZCB3aXRoIGBnZXRfcGlkKClgIGFuZCBgcHV0X3BpZCgpYC4gYHRocmVhZF9waWRgIGlzIGluaXRpYWxpemVkIHdpdGggYGdldF9waWQoKWAgYXMgd2VsbC4gU28sIG5vIEtNU0FOIHJpc2tzIGhlcmUuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSd2ZSBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlcmUncyBubyByZWxpYW5jZSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMuIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIHBvdGVudGlhbGx5IHJlYWQgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW5kLCB0aGUgY29kZSBjaGFuZ2VzIGRvbid0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMgdmlhIGJvdW5kIGNoZWNrcyBvciBhbnl0aGluZyBsaWtlIHRoYXQuXG5cbkluIHNob3J0LCB0aGlzIGlzIHByaW1hcmlseSBhIG1lbW9yeSBsaWZldGltZSBjb25jZXJuLCBiZXN0IGhhbmRsZWQgYnkgS0FTQU4uIEl0J3MgYSBcIk5lZWRzS01TQU49ZmFsc2VcIiBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkzOSwiT3V0cHV0VG9rZW5zIjoxOTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowNDoxMS40MjY0NjE1MzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgLyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSBpbiBgcmVsZWFzZV90YXNrKClgIHdoZXJlIGB0aHJlYWRfcGlkYCBjb3VsZCBiZSBmcmVlZCBwcmlvciB0byBgcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZClgIHdoZW4gdGhlIGxhc3QgUElEVFlQRSBpcyBkZXRhY2hlZCBkdXJpbmcgcHJvY2VzcyB1bmhhc2hpbmcuIEl0IGZpeGVzIHRoaXMgYnkgcGlubmluZyBgdGhyZWFkX3BpZGAgdXNpbmcgYGdldF9waWQoKWAgYW5kIHN1YnNlcXVlbnRseSByZWxlYXNpbmcgaXQgd2l0aCBgcHV0X3BpZCgpYC5cXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IChwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUpLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFuZCBtZW1vcnkgbGlmZXRpbWUgaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGRvZXMgbm90IGFsdGVyIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgKGluZm9sZWFrcyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSAvIHVzZS1hZnRlci1mcmVlIGlzc3VlIGluIGByZWxlYXNlX3Rhc2soKWAgd2hlcmUgYHRocmVhZF9waWRgIGNvdWxkIGJlIGZyZWVkIHByaW9yIHRvIGBwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKWAgd2hlbiB0aGUgbGFzdCBQSURUWVBFIGlzIGRldGFjaGVkIGR1cmluZyBwcm9jZXNzIHVuaGFzaGluZy4gSXQgZml4ZXMgdGhpcyBieSBwaW5uaW5nIGB0aHJlYWRfcGlkYCB1c2luZyBgZ2V0X3BpZCgpYCBhbmQgc3Vic2VxdWVudGx5IHJlbGVhc2luZyBpdCB3aXRoIGBwdXRfcGlkKClgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIG9iamVjdCByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgKHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSkuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIG1lbW9yeSBsaWZldGltZSBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAoaW5mb2xlYWtzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzfgtr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 00:24:03 +0000 UTC FinishedAt: 2026-08-31 01:04:13 +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": "3d28a38e-75ea-4297-aec0-c76208a1b58a" }, "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+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWxlYXNlX3Rhc2smIzM0OywKICAgICYjMzQ7cHJvY19mbHVzaF9waWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIC8gdXNlLWFmdGVyLWZyZWUgaXNzdWUgaW4gYHJlbGVhc2VfdGFzaygpYCB3aGVyZSBgdGhyZWFkX3BpZGAgY291bGQgYmUgZnJlZWQgcHJpb3IgdG8gYHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpYCB3aGVuIHRoZSBsYXN0IFBJRFRZUEUgaXMgZGV0YWNoZWQgZHVyaW5nIHByb2Nlc3MgdW5oYXNoaW5nLiBJdCBmaXhlcyB0aGlzIGJ5IHBpbm5pbmcgYHRocmVhZF9waWRgIHVzaW5nIGBnZXRfcGlkKClgIGFuZCBzdWJzZXF1ZW50bHkgcmVsZWFzaW5nIGl0IHdpdGggYHB1dF9waWQoKWAuXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIG9iamVjdCByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgKHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSkuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIG1lbW9yeSBsaWZldGltZSBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAoaW5mb2xlYWtzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBpbiByZWxlYXNlX3Rhc2soKSB3aGVyZSB0aHJlYWRfcGlkIGNvdWxkIGJlIGZyZWVkIGR1cmluZyBQSURUWVBFIGRldGFjaG1lbnQgaW4gX191bmhhc2hfcHJvY2VzcygpIGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpIGFjY2Vzc2VkIGl0LiBJdCBwaW5zIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYW5kIHJlbGVhc2VzIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCksIGFmZmVjdGluZyBjb3JlIHRhc2sgdGVybWluYXRpb24gYW5kIHByb2NmcyBkY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzMwZmYwZDUxODI0ZWI4MTMyNzlhMTI1NGVhZDQ1OThjNjU2OTJlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDAxOjAzOjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jXG5pbmRleCA5NzY4NmFmODk1MDEzLi40ZTAyOGYxNTc1OTc4IDEwMDY0NFxuLS0tIGEva2VybmVsL2V4aXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2V4aXQuY1xuQEAgLTI2MSw4ICYjNDM7MjYxLDExIEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdHBpZGZzX2V4aXQocCk7XG4gXHRjZ3JvdXBfdGFza19yZWxlYXNlKHApO1xuIFxuLVx0LyogUmV0cmlldmUgQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBtYXkgc2V0IGl0IHRvIE5VTEwuICovXG4tXHR0aHJlYWRfcGlkID0gdGFza19waWQocCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBjbGVhcnMgaXQuIFRoZSBsYXN0XG4mIzQzO1x0ICogUElEVFlQRSBkZXRhY2ggY2FuIG90aGVyd2lzZSBmcmVlIGl0IGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHRocmVhZF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKHApKTtcbiBcbiBcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuIFx0cHRyYWNlX3JlbGVhc2VfdGFzayhwKTtcbkBAIC0yOTEsOCAmIzQzOzI5NCw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdH1cbiBcbiBcdHdyaXRlX3VubG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4tXHQvKiBAdGhyZWFkX3BpZCBjYW4mIzM5O3QgZ28gYXdheSB1bnRpbCBmcmVlX3BpZHMoKSBiZWxvdyAqL1xuIFx0cHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7XG4mIzQzO1x0cHV0X3BpZCh0aHJlYWRfcGlkKTtcbiBcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xuIFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFx1MDAyNnAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcbiBcdFx0XHQgICAgICBzaXplb2YocC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlbGVhc2VfdGFzayYjMzQ7LAogICAgJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNvbHZlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSByYWNlIGluIHJlbGVhc2VfdGFzaygpIHdoZXJlIHRocmVhZF9waWQgY291bGQgYmUgZnJlZWQgZHVyaW5nIFBJRFRZUEUgZGV0YWNobWVudCBpbiBfX3VuaGFzaF9wcm9jZXNzKCkgYmVmb3JlIHByb2NfZmx1c2hfcGlkKCkgYWNjZXNzZWQgaXQuIEl0IHBpbnMgdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBhbmQgcmVsZWFzZXMgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKSwgYWZmZWN0aW5nIGNvcmUgdGFzayB0ZXJtaW5hdGlvbiBhbmQgcHJvY2ZzIGRjYWNoZSBpbnZhbGlkYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MzBmZjBkNTE4MjRlYjgxMzI3OWExMjU0ZWFkNDU5OGM2NTY5MmU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMzEgMDE6MDM6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCA5NzY4NmFmODk1MDEzLi40ZTAyOGYxNTc1OTc4IDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9leGl0LmMKQEAgLTI2MSw4ICYjNDM7MjYxLDExIEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAlwaWRmc19leGl0KHApOwogCWNncm91cF90YXNrX3JlbGVhc2UocCk7CiAKLQkvKiBSZXRyaWV2ZSBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi8KLQl0aHJlYWRfcGlkID0gdGFza19waWQocCk7CiYjNDM7CS8qCiYjNDM7CSAqIFBpbiBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIGNsZWFycyBpdC4gVGhlIGxhc3QKJiM0MzsJICogUElEVFlQRSBkZXRhY2ggY2FuIG90aGVyd2lzZSBmcmVlIGl0IGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpLgomIzQzOwkgKi8KJiM0MzsJdGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpOwogCiAJd3JpdGVfbG9ja19pcnEoJmFtcDt0YXNrbGlzdF9sb2NrKTsKIAlwdHJhY2VfcmVsZWFzZV90YXNrKHApOwpAQCAtMjkxLDggJiM0MzsyOTQsOCBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAJfQogCiAJd3JpdGVfdW5sb2NrX2lycSgmYW1wO3Rhc2tsaXN0X2xvY2spOwotCS8qIEB0aHJlYWRfcGlkIGNhbiYjMzk7dCBnbyBhd2F5IHVudGlsIGZyZWVfcGlkcygpIGJlbG93ICovCiAJcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7CiYjNDM7CXB1dF9waWQodGhyZWFkX3BpZCk7CiAJZXhpdF9jcmVkX25hbWVzcGFjZXMocCk7CiAJYWRkX2RldmljZV9yYW5kb21uZXNzKCZhbXA7cC0mZ3Q7c2Uuc3VtX2V4ZWNfcnVudGltZSwKIAkJCSAgICAgIHNpemVvZihwLSZndDtzZS5zdW1fZXhlY19ydW50aW1lKSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggUmV2aWV3OiBGdXp6aW5nIFBvdGVudGlhbCBBc3Nlc3NtZW50KioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRvIGxvb2sgYXQsIGFuZCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgaXQgaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZz8gTGV0JiMzOTtzIGRpdmUgaW4uIFRoZSB0YXJnZXQgZmlsZSBpcyBga2VybmVsL2V4aXQuY2AsIHNwZWNpZmljYWxseSB0aGUgYHJlbGVhc2VfdGFzaygpYCBmdW5jdGlvbi4gVGhlIGRpZmYgZm9jdXNlcyBvbiBob3cgYHRocmVhZF9waWRgIGlzIGhhbmRsZWQsIHJpZ2h0IGJlZm9yZSB0aGUgcHJvY2VzcyBpcyB1bmhhc2hlZCBhbmQgZnJlZWQuIEl0IGxvb2tzIGxpa2UgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSB0aGUgUElEIGNvdWxkIGJlIGZyZWVkIGJlZm9yZSBgcHJvY19mbHVzaF9waWQoKWAgaGFzIGEgY2hhbmNlIHRvIGRvIGl0cyBqb2IuIEVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggaXMgYWRkaW5nIGBnZXRfcGlkKClgIHRvIHBpbiB0aGUgUElELCBhbmQgYHB1dF9waWQoKWAgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKClgIHRvIHJlbGVhc2UgdGhlIHBpbm5lZCBQSUQuIFRoaXMgaW5kaWNhdGVzIGEgcG90ZW50aWFsIGRhdGEgcmFjZSBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpby4gVGhlIGFkZGVkIGNvbW1lbnRzIGNvbmZpcm0gdGhpcywgY2xhcmlmeWluZyB0aGF0IHRoZXkmIzM5O3JlIGVuc3VyaW5nIHRoZSBQSUQgcGVyc2lzdHMgdW50aWwgaXQgY2FuIGJlIHByb3Blcmx5IGhhbmRsZWQuIFRoZSBsYXN0IGxpbmUgb2YgdGhlIG9yaWdpbmFsIGNvZGUsIHRoZSBwcm9jX2ZsdXNoX3BpZCgpIGNhbGwsIHNlZW1zIGltcG9ydGFudCBpbiB0aGlzIGNvbnRleHQuCgpOb3csIHRoaXMgdHlwZSBvZiBmaXgg4oCTIG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCByYWNlIGNvbmRpdGlvbiBhdm9pZGFuY2Ug4oCTIGlzICpkZWZpbml0ZWx5KiBpbnRlcmVzdGluZyBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZS4gSXQgZGlyZWN0bHkgYWRkcmVzc2VzIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGNyYXNoZXMgb3IsIHBvdGVudGlhbGx5LCBleHBsb2l0YWJsZSB2dWxuZXJhYmlsaXRpZXMuCgpJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGJldHRlci4gTGV0JiMzOTtzIHVzZSBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBga2VybmVsL2V4aXQuY2AgYW5kIHNlZSBpZiB3ZSBjYW4gaWRlbnRpZnkgb3RoZXIgcmVsYXRlZCBhcmVhcyBvciBvdGhlciBwb3RlbnRpYWwgZW50cnlwb2ludHMgYWZmZWN0ZWQgYnkgdGhlIGZpeC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaW50ZXJhY3Rpb25zIHdpdGggUElEIG1hbmFnZW1lbnQsIHRhc2sgY2xlYW51cCwgYW5kIHByb2Nlc3MgZXhpdCBwYXRocyBpbiBnZW5lcmFsLiBBIG1vcmUgZGV0YWlsZWQgZXhhbWluYXRpb24gb2YgdGhpcyBzZWN0aW9uIG9mIHRoZSBrZXJuZWwgaXMgcmVxdWlyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvZXhpdC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTA6XHRcdHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCBwb3N0O1xuIDI1MTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXI7XG4gMjUyOlx0XHRzdHJ1Y3QgcGlkICp0aHJlYWRfcGlkO1xuIDI1MzpcdFx0aW50IHphcF9sZWFkZXI7XG4gMjU0Olx0cmVwZWF0OlxuIDI1NTpcdFx0bWVtc2V0KFx1MDAyNnBvc3QsIDAsIHNpemVvZihwb3N0KSk7XG4gMjU2Olx0XG4gMjU3Olx0XHQvKiBkb24mIzM5O3QgbmVlZCB0byBnZXQgdGhlIFJDVSByZWFkbG9jayBoZXJlIC0gdGhlIHByb2Nlc3MgaXMgZGVhZCBhbmRcbiAyNTg6XHRcdCAqIGNhbiYjMzk7dCBiZSBtb2RpZnlpbmcgaXRzIG93biBjcmVkZW50aWFscy4gKi9cbiAyNTk6XHRcdGRlY19ybGltaXRfdWNvdW50cyh0YXNrX3Vjb3VudHMocCksIFVDT1VOVF9STElNSVRfTlBST0MsIDEpO1xuIDI2MDpcdFxuIDI2MTpcdFx0cGlkZnNfZXhpdChwKTtcbiAyNjI6XHRcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XG4gMjYzOlx0XG4gMjY0Olx0XHQvKlxuIDI2NTpcdFx0ICogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgY2xlYXJzIGl0LiBUaGUgbGFzdFxuIDI2NjpcdFx0ICogUElEVFlQRSBkZXRhY2ggY2FuIG90aGVyd2lzZSBmcmVlIGl0IGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpLlxuIDI2NzpcdFx0ICovXG4gMjY4Olx0XHR0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7XG4gMjY5Olx0XG4gMjcwOlx0XHR3cml0ZV9sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiAyNzE6XHRcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XG4gMjcyOlx0XHRfX2V4aXRfc2lnbmFsKFx1MDAyNnBvc3QsIHApO1xuIDI3MzpcdFxuIDI3NDpcdFx0LypcbiAyNzU6XHRcdCAqIElmIHdlIGFyZSB0aGUgbGFzdCBub24tbGVhZGVyIG1lbWJlciBvZiB0aGUgdGhyZWFkXG4gMjc2Olx0XHQgKiBncm91cCwgYW5kIHRoZSBsZWFkZXIgaXMgem9tYmllLCB0aGVuIG5vdGlmeSB0aGVcbiAyNzc6XHRcdCAqIGdyb3VwIGxlYWRlciYjMzk7cyBwYXJlbnQgcHJvY2Vzcy4gKGlmIGl0IHdhbnRzIG5vdGlmaWNhdGlvbi4pXG4gMjc4Olx0XHQgKi9cbiAyNzk6XHRcdHphcF9sZWFkZXIgPSAwO1xuIDI4MDpcdFx0bGVhZGVyID0gcC1cdTAwM2Vncm91cF9sZWFkZXI7XG4gMjgxOlx0XHRpZiAobGVhZGVyICE9IHAgXHUwMDI2XHUwMDI2IHRocmVhZF9ncm91cF9lbXB0eShsZWFkZXIpXG4gMjgyOlx0XHRcdFx0XHUwMDI2XHUwMDI2IGxlYWRlci1cdTAwM2VleGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7XG4gMjgzOlx0XHRcdC8qIGZvciBwaWRmc19leGl0KCkgYW5kIGRvX25vdGlmeV9wYXJlbnQoKSAqL1xuIDI4NDpcdFx0XHRpZiAobGVhZGVyLVx1MDAzZXNpZ25hbC1cdTAwM2VmbGFncyBcdTAwMjYgU0lHTkFMX0dST1VQX0VYSVQpXG4gMjg1Olx0XHRcdFx0bGVhZGVyLVx1MDAzZWV4aXRfY29kZSA9IGxlYWRlci1cdTAwM2VzaWduYWwtXHUwMDNlZ3JvdXBfZXhpdF9jb2RlO1xuIDI4NjpcdFx0XHQvKlxuIDI4NzpcdFx0XHQgKiBJZiB3ZSB3ZXJlIHRoZSBsYXN0IGNoaWxkIHRocmVhZCBhbmQgdGhlIGxlYWRlciBoYXNcbiAyODg6XHRcdFx0ICogZXhpdGVkIGFscmVhZHksIGFuZCB0aGUgbGVhZGVyJiMzOTtzIHBhcmVudCBpZ25vcmVzIFNJR0NITEQsXG4gMjg5Olx0XHRcdCAqIHRoZW4gd2UgYXJlIHRoZSBvbmUgd2hvIHNob3VsZCByZWxlYXNlIHRoZSBsZWFkZXIuXG4gMjkwOlx0XHRcdCAqL1xuIDI5MTpcdFx0XHR6YXBfbGVhZGVyID0gZG9fbm90aWZ5X3BhcmVudChsZWFkZXIsIGxlYWRlci1cdTAwM2VleGl0X3NpZ25hbCk7XG4gMjkyOlx0XHRcdGlmICh6YXBfbGVhZGVyKVxuIDI5MzpcdFx0XHRcdGxlYWRlci1cdTAwM2VleGl0X3N0YXRlID0gRVhJVF9ERUFEO1xuIDI5NDpcdFx0fVxuIDI5NTpcdFxuIDI5NjpcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiAyOTc6XHRcdHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpO1xuIDI5ODpcdFx0cHV0X3BpZCh0aHJlYWRfcGlkKTtcbiAyOTk6XHRcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xuIDMwMDpcdFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFx1MDAyNnAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcbiAzMDE6XHRcdFx0XHQgICAgICBzaXplb2YocC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XG4gMzAyOlx0XHRmcmVlX3BpZHMocG9zdC5waWRzKTtcbiAzMDM6XHRcdHJlbGVhc2VfdGhyZWFkKHApO1xuIDMwNDpcdFx0LypcbiAzMDU6XHRcdCAqIFRoaXMgdGFzayB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhlIHByb2Nlc3MvdGhyZWFkL3BpZCBsaXN0c1xuIDMwNjpcdFx0ICogYW5kIGxvY2tfdGFza19zaWdoYW5kKHApIGNhbiYjMzk7dCBzdWNjZWVkLiBOb2JvZHkgZWxzZSBjYW4gdG91Y2hcbiAzMDc6XHRcdCAqIC1cdTAwM2VwZW5kaW5nIG9yLCBpZiBncm91cCBkZWFkLCBzaWduYWwtXHUwMDNlc2hhcmVkX3BlbmRpbmcuIFdlIGNhbiBjYWxsXG4gMzA4Olx0XHQgKiBmbHVzaF9zaWdxdWV1ZSgpIGxvY2tsZXNzLlxuIDMwOTpcdFx0ICovXG4gMzEwOlx0XHRmbHVzaF9zaWdxdWV1ZShcdTAwMjZwLVx1MDAzZXBlbmRpbmcpO1xuIDMxMTpcdFx0aWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpXG4gMzEyOlx0XHRcdGZsdXNoX3NpZ3F1ZXVlKFx1MDAyNnAtXHUwMDNlc2lnbmFsLVx1MDAzZXNoYXJlZF9wZW5kaW5nKTtcbiAzMTM6XHRcbiAzMTQ6XHRcdHB1dF90YXNrX3N0cnVjdF9yY3VfdXNlcihwKTtcbiAzMTU6XHRcbiAzMTY6XHRcdHAgPSBsZWFkZXI7XG4gMzE3Olx0XHRpZiAodW5saWtlbHkoemFwX2xlYWRlcikpXG4gMzE4Olx0XHRcdGdvdG8gcmVwZWF0O1xuIDMxOTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTkwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNzQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIHBhdGNoIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGl0JiMzOTtzIGZpeGluZyBhIG5hc3R5IHJhY2UgY29uZGl0aW9uIOKAkyBhIHVzZS1hZnRlci1mcmVlIOKAkyB3aXRoaW4gdGhlIGByZWxlYXNlX3Rhc2soKWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiBga2VybmVsL2V4aXQuY2AuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gaG93IFBJRHMgYXJlIGhhbmRsZWQgZHVyaW5nIHRocmVhZCBleGl0IGFuZCB0aGUgdGltaW5nIG9mIGBwcm9jX2ZsdXNoX3BpZGAuICBFc3NlbnRpYWxseSwgdGhlIGNvZGUgd2FzIHZ1bG5lcmFibGUgYmVjYXVzZSBgX19leGl0X3NpZ25hbCgpYCBjYW4gZGV0YWNoIGEgUElELCBwb3RlbnRpYWxseSBmcmVlaW5nIHRoZSBgc3RydWN0IHBpZGAgYmVmb3JlIGBwcm9jX2ZsdXNoX3BpZCgpYCBnZXRzIGEgY2hhbmNlIHRvIHVzZSBpdC4gVGhlIGZpeCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZlcmVuY2UgY291bnQgbWFuYWdlbWVudCBzdHJhdGVneSB1c2luZyBgZ2V0X3BpZCgpYCBhbmQgYHB1dF9waWQoKWAgdG8gZW5zdXJlIHRoZSBQSUQgc3RydWN0dXJlIHJlbWFpbnMgdmFsaWQgZm9yIHRoZSBkdXJhdGlvbiBvZiBpdHMgdXNlIGluIGBwcm9jX2ZsdXNoX3BpZCgpYC4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIHdvcnRoIGZ1enppbmc/IExldCYjMzk7cyBhcHBseSB0aGUgc3RhbmRhcmQgY3JpdGVyaWEuIEl0JiMzOTtzIG5vdCBkb2N1bWVudGF0aW9uLCBhIGNvbmZpZyBmaWxlIGNoYW5nZSwgb3IgYSBsb2dnaW5nIGFkZGl0aW9uLiBJdCBkaXJlY3RseSBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gYHJlbGVhc2VfdGFzaygpYCwgd2hpY2ggaXMgYSBjcml0aWNhbCBmdW5jdGlvbiBleGVjdXRlZCBvbiBldmVyeSBwcm9jZXNzL3RocmVhZCBleGl0LiBHaXZlbiB0aGF0IGByZWxlYXNlX3Rhc2soKWAgaGFuZGxlcyBwcm9jZXNzIGV4aXQsIEkgbmVlZCB0byBlbnN1cmUgaXQmIzM5O3Mgbm90IGEgaG90LXBhdGggZnVuY3Rpb24gdGhhdCBtaWdodCBza2V3IGZ1enppbmcuIFRoZSBwYXRjaCB0b3VjaGVzIHRoZSByZWxlYXNlL2V4aXQgaGFuZGxpbmcsIHNvIEkmIzM5O20gdGhpbmtpbmcgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLCBhbmQgdGhlIHBvdGVudGlhbCBpbXBhY3QgaXMgc2lnbmlmaWNhbnQsIHRodXMgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTmV4dCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgaGVhdnkgZnV6emluZy4gVGhlIGNyaXRlcmlhIGRpY3RhdGUgSSBwdWxsIG91dCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIE15IGZpcnN0IHRob3VnaHQgaXMgd2hldGhlciB0byBpbmNsdWRlIGByZWxlYXNlX3Rhc2tgIGluIGBGb2N1c1N5bWJvbHNgLiBJcyB0aGlzIGEgaG90LXBhdGggZnVuY3Rpb24/IExldCYjMzk7cyBjb25zaWRlciBob3cgb2Z0ZW4gYHJlbGVhc2VfdGFza2AgZ2V0cyBjYWxsZWQgb24gcHJvY2VzcyBleGl0L3dhaXQuIEkgbmVlZCB0byByZXNlYXJjaCB0aGlzIGJlZm9yZSBtYWtpbmcgdGhlIGNhbGwuIFNpbmNlIHRoZSBwYXRjaCBtb2RpZmllcyBgcmVsZWFzZV90YXNrYCBkaXJlY3RseSwgaXMgaXQgdGhlIG9ubHkgZm9jdXM/IEkgbmVlZCB0byBhbmFseXplIGl0cyBjYWxsZXJzLCBhbmQgbWF5YmUgcmVsYXRlZCBmdW5jdGlvbnMgdG8gZW5zdXJlIG5vdGhpbmcgcmVsYXRlZCB0byB0aGUgYHN0cnVjdCBwaWRgIGlzc3VlIGhhcyBiZWVuIG1pc3NlZC4gSSYjMzk7bGwgdXNlIGBnaXQgZ3JlcGAgdG8gY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVsZWFzZV90YXNrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvZXhpdC5jPTEyMz1sYXRlX2luaXRjYWxsKGtlcm5lbF9leGl0X3N5c2ZzX2luaXQpO1xuLS1cbmtlcm5lbC9leGl0LmMtMTI2LS8qXG5rZXJuZWwvZXhpdC5jOjEyNzogKiBGb3IgdGhpbmdzIHJlbGVhc2VfdGFzaygpIHdvdWxkIGxpa2UgdG8gZG8gKmFmdGVyKiB0YXNrbGlzdF9sb2NrIGlzIHJlbGVhc2VkLlxua2VybmVsL2V4aXQuYy0xMjgtICovXG5rZXJuZWwvZXhpdC5jOjEyOTpzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3Qge1xua2VybmVsL2V4aXQuYy0xMzAtXHRzdHJ1Y3QgcGlkICpwaWRzW1BJRFRZUEVfTUFYXTtcbi0tXG5rZXJuZWwvZXhpdC5jLTEzMi1cbmtlcm5lbC9leGl0LmM6MTMzOnN0YXRpYyB2b2lkIF9fdW5oYXNoX3Byb2Nlc3Moc3RydWN0IHJlbGVhc2VfdGFza19wb3N0ICpwb3N0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsXG5rZXJuZWwvZXhpdC5jLTEzNC1cdFx0XHQgICAgIGJvb2wgZ3JvdXBfZGVhZClcbi0tXG5rZXJuZWwvZXhpdC5jLTE1Ny0gKi9cbmtlcm5lbC9leGl0LmM6MTU4OnN0YXRpYyB2b2lkIF9fZXhpdF9zaWduYWwoc3RydWN0IHJlbGVhc2VfdGFza19wb3N0ICpwb3N0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmtlcm5lbC9leGl0LmMtMTU5LXtcbi0tXG5rZXJuZWwvZXhpdC5jPTI0ND12b2lkIF9fd2VhayByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmRlYWRfdGFzaylcbi0tXG5rZXJuZWwvZXhpdC5jLTI0Ny1cbmtlcm5lbC9leGl0LmM6MjQ4OnZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbmtlcm5lbC9leGl0LmMtMjQ5LXtcbmtlcm5lbC9leGl0LmM6MjUwOlx0c3RydWN0IHJlbGVhc2VfdGFza19wb3N0IHBvc3Q7XG5rZXJuZWwvZXhpdC5jLTI1MS1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyO1xuLS1cbmtlcm5lbC9leGl0LmMtMjcwLVx0d3JpdGVfbG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG5rZXJuZWwvZXhpdC5jOjI3MTpcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XG5rZXJuZWwvZXhpdC5jLTI3Mi1cdF9fZXhpdF9zaWduYWwoXHUwMDI2cG9zdCwgcCk7XG4tLVxua2VybmVsL2V4aXQuYz02MzM9c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZmluZF9jaGlsZF9yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsXG4tLVxua2VybmVsL2V4aXQuYy02NTUtXHRcdGxpc3RfZGVsX2luaXQoXHUwMDI2cC1cdTAwM2VwdHJhY2VfZW50cnkpO1xua2VybmVsL2V4aXQuYzo2NTY6XHRcdHJlbGVhc2VfdGFzayhwKTtcbmtlcm5lbC9leGl0LmMtNjU3LVx0fVxuLS1cbmtlcm5lbC9leGl0LmM9NjcyPXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZpbmRfbmV3X3JlYXBlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZhdGhlcixcbi0tXG5rZXJuZWwvZXhpdC5jLTcwNy0vKlxua2VybmVsL2V4aXQuYzo3MDg6KiBBbnkgdGhhdCBuZWVkIHRvIGJlIHJlbGVhc2VfdGFzayYjMzk7ZCBhcmUgcHV0IG9uIHRoZSBAZGVhZCBsaXN0Llxua2VybmVsL2V4aXQuYy03MDktICovXG4tLVxua2VybmVsL2V4aXQuYz03NzM9c3RhdGljIHZvaWQgZXhpdF9ub3RpZnkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBncm91cF9kZWFkKVxuLS1cbmtlcm5lbC9leGl0LmMtODExLVx0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnAtXHUwMDNlcHRyYWNlX2VudHJ5KTtcbmtlcm5lbC9leGl0LmM6ODEyOlx0XHRyZWxlYXNlX3Rhc2socCk7XG5rZXJuZWwvZXhpdC5jLTgxMy1cdH1cbi0tXG5rZXJuZWwvZXhpdC5jPTEyMDk9c3RhdGljIGludCB3YWl0X3Rhc2tfem9tYmllKHN0cnVjdCB3YWl0X29wdHMgKndvLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL2V4aXQuYy0xMzE1LVx0aWYgKHN0YXRlID09IEVYSVRfREVBRClcbmtlcm5lbC9leGl0LmM6MTMxNjpcdFx0cmVsZWFzZV90YXNrKHApO1xua2VybmVsL2V4aXQuYy0xMzE3LVxuLS1cbmtlcm5lbC9mb3JrLmM9MTY5PWludCBucl9wcm9jZXNzZXModm9pZClcbi0tXG5rZXJuZWwvZm9yay5jLTE3OS1cbmtlcm5lbC9mb3JrLmM6MTgwOnZvaWQgX193ZWFrIGFyY2hfcmVsZWFzZV90YXNrX3N0cnVjdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmtlcm5lbC9mb3JrLmMtMTgxLXtcbi0tXG5rZXJuZWwvZm9yay5jPTUwMz12b2lkIGV4aXRfdGFza19zdGFja19hY2NvdW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxuLS1cbmtlcm5lbC9mb3JrLmMtNTE2LVxua2VybmVsL2ZvcmsuYzo1MTc6c3RhdGljIHZvaWQgcmVsZWFzZV90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxua2VybmVsL2ZvcmsuYy01MTgte1xuLS1cbmtlcm5lbC9mb3JrLmM9NTI2PXZvaWQgcHV0X3Rhc2tfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL2ZvcmsuYy01MjgtXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNnRzay1cdTAwM2VzdGFja19yZWZjb3VudCkpXG5rZXJuZWwvZm9yay5jOjUyOTpcdFx0cmVsZWFzZV90YXNrX3N0YWNrKHRzayk7XG5rZXJuZWwvZm9yay5jLTUzMC19XG4tLVxua2VybmVsL2ZvcmsuYz01MzM9dm9pZCBmcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL2ZvcmsuYy01NDYtXHQgKi9cbmtlcm5lbC9mb3JrLmM6NTQ3Olx0cmVsZWFzZV90YXNrX3N0YWNrKHRzayk7XG5rZXJuZWwvZm9yay5jLTU0OC0jZWxzZVxuLS1cbmtlcm5lbC9mb3JrLmMtNTU2LVx0ZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0c2spO1xua2VybmVsL2ZvcmsuYzo1NTc6XHRhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3QodHNrKTtcbmtlcm5lbC9mb3JrLmMtNTU4LVx0aWYgKHRzay1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRClcbi0tXG5rZXJuZWwvcHRyYWNlLmM9MjU3PXN0YXRpYyBpbnQgcHRyYWNlX2NoZWNrX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkLCBib29sIGlnbm9yZV9zdGF0ZSlcbi0tXG5rZXJuZWwvcHRyYWNlLmMtMjcwLVx0XHQvKlxua2VybmVsL3B0cmFjZS5jOjI3MTpcdFx0ICogY2hpbGQtXHUwMDNlc2lnaGFuZCBjYW4mIzM5O3QgYmUgTlVMTCwgcmVsZWFzZV90YXNrKClcbmtlcm5lbC9wdHJhY2UuYy0yNzItXHRcdCAqIGRvZXMgcHRyYWNlX3VubGluaygpIGJlZm9yZSBfX2V4aXRfc2lnbmFsKCkuXG4tLVxua2VybmVsL3B0cmFjZS5jPTUzOD1zdGF0aWMgaW50IGlnbm9yaW5nX2NoaWxkcmVuKHN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnaClcbi0tXG5rZXJuZWwvcHRyYWNlLmMtNTUwLSAqIFVubGluayBhIHRyYWNlZCB0YXNrLCBhbmQgY2xlYW4gaXQgdXAgaWYgaXQgd2FzIGEgdHJhY2VkIHpvbWJpZS5cbmtlcm5lbC9wdHJhY2UuYzo1NTE6ICogUmV0dXJuIHRydWUgaWYgaXQgbmVlZHMgdG8gYmUgcmVhcGVkIHdpdGggcmVsZWFzZV90YXNrKCkuXG5rZXJuZWwvcHRyYWNlLmM6NTUyOiAqIChXZSBjYW4mIzM5O3QgY2FsbCByZWxlYXNlX3Rhc2soKSBoZXJlIGJlY2F1c2Ugd2UgYWxyZWFkeSBob2xkIHRhc2tsaXN0X2xvY2suKVxua2VybmVsL3B0cmFjZS5jLTU1My0gKlxuLS1cbmtlcm5lbC9zaWduYWwuYz0yMTY4PWJvb2wgZG9fbm90aWZ5X3BhcmVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IHNpZylcbi0tXG5rZXJuZWwvc2lnbmFsLmMtMjIwMy1cdCAqIHRhc2tfYWN0aXZlX3BpZF9ucyB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgcGlkIG5hbWVzcGFjZVxua2VybmVsL3NpZ25hbC5jOjIyMDQ6XHQgKiB1bnRpbCBhIHRhc2sgcGFzc2VzIHRocm91Z2ggcmVsZWFzZV90YXNrLlxua2VybmVsL3NpZ25hbC5jLTIyMDUtXHQgKlxuLS1cbmtlcm5lbC9zeXMuYz0xMDA1PVNZU0NBTExfREVGSU5FMChnZXR0aWQpXG4tLVxua2VybmVsL3N5cy5jLTEwMTMtICogdmFsdWUgb2YgLVx1MDAzZXJlYWxfcGFyZW50IHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgc2VlXG5rZXJuZWwvc3lzLmM6MTAxNDogKiByZWxlYXNlX3Rhc2soKS1cdTAwM2VjYWxsX3JjdShkZWxheWVkX3B1dF90YXNrX3N0cnVjdCkuXG5rZXJuZWwvc3lzLmMtMTAxNS0gKi9cbi0tXG5rZXJuZWwvdGltZS9wb3NpeC1jcHUtdGltZXJzLmM9NDUxPXN0YXRpYyB2b2lkIGRpc2FybV90aW1lcihzdHJ1Y3Qga19pdGltZXIgKnRpbWVyLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jLTUwMC0gKlx0XHRcdFx0XHRzd2l0Y2hfbGVhZGVyKClcbmtlcm5lbC90aW1lL3Bvc2l4LWNwdS10aW1lcnMuYzo1MDE6ICpcdFx0XHRcdFx0cmVsZWFzZV90YXNrKG9sZCBsZWFkZXIpXG5rZXJuZWwvdGltZS9wb3NpeC1jcHUtdGltZXJzLmMtNTAyLSAqXHRcdFx0XHRcdCAgX19leGl0X3NpZ25hbCgpXG4tLVxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jPTE0NjQ9dm9pZCBydW5fcG9zaXhfY3B1X3RpbWVycyh2b2lkKVxuLS1cbmtlcm5lbC90aW1lL3Bvc2l4LWNwdS10aW1lcnMuYy0xNDcwLVx0Lypcbmtlcm5lbC90aW1lL3Bvc2l4LWNwdS10aW1lcnMuYzoxNDcxOlx0ICogRW5zdXJlIHRoYXQgcmVsZWFzZV90YXNrKHRzaykgY2FuJiMzOTt0IGhhcHBlbiB3aGlsZVxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jLTE0NzItXHQgKiBoYW5kbGVfcG9zaXhfY3B1X3RpbWVycygpIGlzIHJ1bm5pbmcuIE90aGVyd2lzZSwgYSBjb25jdXJyZW50XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzA4OAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGByZWxlYXNlX3Rhc2tgIEZ1bmN0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbi4gSXQgc2VlbXMgaXQmIzM5O3MgdGhlIGtleSB0byBjbGVhbmluZyB1cCBhZnRlciBhIHRhc2sgaGFzIGV4aXRlZCBvciBiZWVuIHJlYXBlZCDigJMgdHJpZ2dlcmVkIGJ5IHRoaW5ncyBsaWtlIGBleGl0X25vdGlmeWAsIGB3YWl0X3Rhc2tfem9tYmllYCwgb3IgYGZpbmRfY2hpbGRfcmVhcGVyYC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogaXMgdGhpcyBhIHB1YmxpYy1mYWNpbmcgZW50cnlwb2ludCwgYSBub24tc3RhdGljIGZ1bmN0aW9uIHdlIGNhbiBjYWxsIGZyb20gZWxzZXdoZXJlLCBvciBpcyBpdCBoaWRkZW4gYXdheT8gUmlnaHQsIGxvb2tzIGxpa2UgYHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClgIGluIGBrZXJuZWwvZXhpdC5jYCBpcyBub24tc3RhdGljLiBHb29kLiBUaGF0IGNsYXJpZmllcyB0aGF0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBXaGF0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9yIGF2YWlsYWJpbGl0eSBvZiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgY29kZSBhcm91bmQgaXQ/IEkgc2hvdWxkIGNoZWNrIGlmIGBrZXJuZWwvZXhpdC5jYCBvciBwYXJ0cyBvZiBpdCBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBhbnkgQ09ORklHIG9wdGlvbnMuIFRpbWUgdG8gbG9vayBhdCBga2VybmVsL01ha2VmaWxlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIHByb3ZpZGUgdmFsdWFibGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleGl0XFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL01ha2VmaWxlPTY9b2JqLXkgICAgID0gZm9yay5vIGV4ZWNfZG9tYWluLm8gZXhlY19zdGF0ZS5vIHBhbmljLm8gXFxcbmtlcm5lbC9NYWtlZmlsZTo3Olx0ICAgIGNwdS5vIGV4aXQubyBzb2Z0aXJxLm8gcmVzb3VyY2UubyBcXFxua2VybmVsL01ha2VmaWxlLTgtXHQgICAgc3lzY3RsLm8gY2FwYWJpbGl0eS5vIHB0cmFjZS5vIHVzZXIubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NjIKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgYGV4aXQub2AgTW9kdWxlIGFuZCBgcmVsZWFzZV90YXNrYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBgZXhpdC5vYCBpcyBjb25zaXN0ZW50bHkgaW5jbHVkZWQgaW4gYG9iai15YCwgdGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlIGNvZGUgc3Vycm91bmRpbmcgYHJlbGVhc2VfdGFza2AsIG9yIHRoZSBtb2RpZmllZCBwYXJ0cyBvZiBpdCwgYXJlIGd1YXJkZWQgYnkgYW55IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGxpa2UgYCNpZmRlZmAuIEkgbmVlZCB0byBydWxlIG91dCBjb25kaXRpb25hbCBjb21waWxhdGlvbi4KClRvIHRoYXQgZW5kLCBsZXQgbWUgY2hlY2sgbGluZXMgMjQwIHRocm91Z2ggMzMwIG9mIGBrZXJuZWwvZXhpdC5jYC4gUmlnaHQsIGhlcmUmIzM5O3MgYHJlbGVhc2VfdGFza2AuIE9rYXksIGdvb2QsIG5vIGAjaWZkZWZgcy4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBhIGJpdC4gVGhpcyBtZWFucyB0aGlzIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW91ciBzaG91bGQgYmUgY29uc2lzdGVudCB1bmxlc3Mgc29tZXRoaW5nIHVwc3RyZWFtLCBvciBkb3duc3RyZWFtIGNhbGxzIGl0IGluIGRpZmZlcmVudCBwbGFjZXMuCgpOb3csIGluc2lkZSBgcmVsZWFzZV90YXNrYCwgSSBzZWUgY2FsbHMgdG8gYHByb2NfZmx1c2hfcGlkYCwgYGdldF9waWRgLCBhbmQgYHB1dF9waWRgLiBUaGVzZSBhcmUgYWxsIHByZXR0eSBmdW5kYW1lbnRhbCBrZXJuZWwgZnVuY3Rpb25zLCBubyBzdXJwcmlzZXMgdGhlcmUuIFNpbmNlIGBwcm9jX2ZsdXNoX3BpZGAgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIHNvbWUgd2VpcmRuZXNzLCBJJiMzOTtsbCBjaGVjayBpdHMgY29uZmlnIGRlcGVuZGVuY2llcywganVzdCB0byBiZSBzdXJlLiBJJiMzOTttIGFmdGVyIGFueXRoaW5nIHRoYXQgbWlnaHQgaW50cm9kdWNlIHBsYXRmb3JtLXNwZWNpZmljIG9yIGJ1aWxkLXRpbWUgdmFyaWF0aW9ucyBpbiBpdHMgYmVoYXZpb3VyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTE5NzY9c3RhdGljIHN0cnVjdCBpbm9kZSAqcHJvY19waWRfbWFrZV9iYXNlX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvcHJvYy9iYXNlLmMtMTk4Ni1cbmZzL3Byb2MvYmFzZS5jOjE5ODc6XHQvKiBMZXQgcHJvY19mbHVzaF9waWQgZmluZCB0aGlzIGRpcmVjdG9yeSBpbm9kZSAqL1xuZnMvcHJvYy9iYXNlLmMtMTk4OC1cdGVpID0gUFJPQ19JKGlub2RlKTtcbi0tXG5mcy9wcm9jL2Jhc2UuYz0zNDIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX3RnaWRfYmFzZV9pbm9kZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTM0MzAtLyoqXG5mcy9wcm9jL2Jhc2UuYzozNDMxOiAqIHByb2NfZmx1c2hfcGlkIC0gIFJlbW92ZSBkY2FjaGUgZW50cmllcyBmb3IgQHBpZCBmcm9tIHRoZSAvcHJvYyBkY2FjaGUuXG5mcy9wcm9jL2Jhc2UuYy0zNDMyLSAqIEBwaWQ6IHBpZCB0aGF0IHNob3VsZCBiZSBmbHVzaGVkLlxuLS1cbmZzL3Byb2MvYmFzZS5jLTM0NDgtXG5mcy9wcm9jL2Jhc2UuYzozNDQ5OnZvaWQgcHJvY19mbHVzaF9waWQoc3RydWN0IHBpZCAqcGlkKVxuZnMvcHJvYy9iYXNlLmMtMzQ1MC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyBgcHJvY19mbHVzaF9waWRgIGFuZCBpdHMgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCBgcHJvY19mbHVzaF9waWRgLiBGaXJzdCwgSSB3YW50IHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBqdXN0IGEgc3R1YiBmdW5jdGlvbuKAlG1lYW5pbmcsIGRvZXMgaXQgZXhpc3QgcHJpbWFyaWx5IGZvciBpbnRlcmZhY2UgY29tcGF0aWJpbGl0eSBvciBpcyBpdCBkb2luZyBhY3R1YWwgd29yaz8gSWYgaXTigJlzIG5vdCBqdXN0IGEgcGxhY2Vob2xkZXIsIHRoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgcmVsaWVzIG9uIHRoZSBwcmVzZW5jZSBvZiBgUFJPQ19GU2AuIFRoZSBmaWxlIHN5c3RlbSBpbnRlcmFjdGlvbiBhc3BlY3QgaXMgY3J1Y2lhbC4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIHRvIGBQUk9DX0ZTYCB3aWxsIHRlbGwgbWUgaWYgdGhpcyBmdW5jdGlvbiBpcyB0aWdodGx5IGNvdXBsZWQgd2l0aCBhIHBhcnRpY3VsYXIga2VybmVsIGNvbmZpZ3VyYXRpb24gb3IgaWYgaXQmIzM5O3MgbW9yZSBtb2R1bGFyIGFuZCBwb3RlbnRpYWxseSBhZGFwdGFibGUuIEl0JiMzOTtzIGEgcXVpY2sgYW5hbHlzaXMsIGJ1dCBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvciB1c2FnZSBpbiBhIGRpZmZlcmVudCBjb250ZXh0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfZmx1c2hfcGlkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9wcm9jX2ZzLmg9ODU9ZXh0ZXJuIHZvaWQgcHJvY19yb290X2luaXQodm9pZCk7XG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaDo4NjpleHRlcm4gdm9pZCBwcm9jX2ZsdXNoX3BpZChzdHJ1Y3QgcGlkICopO1xuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgtODctXG4tLVxuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmg9MTcyPXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX3Jvb3RfaW5pdCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvcHJvY19mcy5oLTE3NS1cbmluY2x1ZGUvbGludXgvcHJvY19mcy5oOjE3NjpzdGF0aWMgaW5saW5lIHZvaWQgcHJvY19mbHVzaF9waWQoc3RydWN0IHBpZCAqcGlkKVxuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmgtMTc3LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYyNwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgYHByb2NfZmx1c2hfcGlkYCBhbmQgaXRzIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHByb2NfZmx1c2hfcGlkYCBhbmQgaW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZywgJiMzNDtSaWdodCwgdGhhdCYjMzk7cyBwYXJ0IG9mIHRoZSBgUFJPQ19GU2AgY29uZmlndXJhdGlvbiwgaXNuJiMzOTt0IGl0PyYjMzQ7IEl0JiMzOTtzIGJlZW4gYSB3aGlsZSBzaW5jZSBJJiMzOTt2ZSBkaXZlZCBpbnRvIHRoaXMgcGFydGljdWxhciBhcmVhLCBzbyB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBDT05GSUdfUFJPQ19GU2AuIFRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhhdCBpcyB0aGUgaW5jbHVkZSBmaWxlLiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIGBpbmNsdWRlL2xpbnV4L3Byb2NfZnMuaGAgYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX1BST0NfRlNgIHJlYWxseSBpcyB0aGUga2V5LiBPbmNlIEkmIzM5O3ZlIHZlcmlmaWVkIGl0cyByb2xlLCB0aGVuIEkgd2lsbCBrbm93IG1vcmUgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBvZiBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcyBpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcHJvY19mcy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNjU6XHQjZW5kaWYgLyogQ09ORklHX1BST0NfUElEX0FSQ0hfU1RBVFVTICovXG4gMTY2Olx0XG4gMTY3Olx0dm9pZCBhcmNoX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSk7XG4gMTY4Olx0dm9pZCBhcmNoX3Byb2NfcGlkX3RocmVhZF9mZWF0dXJlcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7XG4gMTY5Olx0XG4gMTcwOlx0I2Vsc2UgLyogQ09ORklHX1BST0NfRlMgKi9cbiAxNzE6XHRcbiAxNzI6XHRzdGF0aWMgaW5saW5lIHZvaWQgcHJvY19yb290X2luaXQodm9pZClcbiAxNzM6XHR7XG4gMTc0Olx0fVxuIDE3NTpcdFxuIDE3NjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX2ZsdXNoX3BpZChzdHJ1Y3QgcGlkICpwaWQpXG4gMTc3Olx0e1xuIDE3ODpcdH1cbiAxNzk6XHRcbiAxODA6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19zeW1saW5rKGNvbnN0IGNoYXIgKm5hbWUsXG4gMTgxOlx0XHRcdHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50LGNvbnN0IGNoYXIgKmRlc3QpIHsgcmV0dXJuIE5VTEw7fVxuIDE4MjpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX21rZGlyKGNvbnN0IGNoYXIgKm5hbWUsXG4gMTgzOlx0XHRzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCkge3JldHVybiBOVUxMO31cbiAxODQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19jcmVhdGVfbW91bnRfcG9pbnQoY29uc3QgY2hhciAqbmFtZSkgeyByZXR1cm4gTlVMTDsgfVxuIDE4NTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpfcHJvY19ta2Rpcihjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUsXG4gMTg2Olx0XHRcdHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50LCB2b2lkICpkYXRhLCBib29sIGZvcmNlX2xvb2t1cClcbiAxODc6XHR7XG4gMTg4Olx0XHRyZXR1cm4gTlVMTDtcbiAxODk6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkzMTAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBgQ09ORklHX1BST0NfRlNgIGFuZCBgcHJvY19mbHVzaF9waWQoKWAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHByb2NfZmx1c2hfcGlkKClgIGZ1bmN0aW9uIGFuZCBpdHMgY29ubmVjdGlvbiB0byBgdGhyZWFkX3BpZGAuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGl0IHJlbGllcyBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIHByb2MgZmlsZXN5c3RlbS4gSXQmIzM5O3MgZ290IHRvIGJlIHN0YW5kYXJkIGFuZCBuZWNlc3NhcnkgdG8gZmx1c2ggdGhvc2UgZGNhY2hlIGVudHJpZXMgcmVsYXRlZCB0byBwcm9jZXNzZXMsIHJpZ2h0PyBUaGlzIGlzIGZ1bmRhbWVudGFsLCBlc3NlbnRpYWwgc3R1ZmYuIEFuZCB0aGUgY29kZSBhY2Nlc3NlcyB0aGF0IGB0aHJlYWRfcGlkYCB2YXJpYWJsZS4gU28sIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHdpdGhvdXQgdGhlIHByb2MgZmlsZXN5c3RlbSBlbmFibGVkLCB0aGlzIGZ1bmN0aW9uIGNhbiYjMzk7dCBiZSBzYWZlbHkgZXhlY3V0ZWQuIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhlIGBmcy9wcm9jL0tjb25maWdgIGZpbGUgdG8gY29uZmlybSB0aGF0IHRoZSBgUFJPQ19GU2AgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgdGhlIGtleSB0byBhbGwgdGhpcywgYW5kIHRoYXQgZW5hYmxpbmcgaXQgZGlyZWN0bHkgdGllcyBpbnRvIHdoZXRoZXIgb3Igbm90IHdlIGNhbiBydW4gdGhpcyBmdW5jdGlvbiBhbmQgY29ycmVjdGx5IGZsdXNoIHRob3NlIFBJRCByZWxhdGVkIGNhY2hlIGVudHJpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgYW5kIG1ha2Ugc3VyZSBteSB1bmRlcnN0YW5kaW5nIGlzIGFpcnRpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFJPQ19GUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuZnMvcHJvYy9LY29uZmlnOjI6Y29uZmlnIFBST0NfRlNcbmZzL3Byb2MvS2NvbmZpZy0zLVx0Ym9vbCBcJiMzNDsvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njc3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgd2l0aCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHF1aWNrIHNjYW4gb2YgYGZzL3Byb2MvS2NvbmZpZ2AuIExldCYjMzk7cyBqdXN0IGdyYWIgdGhlIGZpcnN0IHR3ZW50eSBsaW5lcywgdG8gc3RhcnQuIEkgd2FudCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcg4oCTIHNlZSBpZiBJIGNhbiBnZXQgYSBzZW5zZSBmb3Igd2hhdCYjMzk7cyBiZWluZyBkZWZpbmVkIG9yIGVuYWJsZWQgaW4gdGhlIGBwcm9jYCBmaWxlc3lzdGVtIGNvbnRleHQuIFRoaXMgdXN1YWxseSBnaXZlcyBtZSBhIGdvb2QgZW50cnkgcG9pbnQgd2hlbiBJIGFtIHRyeWluZyB0byBjaGFuZ2UgcmVsYXRlZCBjb25maWd1cmF0aW9uLCBvciB1bmRlcnN0YW5kIGludGVyYWN0aW9ucy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgaW5pdGlhbCBsaW5lcyBmcmFtZSB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgcHJvY2ZzIGNvbmZpZ3VyYXRpb24sIHlvdSBrbm93LCB1bmRlcnN0YW5kIGl0cyBhcmNoaXRlY3R1cmFsIGRlc2lnbi4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgYXJlIGNvbnRhaW5lZCBpbiB0aGlzIGluaXRpYWwgc2VnbWVudCBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBQUk9DX0ZTXG4gICAzOlx0XHRib29sIFwmIzM0Oy9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4gICA0Olx0XHRkZWZhdWx0IHlcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgVGhpcyBpcyBhIHZpcnR1YWwgZmlsZSBzeXN0ZW0gcHJvdmlkaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0dXNcbiAgIDc6XHRcdCAgb2YgdGhlIHN5c3RlbS4gXCYjMzQ7VmlydHVhbFwmIzM0OyBtZWFucyB0aGF0IGl0IGRvZXNuJiMzOTt0IHRha2UgdXAgYW55IHNwYWNlIG9uXG4gICA4Olx0XHQgIHlvdXIgaGFyZCBkaXNrOiB0aGUgZmlsZXMgYXJlIGNyZWF0ZWQgb24gdGhlIGZseSBieSB0aGUga2VybmVsIHdoZW5cbiAgIDk6XHRcdCAgeW91IHRyeSB0byBhY2Nlc3MgdGhlbS4gQWxzbywgeW91IGNhbm5vdCByZWFkIHRoZSBmaWxlcyB3aXRoIG9sZGVyXG4gIDEwOlx0XHQgIHZlcnNpb24gb2YgdGhlIHByb2dyYW0gbGVzczogeW91IG5lZWQgdG8gdXNlIG1vcmUgb3IgY2F0LlxuICAxMTpcdFxuICAxMjpcdFx0ICBJdCYjMzk7cyB0b3RhbGx5IGNvb2w7IGZvciBleGFtcGxlLCBcJiMzNDtjYXQgL3Byb2MvaW50ZXJydXB0c1wmIzM0OyBnaXZlc1xuICAxMzpcdFx0ICBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoZSBkaWZmZXJlbnQgSVJRcyBhcmUgdXNlZCBmb3IgYXQgdGhlIG1vbWVudFxuICAxNDpcdFx0ICAodGhlcmUgaXMgYSBzbWFsbCBudW1iZXIgb2YgSW50ZXJydXB0IFJlUXVlc3QgbGluZXMgaW4geW91ciBjb21wdXRlclxuICAxNTpcdFx0ICB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBhdHRhY2hlZCBkZXZpY2VzIHRvIGdhaW4gdGhlIENQVSYjMzk7cyBhdHRlbnRpb24gLS1cbiAgMTY6XHRcdCAgb2Z0ZW4gYSBzb3VyY2Ugb2YgdHJvdWJsZSBpZiB0d28gZGV2aWNlcyBhcmUgbWlzdGFrZW5seSBjb25maWd1cmVkXG4gIDE3Olx0XHQgIHRvIHVzZSB0aGUgc2FtZSBJUlEpLiBUaGUgcHJvZ3JhbSBwcm9jaW5mbyB0byBkaXNwbGF5IHNvbWVcbiAgMTg6XHRcdCAgaW5mb3JtYXRpb24gYWJvdXQgeW91ciBzeXN0ZW0gZ2F0aGVyZWQgZnJvbSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0uXG4gIDE5Olx0XG4gIDIwOlx0XHQgIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0sIGl0IGhhcyB0byBiZSBtb3VudGVkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBgcHJvY19mbHVzaF9waWRgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBwcm9jX2ZsdXNoX3BpZGAgaXMgaW1wbGVtZW50ZWQuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGZzL3Byb2MvYmFzZS5jYCBmaWxlLiBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yOiBob3cgZXhhY3RseSBkb2VzIHRoZSBrZXJuZWwgaGFuZGxlIHRoZSBjbGVhcmluZyBvZiBwcm9jZXNzLXNwZWNpZmljIGluZm9ybWF0aW9uIHdpdGhpbiB0aGUgYC9wcm9jYCBmaWxlc3lzdGVtPyBXaGF0IGFyZSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBiZWluZyBtYW5pcHVsYXRlZCBoZXJlPyBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIGludGVyYWN0aW9ucyB3aXRoIHRhc2sgc3RydWN0dXJlcywgZmlsZSBkZXNjcmlwdG9ycywgYW5kIHBvdGVudGlhbGx5IHNvbWUga2luZCBvZiByZWZlcmVuY2UgY291bnRpbmcgb3IgbG9ja2luZyBtZWNoYW5pc20gdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5LiBMZXQmIzM5O3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBpcyBjb3JyZWN0Li4uIG9yIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucyBvciBkZXNpZ24gY2hvaWNlcyB0aGF0IEkgaGFkbiYjMzk7dCBjb25zaWRlcmVkLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM0NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzQ0NTpcdCAqICAgICAgIHRoYXQgbm8gZGNhY2hlIGVudHJpZXMgd2lsbCBleGlzdCBhZnRlciBhIHByb2Nlc3MgaXMgcmVhcGVkXG4zNDQ2Olx0ICogICAgICAgaXQganVzdCBtYWtlcyBpdCB2ZXJ5IHVubGlrZWx5IHRoYXQgYW55IHdpbGwgcGVyc2lzdC5cbjM0NDc6XHQgKi9cbjM0NDg6XHRcbjM0NDk6XHR2b2lkIHByb2NfZmx1c2hfcGlkKHN0cnVjdCBwaWQgKnBpZClcbjM0NTA6XHR7XG4zNDUxOlx0XHRwcm9jX2ludmFsaWRhdGVfc2libGluZ3NfZGNhY2hlKFx1MDAyNnBpZC1cdTAwM2Vpbm9kZXMsIFx1MDAyNnBpZC1cdTAwM2Vsb2NrKTtcbjM0NTI6XHR9XG4zNDUzOlx0XG4zNDU0Olx0c3RhdGljIHN0cnVjdCBkZW50cnkgKnByb2NfcGlkX2luc3RhbnRpYXRlKHN0cnVjdCBkZW50cnkgKiBkZW50cnksXG4zNDU1Olx0XHRcdFx0XHQgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNvbnN0IHZvaWQgKnB0cilcbjM0NTY6XHR7XG4zNDU3Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuMzQ1ODpcdFxuMzQ1OTpcdFx0aW5vZGUgPSBwcm9jX3BpZF9tYWtlX2Jhc2VfaW5vZGUoZGVudHJ5LVx1MDAzZWRfc2IsIHRhc2ssXG4zNDYwOlx0XHRcdFx0XHRcdCBTX0lGRElSIHwgU19JUlVHTyB8IFNfSVhVR08pO1xuMzQ2MTpcdFx0aWYgKCFpbm9kZSlcbjM0NjI6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4zNDYzOlx0XG4zNDY0Olx0XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2cHJvY190Z2lkX2Jhc2VfaW5vZGVfb3BlcmF0aW9ucztcbjM0NjU6XHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2cHJvY190Z2lkX2Jhc2Vfb3BlcmF0aW9ucztcbjM0NjY6XHRcdGlub2RlLVx1MDAzZWlfZmxhZ3N8PVNfSU1NVVRBQkxFO1xuMzQ2NzpcdFxuMzQ2ODpcdFx0c2V0X25saW5rKGlub2RlLCBubGlua190Z2lkKTtcbjM0Njk6XHRcdHBpZF91cGRhdGVfaW5vZGUodGFzaywgaW5vZGUpO1xuMzQ3MDpcdFxuMzQ3MTpcdFx0cmV0dXJuIGRfc3BsaWNlX2FsaWFzX29wcyhpbm9kZSwgZGVudHJ5LCBcdTAwMjZwaWRfZGVudHJ5X29wZXJhdGlvbnMpO1xuMzQ3MjpcdH1cbjM0NzM6XHRcbjM0NzQ6XHRzdHJ1Y3QgZGVudHJ5ICpwcm9jX3BpZF9sb29rdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4zNDc1Olx0e1xuMzQ3NjpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuMzQ3NzpcdFx0dW5zaWduZWQgdGdpZDtcbjM0Nzg6XHRcdHN0cnVjdCBwcm9jX2ZzX2luZm8gKmZzX2luZm87XG4zNDc5Olx0XHRzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnM7XG4zNDgwOlx0XHRzdHJ1Y3QgZGVudHJ5ICpyZXN1bHQgPSBFUlJfUFRSKC1FTk9FTlQpO1xuMzQ4MTpcdFxuMzQ4MjpcdFx0dGdpZCA9IG5hbWVfdG9faW50KFx1MDAyNmRlbnRyeS1cdTAwM2VkX25hbWUpO1xuMzQ4MzpcdFx0aWYgKHRnaWQgPT0gfjBVKVxuMzQ4NDpcdFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMTQKCQkJCQkJCW91dHB1dDogMTMxCgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiBQcm9jZXNzIFRlcm1pbmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgYHByb2NfZmx1c2hfcGlkYCBpbnRlcmFjdHMgd2l0aCBwcm9jZXNzIGlkZW50aWZpZXJzIChgcGlkYCkuIEl0IGFjY2Vzc2VzIGBwaWQtJmd0O2lub2Rlc2AgYW5kIGBwaWQtJmd0O2xvY2tgLiBJbiB0aGUgYHJlbGVhc2VfdGFza2AgZnVuY3Rpb24sIEkgc2VlIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2U6IGEgYHRocmVhZF9waWRgIGlzIHJldHJpZXZlZCB1c2luZyBgZ2V0X3BpZGAsIHRoZW4gcGFzc2VkIHRvIGBwcm9jX2ZsdXNoX3BpZGAsIGFuZCBmaW5hbGx5IHJlbGVhc2VkIHVzaW5nIGBwdXRfcGlkYC4KCk15IGltbWVkaWF0ZSByZWFjdGlvbiBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHN5bWJvbHM6IGByZWxlYXNlX3Rhc2tgIGFuZCBgcHJvY19mbHVzaF9waWRgLiBMZXQmIzM5O3MgY2hlY2sgdGhlIHJlbGV2YW50IEVuYWJsZUNvbmZpZ3M6IHNlZW1zIGxpa2UgYFBST0NfRlNgIGlzIGludm9sdmVkIGhlcmUuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBmdXp6aW5nIHJlYWRpbmVzcy4gWWVwLCB0aGlzIGxvb2tzIHByb21pc2luZy4gYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUsIGFuZCB0aGUgYEZvY3VzU3ltYm9sc2AgYXJlIHNwb3Qtb246IGByZWxlYXNlX3Rhc2tgIGFuZCBgcHJvY19mbHVzaF9waWRgLiBUaGUgZW5hYmxpbmcgY29uZGl0aW9uLCBgUFJPQ19GU2AsIGFsc28gY2hlY2tzIG91dC4KCkhlcmUmIzM5O3MgdGhlIHJlYXNvbmluZzogdGhlIHBhdGNoIGlzIGFib3V0IGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHZ1bG5lcmFiaWxpdHkuICBTcGVjaWZpY2FsbHksIHRoZXJlJiMzOTtzIGEgcmlzayB0aGF0IGB0aHJlYWRfcGlkYCBjb3VsZCBiZSBmcmVlZCBieSBgX191bmhhc2hfcHJvY2VzcygpYCBkdXJpbmcgcHJvY2VzcyB0ZXJtaW5hdGlvbiBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGdldHMgYSBjaGFuY2UgdG8gdXNlIGl0LiBUaGlzIGBnZXRfcGlkKClgL2BwdXRfcGlkKClgIHBhaXIgaW4gYHJlbGVhc2VfdGFza2Agc2VlbXMgdG8gYmUgdGhlIGZpeC4gVGFraW5nIGEgcmVmZXJlbmNlIHdpdGggYGdldF9waWQoKWAgYmVmb3JlIGBfX2V4aXRfc2lnbmFsKClgIGFuZCBkcm9wcGluZyBpdCBhZnRlciBgcHJvY19mbHVzaF9waWQoKWAgZW5zdXJlcyB0aGF0IGB0aHJlYWRfcGlkYCBpcyB2YWxpZCB3aGlsZSBpdCYjMzk7cyBiZWluZyBhY2Nlc3NlZC4gVGhpcyBsb29rcyBsaWtlIGNvcmUgcHJvY2VzcyBleGl0IGxvZ2ljIGFuZCB0b3VjaGVzIHByb2NmcyBjbGVhbnVwLCBzbyB0aGUgZml4IG1ha2VzIHNlbnNlLgoKTm93LCBsZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3JlbGVhc2VfdGFzayYjMzQ7LAogICAgJiMzNDtwcm9jX2ZsdXNoX3BpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNvbHZlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSByYWNlIGluIHJlbGVhc2VfdGFzaygpIHdoZXJlIHRocmVhZF9waWQgY291bGQgYmUgZnJlZWQgZHVyaW5nIFBJRFRZUEUgZGV0YWNobWVudCBpbiBfX3VuaGFzaF9wcm9jZXNzKCkgYmVmb3JlIHByb2NfZmx1c2hfcGlkKCkgYWNjZXNzZWQgaXQuIEl0IHBpbnMgdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBhbmQgcmVsZWFzZXMgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKSwgYWZmZWN0aW5nIGNvcmUgdGFzayB0ZXJtaW5hdGlvbiBhbmQgcHJvY2ZzIGRjYWNoZSBpbnZhbGlkYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZWxlYXNlX3Rhc2smIzM0OywKICAgICYjMzQ7cHJvY19mbHVzaF9waWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBpbiByZWxlYXNlX3Rhc2soKSB3aGVyZSB0aHJlYWRfcGlkIGNvdWxkIGJlIGZyZWVkIGR1cmluZyBQSURUWVBFIGRldGFjaG1lbnQgaW4gX191bmhhc2hfcHJvY2VzcygpIGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpIGFjY2Vzc2VkIGl0LiBJdCBwaW5zIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYW5kIHJlbGVhc2VzIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCksIGFmZmVjdGluZyBjb3JlIHRhc2sgdGVybWluYXRpb24gYW5kIHByb2NmcyBkY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSAvIHVzZS1hZnRlci1mcmVlIGlzc3VlIGluIGByZWxlYXNlX3Rhc2soKWAgd2hlcmUgYHRocmVhZF9waWRgIGNvdWxkIGJlIGZyZWVkIHByaW9yIHRvIGBwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKWAgd2hlbiB0aGUgbGFzdCBQSURUWVBFIGlzIGRldGFjaGVkIGR1cmluZyBwcm9jZXNzIHVuaGFzaGluZy4gSXQgZml4ZXMgdGhpcyBieSBwaW5uaW5nIGB0aHJlYWRfcGlkYCB1c2luZyBgZ2V0X3BpZCgpYCBhbmQgc3Vic2VxdWVudGx5IHJlbGVhc2luZyBpdCB3aXRoIGBwdXRfcGlkKClgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IChwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUpLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFuZCBtZW1vcnkgbGlmZXRpbWUgaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGRvZXMgbm90IGFsdGVyIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgKGluZm9sZWFrcyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDczMGZmMGQ1MTgyNGViODEzMjc5YTEyNTRlYWQ0NTk4YzY1NjkyZTYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAwMTowMzoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDk3Njg2YWY4OTUwMTMuLjRlMDI4ZjE1NzU5NzggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2V4aXQuYwpAQCAtMjYxLDggJiM0MzsyNjEsMTEgQEAgdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCXBpZGZzX2V4aXQocCk7CiAJY2dyb3VwX3Rhc2tfcmVsZWFzZShwKTsKIAotCS8qIFJldHJpZXZlIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgbWF5IHNldCBpdCB0byBOVUxMLiAqLwotCXRocmVhZF9waWQgPSB0YXNrX3BpZChwKTsKJiM0MzsJLyoKJiM0MzsJICogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgY2xlYXJzIGl0LiBUaGUgbGFzdAomIzQzOwkgKiBQSURUWVBFIGRldGFjaCBjYW4gb3RoZXJ3aXNlIGZyZWUgaXQgYmVmb3JlIHByb2NfZmx1c2hfcGlkKCkuCiYjNDM7CSAqLwomIzQzOwl0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7CiAKIAl3cml0ZV9sb2NrX2lycSgmYW1wO3Rhc2tsaXN0X2xvY2spOwogCXB0cmFjZV9yZWxlYXNlX3Rhc2socCk7CkBAIC0yOTEsOCAmIzQzOzI5NCw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAl9CiAKIAl3cml0ZV91bmxvY2tfaXJxKCZhbXA7dGFza2xpc3RfbG9jayk7Ci0JLyogQHRocmVhZF9waWQgY2FuJiMzOTt0IGdvIGF3YXkgdW50aWwgZnJlZV9waWRzKCkgYmVsb3cgKi8KIAlwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKTsKJiM0MzsJcHV0X3BpZCh0aHJlYWRfcGlkKTsKIAlleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTsKIAlhZGRfZGV2aWNlX3JhbmRvbW5lc3MoJmFtcDtwLSZndDtzZS5zdW1fZXhlY19ydW50aW1lLAogCQkJICAgICAgc2l6ZW9mKHAtJmd0O3NlLnN1bV9leGVjX3J1bnRpbWUpKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDAxOjAzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGluIGBrZXJuZWwvZXhpdC5jYCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYHJlbGVhc2VfdGFza2AgZnVuY3Rpb24gd2l0aGluIGBrZXJuZWwvZXhpdC5jYC4gVGhlIGNvcmUgY2hhbmdlIGlzIGNsZWFybHkgYXJvdW5kIFBJRCBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgdGhlIGhhbmRsaW5nIG9mIGB0aHJlYWRfcGlkYC4gSSBzZWUgdGhleSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSByZXRyaWV2YWwgYW5kIHVzYWdlIG9mIGB0aHJlYWRfcGlkYCB3aXRoaW4gYHJlbGVhc2VfdGFza2AuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGUgaW50ZW50OiBUaGV5IGFyZSBtb3ZpbmcgZnJvbSBhIHNpbXBsZSBhc3NpZ25tZW50IHRvIGBnZXRfcGlkKClgIGJlZm9yZSBgX191bmhhc2hfcHJvY2VzcygpYCwgYW5kIGFkZGluZyBhIGBwdXRfcGlkKClgIGFmdGVyIGBwcm9jX2ZsdXNoX3BpZCgpYCBjYWxsLCB0byBlbnN1cmUgdGhlIFBJRCBpc24mIzM5O3QgcHJlbWF0dXJlbHkgZnJlZWQuIFRoZSBjb21tZW50IG1lbnRpb25zIGEgcmFjZSBjb25kaXRpb246IGBQSURUWVBFYCBkZXRhY2ggY291bGQgZnJlZSB0aGUgUElEIGJlZm9yZSBgcHJvY19mbHVzaF9waWQoKWAgaXMgY2FsbGVkLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwb2ludC4gRXNzZW50aWFsbHksIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBQSUQgaXNuJiMzOTt0IHVucmVmZXJlbmNlZCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGNhbiBvcGVyYXRlIG9uIGl0LgoKVG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIEkgbmVlZCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHNvIEkmIzM5O2xsIGp1bXAgb3ZlciB0byBsaW5lIDI2MSBvZiBga2VybmVsL2V4aXQuY2AuIEkgbmVlZCB0aGF0IGZ1bGwgY29udGV4dCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBhcHByb2FjaCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwcm9jZXNzIHRlcm1pbmF0aW9uIHNlcXVlbmNlLiBUaGlzIGxvb2tzIGxpa2UgYSBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBjcml0aWNhbCBmaXggZm9yIGEgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBQSUQgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJpbmcgdGFzayBleGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwMTowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9leGl0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdHtcbiAyNDY6XHR9XG4gMjQ3Olx0XG4gMjQ4Olx0dm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIDI0OTpcdHtcbiAyNTA6XHRcdHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCBwb3N0O1xuIDI1MTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXI7XG4gMjUyOlx0XHRzdHJ1Y3QgcGlkICp0aHJlYWRfcGlkO1xuIDI1MzpcdFx0aW50IHphcF9sZWFkZXI7XG4gMjU0Olx0cmVwZWF0OlxuIDI1NTpcdFx0bWVtc2V0KFx1MDAyNnBvc3QsIDAsIHNpemVvZihwb3N0KSk7XG4gMjU2Olx0XG4gMjU3Olx0XHQvKiBkb24mIzM5O3QgbmVlZCB0byBnZXQgdGhlIFJDVSByZWFkbG9jayBoZXJlIC0gdGhlIHByb2Nlc3MgaXMgZGVhZCBhbmRcbiAyNTg6XHRcdCAqIGNhbiYjMzk7dCBiZSBtb2RpZnlpbmcgaXRzIG93biBjcmVkZW50aWFscy4gKi9cbiAyNTk6XHRcdGRlY19ybGltaXRfdWNvdW50cyh0YXNrX3Vjb3VudHMocCksIFVDT1VOVF9STElNSVRfTlBST0MsIDEpO1xuIDI2MDpcdFxuIDI2MTpcdFx0cGlkZnNfZXhpdChwKTtcbiAyNjI6XHRcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XG4gMjYzOlx0XG4gMjY0Olx0XHQvKlxuIDI2NTpcdFx0ICogUGluIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgY2xlYXJzIGl0LiBUaGUgbGFzdFxuIDI2NjpcdFx0ICogUElEVFlQRSBkZXRhY2ggY2FuIG90aGVyd2lzZSBmcmVlIGl0IGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpLlxuIDI2NzpcdFx0ICovXG4gMjY4Olx0XHR0aHJlYWRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChwKSk7XG4gMjY5Olx0XG4gMjcwOlx0XHR3cml0ZV9sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiAyNzE6XHRcdHB0cmFjZV9yZWxlYXNlX3Rhc2socCk7XG4gMjcyOlx0XHRfX2V4aXRfc2lnbmFsKFx1MDAyNnBvc3QsIHApO1xuIDI3MzpcdFxuIDI3NDpcdFx0LypcbiAyNzU6XHRcdCAqIElmIHdlIGFyZSB0aGUgbGFzdCBub24tbGVhZGVyIG1lbWJlciBvZiB0aGUgdGhyZWFkXG4gMjc2Olx0XHQgKiBncm91cCwgYW5kIHRoZSBsZWFkZXIgaXMgem9tYmllLCB0aGVuIG5vdGlmeSB0aGVcbiAyNzc6XHRcdCAqIGdyb3VwIGxlYWRlciYjMzk7cyBwYXJlbnQgcHJvY2Vzcy4gKGlmIGl0IHdhbnRzIG5vdGlmaWNhdGlvbi4pXG4gMjc4Olx0XHQgKi9cbiAyNzk6XHRcdHphcF9sZWFkZXIgPSAwO1xuIDI4MDpcdFx0bGVhZGVyID0gcC1cdTAwM2Vncm91cF9sZWFkZXI7XG4gMjgxOlx0XHRpZiAobGVhZGVyICE9IHAgXHUwMDI2XHUwMDI2IHRocmVhZF9ncm91cF9lbXB0eShsZWFkZXIpXG4gMjgyOlx0XHRcdFx0XHUwMDI2XHUwMDI2IGxlYWRlci1cdTAwM2VleGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7XG4gMjgzOlx0XHRcdC8qIGZvciBwaWRmc19leGl0KCkgYW5kIGRvX25vdGlmeV9wYXJlbnQoKSAqL1xuIDI4NDpcdFx0XHRpZiAobGVhZGVyLVx1MDAzZXNpZ25hbC1cdTAwM2VmbGFncyBcdTAwMjYgU0lHTkFMX0dST1VQX0VYSVQpXG4gMjg1Olx0XHRcdFx0bGVhZGVyLVx1MDAzZWV4aXRfY29kZSA9IGxlYWRlci1cdTAwM2VzaWduYWwtXHUwMDNlZ3JvdXBfZXhpdF9jb2RlO1xuIDI4NjpcdFx0XHQvKlxuIDI4NzpcdFx0XHQgKiBJZiB3ZSB3ZXJlIHRoZSBsYXN0IGNoaWxkIHRocmVhZCBhbmQgdGhlIGxlYWRlciBoYXNcbiAyODg6XHRcdFx0ICogZXhpdGVkIGFscmVhZHksIGFuZCB0aGUgbGVhZGVyJiMzOTtzIHBhcmVudCBpZ25vcmVzIFNJR0NITEQsXG4gMjg5Olx0XHRcdCAqIHRoZW4gd2UgYXJlIHRoZSBvbmUgd2hvIHNob3VsZCByZWxlYXNlIHRoZSBsZWFkZXIuXG4gMjkwOlx0XHRcdCAqL1xuIDI5MTpcdFx0XHR6YXBfbGVhZGVyID0gZG9fbm90aWZ5X3BhcmVudChsZWFkZXIsIGxlYWRlci1cdTAwM2VleGl0X3NpZ25hbCk7XG4gMjkyOlx0XHRcdGlmICh6YXBfbGVhZGVyKVxuIDI5MzpcdFx0XHRcdGxlYWRlci1cdTAwM2VleGl0X3N0YXRlID0gRVhJVF9ERUFEO1xuIDI5NDpcdFx0fVxuIDI5NTpcdFxuIDI5NjpcdFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbiAyOTc6XHRcdHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpO1xuIDI5ODpcdFx0cHV0X3BpZCh0aHJlYWRfcGlkKTtcbiAyOTk6XHRcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xuIDMwMDpcdFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFx1MDAyNnAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcbiAzMDE6XHRcdFx0XHQgICAgICBzaXplb2YocC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XG4gMzAyOlx0XHRmcmVlX3BpZHMocG9zdC5waWRzKTtcbiAzMDM6XHRcdHJlbGVhc2VfdGhyZWFkKHApO1xuIDMwNDpcdFx0LypcbiAzMDU6XHRcdCAqIFRoaXMgdGFzayB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhlIHByb2Nlc3MvdGhyZWFkL3BpZCBsaXN0c1xuIDMwNjpcdFx0ICogYW5kIGxvY2tfdGFza19zaWdoYW5kKHApIGNhbiYjMzk7dCBzdWNjZWVkLiBOb2JvZHkgZWxzZSBjYW4gdG91Y2hcbiAzMDc6XHRcdCAqIC1cdTAwM2VwZW5kaW5nIG9yLCBpZiBncm91cCBkZWFkLCBzaWduYWwtXHUwMDNlc2hhcmVkX3BlbmRpbmcuIFdlIGNhbiBjYWxsXG4gMzA4Olx0XHQgKiBmbHVzaF9zaWdxdWV1ZSgpIGxvY2tsZXNzLlxuIDMwOTpcdFx0ICovXG4gMzEwOlx0XHRmbHVzaF9zaWdxdWV1ZShcdTAwMjZwLVx1MDAzZXBlbmRpbmcpO1xuIDMxMTpcdFx0aWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpXG4gMzEyOlx0XHRcdGZsdXNoX3NpZ3F1ZXVlKFx1MDAyNnAtXHUwMDNlc2lnbmFsLVx1MDAzZXNoYXJlZF9wZW5kaW5nKTtcbiAzMTM6XHRcbiAzMTQ6XHRcdHB1dF90YXNrX3N0cnVjdF9yY3VfdXNlcihwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkzOQoJCQkJCQkJb3V0cHV0OiAxOTYKCQkJCQkJCXRob3VnaHRzOiA1NTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGEgcHJldHR5IGNsYXNzaWMgdXNlLWFmdGVyLWZyZWUgb3IgcmFjZSBjb25kaXRpb24gaXNzdWUuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSBgdGhyZWFkX3BpZGAgd2FzIGJlaW5nIGFjY2Vzc2VkIHdpdGhvdXQgcHJvcGVyIHJlZmVyZW5jZSBjb3VudGluZyB2aWEgYGdldF9waWQoKWAuIFRoZSB2dWxuZXJhYmlsaXR5IGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBgX191bmhhc2hfcHJvY2VzcygpYCAoY2FsbGVkIHZpYSBgX19leGl0X3NpZ25hbGApIGNvdWxkIHBvdGVudGlhbGx5IGRldGFjaCB0aGUgbGFzdCBgUElEVFlQRWAsIGxlYWRpbmcgdG8gYSBzaXR1YXRpb24gd2hlcmUgYHRocmVhZF9waWRgIGlzIGZyZWVkIHByZW1hdHVyZWx5LCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpYCBvciBvdGhlciBhY2Nlc3NlcyBoYXBwZW4uIFRoZSBmaXg/IFVzaW5nIGBnZXRfcGlkKHRhc2tfcGlkKHApKWAgdG8gZ3JhYiBhIHJlZmVyZW5jZSBvbiBgdGhyZWFkX3BpZGAgYW5kIHRoZW4gZHJvcHBpbmcgaXQgd2l0aCBgcHV0X3BpZCh0aHJlYWRfcGlkKWAgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpYC4gQSBzb2xpZCwgc3RhbmRhcmQgYXBwcm9hY2ggdG8gZW5zdXJlIHRoZSBQSUQmIzM5O3MgbGlmZXRpbWUgaXMgbWFuYWdlZCBjb3JyZWN0bHkuCgpOb3csIGxldCYjMzk7cyB0aGluayBhYm91dCBLQVNBTiBhbmQgS01TQU4uIFRoaXMgcGF0Y2ggKmRpcmVjdGx5KiBhZGRyZXNzZXMgYSB1c2UtYWZ0ZXItZnJlZSBpc3N1ZS4gVGhhdCYjMzk7cyBhIEtBU0FOIGJyZWFkLWFuZC1idXR0ZXIga2luZCBvZiBidWcuIFNvLCBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0ICpyZXNvbHZlcyogYSBVQUYgYnVnIGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBvbmVzLiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBhbGxvY2F0ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZSBleGlzdGluZyBgc3RydWN0IHBpZGAgaXMgYmVpbmcgcHJvcGVybHkgcmVmZXJlbmNlZCBhbmQgbWFuYWdlZCB3aXRoIGBnZXRfcGlkKClgIGFuZCBgcHV0X3BpZCgpYC4gYHRocmVhZF9waWRgIGlzIGluaXRpYWxpemVkIHdpdGggYGdldF9waWQoKWAgYXMgd2VsbC4gU28sIG5vIEtNU0FOIHJpc2tzIGhlcmUuCgpUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O3ZlIHJ1biB0aHJvdWdoIHRoZSBLTVNBTiBjcml0ZXJpYS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzLiBUaGVyZSYjMzk7cyBubyByZWxpYW5jZSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMuIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIHBvdGVudGlhbGx5IHJlYWQgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW5kLCB0aGUgY29kZSBjaGFuZ2VzIGRvbiYjMzk7dCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzIHZpYSBib3VuZCBjaGVja3Mgb3IgYW55dGhpbmcgbGlrZSB0aGF0LgoKSW4gc2hvcnQsIHRoaXMgaXMgcHJpbWFyaWx5IGEgbWVtb3J5IGxpZmV0aW1lIGNvbmNlcm4sIGJlc3QgaGFuZGxlZCBieSBLQVNBTi4gSXQmIzM5O3MgYSAmIzM0O05lZWRzS01TQU49ZmFsc2UmIzM0OyBzY2VuYXJpby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDE6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSAvIHVzZS1hZnRlci1mcmVlIGlzc3VlIGluIGByZWxlYXNlX3Rhc2soKWAgd2hlcmUgYHRocmVhZF9waWRgIGNvdWxkIGJlIGZyZWVkIHByaW9yIHRvIGBwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKWAgd2hlbiB0aGUgbGFzdCBQSURUWVBFIGlzIGRldGFjaGVkIGR1cmluZyBwcm9jZXNzIHVuaGFzaGluZy4gSXQgZml4ZXMgdGhpcyBieSBwaW5uaW5nIGB0aHJlYWRfcGlkYCB1c2luZyBgZ2V0X3BpZCgpYCBhbmQgc3Vic2VxdWVudGx5IHJlbGVhc2luZyBpdCB3aXRoIGBwdXRfcGlkKClgLlxuXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IChwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUpLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFuZCBtZW1vcnkgbGlmZXRpbWUgaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGRvZXMgbm90IGFsdGVyIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgKGluZm9sZWFrcyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIC8gdXNlLWFmdGVyLWZyZWUgaXNzdWUgaW4gYHJlbGVhc2VfdGFzaygpYCB3aGVyZSBgdGhyZWFkX3BpZGAgY291bGQgYmUgZnJlZWQgcHJpb3IgdG8gYHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpYCB3aGVuIHRoZSBsYXN0IFBJRFRZUEUgaXMgZGV0YWNoZWQgZHVyaW5nIHByb2Nlc3MgdW5oYXNoaW5nLiBJdCBmaXhlcyB0aGlzIGJ5IHBpbm5pbmcgYHRocmVhZF9waWRgIHVzaW5nIGBnZXRfcGlkKClgIGFuZCBzdWJzZXF1ZW50bHkgcmVsZWFzaW5nIGl0IHdpdGggYHB1dF9waWQoKWAuXG5cblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIG9iamVjdCByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgKHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSkuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIG1lbW9yeSBsaWZldGltZSBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAoaW5mb2xlYWtzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6MTIuNjY4Mjg5MzRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODc1ODIwNTA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVsZWFzZV90YXNrXCIsXG4gICAgXCJwcm9jX2ZsdXNoX3BpZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSAvIHVzZS1hZnRlci1mcmVlIGlzc3VlIGluIGByZWxlYXNlX3Rhc2soKWAgd2hlcmUgYHRocmVhZF9waWRgIGNvdWxkIGJlIGZyZWVkIHByaW9yIHRvIGBwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKWAgd2hlbiB0aGUgbGFzdCBQSURUWVBFIGlzIGRldGFjaGVkIGR1cmluZyBwcm9jZXNzIHVuaGFzaGluZy4gSXQgZml4ZXMgdGhpcyBieSBwaW5uaW5nIGB0aHJlYWRfcGlkYCB1c2luZyBgZ2V0X3BpZCgpYCBhbmQgc3Vic2VxdWVudGx5IHJlbGVhc2luZyBpdCB3aXRoIGBwdXRfcGlkKClgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIG9iamVjdCByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgKHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSkuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIG1lbW9yeSBsaWZldGltZSBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAoaW5mb2xlYWtzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSByYWNlIGluIHJlbGVhc2VfdGFzaygpIHdoZXJlIHRocmVhZF9waWQgY291bGQgYmUgZnJlZWQgZHVyaW5nIFBJRFRZUEUgZGV0YWNobWVudCBpbiBfX3VuaGFzaF9wcm9jZXNzKCkgYmVmb3JlIHByb2NfZmx1c2hfcGlkKCkgYWNjZXNzZWQgaXQuIEl0IHBpbnMgdGhyZWFkX3BpZCB3aXRoIGdldF9waWQoKSBhbmQgcmVsZWFzZXMgaXQgd2l0aCBwdXRfcGlkKCkgYWZ0ZXIgcHJvY19mbHVzaF9waWQoKSwgYWZmZWN0aW5nIGNvcmUgdGFzayB0ZXJtaW5hdGlvbiBhbmQgcHJvY2ZzIGRjYWNoZSBpbnZhbGlkYXRpb24gbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAxOjAzOjEyLjY2ODI5Mzg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzAyMTExNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzMwZmYwZDUxODI0ZWI4MTMyNzlhMTI1NGVhZDQ1OThjNjU2OTJlNlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMTowMzoxMCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuY1xcbmluZGV4IDk3Njg2YWY4OTUwMTMuLjRlMDI4ZjE1NzU5NzggMTAwNjQ0XFxuLS0tIGEva2VybmVsL2V4aXQuY1xcbisrKyBiL2tlcm5lbC9leGl0LmNcXG5AQCAtMjYxLDggKzI2MSwxMSBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIFxcdHBpZGZzX2V4aXQocCk7XFxuIFxcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XFxuIFxcbi1cXHQvKiBSZXRyaWV2ZSBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi9cXG4tXFx0dGhyZWFkX3BpZCA9IHRhc2tfcGlkKHApO1xcbitcXHQvKlxcbitcXHQgKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBjbGVhcnMgaXQuIFRoZSBsYXN0XFxuK1xcdCAqIFBJRFRZUEUgZGV0YWNoIGNhbiBvdGhlcndpc2UgZnJlZSBpdCBiZWZvcmUgcHJvY19mbHVzaF9waWQoKS5cXG4rXFx0ICovXFxuK1xcdHRocmVhZF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKHApKTtcXG4gXFxuIFxcdHdyaXRlX2xvY2tfaXJxKFxcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcXG4gXFx0cHRyYWNlX3JlbGVhc2VfdGFzayhwKTtcXG5AQCAtMjkxLDggKzI5NCw4IEBAIHZvaWQgcmVsZWFzZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4gXFx0fVxcbiBcXG4gXFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuLVxcdC8qIEB0aHJlYWRfcGlkIGNhbid0IGdvIGF3YXkgdW50aWwgZnJlZV9waWRzKCkgYmVsb3cgKi9cXG4gXFx0cHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7XFxuK1xcdHB1dF9waWQodGhyZWFkX3BpZCk7XFxuIFxcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xcbiBcXHRhZGRfZGV2aWNlX3JhbmRvbW5lc3MoXFx1MDAyNnAtXFx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUsXFxuIFxcdFxcdFxcdCAgICAgIHNpemVvZihwLVxcdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAxOjAzOjEzLjk3MDk5Nzk3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0NDkwOTc3MjQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVsZWFzZV90YXNrXCIsXG4gICAgXCJwcm9jX2ZsdXNoX3BpZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc29sdmVzIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHJhY2UgaW4gcmVsZWFzZV90YXNrKCkgd2hlcmUgdGhyZWFkX3BpZCBjb3VsZCBiZSBmcmVlZCBkdXJpbmcgUElEVFlQRSBkZXRhY2htZW50IGluIF9fdW5oYXNoX3Byb2Nlc3MoKSBiZWZvcmUgcHJvY19mbHVzaF9waWQoKSBhY2Nlc3NlZCBpdC4gSXQgcGlucyB0aHJlYWRfcGlkIHdpdGggZ2V0X3BpZCgpIGFuZCByZWxlYXNlcyBpdCB3aXRoIHB1dF9waWQoKSBhZnRlciBwcm9jX2ZsdXNoX3BpZCgpLCBhZmZlY3RpbmcgY29yZSB0YXNrIHRlcm1pbmF0aW9uIGFuZCBwcm9jZnMgZGNhY2hlIGludmFsaWRhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzMwZmYwZDUxODI0ZWI4MTMyNzlhMTI1NGVhZDQ1OThjNjU2OTJlNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDAxOjAzOjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmNcbmluZGV4IDk3Njg2YWY4OTUwMTMuLjRlMDI4ZjE1NzU5NzggMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZXhpdC5jXG4rKysgYi9rZXJuZWwvZXhpdC5jXG5AQCAtMjYxLDggKzI2MSwxMSBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHRwaWRmc19leGl0KHApO1xuIFx0Y2dyb3VwX3Rhc2tfcmVsZWFzZShwKTtcbiBcbi1cdC8qIFJldHJpZXZlIEB0aHJlYWRfcGlkIGJlZm9yZSBfX3VuaGFzaF9wcm9jZXNzKCkgbWF5IHNldCBpdCB0byBOVUxMLiAqL1xuLVx0dGhyZWFkX3BpZCA9IHRhc2tfcGlkKHApO1xuK1x0LypcbitcdCAqIFBpbiBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIGNsZWFycyBpdC4gVGhlIGxhc3RcbitcdCAqIFBJRFRZUEUgZGV0YWNoIGNhbiBvdGhlcndpc2UgZnJlZSBpdCBiZWZvcmUgcHJvY19mbHVzaF9waWQoKS5cbitcdCAqL1xuK1x0dGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpO1xuIFxuIFx0d3JpdGVfbG9ja19pcnEoXHUwMDI2dGFza2xpc3RfbG9jayk7XG4gXHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xuQEAgLTI5MSw4ICsyOTQsOCBAQCB2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHR9XG4gXG4gXHR3cml0ZV91bmxvY2tfaXJxKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuLVx0LyogQHRocmVhZF9waWQgY2FuJ3QgZ28gYXdheSB1bnRpbCBmcmVlX3BpZHMoKSBiZWxvdyAqL1xuIFx0cHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7XG4rXHRwdXRfcGlkKHRocmVhZF9waWQpO1xuIFx0ZXhpdF9jcmVkX25hbWVzcGFjZXMocCk7XG4gXHRhZGRfZGV2aWNlX3JhbmRvbW5lc3MoXHUwMDI2cC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lLFxuIFx0XHRcdCAgICAgIHNpemVvZihwLVx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUpKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAxOjAzOjEzLjk3MDk5OTMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTk1MjU4MDAyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBSZXZpZXc6IEZ1enppbmcgUG90ZW50aWFsIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIHRvIGxvb2sgYXQsIGFuZCB0aGUgcXVlc3Rpb24gaXM6IGRvZXMgaXQgaW50cm9kdWNlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHdhcnJhbnQgZnV6emluZz8gTGV0J3MgZGl2ZSBpbi4gVGhlIHRhcmdldCBmaWxlIGlzIGBrZXJuZWwvZXhpdC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgcmVsZWFzZV90YXNrKClgIGZ1bmN0aW9uLiBUaGUgZGlmZiBmb2N1c2VzIG9uIGhvdyBgdGhyZWFkX3BpZGAgaXMgaGFuZGxlZCwgcmlnaHQgYmVmb3JlIHRoZSBwcm9jZXNzIGlzIHVuaGFzaGVkIGFuZCBmcmVlZC4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIFBJRCBjb3VsZCBiZSBmcmVlZCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGhhcyBhIGNoYW5jZSB0byBkbyBpdHMgam9iLiBFc3NlbnRpYWxseSwgdGhlIHBhdGNoIGlzIGFkZGluZyBgZ2V0X3BpZCgpYCB0byBwaW4gdGhlIFBJRCwgYW5kIGBwdXRfcGlkKClgIGFmdGVyIGBwcm9jX2ZsdXNoX3BpZCgpYCB0byByZWxlYXNlIHRoZSBwaW5uZWQgUElELiBUaGlzIGluZGljYXRlcyBhIHBvdGVudGlhbCBkYXRhIHJhY2Ugb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8uIFRoZSBhZGRlZCBjb21tZW50cyBjb25maXJtIHRoaXMsIGNsYXJpZnlpbmcgdGhhdCB0aGV5J3JlIGVuc3VyaW5nIHRoZSBQSUQgcGVyc2lzdHMgdW50aWwgaXQgY2FuIGJlIHByb3Blcmx5IGhhbmRsZWQuIFRoZSBsYXN0IGxpbmUgb2YgdGhlIG9yaWdpbmFsIGNvZGUsIHRoZSBwcm9jX2ZsdXNoX3BpZCgpIGNhbGwsIHNlZW1zIGltcG9ydGFudCBpbiB0aGlzIGNvbnRleHQuXG5cbk5vdywgdGhpcyB0eXBlIG9mIGZpeCDigJMgbWVtb3J5IG1hbmFnZW1lbnQsIHN5bmNocm9uaXphdGlvbiwgYW5kIHJhY2UgY29uZGl0aW9uIGF2b2lkYW5jZSDigJMgaXMgKmRlZmluaXRlbHkqIGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLiBJdCBkaXJlY3RseSBhZGRyZXNzZXMgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyB0aGF0IGNvdWxkIGxlYWQgdG8gY3Jhc2hlcyBvciwgcG90ZW50aWFsbHksIGV4cGxvaXRhYmxlIHZ1bG5lcmFiaWxpdGllcy5cblxuSSdtIHRoaW5raW5nIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGJldHRlci4gTGV0J3MgdXNlIGByZWFkLWZpbGVgIHRvIGdldCB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIGBrZXJuZWwvZXhpdC5jYCBhbmQgc2VlIGlmIHdlIGNhbiBpZGVudGlmeSBvdGhlciByZWxhdGVkIGFyZWFzIG9yIG90aGVyIHBvdGVudGlhbCBlbnRyeXBvaW50cyBhZmZlY3RlZCBieSB0aGUgZml4LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGludGVyYWN0aW9ucyB3aXRoIFBJRCBtYW5hZ2VtZW50LCB0YXNrIGNsZWFudXAsIGFuZCBwcm9jZXNzIGV4aXQgcGF0aHMgaW4gZ2VuZXJhbC4gQSBtb3JlIGRldGFpbGVkIGV4YW1pbmF0aW9uIG9mIHRoaXMgc2VjdGlvbiBvZiB0aGUga2VybmVsIGlzIHJlcXVpcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjYzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6MjMuOTIzNTgwODA5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9leGl0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjUwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdFxcdHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCBwb3N0O1xcbiAyNTE6XFx0XFx0c3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXI7XFxuIDI1MjpcXHRcXHRzdHJ1Y3QgcGlkICp0aHJlYWRfcGlkO1xcbiAyNTM6XFx0XFx0aW50IHphcF9sZWFkZXI7XFxuIDI1NDpcXHRyZXBlYXQ6XFxuIDI1NTpcXHRcXHRtZW1zZXQoXFx1MDAyNnBvc3QsIDAsIHNpemVvZihwb3N0KSk7XFxuIDI1NjpcXHRcXG4gMjU3OlxcdFxcdC8qIGRvbid0IG5lZWQgdG8gZ2V0IHRoZSBSQ1UgcmVhZGxvY2sgaGVyZSAtIHRoZSBwcm9jZXNzIGlzIGRlYWQgYW5kXFxuIDI1ODpcXHRcXHQgKiBjYW4ndCBiZSBtb2RpZnlpbmcgaXRzIG93biBjcmVkZW50aWFscy4gKi9cXG4gMjU5OlxcdFxcdGRlY19ybGltaXRfdWNvdW50cyh0YXNrX3Vjb3VudHMocCksIFVDT1VOVF9STElNSVRfTlBST0MsIDEpO1xcbiAyNjA6XFx0XFxuIDI2MTpcXHRcXHRwaWRmc19leGl0KHApO1xcbiAyNjI6XFx0XFx0Y2dyb3VwX3Rhc2tfcmVsZWFzZShwKTtcXG4gMjYzOlxcdFxcbiAyNjQ6XFx0XFx0LypcXG4gMjY1OlxcdFxcdCAqIFBpbiBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIGNsZWFycyBpdC4gVGhlIGxhc3RcXG4gMjY2OlxcdFxcdCAqIFBJRFRZUEUgZGV0YWNoIGNhbiBvdGhlcndpc2UgZnJlZSBpdCBiZWZvcmUgcHJvY19mbHVzaF9waWQoKS5cXG4gMjY3OlxcdFxcdCAqL1xcbiAyNjg6XFx0XFx0dGhyZWFkX3BpZCA9IGdldF9waWQodGFza19waWQocCkpO1xcbiAyNjk6XFx0XFxuIDI3MDpcXHRcXHR3cml0ZV9sb2NrX2lycShcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuIDI3MTpcXHRcXHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xcbiAyNzI6XFx0XFx0X19leGl0X3NpZ25hbChcXHUwMDI2cG9zdCwgcCk7XFxuIDI3MzpcXHRcXG4gMjc0OlxcdFxcdC8qXFxuIDI3NTpcXHRcXHQgKiBJZiB3ZSBhcmUgdGhlIGxhc3Qgbm9uLWxlYWRlciBtZW1iZXIgb2YgdGhlIHRocmVhZFxcbiAyNzY6XFx0XFx0ICogZ3JvdXAsIGFuZCB0aGUgbGVhZGVyIGlzIHpvbWJpZSwgdGhlbiBub3RpZnkgdGhlXFxuIDI3NzpcXHRcXHQgKiBncm91cCBsZWFkZXIncyBwYXJlbnQgcHJvY2Vzcy4gKGlmIGl0IHdhbnRzIG5vdGlmaWNhdGlvbi4pXFxuIDI3ODpcXHRcXHQgKi9cXG4gMjc5OlxcdFxcdHphcF9sZWFkZXIgPSAwO1xcbiAyODA6XFx0XFx0bGVhZGVyID0gcC1cXHUwMDNlZ3JvdXBfbGVhZGVyO1xcbiAyODE6XFx0XFx0aWYgKGxlYWRlciAhPSBwIFxcdTAwMjZcXHUwMDI2IHRocmVhZF9ncm91cF9lbXB0eShsZWFkZXIpXFxuIDI4MjpcXHRcXHRcXHRcXHRcXHUwMDI2XFx1MDAyNiBsZWFkZXItXFx1MDAzZWV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpIHtcXG4gMjgzOlxcdFxcdFxcdC8qIGZvciBwaWRmc19leGl0KCkgYW5kIGRvX25vdGlmeV9wYXJlbnQoKSAqL1xcbiAyODQ6XFx0XFx0XFx0aWYgKGxlYWRlci1cXHUwMDNlc2lnbmFsLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNJR05BTF9HUk9VUF9FWElUKVxcbiAyODU6XFx0XFx0XFx0XFx0bGVhZGVyLVxcdTAwM2VleGl0X2NvZGUgPSBsZWFkZXItXFx1MDAzZXNpZ25hbC1cXHUwMDNlZ3JvdXBfZXhpdF9jb2RlO1xcbiAyODY6XFx0XFx0XFx0LypcXG4gMjg3OlxcdFxcdFxcdCAqIElmIHdlIHdlcmUgdGhlIGxhc3QgY2hpbGQgdGhyZWFkIGFuZCB0aGUgbGVhZGVyIGhhc1xcbiAyODg6XFx0XFx0XFx0ICogZXhpdGVkIGFscmVhZHksIGFuZCB0aGUgbGVhZGVyJ3MgcGFyZW50IGlnbm9yZXMgU0lHQ0hMRCxcXG4gMjg5OlxcdFxcdFxcdCAqIHRoZW4gd2UgYXJlIHRoZSBvbmUgd2hvIHNob3VsZCByZWxlYXNlIHRoZSBsZWFkZXIuXFxuIDI5MDpcXHRcXHRcXHQgKi9cXG4gMjkxOlxcdFxcdFxcdHphcF9sZWFkZXIgPSBkb19ub3RpZnlfcGFyZW50KGxlYWRlciwgbGVhZGVyLVxcdTAwM2VleGl0X3NpZ25hbCk7XFxuIDI5MjpcXHRcXHRcXHRpZiAoemFwX2xlYWRlcilcXG4gMjkzOlxcdFxcdFxcdFxcdGxlYWRlci1cXHUwMDNlZXhpdF9zdGF0ZSA9IEVYSVRfREVBRDtcXG4gMjk0OlxcdFxcdH1cXG4gMjk1OlxcdFxcbiAyOTY6XFx0XFx0d3JpdGVfdW5sb2NrX2lycShcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuIDI5NzpcXHRcXHRwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKTtcXG4gMjk4OlxcdFxcdHB1dF9waWQodGhyZWFkX3BpZCk7XFxuIDI5OTpcXHRcXHRleGl0X2NyZWRfbmFtZXNwYWNlcyhwKTtcXG4gMzAwOlxcdFxcdGFkZF9kZXZpY2VfcmFuZG9tbmVzcyhcXHUwMDI2cC1cXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcXG4gMzAxOlxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihwLVxcdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XFxuIDMwMjpcXHRcXHRmcmVlX3BpZHMocG9zdC5waWRzKTtcXG4gMzAzOlxcdFxcdHJlbGVhc2VfdGhyZWFkKHApO1xcbiAzMDQ6XFx0XFx0LypcXG4gMzA1OlxcdFxcdCAqIFRoaXMgdGFzayB3YXMgYWxyZWFkeSByZW1vdmVkIGZyb20gdGhlIHByb2Nlc3MvdGhyZWFkL3BpZCBsaXN0c1xcbiAzMDY6XFx0XFx0ICogYW5kIGxvY2tfdGFza19zaWdoYW5kKHApIGNhbid0IHN1Y2NlZWQuIE5vYm9keSBlbHNlIGNhbiB0b3VjaFxcbiAzMDc6XFx0XFx0ICogLVxcdTAwM2VwZW5kaW5nIG9yLCBpZiBncm91cCBkZWFkLCBzaWduYWwtXFx1MDAzZXNoYXJlZF9wZW5kaW5nLiBXZSBjYW4gY2FsbFxcbiAzMDg6XFx0XFx0ICogZmx1c2hfc2lncXVldWUoKSBsb2NrbGVzcy5cXG4gMzA5OlxcdFxcdCAqL1xcbiAzMTA6XFx0XFx0Zmx1c2hfc2lncXVldWUoXFx1MDAyNnAtXFx1MDAzZXBlbmRpbmcpO1xcbiAzMTE6XFx0XFx0aWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpXFxuIDMxMjpcXHRcXHRcXHRmbHVzaF9zaWdxdWV1ZShcXHUwMDI2cC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VzaGFyZWRfcGVuZGluZyk7XFxuIDMxMzpcXHRcXG4gMzE0OlxcdFxcdHB1dF90YXNrX3N0cnVjdF9yY3VfdXNlcihwKTtcXG4gMzE1OlxcdFxcbiAzMTY6XFx0XFx0cCA9IGxlYWRlcjtcXG4gMzE3OlxcdFxcdGlmICh1bmxpa2VseSh6YXBfbGVhZGVyKSlcXG4gMzE4OlxcdFxcdFxcdGdvdG8gcmVwZWF0O1xcbiAzMTk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzoyMy45MjM3Mjg2MzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1MTc3MjI5NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBwYXRjaCBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGZpeGluZyBhIG5hc3R5IHJhY2UgY29uZGl0aW9uIOKAkyBhIHVzZS1hZnRlci1mcmVlIOKAkyB3aXRoaW4gdGhlIGByZWxlYXNlX3Rhc2soKWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiBga2VybmVsL2V4aXQuY2AuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gaG93IFBJRHMgYXJlIGhhbmRsZWQgZHVyaW5nIHRocmVhZCBleGl0IGFuZCB0aGUgdGltaW5nIG9mIGBwcm9jX2ZsdXNoX3BpZGAuICBFc3NlbnRpYWxseSwgdGhlIGNvZGUgd2FzIHZ1bG5lcmFibGUgYmVjYXVzZSBgX19leGl0X3NpZ25hbCgpYCBjYW4gZGV0YWNoIGEgUElELCBwb3RlbnRpYWxseSBmcmVlaW5nIHRoZSBgc3RydWN0IHBpZGAgYmVmb3JlIGBwcm9jX2ZsdXNoX3BpZCgpYCBnZXRzIGEgY2hhbmNlIHRvIHVzZSBpdC4gVGhlIGZpeCBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCByZWZlcmVuY2UgY291bnQgbWFuYWdlbWVudCBzdHJhdGVneSB1c2luZyBgZ2V0X3BpZCgpYCBhbmQgYHB1dF9waWQoKWAgdG8gZW5zdXJlIHRoZSBQSUQgc3RydWN0dXJlIHJlbWFpbnMgdmFsaWQgZm9yIHRoZSBkdXJhdGlvbiBvZiBpdHMgdXNlIGluIGBwcm9jX2ZsdXNoX3BpZCgpYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgd29ydGggZnV6emluZz8gTGV0J3MgYXBwbHkgdGhlIHN0YW5kYXJkIGNyaXRlcmlhLiBJdCdzIG5vdCBkb2N1bWVudGF0aW9uLCBhIGNvbmZpZyBmaWxlIGNoYW5nZSwgb3IgYSBsb2dnaW5nIGFkZGl0aW9uLiBJdCBkaXJlY3RseSBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gYHJlbGVhc2VfdGFzaygpYCwgd2hpY2ggaXMgYSBjcml0aWNhbCBmdW5jdGlvbiBleGVjdXRlZCBvbiBldmVyeSBwcm9jZXNzL3RocmVhZCBleGl0LiBHaXZlbiB0aGF0IGByZWxlYXNlX3Rhc2soKWAgaGFuZGxlcyBwcm9jZXNzIGV4aXQsIEkgbmVlZCB0byBlbnN1cmUgaXQncyBub3QgYSBob3QtcGF0aCBmdW5jdGlvbiB0aGF0IG1pZ2h0IHNrZXcgZnV6emluZy4gVGhlIHBhdGNoIHRvdWNoZXMgdGhlIHJlbGVhc2UvZXhpdCBoYW5kbGluZywgc28gSSdtIHRoaW5raW5nIHRoZSBjb2RlIGlzIHJlYWNoYWJsZSwgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGlzIHNpZ25pZmljYW50LCB0aHVzIGBXb3J0aEZ1enppbmcgPSB0cnVlYC5cblxuTmV4dCwgSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IHdhcnJhbnQgaGVhdnkgZnV6emluZy4gVGhlIGNyaXRlcmlhIGRpY3RhdGUgSSBwdWxsIG91dCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gYXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuIE15IGZpcnN0IHRob3VnaHQgaXMgd2hldGhlciB0byBpbmNsdWRlIGByZWxlYXNlX3Rhc2tgIGluIGBGb2N1c1N5bWJvbHNgLiBJcyB0aGlzIGEgaG90LXBhdGggZnVuY3Rpb24/IExldCdzIGNvbnNpZGVyIGhvdyBvZnRlbiBgcmVsZWFzZV90YXNrYCBnZXRzIGNhbGxlZCBvbiBwcm9jZXNzIGV4aXQvd2FpdC4gSSBuZWVkIHRvIHJlc2VhcmNoIHRoaXMgYmVmb3JlIG1ha2luZyB0aGUgY2FsbC4gU2luY2UgdGhlIHBhdGNoIG1vZGlmaWVzIGByZWxlYXNlX3Rhc2tgIGRpcmVjdGx5LCBpcyBpdCB0aGUgb25seSBmb2N1cz8gSSBuZWVkIHRvIGFuYWx5emUgaXRzIGNhbGxlcnMsIGFuZCBtYXliZSByZWxhdGVkIGZ1bmN0aW9ucyB0byBlbnN1cmUgbm90aGluZyByZWxhdGVkIHRvIHRoZSBgc3RydWN0IHBpZGAgaXNzdWUgaGFzIGJlZW4gbWlzc2VkLiBJJ2xsIHVzZSBgZ2l0IGdyZXBgIHRvIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTkwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6MjkuMTAwOTYwNDA5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjg1MjU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWxlYXNlX3Rhc2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvZXhpdC5jPTEyMz1sYXRlX2luaXRjYWxsKGtlcm5lbF9leGl0X3N5c2ZzX2luaXQpO1xcbi0tXFxua2VybmVsL2V4aXQuYy0xMjYtLypcXG5rZXJuZWwvZXhpdC5jOjEyNzogKiBGb3IgdGhpbmdzIHJlbGVhc2VfdGFzaygpIHdvdWxkIGxpa2UgdG8gZG8gKmFmdGVyKiB0YXNrbGlzdF9sb2NrIGlzIHJlbGVhc2VkLlxcbmtlcm5lbC9leGl0LmMtMTI4LSAqL1xcbmtlcm5lbC9leGl0LmM6MTI5OnN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCB7XFxua2VybmVsL2V4aXQuYy0xMzAtXFx0c3RydWN0IHBpZCAqcGlkc1tQSURUWVBFX01BWF07XFxuLS1cXG5rZXJuZWwvZXhpdC5jLTEzMi1cXG5rZXJuZWwvZXhpdC5jOjEzMzpzdGF0aWMgdm9pZCBfX3VuaGFzaF9wcm9jZXNzKHN0cnVjdCByZWxlYXNlX3Rhc2tfcG9zdCAqcG9zdCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbmtlcm5lbC9leGl0LmMtMTM0LVxcdFxcdFxcdCAgICAgYm9vbCBncm91cF9kZWFkKVxcbi0tXFxua2VybmVsL2V4aXQuYy0xNTctICovXFxua2VybmVsL2V4aXQuYzoxNTg6c3RhdGljIHZvaWQgX19leGl0X3NpZ25hbChzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgKnBvc3QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmtlcm5lbC9leGl0LmMtMTU5LXtcXG4tLVxcbmtlcm5lbC9leGl0LmM9MjQ0PXZvaWQgX193ZWFrIHJlbGVhc2VfdGhyZWFkKHN0cnVjdCB0YXNrX3N0cnVjdCAqZGVhZF90YXNrKVxcbi0tXFxua2VybmVsL2V4aXQuYy0yNDctXFxua2VybmVsL2V4aXQuYzoyNDg6dm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbmtlcm5lbC9leGl0LmMtMjQ5LXtcXG5rZXJuZWwvZXhpdC5jOjI1MDpcXHRzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgcG9zdDtcXG5rZXJuZWwvZXhpdC5jLTI1MS1cXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmxlYWRlcjtcXG4tLVxcbmtlcm5lbC9leGl0LmMtMjcwLVxcdHdyaXRlX2xvY2tfaXJxKFxcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcXG5rZXJuZWwvZXhpdC5jOjI3MTpcXHRwdHJhY2VfcmVsZWFzZV90YXNrKHApO1xcbmtlcm5lbC9leGl0LmMtMjcyLVxcdF9fZXhpdF9zaWduYWwoXFx1MDAyNnBvc3QsIHApO1xcbi0tXFxua2VybmVsL2V4aXQuYz02MzM9c3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqZmluZF9jaGlsZF9yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTY1NS1cXHRcXHRsaXN0X2RlbF9pbml0KFxcdTAwMjZwLVxcdTAwM2VwdHJhY2VfZW50cnkpO1xcbmtlcm5lbC9leGl0LmM6NjU2OlxcdFxcdHJlbGVhc2VfdGFzayhwKTtcXG5rZXJuZWwvZXhpdC5jLTY1Ny1cXHR9XFxuLS1cXG5rZXJuZWwvZXhpdC5jPTY3Mj1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX25ld19yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsXFxuLS1cXG5rZXJuZWwvZXhpdC5jLTcwNy0vKlxcbmtlcm5lbC9leGl0LmM6NzA4OiogQW55IHRoYXQgbmVlZCB0byBiZSByZWxlYXNlX3Rhc2snZCBhcmUgcHV0IG9uIHRoZSBAZGVhZCBsaXN0Llxcbmtlcm5lbC9leGl0LmMtNzA5LSAqL1xcbi0tXFxua2VybmVsL2V4aXQuYz03NzM9c3RhdGljIHZvaWQgZXhpdF9ub3RpZnkoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBncm91cF9kZWFkKVxcbi0tXFxua2VybmVsL2V4aXQuYy04MTEtXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cC1cXHUwMDNlcHRyYWNlX2VudHJ5KTtcXG5rZXJuZWwvZXhpdC5jOjgxMjpcXHRcXHRyZWxlYXNlX3Rhc2socCk7XFxua2VybmVsL2V4aXQuYy04MTMtXFx0fVxcbi0tXFxua2VybmVsL2V4aXQuYz0xMjA5PXN0YXRpYyBpbnQgd2FpdF90YXNrX3pvbWJpZShzdHJ1Y3Qgd2FpdF9vcHRzICp3bywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL2V4aXQuYy0xMzE1LVxcdGlmIChzdGF0ZSA9PSBFWElUX0RFQUQpXFxua2VybmVsL2V4aXQuYzoxMzE2OlxcdFxcdHJlbGVhc2VfdGFzayhwKTtcXG5rZXJuZWwvZXhpdC5jLTEzMTctXFxuLS1cXG5rZXJuZWwvZm9yay5jPTE2OT1pbnQgbnJfcHJvY2Vzc2VzKHZvaWQpXFxuLS1cXG5rZXJuZWwvZm9yay5jLTE3OS1cXG5rZXJuZWwvZm9yay5jOjE4MDp2b2lkIF9fd2VhayBhcmNoX3JlbGVhc2VfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxua2VybmVsL2ZvcmsuYy0xODEte1xcbi0tXFxua2VybmVsL2ZvcmsuYz01MDM9dm9pZCBleGl0X3Rhc2tfc3RhY2tfYWNjb3VudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG4tLVxcbmtlcm5lbC9mb3JrLmMtNTE2LVxcbmtlcm5lbC9mb3JrLmM6NTE3OnN0YXRpYyB2b2lkIHJlbGVhc2VfdGFza19zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcXG5rZXJuZWwvZm9yay5jLTUxOC17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTUyNj12b2lkIHB1dF90YXNrX3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbi0tXFxua2VybmVsL2ZvcmsuYy01MjgtXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2dHNrLVxcdTAwM2VzdGFja19yZWZjb3VudCkpXFxua2VybmVsL2ZvcmsuYzo1Mjk6XFx0XFx0cmVsZWFzZV90YXNrX3N0YWNrKHRzayk7XFxua2VybmVsL2ZvcmsuYy01MzAtfVxcbi0tXFxua2VybmVsL2ZvcmsuYz01MzM9dm9pZCBmcmVlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5rZXJuZWwvZm9yay5jLTU0Ni1cXHQgKi9cXG5rZXJuZWwvZm9yay5jOjU0NzpcXHRyZWxlYXNlX3Rhc2tfc3RhY2sodHNrKTtcXG5rZXJuZWwvZm9yay5jLTU0OC0jZWxzZVxcbi0tXFxua2VybmVsL2ZvcmsuYy01NTYtXFx0ZnRyYWNlX2dyYXBoX2V4aXRfdGFzayh0c2spO1xcbmtlcm5lbC9mb3JrLmM6NTU3OlxcdGFyY2hfcmVsZWFzZV90YXNrX3N0cnVjdCh0c2spO1xcbmtlcm5lbC9mb3JrLmMtNTU4LVxcdGlmICh0c2stXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfS1RIUkVBRClcXG4tLVxcbmtlcm5lbC9wdHJhY2UuYz0yNTc9c3RhdGljIGludCBwdHJhY2VfY2hlY2tfYXR0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGJvb2wgaWdub3JlX3N0YXRlKVxcbi0tXFxua2VybmVsL3B0cmFjZS5jLTI3MC1cXHRcXHQvKlxcbmtlcm5lbC9wdHJhY2UuYzoyNzE6XFx0XFx0ICogY2hpbGQtXFx1MDAzZXNpZ2hhbmQgY2FuJ3QgYmUgTlVMTCwgcmVsZWFzZV90YXNrKClcXG5rZXJuZWwvcHRyYWNlLmMtMjcyLVxcdFxcdCAqIGRvZXMgcHRyYWNlX3VubGluaygpIGJlZm9yZSBfX2V4aXRfc2lnbmFsKCkuXFxuLS1cXG5rZXJuZWwvcHRyYWNlLmM9NTM4PXN0YXRpYyBpbnQgaWdub3JpbmdfY2hpbGRyZW4oc3RydWN0IHNpZ2hhbmRfc3RydWN0ICpzaWdoKVxcbi0tXFxua2VybmVsL3B0cmFjZS5jLTU1MC0gKiBVbmxpbmsgYSB0cmFjZWQgdGFzaywgYW5kIGNsZWFuIGl0IHVwIGlmIGl0IHdhcyBhIHRyYWNlZCB6b21iaWUuXFxua2VybmVsL3B0cmFjZS5jOjU1MTogKiBSZXR1cm4gdHJ1ZSBpZiBpdCBuZWVkcyB0byBiZSByZWFwZWQgd2l0aCByZWxlYXNlX3Rhc2soKS5cXG5rZXJuZWwvcHRyYWNlLmM6NTUyOiAqIChXZSBjYW4ndCBjYWxsIHJlbGVhc2VfdGFzaygpIGhlcmUgYmVjYXVzZSB3ZSBhbHJlYWR5IGhvbGQgdGFza2xpc3RfbG9jay4pXFxua2VybmVsL3B0cmFjZS5jLTU1My0gKlxcbi0tXFxua2VybmVsL3NpZ25hbC5jPTIxNjg9Ym9vbCBkb19ub3RpZnlfcGFyZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgc2lnKVxcbi0tXFxua2VybmVsL3NpZ25hbC5jLTIyMDMtXFx0ICogdGFza19hY3RpdmVfcGlkX25zIHdpbGwgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBwaWQgbmFtZXNwYWNlXFxua2VybmVsL3NpZ25hbC5jOjIyMDQ6XFx0ICogdW50aWwgYSB0YXNrIHBhc3NlcyB0aHJvdWdoIHJlbGVhc2VfdGFzay5cXG5rZXJuZWwvc2lnbmFsLmMtMjIwNS1cXHQgKlxcbi0tXFxua2VybmVsL3N5cy5jPTEwMDU9U1lTQ0FMTF9ERUZJTkUwKGdldHRpZClcXG4tLVxcbmtlcm5lbC9zeXMuYy0xMDEzLSAqIHZhbHVlIG9mIC1cXHUwMDNlcmVhbF9wYXJlbnQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLCBzZWVcXG5rZXJuZWwvc3lzLmM6MTAxNDogKiByZWxlYXNlX3Rhc2soKS1cXHUwMDNlY2FsbF9yY3UoZGVsYXllZF9wdXRfdGFza19zdHJ1Y3QpLlxcbmtlcm5lbC9zeXMuYy0xMDE1LSAqL1xcbi0tXFxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jPTQ1MT1zdGF0aWMgdm9pZCBkaXNhcm1fdGltZXIoc3RydWN0IGtfaXRpbWVyICp0aW1lciwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbi0tXFxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jLTUwMC0gKlxcdFxcdFxcdFxcdFxcdHN3aXRjaF9sZWFkZXIoKVxcbmtlcm5lbC90aW1lL3Bvc2l4LWNwdS10aW1lcnMuYzo1MDE6ICpcXHRcXHRcXHRcXHRcXHRyZWxlYXNlX3Rhc2sob2xkIGxlYWRlcilcXG5rZXJuZWwvdGltZS9wb3NpeC1jcHUtdGltZXJzLmMtNTAyLSAqXFx0XFx0XFx0XFx0XFx0ICBfX2V4aXRfc2lnbmFsKClcXG4tLVxcbmtlcm5lbC90aW1lL3Bvc2l4LWNwdS10aW1lcnMuYz0xNDY0PXZvaWQgcnVuX3Bvc2l4X2NwdV90aW1lcnModm9pZClcXG4tLVxcbmtlcm5lbC90aW1lL3Bvc2l4LWNwdS10aW1lcnMuYy0xNDcwLVxcdC8qXFxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jOjE0NzE6XFx0ICogRW5zdXJlIHRoYXQgcmVsZWFzZV90YXNrKHRzaykgY2FuJ3QgaGFwcGVuIHdoaWxlXFxua2VybmVsL3RpbWUvcG9zaXgtY3B1LXRpbWVycy5jLTE0NzItXFx0ICogaGFuZGxlX3Bvc2l4X2NwdV90aW1lcnMoKSBpcyBydW5uaW5nLiBPdGhlcndpc2UsIGEgY29uY3VycmVudFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzoyOS44MzM4MjIzOTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NTMxNDA5MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHJlbGVhc2VfdGFza2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbi4gSXQgc2VlbXMgaXQncyB0aGUga2V5IHRvIGNsZWFuaW5nIHVwIGFmdGVyIGEgdGFzayBoYXMgZXhpdGVkIG9yIGJlZW4gcmVhcGVkIOKAkyB0cmlnZ2VyZWQgYnkgdGhpbmdzIGxpa2UgYGV4aXRfbm90aWZ5YCwgYHdhaXRfdGFza196b21iaWVgLCBvciBgZmluZF9jaGlsZF9yZWFwZXJgLiBNeSBpbml0aWFsIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGEgcHVibGljLWZhY2luZyBlbnRyeXBvaW50LCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gd2UgY2FuIGNhbGwgZnJvbSBlbHNld2hlcmUsIG9yIGlzIGl0IGhpZGRlbiBhd2F5PyBSaWdodCwgbG9va3MgbGlrZSBgdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKWAgaW4gYGtlcm5lbC9leGl0LmNgIGlzIG5vbi1zdGF0aWMuIEdvb2QuIFRoYXQgY2xhcmlmaWVzIHRoYXQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYW55IGRlcGVuZGVuY2llcy4gV2hhdCBrZXJuZWwgY29uZmlndXJhdGlvbnMgbWlnaHQgaW5mbHVlbmNlIHRoZSBiZWhhdmlvciBvciBhdmFpbGFiaWxpdHkgb2YgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGNvZGUgYXJvdW5kIGl0PyBJIHNob3VsZCBjaGVjayBpZiBga2VybmVsL2V4aXQuY2Agb3IgcGFydHMgb2YgaXQgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYW55IENPTkZJRyBvcHRpb25zLiBUaW1lIHRvIGxvb2sgYXQgYGtlcm5lbC9NYWtlZmlsZWAgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBwcm92aWRlIHZhbHVhYmxlIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODgsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6MzUuMzY1MjMzMjcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTU4ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4aXRcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvTWFrZWZpbGU9Nj1vYmoteSAgICAgPSBmb3JrLm8gZXhlY19kb21haW4ubyBleGVjX3N0YXRlLm8gcGFuaWMubyBcXFxcXFxua2VybmVsL01ha2VmaWxlOjc6XFx0ICAgIGNwdS5vIGV4aXQubyBzb2Z0aXJxLm8gcmVzb3VyY2UubyBcXFxcXFxua2VybmVsL01ha2VmaWxlLTgtXFx0ICAgIHN5c2N0bC5vIGNhcGFiaWxpdHkubyBwdHJhY2UubyB1c2VyLm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzozNS40MjYxOTY5N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI5MjU5OTcwNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYGV4aXQub2AgTW9kdWxlIGFuZCBgcmVsZWFzZV90YXNrYCBGdW5jdGlvbioqXG5cbk9rYXksIHNvIGBleGl0Lm9gIGlzIGNvbnNpc3RlbnRseSBpbmNsdWRlZCBpbiBgb2JqLXlgLCB0aGF0J3MgYSBnaXZlbi4gTm93LCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIHRoZSBjb2RlIHN1cnJvdW5kaW5nIGByZWxlYXNlX3Rhc2tgLCBvciB0aGUgbW9kaWZpZWQgcGFydHMgb2YgaXQsIGFyZSBndWFyZGVkIGJ5IGFueSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBsaWtlIGAjaWZkZWZgLiBJIG5lZWQgdG8gcnVsZSBvdXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uXG5cblRvIHRoYXQgZW5kLCBsZXQgbWUgY2hlY2sgbGluZXMgMjQwIHRocm91Z2ggMzMwIG9mIGBrZXJuZWwvZXhpdC5jYC4gUmlnaHQsIGhlcmUncyBgcmVsZWFzZV90YXNrYC4gT2theSwgZ29vZCwgbm8gYCNpZmRlZmBzLiBUaGF0IHNpbXBsaWZpZXMgdGhpbmdzIGEgYml0LiBUaGlzIG1lYW5zIHRoaXMgZnVuY3Rpb24ncyBiZWhhdmlvdXIgc2hvdWxkIGJlIGNvbnNpc3RlbnQgdW5sZXNzIHNvbWV0aGluZyB1cHN0cmVhbSwgb3IgZG93bnN0cmVhbSBjYWxscyBpdCBpbiBkaWZmZXJlbnQgcGxhY2VzLlxuXG5Ob3csIGluc2lkZSBgcmVsZWFzZV90YXNrYCwgSSBzZWUgY2FsbHMgdG8gYHByb2NfZmx1c2hfcGlkYCwgYGdldF9waWRgLCBhbmQgYHB1dF9waWRgLiBUaGVzZSBhcmUgYWxsIHByZXR0eSBmdW5kYW1lbnRhbCBrZXJuZWwgZnVuY3Rpb25zLCBubyBzdXJwcmlzZXMgdGhlcmUuIFNpbmNlIGBwcm9jX2ZsdXNoX3BpZGAgc2VlbXMgbGlrZSB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgZm9yIHNvbWUgd2VpcmRuZXNzLCBJJ2xsIGNoZWNrIGl0cyBjb25maWcgZGVwZW5kZW5jaWVzLCBqdXN0IHRvIGJlIHN1cmUuIEknbSBhZnRlciBhbnl0aGluZyB0aGF0IG1pZ2h0IGludHJvZHVjZSBwbGF0Zm9ybS1zcGVjaWZpYyBvciBidWlsZC10aW1lIHZhcmlhdGlvbnMgaW4gaXRzIGJlaGF2aW91ci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU2MiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzozOC4zNTIxOTYwODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3Nzg4NzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfZmx1c2hfcGlkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTE5NzY9c3RhdGljIHN0cnVjdCBpbm9kZSAqcHJvY19waWRfbWFrZV9iYXNlX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0xOTg2LVxcbmZzL3Byb2MvYmFzZS5jOjE5ODc6XFx0LyogTGV0IHByb2NfZmx1c2hfcGlkIGZpbmQgdGhpcyBkaXJlY3RvcnkgaW5vZGUgKi9cXG5mcy9wcm9jL2Jhc2UuYy0xOTg4LVxcdGVpID0gUFJPQ19JKGlub2RlKTtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTM0MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2NfdGdpZF9iYXNlX2lub2RlX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zNDMwLS8qKlxcbmZzL3Byb2MvYmFzZS5jOjM0MzE6ICogcHJvY19mbHVzaF9waWQgLSAgUmVtb3ZlIGRjYWNoZSBlbnRyaWVzIGZvciBAcGlkIGZyb20gdGhlIC9wcm9jIGRjYWNoZS5cXG5mcy9wcm9jL2Jhc2UuYy0zNDMyLSAqIEBwaWQ6IHBpZCB0aGF0IHNob3VsZCBiZSBmbHVzaGVkLlxcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMzQ0OC1cXG5mcy9wcm9jL2Jhc2UuYzozNDQ5OnZvaWQgcHJvY19mbHVzaF9waWQoc3RydWN0IHBpZCAqcGlkKVxcbmZzL3Byb2MvYmFzZS5jLTM0NTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzozOC4zOTk5OTAxNjdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjA2MTkwNDM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYHByb2NfZmx1c2hfcGlkYCBhbmQgaXRzIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoIGBwcm9jX2ZsdXNoX3BpZGAuIEZpcnN0LCBJIHdhbnQgdG8gZGV0ZXJtaW5lIGlmIGl0J3MganVzdCBhIHN0dWIgZnVuY3Rpb27igJRtZWFuaW5nLCBkb2VzIGl0IGV4aXN0IHByaW1hcmlseSBmb3IgaW50ZXJmYWNlIGNvbXBhdGliaWxpdHkgb3IgaXMgaXQgZG9pbmcgYWN0dWFsIHdvcms/IElmIGl04oCZcyBub3QganVzdCBhIHBsYWNlaG9sZGVyLCB0aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IHJlbGllcyBvbiB0aGUgcHJlc2VuY2Ugb2YgYFBST0NfRlNgLiBUaGUgZmlsZSBzeXN0ZW0gaW50ZXJhY3Rpb24gYXNwZWN0IGlzIGNydWNpYWwuIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCB0byBgUFJPQ19GU2Agd2lsbCB0ZWxsIG1lIGlmIHRoaXMgZnVuY3Rpb24gaXMgdGlnaHRseSBjb3VwbGVkIHdpdGggYSBwYXJ0aWN1bGFyIGtlcm5lbCBjb25maWd1cmF0aW9uIG9yIGlmIGl0J3MgbW9yZSBtb2R1bGFyIGFuZCBwb3RlbnRpYWxseSBhZGFwdGFibGUuIEl0J3MgYSBxdWljayBhbmFseXNpcywgYnV0IGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgZm9yIGFueSBtb2RpZmljYXRpb25zIG9yIHVzYWdlIGluIGEgZGlmZmVyZW50IGNvbnRleHQuIExldCdzIGRpZyBpbiBhbmQgc2VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjMyLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NDAuNDYxODk3OTY1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwMTE3NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvY19mbHVzaF9waWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9wcm9jX2ZzLmg9ODU9ZXh0ZXJuIHZvaWQgcHJvY19yb290X2luaXQodm9pZCk7XFxuaW5jbHVkZS9saW51eC9wcm9jX2ZzLmg6ODY6ZXh0ZXJuIHZvaWQgcHJvY19mbHVzaF9waWQoc3RydWN0IHBpZCAqKTtcXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaC04Ny1cXG4tLVxcbmluY2x1ZGUvbGludXgvcHJvY19mcy5oPTE3Mj1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY19yb290X2luaXQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvcHJvY19mcy5oLTE3NS1cXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaDoxNzY6c3RhdGljIGlubGluZSB2b2lkIHByb2NfZmx1c2hfcGlkKHN0cnVjdCBwaWQgKnBpZClcXG5pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaC0xNzcte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzo0MC41ODA5MTQ4MzNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkzNjMyNzE4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqSW52ZXN0aWdhdGluZyBgcHJvY19mbHVzaF9waWRgIGFuZCBpdHMgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHByb2NfZmx1c2hfcGlkYCBhbmQgaW1tZWRpYXRlbHkgSSdtIHRoaW5raW5nLCBcIlJpZ2h0LCB0aGF0J3MgcGFydCBvZiB0aGUgYFBST0NfRlNgIGNvbmZpZ3VyYXRpb24sIGlzbid0IGl0P1wiIEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkndmUgZGl2ZWQgaW50byB0aGlzIHBhcnRpY3VsYXIgYXJlYSwgc28gdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBvZiBgQ09ORklHX1BST0NfRlNgLiBUaGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoYXQgaXMgdGhlIGluY2x1ZGUgZmlsZS4gTGV0J3MgaGVhZCBvdmVyIHRvIGBpbmNsdWRlL2xpbnV4L3Byb2NfZnMuaGAgYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX1BST0NfRlNgIHJlYWxseSBpcyB0aGUga2V5LiBPbmNlIEkndmUgdmVyaWZpZWQgaXRzIHJvbGUsIHRoZW4gSSB3aWxsIGtub3cgbW9yZSBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIG9wZXJhdGVzIGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MjcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzo0Mi41MTcyNDQyNzVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wcm9jX2ZzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTY1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTY1OlxcdCNlbmRpZiAvKiBDT05GSUdfUFJPQ19QSURfQVJDSF9TVEFUVVMgKi9cXG4gMTY2OlxcdFxcbiAxNjc6XFx0dm9pZCBhcmNoX3JlcG9ydF9tZW1pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSk7XFxuIDE2ODpcXHR2b2lkIGFyY2hfcHJvY19waWRfdGhyZWFkX2ZlYXR1cmVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTtcXG4gMTY5OlxcdFxcbiAxNzA6XFx0I2Vsc2UgLyogQ09ORklHX1BST0NfRlMgKi9cXG4gMTcxOlxcdFxcbiAxNzI6XFx0c3RhdGljIGlubGluZSB2b2lkIHByb2Nfcm9vdF9pbml0KHZvaWQpXFxuIDE3MzpcXHR7XFxuIDE3NDpcXHR9XFxuIDE3NTpcXHRcXG4gMTc2OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX2ZsdXNoX3BpZChzdHJ1Y3QgcGlkICpwaWQpXFxuIDE3NzpcXHR7XFxuIDE3ODpcXHR9XFxuIDE3OTpcXHRcXG4gMTgwOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3N5bWxpbmsoY29uc3QgY2hhciAqbmFtZSxcXG4gMTgxOlxcdFxcdFxcdHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50LGNvbnN0IGNoYXIgKmRlc3QpIHsgcmV0dXJuIE5VTEw7fVxcbiAxODI6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbWtkaXIoY29uc3QgY2hhciAqbmFtZSxcXG4gMTgzOlxcdFxcdHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50KSB7cmV0dXJuIE5VTEw7fVxcbiAxODQ6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfY3JlYXRlX21vdW50X3BvaW50KGNvbnN0IGNoYXIgKm5hbWUpIHsgcmV0dXJuIE5VTEw7IH1cXG4gMTg1OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpfcHJvY19ta2Rpcihjb25zdCBjaGFyICpuYW1lLCB1bW9kZV90IG1vZGUsXFxuIDE4NjpcXHRcXHRcXHRzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCwgdm9pZCAqZGF0YSwgYm9vbCBmb3JjZV9sb29rdXApXFxuIDE4NzpcXHR7XFxuIDE4ODpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMTg5OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NDIuNTE3MzE3NTY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcyMDI0NTM4NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYENPTkZJR19QUk9DX0ZTYCBhbmQgYHByb2NfZmx1c2hfcGlkKClgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcHJvY19mbHVzaF9waWQoKWAgZnVuY3Rpb24gYW5kIGl0cyBjb25uZWN0aW9uIHRvIGB0aHJlYWRfcGlkYC4gSXQgc2VlbXMgcHJldHR5IGNsZWFyIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSBwcmVzZW5jZSBvZiB0aGUgcHJvYyBmaWxlc3lzdGVtLiBJdCdzIGdvdCB0byBiZSBzdGFuZGFyZCBhbmQgbmVjZXNzYXJ5IHRvIGZsdXNoIHRob3NlIGRjYWNoZSBlbnRyaWVzIHJlbGF0ZWQgdG8gcHJvY2Vzc2VzLCByaWdodD8gVGhpcyBpcyBmdW5kYW1lbnRhbCwgZXNzZW50aWFsIHN0dWZmLiBBbmQgdGhlIGNvZGUgYWNjZXNzZXMgdGhhdCBgdGhyZWFkX3BpZGAgdmFyaWFibGUuIFNvLCB0aGUgaW1wbGljYXRpb24gaXMgdGhhdCB3aXRob3V0IHRoZSBwcm9jIGZpbGVzeXN0ZW0gZW5hYmxlZCwgdGhpcyBmdW5jdGlvbiBjYW4ndCBiZSBzYWZlbHkgZXhlY3V0ZWQuIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBMZXQncyB0YWtlIGEgbG9vayBhdCB0aGUgYGZzL3Byb2MvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgdGhlIGBQUk9DX0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB0aGUga2V5IHRvIGFsbCB0aGlzLCBhbmQgdGhhdCBlbmFibGluZyBpdCBkaXJlY3RseSB0aWVzIGludG8gd2hldGhlciBvciBub3Qgd2UgY2FuIHJ1biB0aGlzIGZ1bmN0aW9uIGFuZCBjb3JyZWN0bHkgZmx1c2ggdGhvc2UgUElEIHJlbGF0ZWQgY2FjaGUgZW50cmllcy4gSXQncyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBpcyBhaXJ0aWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTMxMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NDkuNzE5NzczNDQ2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUyMjk4MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBST0NfRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvcHJvYy9LY29uZmlnOjI6Y29uZmlnIFBST0NfRlNcXG5mcy9wcm9jL0tjb25maWctMy1cXHRib29sIFxcXCIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NTAuMjE1MDExOTc4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwMzE1MjExMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSB3aXRoIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBxdWljayBzY2FuIG9mIGBmcy9wcm9jL0tjb25maWdgLiBMZXQncyBqdXN0IGdyYWIgdGhlIGZpcnN0IHR3ZW50eSBsaW5lcywgdG8gc3RhcnQuIEkgd2FudCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcg4oCTIHNlZSBpZiBJIGNhbiBnZXQgYSBzZW5zZSBmb3Igd2hhdCdzIGJlaW5nIGRlZmluZWQgb3IgZW5hYmxlZCBpbiB0aGUgYHByb2NgIGZpbGVzeXN0ZW0gY29udGV4dC4gVGhpcyB1c3VhbGx5IGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludCB3aGVuIEkgYW0gdHJ5aW5nIHRvIGNoYW5nZSByZWxhdGVkIGNvbmZpZ3VyYXRpb24sIG9yIHVuZGVyc3RhbmQgaW50ZXJhY3Rpb25zLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBpbml0aWFsIGxpbmVzIGZyYW1lIHRoZSBiaWdnZXIgcGljdHVyZSBvZiBwcm9jZnMgY29uZmlndXJhdGlvbiwgeW91IGtub3csIHVuZGVyc3RhbmQgaXRzIGFyY2hpdGVjdHVyYWwgZGVzaWduLiBMZXQncyBzZWUgd2hhdCBnZW1zIGFyZSBjb250YWluZWQgaW4gdGhpcyBpbml0aWFsIHNlZ21lbnQgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTY3NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAxOjAzOjUyLjI0NjUzNTQ1OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBQUk9DX0ZTXFxuICAgMzpcXHRcXHRib29sIFxcXCIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4gICA0OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDU6XFx0XFx0aGVscFxcbiAgIDY6XFx0XFx0ICBUaGlzIGlzIGEgdmlydHVhbCBmaWxlIHN5c3RlbSBwcm92aWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN0YXR1c1xcbiAgIDc6XFx0XFx0ICBvZiB0aGUgc3lzdGVtLiBcXFwiVmlydHVhbFxcXCIgbWVhbnMgdGhhdCBpdCBkb2Vzbid0IHRha2UgdXAgYW55IHNwYWNlIG9uXFxuICAgODpcXHRcXHQgIHlvdXIgaGFyZCBkaXNrOiB0aGUgZmlsZXMgYXJlIGNyZWF0ZWQgb24gdGhlIGZseSBieSB0aGUga2VybmVsIHdoZW5cXG4gICA5OlxcdFxcdCAgeW91IHRyeSB0byBhY2Nlc3MgdGhlbS4gQWxzbywgeW91IGNhbm5vdCByZWFkIHRoZSBmaWxlcyB3aXRoIG9sZGVyXFxuICAxMDpcXHRcXHQgIHZlcnNpb24gb2YgdGhlIHByb2dyYW0gbGVzczogeW91IG5lZWQgdG8gdXNlIG1vcmUgb3IgY2F0LlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIEl0J3MgdG90YWxseSBjb29sOyBmb3IgZXhhbXBsZSwgXFxcImNhdCAvcHJvYy9pbnRlcnJ1cHRzXFxcIiBnaXZlc1xcbiAgMTM6XFx0XFx0ICBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoZSBkaWZmZXJlbnQgSVJRcyBhcmUgdXNlZCBmb3IgYXQgdGhlIG1vbWVudFxcbiAgMTQ6XFx0XFx0ICAodGhlcmUgaXMgYSBzbWFsbCBudW1iZXIgb2YgSW50ZXJydXB0IFJlUXVlc3QgbGluZXMgaW4geW91ciBjb21wdXRlclxcbiAgMTU6XFx0XFx0ICB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBhdHRhY2hlZCBkZXZpY2VzIHRvIGdhaW4gdGhlIENQVSdzIGF0dGVudGlvbiAtLVxcbiAgMTY6XFx0XFx0ICBvZnRlbiBhIHNvdXJjZSBvZiB0cm91YmxlIGlmIHR3byBkZXZpY2VzIGFyZSBtaXN0YWtlbmx5IGNvbmZpZ3VyZWRcXG4gIDE3OlxcdFxcdCAgdG8gdXNlIHRoZSBzYW1lIElSUSkuIFRoZSBwcm9ncmFtIHByb2NpbmZvIHRvIGRpc3BsYXkgc29tZVxcbiAgMTg6XFx0XFx0ICBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHN5c3RlbSBnYXRoZXJlZCBmcm9tIHRoZSAvcHJvYyBmaWxlIHN5c3RlbS5cXG4gIDE5OlxcdFxcbiAgMjA6XFx0XFx0ICBCZWZvcmUgeW91IGNhbiB1c2UgdGhlIC9wcm9jIGZpbGUgc3lzdGVtLCBpdCBoYXMgdG8gYmUgbW91bnRlZCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NTIuMjQ2NTk3ODc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNTIxNjE0MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBwcm9jX2ZsdXNoX3BpZGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBwcm9jX2ZsdXNoX3BpZGAgaXMgaW1wbGVtZW50ZWQuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgYGZzL3Byb2MvYmFzZS5jYCBmaWxlLiBJJ20gYWxyZWFkeSB0aGlua2luZyBhYm91dCB3aGF0IEknbSBsb29raW5nIGZvcjogaG93IGV4YWN0bHkgZG9lcyB0aGUga2VybmVsIGhhbmRsZSB0aGUgY2xlYXJpbmcgb2YgcHJvY2Vzcy1zcGVjaWZpYyBpbmZvcm1hdGlvbiB3aXRoaW4gdGhlIGAvcHJvY2AgZmlsZXN5c3RlbT8gV2hhdCBhcmUgdGhlIGtleSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgbWFuaXB1bGF0ZWQgaGVyZT8gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBpbnRlcmFjdGlvbnMgd2l0aCB0YXNrIHN0cnVjdHVyZXMsIGZpbGUgZGVzY3JpcHRvcnMsIGFuZCBwb3RlbnRpYWxseSBzb21lIGtpbmQgb2YgcmVmZXJlbmNlIGNvdW50aW5nIG9yIGxvY2tpbmcgbWVjaGFuaXNtIHRvIGVuc3VyZSBkYXRhIGludGVncml0eS4gTGV0J3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBpcyBjb3JyZWN0Li4uIG9yIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucyBvciBkZXNpZ24gY2hvaWNlcyB0aGF0IEkgaGFkbid0IGNvbnNpZGVyZWQuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI0OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NTUuMjk4NzYxNjgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL2Jhc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDQ1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNDQ1OlxcdCAqICAgICAgIHRoYXQgbm8gZGNhY2hlIGVudHJpZXMgd2lsbCBleGlzdCBhZnRlciBhIHByb2Nlc3MgaXMgcmVhcGVkXFxuMzQ0NjpcXHQgKiAgICAgICBpdCBqdXN0IG1ha2VzIGl0IHZlcnkgdW5saWtlbHkgdGhhdCBhbnkgd2lsbCBwZXJzaXN0LlxcbjM0NDc6XFx0ICovXFxuMzQ0ODpcXHRcXG4zNDQ5OlxcdHZvaWQgcHJvY19mbHVzaF9waWQoc3RydWN0IHBpZCAqcGlkKVxcbjM0NTA6XFx0e1xcbjM0NTE6XFx0XFx0cHJvY19pbnZhbGlkYXRlX3NpYmxpbmdzX2RjYWNoZShcXHUwMDI2cGlkLVxcdTAwM2Vpbm9kZXMsIFxcdTAwMjZwaWQtXFx1MDAzZWxvY2spO1xcbjM0NTI6XFx0fVxcbjM0NTM6XFx0XFxuMzQ1NDpcXHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqcHJvY19waWRfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSxcXG4zNDU1OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY29uc3Qgdm9pZCAqcHRyKVxcbjM0NTY6XFx0e1xcbjM0NTc6XFx0XFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4zNDU4OlxcdFxcbjM0NTk6XFx0XFx0aW5vZGUgPSBwcm9jX3BpZF9tYWtlX2Jhc2VfaW5vZGUoZGVudHJ5LVxcdTAwM2VkX3NiLCB0YXNrLFxcbjM0NjA6XFx0XFx0XFx0XFx0XFx0XFx0IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTyk7XFxuMzQ2MTpcXHRcXHRpZiAoIWlub2RlKVxcbjM0NjI6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuMzQ2MzpcXHRcXG4zNDY0OlxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNnByb2NfdGdpZF9iYXNlX2lub2RlX29wZXJhdGlvbnM7XFxuMzQ2NTpcXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2cHJvY190Z2lkX2Jhc2Vfb3BlcmF0aW9ucztcXG4zNDY2OlxcdFxcdGlub2RlLVxcdTAwM2VpX2ZsYWdzfD1TX0lNTVVUQUJMRTtcXG4zNDY3OlxcdFxcbjM0Njg6XFx0XFx0c2V0X25saW5rKGlub2RlLCBubGlua190Z2lkKTtcXG4zNDY5OlxcdFxcdHBpZF91cGRhdGVfaW5vZGUodGFzaywgaW5vZGUpO1xcbjM0NzA6XFx0XFxuMzQ3MTpcXHRcXHRyZXR1cm4gZF9zcGxpY2VfYWxpYXNfb3BzKGlub2RlLCBkZW50cnksIFxcdTAwMjZwaWRfZGVudHJ5X29wZXJhdGlvbnMpO1xcbjM0NzI6XFx0fVxcbjM0NzM6XFx0XFxuMzQ3NDpcXHRzdHJ1Y3QgZGVudHJ5ICpwcm9jX3BpZF9sb29rdXAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bnNpZ25lZCBpbnQgZmxhZ3MpXFxuMzQ3NTpcXHR7XFxuMzQ3NjpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XFxuMzQ3NzpcXHRcXHR1bnNpZ25lZCB0Z2lkO1xcbjM0Nzg6XFx0XFx0c3RydWN0IHByb2NfZnNfaW5mbyAqZnNfaW5mbztcXG4zNDc5OlxcdFxcdHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucztcXG4zNDgwOlxcdFxcdHN0cnVjdCBkZW50cnkgKnJlc3VsdCA9IEVSUl9QVFIoLUVOT0VOVCk7XFxuMzQ4MTpcXHRcXG4zNDgyOlxcdFxcdHRnaWQgPSBuYW1lX3RvX2ludChcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX25hbWUpO1xcbjM0ODM6XFx0XFx0aWYgKHRnaWQgPT0gfjBVKVxcbjM0ODQ6XFx0XFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAxOjAzOjU1LjI5OTM3NzUzM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTA2ODc5NDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBSYWNlIENvbmRpdGlvbiBpbiBQcm9jZXNzIFRlcm1pbmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGBwcm9jX2ZsdXNoX3BpZGAgaW50ZXJhY3RzIHdpdGggcHJvY2VzcyBpZGVudGlmaWVycyAoYHBpZGApLiBJdCBhY2Nlc3NlcyBgcGlkLVx1MDAzZWlub2Rlc2AgYW5kIGBwaWQtXHUwMDNlbG9ja2AuIEluIHRoZSBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbiwgSSBzZWUgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZTogYSBgdGhyZWFkX3BpZGAgaXMgcmV0cmlldmVkIHVzaW5nIGBnZXRfcGlkYCwgdGhlbiBwYXNzZWQgdG8gYHByb2NfZmx1c2hfcGlkYCwgYW5kIGZpbmFsbHkgcmVsZWFzZWQgdXNpbmcgYHB1dF9waWRgLlxuXG5NeSBpbW1lZGlhdGUgcmVhY3Rpb24gaXMgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBzeW1ib2xzOiBgcmVsZWFzZV90YXNrYCBhbmQgYHByb2NfZmx1c2hfcGlkYC4gTGV0J3MgY2hlY2sgdGhlIHJlbGV2YW50IEVuYWJsZUNvbmZpZ3M6IHNlZW1zIGxpa2UgYFBST0NfRlNgIGlzIGludm9sdmVkIGhlcmUuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgZnV6emluZyByZWFkaW5lc3MuIFllcCwgdGhpcyBsb29rcyBwcm9taXNpbmcuIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCBhbmQgdGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBzcG90LW9uOiBgcmVsZWFzZV90YXNrYCBhbmQgYHByb2NfZmx1c2hfcGlkYC4gVGhlIGVuYWJsaW5nIGNvbmRpdGlvbiwgYFBST0NfRlNgLCBhbHNvIGNoZWNrcyBvdXQuXG5cbkhlcmUncyB0aGUgcmVhc29uaW5nOiB0aGUgcGF0Y2ggaXMgYWJvdXQgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgdnVsbmVyYWJpbGl0eS4gIFNwZWNpZmljYWxseSwgdGhlcmUncyBhIHJpc2sgdGhhdCBgdGhyZWFkX3BpZGAgY291bGQgYmUgZnJlZWQgYnkgYF9fdW5oYXNoX3Byb2Nlc3MoKWAgZHVyaW5nIHByb2Nlc3MgdGVybWluYXRpb24gYmVmb3JlIGBwcm9jX2ZsdXNoX3BpZCgpYCBnZXRzIGEgY2hhbmNlIHRvIHVzZSBpdC4gVGhpcyBgZ2V0X3BpZCgpYC9gcHV0X3BpZCgpYCBwYWlyIGluIGByZWxlYXNlX3Rhc2tgIHNlZW1zIHRvIGJlIHRoZSBmaXguIFRha2luZyBhIHJlZmVyZW5jZSB3aXRoIGBnZXRfcGlkKClgIGJlZm9yZSBgX19leGl0X3NpZ25hbCgpYCBhbmQgZHJvcHBpbmcgaXQgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKClgIGVuc3VyZXMgdGhhdCBgdGhyZWFkX3BpZGAgaXMgdmFsaWQgd2hpbGUgaXQncyBiZWluZyBhY2Nlc3NlZC4gVGhpcyBsb29rcyBsaWtlIGNvcmUgcHJvY2VzcyBleGl0IGxvZ2ljIGFuZCB0b3VjaGVzIHByb2NmcyBjbGVhbnVwLCBzbyB0aGUgZml4IG1ha2VzIHNlbnNlLlxuXG5Ob3csIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMTQsIk91dHB1dFRva2VucyI6MTMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDM6NTguODA2MjYwMDgxWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ1MDc5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWxlYXNlX3Rhc2tcIixcbiAgICBcInByb2NfZmx1c2hfcGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBpbiByZWxlYXNlX3Rhc2soKSB3aGVyZSB0aHJlYWRfcGlkIGNvdWxkIGJlIGZyZWVkIGR1cmluZyBQSURUWVBFIGRldGFjaG1lbnQgaW4gX191bmhhc2hfcHJvY2VzcygpIGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpIGFjY2Vzc2VkIGl0LiBJdCBwaW5zIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYW5kIHJlbGVhc2VzIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCksIGFmZmVjdGluZyBjb3JlIHRhc2sgdGVybWluYXRpb24gYW5kIHByb2NmcyBkY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZWxlYXNlX3Rhc2tcIixcbiAgICBcInByb2NfZmx1c2hfcGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBpbiByZWxlYXNlX3Rhc2soKSB3aGVyZSB0aHJlYWRfcGlkIGNvdWxkIGJlIGZyZWVkIGR1cmluZyBQSURUWVBFIGRldGFjaG1lbnQgaW4gX191bmhhc2hfcHJvY2VzcygpIGJlZm9yZSBwcm9jX2ZsdXNoX3BpZCgpIGFjY2Vzc2VkIGl0LiBJdCBwaW5zIHRocmVhZF9waWQgd2l0aCBnZXRfcGlkKCkgYW5kIHJlbGVhc2VzIGl0IHdpdGggcHV0X3BpZCgpIGFmdGVyIHByb2NfZmx1c2hfcGlkKCksIGFmZmVjdGluZyBjb3JlIHRhc2sgdGVybWluYXRpb24gYW5kIHByb2NmcyBkY2FjaGUgaW52YWxpZGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzo1OC44ODA3NzQwOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI1NDU3MTA5NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzo1OC44ODExOTA1MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjEyNTQ1Mjg5Njc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRyZXNzZXMgYW4gb2JqZWN0IGxpZmV0aW1lIC8gdXNlLWFmdGVyLWZyZWUgaXNzdWUgaW4gYHJlbGVhc2VfdGFzaygpYCB3aGVyZSBgdGhyZWFkX3BpZGAgY291bGQgYmUgZnJlZWQgcHJpb3IgdG8gYHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpYCB3aGVuIHRoZSBsYXN0IFBJRFRZUEUgaXMgZGV0YWNoZWQgZHVyaW5nIHByb2Nlc3MgdW5oYXNoaW5nLiBJdCBmaXhlcyB0aGlzIGJ5IHBpbm5pbmcgYHRocmVhZF9waWRgIHVzaW5nIGBnZXRfcGlkKClgIGFuZCBzdWJzZXF1ZW50bHkgcmVsZWFzaW5nIGl0IHdpdGggYHB1dF9waWQoKWAuXFxuXFxuVGhpcyBjaGFuZ2Ugc29sZWx5IGFmZmVjdHMgb2JqZWN0IHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbGlmZXRpbWUgbWFuYWdlbWVudCAocHJldmVudGluZyBhIHVzZS1hZnRlci1mcmVlKS4gVXNlLWFmdGVyLWZyZWUgYnVncyBhbmQgbWVtb3J5IGxpZmV0aW1lIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBkb2VzIG5vdCBhbHRlciBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlIChpbmZvbGVha3MpLCBhbmQgZG9lcyBub3QgaW50cm9kdWNlIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDczMGZmMGQ1MTgyNGViODEzMjc5YTEyNTRlYWQ0NTk4YzY1NjkyZTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwMTowMzoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jXG5pbmRleCA5NzY4NmFmODk1MDEzLi40ZTAyOGYxNTc1OTc4IDEwMDY0NFxuLS0tIGEva2VybmVsL2V4aXQuY1xuKysrIGIva2VybmVsL2V4aXQuY1xuQEAgLTI2MSw4ICsyNjEsMTEgQEAgdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0cGlkZnNfZXhpdChwKTtcbiBcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XG4gXG4tXHQvKiBSZXRyaWV2ZSBAdGhyZWFkX3BpZCBiZWZvcmUgX191bmhhc2hfcHJvY2VzcygpIG1heSBzZXQgaXQgdG8gTlVMTC4gKi9cbi1cdHRocmVhZF9waWQgPSB0YXNrX3BpZChwKTtcbitcdC8qXG4rXHQgKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBjbGVhcnMgaXQuIFRoZSBsYXN0XG4rXHQgKiBQSURUWVBFIGRldGFjaCBjYW4gb3RoZXJ3aXNlIGZyZWUgaXQgYmVmb3JlIHByb2NfZmx1c2hfcGlkKCkuXG4rXHQgKi9cbitcdHRocmVhZF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKHApKTtcbiBcbiBcdHdyaXRlX2xvY2tfaXJxKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuIFx0cHRyYWNlX3JlbGVhc2VfdGFzayhwKTtcbkBAIC0yOTEsOCArMjk0LDggQEAgdm9pZCByZWxlYXNlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFx0fVxuIFxuIFx0d3JpdGVfdW5sb2NrX2lycShcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbi1cdC8qIEB0aHJlYWRfcGlkIGNhbid0IGdvIGF3YXkgdW50aWwgZnJlZV9waWRzKCkgYmVsb3cgKi9cbiBcdHByb2NfZmx1c2hfcGlkKHRocmVhZF9waWQpO1xuK1x0cHV0X3BpZCh0aHJlYWRfcGlkKTtcbiBcdGV4aXRfY3JlZF9uYW1lc3BhY2VzKHApO1xuIFx0YWRkX2RldmljZV9yYW5kb21uZXNzKFx1MDAyNnAtXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSxcbiBcdFx0XHQgICAgICBzaXplb2YocC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lKSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowMzo1OC44ODExOTE1MloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDE5ODYxOTIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBQYXRjaCBpbiBga2VybmVsL2V4aXQuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgcmVsZWFzZV90YXNrYCBmdW5jdGlvbiB3aXRoaW4gYGtlcm5lbC9leGl0LmNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgY2xlYXJseSBhcm91bmQgUElEIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB0aGUgaGFuZGxpbmcgb2YgYHRocmVhZF9waWRgLiBJIHNlZSB0aGV5J3JlIG1vZGlmeWluZyB0aGUgcmV0cmlldmFsIGFuZCB1c2FnZSBvZiBgdGhyZWFkX3BpZGAgd2l0aGluIGByZWxlYXNlX3Rhc2tgLlxuXG5MZXQncyBkaXNzZWN0IHRoZSBpbnRlbnQ6IFRoZXkgYXJlIG1vdmluZyBmcm9tIGEgc2ltcGxlIGFzc2lnbm1lbnQgdG8gYGdldF9waWQoKWAgYmVmb3JlIGBfX3VuaGFzaF9wcm9jZXNzKClgLCBhbmQgYWRkaW5nIGEgYHB1dF9waWQoKWAgYWZ0ZXIgYHByb2NfZmx1c2hfcGlkKClgIGNhbGwsIHRvIGVuc3VyZSB0aGUgUElEIGlzbid0IHByZW1hdHVyZWx5IGZyZWVkLiBUaGUgY29tbWVudCBtZW50aW9ucyBhIHJhY2UgY29uZGl0aW9uOiBgUElEVFlQRWAgZGV0YWNoIGNvdWxkIGZyZWUgdGhlIFBJRCBiZWZvcmUgYHByb2NfZmx1c2hfcGlkKClgIGlzIGNhbGxlZC4gVGhhdCdzIGEgY3J1Y2lhbCBwb2ludC4gRXNzZW50aWFsbHksIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBQSUQgaXNuJ3QgdW5yZWZlcmVuY2VkIGJlZm9yZSBgcHJvY19mbHVzaF9waWQoKWAgY2FuIG9wZXJhdGUgb24gaXQuXG5cblRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLCBJIG5lZWQgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBzbyBJJ2xsIGp1bXAgb3ZlciB0byBsaW5lIDI2MSBvZiBga2VybmVsL2V4aXQuY2AuIEkgbmVlZCB0aGF0IGZ1bGwgY29udGV4dCB0byBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIHRvIHVuZGVyc3RhbmQgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBhcHByb2FjaCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwcm9jZXNzIHRlcm1pbmF0aW9uIHNlcXVlbmNlLiBUaGlzIGxvb2tzIGxpa2UgYSBzdWJ0bGUsIGJ1dCBwb3RlbnRpYWxseSBjcml0aWNhbCBmaXggZm9yIGEgcmFjZSBjb25kaXRpb24gcmVsYXRlZCB0byBQSUQgcmVzb3VyY2UgbWFuYWdlbWVudCBkdXJpbmcgdGFzayBleGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDE6MDQ6MDQuMzAxMDU2MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL2V4aXQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0e1xcbiAyNDY6XFx0fVxcbiAyNDc6XFx0XFxuIDI0ODpcXHR2b2lkIHJlbGVhc2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIDI0OTpcXHR7XFxuIDI1MDpcXHRcXHRzdHJ1Y3QgcmVsZWFzZV90YXNrX3Bvc3QgcG9zdDtcXG4gMjUxOlxcdFxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyO1xcbiAyNTI6XFx0XFx0c3RydWN0IHBpZCAqdGhyZWFkX3BpZDtcXG4gMjUzOlxcdFxcdGludCB6YXBfbGVhZGVyO1xcbiAyNTQ6XFx0cmVwZWF0OlxcbiAyNTU6XFx0XFx0bWVtc2V0KFxcdTAwMjZwb3N0LCAwLCBzaXplb2YocG9zdCkpO1xcbiAyNTY6XFx0XFxuIDI1NzpcXHRcXHQvKiBkb24ndCBuZWVkIHRvIGdldCB0aGUgUkNVIHJlYWRsb2NrIGhlcmUgLSB0aGUgcHJvY2VzcyBpcyBkZWFkIGFuZFxcbiAyNTg6XFx0XFx0ICogY2FuJ3QgYmUgbW9kaWZ5aW5nIGl0cyBvd24gY3JlZGVudGlhbHMuICovXFxuIDI1OTpcXHRcXHRkZWNfcmxpbWl0X3Vjb3VudHModGFza191Y291bnRzKHApLCBVQ09VTlRfUkxJTUlUX05QUk9DLCAxKTtcXG4gMjYwOlxcdFxcbiAyNjE6XFx0XFx0cGlkZnNfZXhpdChwKTtcXG4gMjYyOlxcdFxcdGNncm91cF90YXNrX3JlbGVhc2UocCk7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdC8qXFxuIDI2NTpcXHRcXHQgKiBQaW4gQHRocmVhZF9waWQgYmVmb3JlIF9fdW5oYXNoX3Byb2Nlc3MoKSBjbGVhcnMgaXQuIFRoZSBsYXN0XFxuIDI2NjpcXHRcXHQgKiBQSURUWVBFIGRldGFjaCBjYW4gb3RoZXJ3aXNlIGZyZWUgaXQgYmVmb3JlIHByb2NfZmx1c2hfcGlkKCkuXFxuIDI2NzpcXHRcXHQgKi9cXG4gMjY4OlxcdFxcdHRocmVhZF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKHApKTtcXG4gMjY5OlxcdFxcbiAyNzA6XFx0XFx0d3JpdGVfbG9ja19pcnEoXFx1MDAyNnRhc2tsaXN0X2xvY2spO1xcbiAyNzE6XFx0XFx0cHRyYWNlX3JlbGVhc2VfdGFzayhwKTtcXG4gMjcyOlxcdFxcdF9fZXhpdF9zaWduYWwoXFx1MDAyNnBvc3QsIHApO1xcbiAyNzM6XFx0XFxuIDI3NDpcXHRcXHQvKlxcbiAyNzU6XFx0XFx0ICogSWYgd2UgYXJlIHRoZSBsYXN0IG5vbi1sZWFkZXIgbWVtYmVyIG9mIHRoZSB0aHJlYWRcXG4gMjc2OlxcdFxcdCAqIGdyb3VwLCBhbmQgdGhlIGxlYWRlciBpcyB6b21iaWUsIHRoZW4gbm90aWZ5IHRoZVxcbiAyNzc6XFx0XFx0ICogZ3JvdXAgbGVhZGVyJ3MgcGFyZW50IHByb2Nlc3MuIChpZiBpdCB3YW50cyBub3RpZmljYXRpb24uKVxcbiAyNzg6XFx0XFx0ICovXFxuIDI3OTpcXHRcXHR6YXBfbGVhZGVyID0gMDtcXG4gMjgwOlxcdFxcdGxlYWRlciA9IHAtXFx1MDAzZWdyb3VwX2xlYWRlcjtcXG4gMjgxOlxcdFxcdGlmIChsZWFkZXIgIT0gcCBcXHUwMDI2XFx1MDAyNiB0aHJlYWRfZ3JvdXBfZW1wdHkobGVhZGVyKVxcbiAyODI6XFx0XFx0XFx0XFx0XFx1MDAyNlxcdTAwMjYgbGVhZGVyLVxcdTAwM2VleGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7XFxuIDI4MzpcXHRcXHRcXHQvKiBmb3IgcGlkZnNfZXhpdCgpIGFuZCBkb19ub3RpZnlfcGFyZW50KCkgKi9cXG4gMjg0OlxcdFxcdFxcdGlmIChsZWFkZXItXFx1MDAzZXNpZ25hbC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTSUdOQUxfR1JPVVBfRVhJVClcXG4gMjg1OlxcdFxcdFxcdFxcdGxlYWRlci1cXHUwMDNlZXhpdF9jb2RlID0gbGVhZGVyLVxcdTAwM2VzaWduYWwtXFx1MDAzZWdyb3VwX2V4aXRfY29kZTtcXG4gMjg2OlxcdFxcdFxcdC8qXFxuIDI4NzpcXHRcXHRcXHQgKiBJZiB3ZSB3ZXJlIHRoZSBsYXN0IGNoaWxkIHRocmVhZCBhbmQgdGhlIGxlYWRlciBoYXNcXG4gMjg4OlxcdFxcdFxcdCAqIGV4aXRlZCBhbHJlYWR5LCBhbmQgdGhlIGxlYWRlcidzIHBhcmVudCBpZ25vcmVzIFNJR0NITEQsXFxuIDI4OTpcXHRcXHRcXHQgKiB0aGVuIHdlIGFyZSB0aGUgb25lIHdobyBzaG91bGQgcmVsZWFzZSB0aGUgbGVhZGVyLlxcbiAyOTA6XFx0XFx0XFx0ICovXFxuIDI5MTpcXHRcXHRcXHR6YXBfbGVhZGVyID0gZG9fbm90aWZ5X3BhcmVudChsZWFkZXIsIGxlYWRlci1cXHUwMDNlZXhpdF9zaWduYWwpO1xcbiAyOTI6XFx0XFx0XFx0aWYgKHphcF9sZWFkZXIpXFxuIDI5MzpcXHRcXHRcXHRcXHRsZWFkZXItXFx1MDAzZWV4aXRfc3RhdGUgPSBFWElUX0RFQUQ7XFxuIDI5NDpcXHRcXHR9XFxuIDI5NTpcXHRcXG4gMjk2OlxcdFxcdHdyaXRlX3VubG9ja19pcnEoXFx1MDAyNnRhc2tsaXN0X2xvY2spO1xcbiAyOTc6XFx0XFx0cHJvY19mbHVzaF9waWQodGhyZWFkX3BpZCk7XFxuIDI5ODpcXHRcXHRwdXRfcGlkKHRocmVhZF9waWQpO1xcbiAyOTk6XFx0XFx0ZXhpdF9jcmVkX25hbWVzcGFjZXMocCk7XFxuIDMwMDpcXHRcXHRhZGRfZGV2aWNlX3JhbmRvbW5lc3MoXFx1MDAyNnAtXFx1MDAzZXNlLnN1bV9leGVjX3J1bnRpbWUsXFxuIDMwMTpcXHRcXHRcXHRcXHQgICAgICBzaXplb2YocC1cXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZSkpO1xcbiAzMDI6XFx0XFx0ZnJlZV9waWRzKHBvc3QucGlkcyk7XFxuIDMwMzpcXHRcXHRyZWxlYXNlX3RocmVhZChwKTtcXG4gMzA0OlxcdFxcdC8qXFxuIDMwNTpcXHRcXHQgKiBUaGlzIHRhc2sgd2FzIGFscmVhZHkgcmVtb3ZlZCBmcm9tIHRoZSBwcm9jZXNzL3RocmVhZC9waWQgbGlzdHNcXG4gMzA2OlxcdFxcdCAqIGFuZCBsb2NrX3Rhc2tfc2lnaGFuZChwKSBjYW4ndCBzdWNjZWVkLiBOb2JvZHkgZWxzZSBjYW4gdG91Y2hcXG4gMzA3OlxcdFxcdCAqIC1cXHUwMDNlcGVuZGluZyBvciwgaWYgZ3JvdXAgZGVhZCwgc2lnbmFsLVxcdTAwM2VzaGFyZWRfcGVuZGluZy4gV2UgY2FuIGNhbGxcXG4gMzA4OlxcdFxcdCAqIGZsdXNoX3NpZ3F1ZXVlKCkgbG9ja2xlc3MuXFxuIDMwOTpcXHRcXHQgKi9cXG4gMzEwOlxcdFxcdGZsdXNoX3NpZ3F1ZXVlKFxcdTAwMjZwLVxcdTAwM2VwZW5kaW5nKTtcXG4gMzExOlxcdFxcdGlmICh0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKVxcbiAzMTI6XFx0XFx0XFx0Zmx1c2hfc2lncXVldWUoXFx1MDAyNnAtXFx1MDAzZXNpZ25hbC1cXHUwMDNlc2hhcmVkX3BlbmRpbmcpO1xcbiAzMTM6XFx0XFxuIDMxNDpcXHRcXHRwdXRfdGFza19zdHJ1Y3RfcmN1X3VzZXIocCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDAxOjA0OjA0LjMwMTIxNDkzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcxMjUyNDQwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIHByZXR0eSBjbGFzc2ljIHVzZS1hZnRlci1mcmVlIG9yIHJhY2UgY29uZGl0aW9uIGlzc3VlLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGxpa2UgYHRocmVhZF9waWRgIHdhcyBiZWluZyBhY2Nlc3NlZCB3aXRob3V0IHByb3BlciByZWZlcmVuY2UgY291bnRpbmcgdmlhIGBnZXRfcGlkKClgLiBUaGUgdnVsbmVyYWJpbGl0eSBsaWVzIGluIHRoZSBmYWN0IHRoYXQgYF9fdW5oYXNoX3Byb2Nlc3MoKWAgKGNhbGxlZCB2aWEgYF9fZXhpdF9zaWduYWxgKSBjb3VsZCBwb3RlbnRpYWxseSBkZXRhY2ggdGhlIGxhc3QgYFBJRFRZUEVgLCBsZWFkaW5nIHRvIGEgc2l0dWF0aW9uIHdoZXJlIGB0aHJlYWRfcGlkYCBpcyBmcmVlZCBwcmVtYXR1cmVseSwgYmVmb3JlIGBwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKWAgb3Igb3RoZXIgYWNjZXNzZXMgaGFwcGVuLiBUaGUgZml4PyBVc2luZyBgZ2V0X3BpZCh0YXNrX3BpZChwKSlgIHRvIGdyYWIgYSByZWZlcmVuY2Ugb24gYHRocmVhZF9waWRgIGFuZCB0aGVuIGRyb3BwaW5nIGl0IHdpdGggYHB1dF9waWQodGhyZWFkX3BpZClgIGFmdGVyIGBwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKWAuIEEgc29saWQsIHN0YW5kYXJkIGFwcHJvYWNoIHRvIGVuc3VyZSB0aGUgUElEJ3MgbGlmZXRpbWUgaXMgbWFuYWdlZCBjb3JyZWN0bHkuXG5cbk5vdywgbGV0J3MgdGhpbmsgYWJvdXQgS0FTQU4gYW5kIEtNU0FOLiBUaGlzIHBhdGNoICpkaXJlY3RseSogYWRkcmVzc2VzIGEgdXNlLWFmdGVyLWZyZWUgaXNzdWUuIFRoYXQncyBhIEtBU0FOIGJyZWFkLWFuZC1idXR0ZXIga2luZCBvZiBidWcuIFNvLCBpbiB0ZXJtcyBvZiBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQsIGl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXQgKnJlc29sdmVzKiBhIFVBRiBidWcgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgb25lcy4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBhbGxvY2F0ZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZSBleGlzdGluZyBgc3RydWN0IHBpZGAgaXMgYmVpbmcgcHJvcGVybHkgcmVmZXJlbmNlZCBhbmQgbWFuYWdlZCB3aXRoIGBnZXRfcGlkKClgIGFuZCBgcHV0X3BpZCgpYC4gYHRocmVhZF9waWRgIGlzIGluaXRpYWxpemVkIHdpdGggYGdldF9waWQoKWAgYXMgd2VsbC4gU28sIG5vIEtNU0FOIHJpc2tzIGhlcmUuXG5cblRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSd2ZSBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSB3aXRoIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIGZpZWxkcy4gVGhlcmUncyBubyByZWxpYW5jZSBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBhbnkgY29uZGl0aW9uYWwgbG9naWMuIE5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBhbGxvY2F0ZWQgYW5kIHBvdGVudGlhbGx5IHJlYWQgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcy4gQW5kLCB0aGUgY29kZSBjaGFuZ2VzIGRvbid0IGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMgdmlhIGJvdW5kIGNoZWNrcyBvciBhbnl0aGluZyBsaWtlIHRoYXQuXG5cbkluIHNob3J0LCB0aGlzIGlzIHByaW1hcmlseSBhIG1lbW9yeSBsaWZldGltZSBjb25jZXJuLCBiZXN0IGhhbmRsZWQgYnkgS0FTQU4uIEl0J3MgYSBcIk5lZWRzS01TQU49ZmFsc2VcIiBzY2VuYXJpby5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkzOSwiT3V0cHV0VG9rZW5zIjoxOTYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwMTowNDoxMS40MjY0NjE1MzRaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjg1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHJlc3NlcyBhbiBvYmplY3QgbGlmZXRpbWUgLyB1c2UtYWZ0ZXItZnJlZSBpc3N1ZSBpbiBgcmVsZWFzZV90YXNrKClgIHdoZXJlIGB0aHJlYWRfcGlkYCBjb3VsZCBiZSBmcmVlZCBwcmlvciB0byBgcHJvY19mbHVzaF9waWQodGhyZWFkX3BpZClgIHdoZW4gdGhlIGxhc3QgUElEVFlQRSBpcyBkZXRhY2hlZCBkdXJpbmcgcHJvY2VzcyB1bmhhc2hpbmcuIEl0IGZpeGVzIHRoaXMgYnkgcGlubmluZyBgdGhyZWFkX3BpZGAgdXNpbmcgYGdldF9waWQoKWAgYW5kIHN1YnNlcXVlbnRseSByZWxlYXNpbmcgaXQgd2l0aCBgcHV0X3BpZCgpYC5cXG5cXG5UaGlzIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyBvYmplY3QgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50IChwcmV2ZW50aW5nIGEgdXNlLWFmdGVyLWZyZWUpLiBVc2UtYWZ0ZXItZnJlZSBidWdzIGFuZCBtZW1vcnkgbGlmZXRpbWUgaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIGRvZXMgbm90IGFsdGVyIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UgKGluZm9sZWFrcyksIGFuZCBkb2VzIG5vdCBpbnRyb2R1Y2UgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcmVzc2VzIGFuIG9iamVjdCBsaWZldGltZSAvIHVzZS1hZnRlci1mcmVlIGlzc3VlIGluIGByZWxlYXNlX3Rhc2soKWAgd2hlcmUgYHRocmVhZF9waWRgIGNvdWxkIGJlIGZyZWVkIHByaW9yIHRvIGBwcm9jX2ZsdXNoX3BpZCh0aHJlYWRfcGlkKWAgd2hlbiB0aGUgbGFzdCBQSURUWVBFIGlzIGRldGFjaGVkIGR1cmluZyBwcm9jZXNzIHVuaGFzaGluZy4gSXQgZml4ZXMgdGhpcyBieSBwaW5uaW5nIGB0aHJlYWRfcGlkYCB1c2luZyBgZ2V0X3BpZCgpYCBhbmQgc3Vic2VxdWVudGx5IHJlbGVhc2luZyBpdCB3aXRoIGBwdXRfcGlkKClgLlxcblxcblRoaXMgY2hhbmdlIHNvbGVseSBhZmZlY3RzIG9iamVjdCByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxpZmV0aW1lIG1hbmFnZW1lbnQgKHByZXZlbnRpbmcgYSB1c2UtYWZ0ZXItZnJlZSkuIFVzZS1hZnRlci1mcmVlIGJ1Z3MgYW5kIG1lbW9yeSBsaWZldGltZSBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcywgZG9lcyBub3QgYWx0ZXIgZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSAoaW5mb2xlYWtzKSwgYW5kIGRvZXMgbm90IGludHJvZHVjZSBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowzfgtr[1] Phase: Succeeded StartedAt: 2026-08-31 01:04:23 +0000 UTC FinishedAt: 2026-08-31 01:04:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-31 01:04:23 +0000 UTC FinishedAt: 2026-08-31 01:04:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[2] Phase: Succeeded StartedAt: 2026-08-31 01:04:23 +0000 UTC FinishedAt: 2026-08-31 04:45:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:04:23 +0000 UTC FinishedAt: 2026-08-31 04:45:30 +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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:04:23 +0000 UTC FinishedAt: 2026-08-31 01:04:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:04:23 +0000 UTC FinishedAt: 2026-08-31 01:04:27 +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-workflowzfgtr/series-workflowzfgtr-convert-artifact-3439784168/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:04:33 +0000 UTC FinishedAt: 2026-08-31 01:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:04:33 +0000 UTC FinishedAt: 2026-08-31 01:21:00 +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:*cd45ce71-3ce4-4bb8-ac0f-4191e614bdc3,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-workflowzfgtr/series-workflowzfgtr-convert-artifact-3439784168/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": "ce3072bb-a056-41ed-8166-84c0554d940f", "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-workflowzfgtr/series-workflowzfgtr-build-action-2084271710/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:04:33 +0000 UTC FinishedAt: 2026-08-31 01:20:50 +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:*cd45ce71-3ce4-4bb8-ac0f-4191e614bdc3,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-workflowzfgtr/series-workflowzfgtr-convert-artifact-3439784168/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": "ce3072bb-a056-41ed-8166-84c0554d940f", "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-workflowzfgtr/series-workflowzfgtr-build-action-2084271710/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:21:00 +0000 UTC FinishedAt: 2026-08-31 01:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:21:00 +0000 UTC FinishedAt: 2026-08-31 01:21:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:21:00 +0000 UTC FinishedAt: 2026-08-31 01:21:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:21:00 +0000 UTC FinishedAt: 2026-08-31 01:21:04 +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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-workflowzfgtr/series-workflowzfgtr-convert-artifact-2789224911/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:21:10 +0000 UTC FinishedAt: 2026-08-31 01:23:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:21:10 +0000 UTC FinishedAt: 2026-08-31 01:23:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ce3072bb-a056-41ed-8166-84c0554d940f,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-workflowzfgtr/series-workflowzfgtr-build-action-2084271710/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-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:23:38 +0000 UTC FinishedAt: 2026-08-31 01:23:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:23:38 +0000 UTC FinishedAt: 2026-08-31 01:23:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:23:38 +0000 UTC FinishedAt: 2026-08-31 01:40:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:23:38 +0000 UTC FinishedAt: 2026-08-31 01:40:03 +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:*cd45ce71-3ce4-4bb8-ac0f-4191e614bdc3,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-workflowzfgtr/series-workflowzfgtr-convert-artifact-2789224911/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": "9d7ed1b1-fe17-4770-8f35-7ddcc0cc5ca6", "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-workflowzfgtr/series-workflowzfgtr-build-action-1895545315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:23:38 +0000 UTC FinishedAt: 2026-08-31 01:39:53 +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:*cd45ce71-3ce4-4bb8-ac0f-4191e614bdc3,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-workflowzfgtr/series-workflowzfgtr-convert-artifact-2789224911/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": "9d7ed1b1-fe17-4770-8f35-7ddcc0cc5ca6", "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-workflowzfgtr/series-workflowzfgtr-build-action-1895545315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:40:03 +0000 UTC FinishedAt: 2026-08-31 01:40:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:40:03 +0000 UTC FinishedAt: 2026-08-31 01:40:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:40:03 +0000 UTC FinishedAt: 2026-08-31 01:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:40:03 +0000 UTC FinishedAt: 2026-08-31 01:42:00 +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:*9d7ed1b1-fe17-4770-8f35-7ddcc0cc5ca6,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-workflowzfgtr/series-workflowzfgtr-build-action-1895545315/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-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:42:10 +0000 UTC FinishedAt: 2026-08-31 04:45:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:42:10 +0000 UTC FinishedAt: 2026-08-31 04:45:30 +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:*ce3072bb-a056-41ed-8166-84c0554d940f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9d7ed1b1-fe17-4770-8f35-7ddcc0cc5ca6,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-workflowzfgtr/series-workflowzfgtr-build-action-2084271710/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-workflowzfgtr/series-workflowzfgtr-build-action-1895545315/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:42:10 +0000 UTC FinishedAt: 2026-08-31 01:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:42:10 +0000 UTC FinishedAt: 2026-08-31 01:42:14 +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-workflowzfgtr/series-workflowzfgtr-convert-artifact-280749960/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:42:10 +0000 UTC FinishedAt: 2026-08-31 01:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:42:10 +0000 UTC FinishedAt: 2026-08-31 01:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:42:10 +0000 UTC FinishedAt: 2026-08-31 01:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:42:20 +0000 UTC FinishedAt: 2026-08-31 04:45:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzfgtr[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":"3d28a38e-75ea-4297-aec0-c76208a1b58a","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-31 01:42:20 +0000 UTC FinishedAt: 2026-08-31 04:45:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ce3072bb-a056-41ed-8166-84c0554d940f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9d7ed1b1-fe17-4770-8f35-7ddcc0cc5ca6,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-workflowzfgtr/series-workflowzfgtr-build-action-2084271710/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-workflowzfgtr/series-workflowzfgtr-build-action-1895545315/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-workflowzfgtr/series-workflowzfgtr-convert-artifact-280749960/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,}