Name: series-workflowt8s8s Phase: Succeeded StartedAt: 2026-09-07 03:31:48 +0000 UTC FinishedAt: 2026-09-07 08:04:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[0] Phase: Succeeded StartedAt: 2026-09-07 03:31:48 +0000 UTC FinishedAt: 2026-09-07 04:17:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 03:31:48 +0000 UTC FinishedAt: 2026-09-07 04:17:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC", "INET" ], "series_id": "969497ec-c219-41ef-8a92-559686b22bb3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_get_gap_ack_blks", "tipc_link_proto_rcv", "tipc_link_rcv", "tipc_bcast_sync_rcv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfZ2V0X2dhcF9hY2tfYmxrcyYjMzQ7LAogICAgJiMzNDt0aXBjX2xpbmtfcHJvdG9fcmN2JiMzNDssCiAgICAmIzM0O3RpcGNfbGlua19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19iY2FzdF9zeW5jX3JjdiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzKCkgZW5zdXJpbmcgdGhhdCB0aGUgaW5jb21pbmcgbWVzc2FnZSBwYXlsb2FkIHNpemUgKG1zZ19kYXRhX3N6KGhkcikpIGlzIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MpIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHN0cnVjdCBtZW1iZXJzLiBUaGUgYnVnIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBza19idWZmIGRhdGEgYnVmZmVyIHdoZW4gcGFyc2luZyBtYWxmb3JtZWQgbmV0d29yayBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGFsdGVyIGluaXRpYWxpemF0aW9uIG9mIGFueSBzdGFjay9oZWFwIHN0cnVjdHVyZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHBhcnNpbmcgR2FwIEFDSyBibG9ja3MgZnJvbSBpbmNvbWluZyBUSVBDIHByb3RvY29sIG1lc3NhZ2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgbG9naWMgaW4gVElQQyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdiZGU4NmE3ZGYwYjkyYWUwMTFkNGYxZjRmNjg1YWI0ZDBmNDJkYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA0OjE2OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuY1xuaW5kZXggNjQyN2M2OWY4OTI5NC4uMGJlODZjYmRjOTEzZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2xpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbGluay5jXG5AQCAtMTQxOSw2ICYjNDM7MTQxOSw4IEBAIHUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4gXG4gXHQvKiBEb2VzIHBlZXIgc3VwcG9ydCB0aGUgR2FwIEFDSyBibG9ja3MgZmVhdHVyZT8gKi9cbiBcdGlmIChsLVx1MDAzZXBlZXJfY2FwcyBcdTAwMjYgVElQQ19HQVBfQUNLX0JMT0NLKSB7XG4mIzQzO1x0XHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcdTAwM2Mgc2l6ZW9mKCpwKSlcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4gXHRcdHAgPSAoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICopbXNnX2RhdGEoaGRyKTtcbiBcdFx0c3ogPSBudG9ocyhwLVx1MDAzZWxlbik7XG4gXHRcdC8qIFNhbml0eSBjaGVjayAqL1xuQEAgLTE0MzUsNiAmIzQzOzE0MzcsNyBAQCB1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuIFx0XHR9XG4gXHR9XG4gXHQvKiBPdGhlciBjYXNlczogaWdub3JlISAqL1xuJiM0MztvdXQ6XG4gXHRwID0gTlVMTDtcbiBcbiBvazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX2dldF9nYXBfYWNrX2Jsa3MmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX3Byb3RvX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX2xpbmtfcmN2JiMzNDssCiAgICAmIzM0O3RpcGNfYmNhc3Rfc3luY19yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiB0aXBjX2dldF9nYXBfYWNrX2Jsa3MgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBHYXAgQUNLIGJsb2NrcyBmcm9tIGluY29taW5nIFRJUEMgcHJvdG9jb2wgbWVzc2FnZXMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgcHJvY2Vzc2luZyBsb2dpYyBpbiBUSVBDIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2JkZTg2YTdkZjBiOTJhZTAxMWQ0ZjFmNGY2ODVhYjRkMGY0MmRiNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDQ6MTY6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmMKaW5kZXggNjQyN2M2OWY4OTI5NC4uMGJlODZjYmRjOTEzZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2xpbmsuYwpAQCAtMTQxOSw2ICYjNDM7MTQxOSw4IEBAIHUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsCiAKIAkvKiBEb2VzIHBlZXIgc3VwcG9ydCB0aGUgR2FwIEFDSyBibG9ja3MgZmVhdHVyZT8gKi8KIAlpZiAobC0mZ3Q7cGVlcl9jYXBzICZhbXA7IFRJUENfR0FQX0FDS19CTE9DSykgewomIzQzOwkJaWYgKG1zZ19kYXRhX3N6KGhkcikgJmx0OyBzaXplb2YoKnApKQomIzQzOwkJCWdvdG8gb3V0OwogCQlwID0gKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKW1zZ19kYXRhKGhkcik7CiAJCXN6ID0gbnRvaHMocC0mZ3Q7bGVuKTsKIAkJLyogU2FuaXR5IGNoZWNrICovCkBAIC0xNDM1LDYgJiM0MzsxNDM3LDcgQEAgdTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCwKIAkJfQogCX0KIAkvKiBPdGhlciBjYXNlczogaWdub3JlISAqLwomIzQzO291dDoKIAlwID0gTlVMTDsKIAogb2s6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRJUEMgTGluayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYW5kIHJldmlldyByZXF1ZXN0IG9uIG15IGRlc2ssIGFuZCB0aGUgdGFyZ2V0IGlzIGBuZXQvdGlwYy9saW5rLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgd2l0aGluIHRoZSBgdGlwY19nZXRfZ2FwX2Fja19ibGtzYCBmdW5jdGlvbi4gTXkgZmlyc3QgbW92ZSBoZXJlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcgd2l0aGluIHRoZSBsYXJnZXIgVElQQyBmcmFtZXdvcmsuCgpJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgYG5ldC90aXBjL2xpbmsuY2AgaXRzZWxmLCBvZiBjb3Vyc2UuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHRoZSBmdW5jdGlvbiB3aXRoaW4gdGhlIGZpbGUgYW5kIHVuZGVyc3RhbmQgaXRzIGltbWVkaWF0ZSBuZWlnaGJvcnMuIEkgYWxzbyB3YW50IHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHJlbGV2YW50IEtjb25maWcgZmlsZXMsIGFueXRoaW5nIHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBpbmNsdWRlIG9yIGVuYWJsZSB0aGlzIHNlY3Rpb24gb2YgY29kZS4gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBtZW50YWwgcGljdHVyZS4KClRoZW4sIEkmIzM5O2xsIGxldmVyYWdlIG15IHVzdWFsIHRvb2xzLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGZpbGUgSSYjMzk7bGwgY2FsbCBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAsIGFuZCB1c2UgaXQgdG8gY2hlY2sgdGhlIGNvbnRleHQgaW4gYG5ldC90aXBjL2xpbmsuY2AuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGZsb3csIGFueSBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9mIHRoaXMgY2hhbmdlLiBJdOKAmXMgYWxsIGFib3V0IHRoZSBkZXRhaWxzOyBub3RoaW5nIGlzIGxlZnQgdG8gY2hhbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDEwOlx0ICogQHVjOiBkZXNpcmVkIEdhcCBBQ0sgYmxvY2tzIHR5cGUsIGkuZS4gdW5pY2FzdCAoPSAxKSBvciBicm9hZGNhc3QgKD0gMClcbjE0MTE6XHQgKlxuMTQxMjpcdCAqIFJldHVybjogdGhlIHRvdGFsIEdhcCBBQ0sgYmxvY2tzIHNpemVcbjE0MTM6XHQgKi9cbjE0MTQ6XHR1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuMTQxNTpcdFx0XHRcdCAgc3RydWN0IHRpcGNfbXNnICpoZHIsIGJvb2wgdWMpXG4xNDE2Olx0e1xuMTQxNzpcdFx0c3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICpwO1xuMTQxODpcdFx0dTE2IHN6ID0gMDtcbjE0MTk6XHRcbjE0MjA6XHRcdC8qIERvZXMgcGVlciBzdXBwb3J0IHRoZSBHYXAgQUNLIGJsb2NrcyBmZWF0dXJlPyAqL1xuMTQyMTpcdFx0aWYgKGwtXHUwMDNlcGVlcl9jYXBzIFx1MDAyNiBUSVBDX0dBUF9BQ0tfQkxPQ0spIHtcbjE0MjI6XHRcdFx0aWYgKG1zZ19kYXRhX3N6KGhkcikgXHUwMDNjIHNpemVvZigqcCkpXG4xNDIzOlx0XHRcdFx0Z290byBvdXQ7XG4xNDI0Olx0XHRcdHAgPSAoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICopbXNnX2RhdGEoaGRyKTtcbjE0MjU6XHRcdFx0c3ogPSBudG9ocyhwLVx1MDAzZWxlbik7XG4xNDI2Olx0XHRcdC8qIFNhbml0eSBjaGVjayAqL1xuMTQyNzpcdFx0XHRpZiAoc3ogPT0gc3RydWN0X3NpemUocCwgZ2Fja3MsIHNpemVfYWRkKHAtXHUwMDNldWdhY2tfY250LCBwLVx1MDAzZWJnYWNrX2NudCkpKSB7XG4xNDI4Olx0XHRcdFx0LyogR29vZCwgY2hlY2sgaWYgdGhlIGRlc2lyZWQgdHlwZSBleGlzdHMgKi9cbjE0Mjk6XHRcdFx0XHRpZiAoKHVjIFx1MDAyNlx1MDAyNiBwLVx1MDAzZXVnYWNrX2NudCkgfHwgKCF1YyBcdTAwMjZcdTAwMjYgcC1cdTAwM2ViZ2Fja19jbnQpKVxuMTQzMDpcdFx0XHRcdFx0Z290byBvaztcbjE0MzE6XHRcdFx0LyogQmFja3dhcmQgY29tcGF0aWJsZTogcGVlciBtaWdodCBub3Qgc3VwcG9ydCBiYywgYnV0IHVjPyAqL1xuMTQzMjpcdFx0XHR9IGVsc2UgaWYgKHVjIFx1MDAyNlx1MDAyNiBzeiA9PSBzdHJ1Y3Rfc2l6ZShwLCBnYWNrcywgcC1cdTAwM2V1Z2Fja19jbnQpKSB7XG4xNDMzOlx0XHRcdFx0aWYgKHAtXHUwMDNldWdhY2tfY250KSB7XG4xNDM0Olx0XHRcdFx0XHRwLVx1MDAzZWJnYWNrX2NudCA9IDA7XG4xNDM1Olx0XHRcdFx0XHRnb3RvIG9rO1xuMTQzNjpcdFx0XHRcdH1cbjE0Mzc6XHRcdFx0fVxuMTQzODpcdFx0fVxuMTQzOTpcdFx0LyogT3RoZXIgY2FzZXM6IGlnbm9yZSEgKi9cbjE0NDA6XHRvdXQ6XG4xNDQxOlx0XHRwID0gTlVMTDtcbjE0NDI6XHRcbjE0NDM6XHRvazpcbjE0NDQ6XHRcdCpnYSA9IHA7XG4xNDQ1Olx0XHRyZXR1cm4gc3o7XG4xNDQ2Olx0fVxuMTQ0NzpcdFxuMTQ0ODpcdHN0YXRpYyB1OCBfX3RpcGNfYnVpbGRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqZ2EsXG4xNDQ5Olx0XHRcdFx0XHQgICAgc3RydWN0IHRpcGNfbGluayAqbCwgdTggc3RhcnRfaW5kZXgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgZGl2aW5nIGludG8gdGhlIHN1YmplY3QgbWF0dGVyOgoKKipEZWVwIERpdmUgaW50byBUSVBDIGFuZCBHYXAgQWNrbm93bGVkZ2VtZW50IEJsb2NrcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGB0aXBjX2dldF9nYXBfYWNrX2Jsa3NgLiBGaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUgVElQQyBjb2RlYmFzZS4gQ29udGV4dCBpcyBldmVyeXRoaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBUSVBDIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBjcml0aWNhbCBpbiBtYWtpbmcgYW55IGNvbmNsdXNpb25zIGFib3V0IHRoaXMgZnVuY3Rpb24uCgpUaGVuLCB0aGUgZm9jdXMgc2hpZnRzLiBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGxzIHRvIGB0aXBjX2dldF9nYXBfYWNrX2Jsa3NgLiBBIGdvb2Qgc2VhcmNoIHN0cmF0ZWd5IHdpbGwgYmUga2V5IHRvIHVuY292ZXJpbmcgYWxsIHRoZSBkaWZmZXJlbnQgd2F5cyB0aGlzIGlzIHVzZWQuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCByZWFsbHkgaGVscCBtZSBzZWUgdGhlIGZsb3cgb2YgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgdXNhZ2UgcGF0dGVybnMgdG8gaW5mZXIgdGhlIHB1cnBvc2Ugb2YgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2dldF9nYXBfYWNrX2Jsa3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9iY2FzdC5jPTQ5OD1pbnQgdGlwY19iY2FzdF9zeW5jX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4tLVxubmV0L3RpcGMvYmNhc3QuYy01MTMtXHR9IGVsc2UgaWYgKCFtc2dfYmNfYWNrX2ludmFsaWQoaGRyKSkge1xubmV0L3RpcGMvYmNhc3QuYzo1MTQ6XHRcdGdsZW4gPSB0aXBjX2dldF9nYXBfYWNrX2Jsa3MoXHUwMDI2Z2EsIGwsIGhkciwgZmFsc2UpO1xubmV0L3RpcGMvYmNhc3QuYy01MTUtXHRcdGlmIChnbGVuIFx1MDAzZSBtc2dfZGF0YV9zeihoZHIpKSB7XG4tLVxubmV0L3RpcGMvbGluay5jPTEzNDA9c3RhdGljIGludCB0aXBjX2xpbmtfdG5sX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xNDA1LS8qKlxubmV0L3RpcGMvbGluay5jOjE0MDY6ICogdGlwY19nZXRfZ2FwX2Fja19ibGtzIC0gZ2V0IEdhcCBBQ0sgYmxvY2tzIGZyb20gUFJPVE9DT0wvU1RBVEVfTVNHXG5uZXQvdGlwYy9saW5rLmMtMTQwNy0gKiBAZ2E6IHJldHVybmVkIHBvaW50ZXIgdG8gdGhlIEdhcCBBQ0sgYmxvY2tzIGlmIGFueVxuLS1cbm5ldC90aXBjL2xpbmsuYy0xNDEzLSAqL1xubmV0L3RpcGMvbGluay5jOjE0MTQ6dTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCxcbm5ldC90aXBjL2xpbmsuYy0xNDE1LVx0XHRcdCAgc3RydWN0IHRpcGNfbXNnICpoZHIsIGJvb2wgdWMpXG4tLVxubmV0L3RpcGMvbGluay5jPTIxNzc9c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbGluay5jLTIyNzQtXHRcdC8qIFZhbGlkYXRlIEdhcCBBQ0sgYmxvY2tzLCBkcm9wIGlmIGludmFsaWQgKi9cbm5ldC90aXBjL2xpbmsuYzoyMjc1Olx0XHRnbGVuID0gdGlwY19nZXRfZ2FwX2Fja19ibGtzKFx1MDAyNmdhLCBsLCBoZHIsIHRydWUpO1xubmV0L3RpcGMvbGluay5jLTIyNzYtXHRcdGlmIChnbGVuIFx1MDAzZSBkbGVuKVxuLS1cbm5ldC90aXBjL2xpbmsuaD0xNDQ9aW50IHRpcGNfbGlua19tc3Moc3RydWN0IHRpcGNfbGluayAqbCk7XG5uZXQvdGlwYy9saW5rLmg6MTQ1OnUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG5uZXQvdGlwYy9saW5rLmgtMTQ2LVx0XHRcdCAgc3RydWN0IHRpcGNfbXNnICpoZHIsIGJvb2wgdWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFRJUEMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBUSVBDIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byBgbmV0L3RpcGMvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIHVzdWFsIHNwb3QsIHJpZ2h0PyBJdCBzaG91bGQgb3V0bGluZSBhbGwgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIHN5bWJvbHMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIG1vZHVsZS4gSSBleHBlY3QgdG8gZmluZCBvcHRpb25zIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgcGVyaGFwcyBmb3IgZGlmZmVyZW50IG5vZGUgdHlwZXMsIGFuZCBkZWZpbml0ZWx5IGZvciB0aGluZ3MgbGlrZSBzZWN1cml0eSBmZWF0dXJlcyBvciBzcGVjaWZpYyB0cmFuc3BvcnQgcHJvdG9jb2xzIGlmIHRoZXkgZXhpc3QuIEnigJlsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UgdHVuaW5nIGFzIHdlbGwuIEdvdHRhIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIHRoYXQgY291bGQgaW1wYWN0IG15IHNwZWNpZmljIHVzZSBjYXNlLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkcmlsbGluZyBkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRJUEMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIFRJUENcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBUSVBDIFByb3RvY29sXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhlIFRyYW5zcGFyZW50IEludGVyIFByb2Nlc3MgQ29tbXVuaWNhdGlvbiAoVElQQykgcHJvdG9jb2wgaXNcbiAgMTE6XHRcdCAgc3BlY2lhbGx5IGRlc2lnbmVkIGZvciBpbnRyYSBjbHVzdGVyIGNvbW11bmljYXRpb24uIFRoaXMgcHJvdG9jb2xcbiAgMTI6XHRcdCAgb3JpZ2luYXRlcyBmcm9tIEVyaWNzc29uIHdoZXJlIGl0IGhhcyBiZWVuIHVzZWQgaW4gY2FycmllciBncmFkZVxuICAxMzpcdFx0ICBjbHVzdGVyIGFwcGxpY2F0aW9ucyBmb3IgbWFueSB5ZWFycy5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVElQQywgc2VlIGh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgVGhpcyBwcm90b2NvbCBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoXG4gIDE4Olx0XHQgIGNhbiBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcbiAgMTk6XHRcdCAgd2FudCkuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlwYy4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdFxuICAyMDpcdFx0ICBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0XHUwMDNlLlxuICAyMTpcdFxuICAyMjpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDIzOlx0XG4gIDI0Olx0Y29uZmlnIFRJUENfTUVESUFfSUJcbiAgMjU6XHRcdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbiAgMjY6XHRcdGRlcGVuZHMgb24gVElQQyBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORF9JUE9JQlxuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgZW5hYmxlIHN1cHBvcnQgZm9yIHJ1bm5pbmcgVElQQyBvblxuICAyOTpcdFx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cbiAgMzA6XHRjb25maWcgVElQQ19NRURJQV9VRFBcbiAgMzE6XHRcdGJvb2wgXCYjMzQ7SVAvVURQIG1lZGlhIHR5cGUgc3VwcG9ydFwmIzM0O1xuICAzMjpcdFx0ZGVwZW5kcyBvbiBUSVBDXG4gIDMzOlx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAgMzQ6XHRcdGRlZmF1bHQgeVxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgZW5hYmxlIHN1cHBvcnQgZm9yIHJ1bm5pbmcgVElQQyBvdmVyIElQL1VEUFxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBUSVBDX0NSWVBUT1xuICAzOTpcdFx0Ym9vbCBcJiMzNDtUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBUSVBDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcxNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUSVBDIFZ1bG5lcmFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIFRJUEMgZGVwZW5kcyBvbiBJTkVULCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIG5ldHdvcmsgcHJvdG9jb2wsIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbWVjaGFuaXNtcyBsaWtlIHNvY2tldHMgKEFGX1RJUEMpLCBuZXRsaW5rLCBVRFAsIGFuZCB0aGUgcmVzdC4gR29vZCwgdGhhdCBtZWFucyBTeXprYWxsZXIgc2hvdWxkIGhhdmUgZGVjZW50IGNvdmVyYWdlIGZvciBmdXp6aW5nIGl0LiBJbiBmYWN0LCBTeXprYWxsZXIgKmRvZXMqIGhlYXZpbHkgZnV6eiBUSVBDLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgaW4gYG5ldC90aXBjL2xpbmsuY2AuIEkgc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgYm91bmRzIGNoZWNrOiBgbXNnX2RhdGFfc3ooaGRyKSAmbHQ7IHNpemVvZigqcClgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIGBwID0gKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKW1zZ19kYXRhKGhkcilgLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgcHJldmVudGlvbiwgcHJvdGVjdGluZyBhZ2FpbnN0IGEgbWFsZm9ybWVkIEdhcCBBQ0sgYmxvY2sgaW4gYSByZWNlaXZlZCBUSVBDIHBhY2tldC4gIEdvb2QgY2F0Y2ghIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGxlYWQgdG8gZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUuIFBlcmZlY3QuCgpOb3csIGZvciBmb2N1cyBzeW1ib2xzLCAgYHRpcGNfZ2V0X2dhcF9hY2tfYmxrc2AsIGB0aXBjX2xpbmtfcHJvdG9fcmN2YCwgYHRpcGNfYmNhc3Rfc3luY19yY3ZgLCBhbmQgYHRpcGNfcmN2YCBhcmUgdGhlIGtleSBmdW5jdGlvbnMuIFdlIG5lZWQgdG8gY2hlY2sgY2FsbGVycyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cuCgpgdGlwY19nZXRfZ2FwX2Fja19ibGtzYCBpcyBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhlIGNhbGxlcnMgYXJlLiBgdGlwY19saW5rX3Byb3RvX3JjdmAgaXMgc3RhdGljOyBgdGlwY19yY3ZgIGlzIGluIGBuZXQvdGlwYy9ub2RlLmNgIG9yIGBuZXQvdGlwYy9saW5rLmNgLiAgTGV0JiMzOTtzIHRyYWNlIGB0aXBjX2xpbmtfcHJvdG9fcmN2YCBhbmQgc2VlIHdoZXJlIHRoaXMgYnJhbmNoZXMuIFRoaXMgd2lsbCB0ZWxsIHVzIHRoZSBmdWxsIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2xpbmtfcHJvdG9fcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbGluay5jPTIzND1lbnVtIHtcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjQzLVxubmV0L3RpcGMvbGluay5jOjI0NDpzdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC90aXBjL2xpbmsuYy0yNDUtXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTc2NT1pbnQgdGlwY19saW5rX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xNzc1LVx0aWYgKHVubGlrZWx5KG1zZ191c2VyKGhkcikgPT0gTElOS19QUk9UT0NPTCkpXG5uZXQvdGlwYy9saW5rLmM6MTc3NjpcdFx0cmV0dXJuIHRpcGNfbGlua19wcm90b19yY3YobCwgc2tiLCB4bWl0cSk7XG5uZXQvdGlwYy9saW5rLmMtMTc3Ny1cbi0tXG5uZXQvdGlwYy9saW5rLmM9MjEzND1ib29sIHRpcGNfbGlua192YWxpZGF0ZV9tc2coc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHRpcGNfbXNnICpoZHIpXG4tLVxubmV0L3RpcGMvbGluay5jLTIxNzEtXG5uZXQvdGlwYy9saW5rLmM6MjE3MjovKiB0aXBjX2xpbmtfcHJvdG9fcmN2KCk6IHJlY2VpdmUgbGluayBsZXZlbCBwcm90b2NvbCBtZXNzYWdlIDpcbm5ldC90aXBjL2xpbmsuYy0yMTczLSAqIE5vdGUgdGhhdCBuZXR3b3JrIHBsYW5lIGlkIHByb3BhZ2F0ZXMgdGhyb3VnaCB0aGUgbmV0d29yaywgYW5kIG1heVxuLS1cbm5ldC90aXBjL2xpbmsuYy0yMTc2LSAqL1xubmV0L3RpcGMvbGluay5jOjIxNzc6c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvdGlwYy9saW5rLmMtMjE3OC1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgdGlwY19saW5rX3JjdmAgYW5kIGB0aXBjX2JjYXN0X3N5bmNfcmN2YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlY2VpdmUgcGF0aCBmb3IgVElQQywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGB0aXBjX2xpbmtfcmN2YCBhbmQgYHRpcGNfYmNhc3Rfc3luY19yY3ZgLiBJJiMzOTttIGd1ZXNzaW5nIHRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgaGFuZGxpbmcgaW5ib3VuZCB0cmFmZmljLCB3aGV0aGVyIGl0JiMzOTtzIGRpcmVjdCBsaW5rIGNvbW11bmljYXRpb24gb3IgYnJvYWRjYXN0IHN5bmNocm9uaXphdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QuIEFyZSB0aGV5IHBhcnQgb2YgdGhlIHNhbWUgcmVjZWl2ZSB0aHJlYWQgb3IgYXJlIHRoZXkgc2VwYXJhdGU/CgpJIHNob3VsZCBsb29rIGF0IGhvdyBwYWNrZXRzIGFyZSBkZXF1ZXVlZCwgcHJvY2Vzc2VkLCBhbmQgdWx0aW1hdGVseSBkZWxpdmVyZWQgdG8gdGhlIHVwcGVyIGxheWVycy4gQXJlIHRoZXJlIGFueSBjcml0aWNhbCBzZWN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFdoYXQgbG9ja2luZyBwcmltaXRpdmVzIGFyZSBpbnZvbHZlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGxpa2UgYSBzaW5nbGUgbG9jayBwcm90ZWN0aW5nIHRoZSByZWNlaXZlIHF1ZXVlPyBNZW1vcnkgYWxsb2NhdGlvbiBwYXR0ZXJucyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgaW1wb3J0YW50IHRvbyDigJMgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgbWVtb3J5IGxlYWtzIG9yIHBlcmZvcm1hbmNlLWltcGFjdGluZyBhbGxvY2F0aW9ucy4KCkkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgYXJlIGludmFsaWQgcGFja2V0cyBkZWFsdCB3aXRoPyBEbyB0aGV5IGdldCBkcm9wcGVkIHNpbGVudGx5LCBsb2dnZWQsIG9yIHRyaWdnZXIgYSBtb3JlIHNlcmlvdXMgZXJyb3IgY29uZGl0aW9uPyBIb3cgcm9idXN0IGlzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBnZW5lcmFsPyBJcyB0aGVyZSBwcm9wZXIgZXJyb3IgY2hlY2tpbmcgZm9yIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGVzZSBmdW5jdGlvbnM/CgpGaW5hbGx5LCBob3cgZG9lcyBicm9hZGNhc3Qgc3luY2hyb25pemF0aW9uIGFjdHVhbGx5IHdvcmsgd2l0aGluIHRoZSBgdGlwY19iY2FzdF9zeW5jX3JjdmAgZnVuY3Rpb24/IElzIGl0IHVzaW5nIGEgc2ltcGxlIGhlYXJ0YmVhdCBtZWNoYW5pc20sIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IFdoYXQgaGFwcGVucyBpZiBhIG5vZGUgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUgZHVyaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gcHJvY2Vzcz8gRG9lcyBpdCByZXRyeSwgYW5kIGhvdyBsb25nIGRvZXMgaXQgd2FpdD8gVGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGNsdXN0ZXIgY29udmVyZ2VuY2UuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY29tcGFyZSB0aGlzIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciBUSVBDIHRvIGVuc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgYWNjdXJhdGUgYW5kIGlzIHVwIHRvIHNwZWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfYmNhc3Rfc3luY19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9iY2FzdC5jPTQ3MD12b2lkIHRpcGNfYmNhc3RfYWNrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4tLVxubmV0L3RpcGMvYmNhc3QuYy00OTctICovXG5uZXQvdGlwYy9iY2FzdC5jOjQ5ODppbnQgdGlwY19iY2FzdF9zeW5jX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG5uZXQvdGlwYy9iY2FzdC5jLTQ5OS1cdFx0XHRzdHJ1Y3QgdGlwY19tc2cgKmhkcixcbi0tXG5uZXQvdGlwYy9iY2FzdC5oPTk2PXZvaWQgdGlwY19iY2FzdF9hY2tfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCxcbm5ldC90aXBjL2JjYXN0LmgtOTctXHRcdFx0c3RydWN0IHRpcGNfbXNnICpoZHIpO1xubmV0L3RpcGMvYmNhc3QuaDo5ODppbnQgdGlwY19iY2FzdF9zeW5jX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG5uZXQvdGlwYy9iY2FzdC5oLTk5LVx0XHRcdHN0cnVjdCB0aXBjX21zZyAqaGRyLFxuLS1cbm5ldC90aXBjL25vZGUuYz0xODQwPXN0YXRpYyB2b2lkIHRpcGNfbm9kZV9iY19zeW5jX3JjdihzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3QgdGlwY19tc2cgKmhkcixcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTg0Ni1cbm5ldC90aXBjL25vZGUuYzoxODQ3Olx0cmMgPSB0aXBjX2JjYXN0X3N5bmNfcmN2KG4tXHUwMDNlbmV0LCBuLVx1MDAzZWJjX2VudHJ5LmxpbmssIGhkciwgeG1pdHEsIHZhbGlkKTtcbm5ldC90aXBjL25vZGUuYy0xODQ4LVx0aWYgKCEqdmFsaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDAKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVmVyZGljdDogVElQQyBNb2R1bGUqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbi4gSXQgc2VlbXMgd2UmIzM5O3JlIGVuYWJsaW5nIGBDT05GSUdfVElQQ2AsIHdoaWNoIGluaGVyZW50bHkgYnJpbmdzIGluIGBDT05GSUdfSU5FVGAuIFNvLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgaW5kZWVkIGBbJiMzNDtUSVBDJiMzNDssICYjMzQ7SU5FVCYjMzQ7XWAuIFRoYXQgYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZy4KCk5leHQsIEkgbmVlZCB0byBzZWUgd2hhdCBzeW1ib2xzIGFyZSBvZiBwcmltYXJ5IGludGVyZXN0LiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGxpc3RlZCBhczogYHRpcGNfZ2V0X2dhcF9hY2tfYmxrc2AsIGB0aXBjX2xpbmtfcHJvdG9fcmN2YCwgYHRpcGNfbGlua19yY3ZgLCBhbmQgYHRpcGNfYmNhc3Rfc3luY19yY3ZgLiBZZXMsIHRoZXNlIGFyZSBhbGwgY3JpdGljYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gVElQQyYjMzk7cyBpbnRlcm5hbCB3b3JraW5ncy4gVGhlc2UgYXJlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgZXZlcnl0aGluZyBvbmUgbGFzdCB0aW1lLiBXZSBoYXZlIGBXb3J0aEZ1enppbmc6IHRydWVgLCBgRW5hYmxlQ29uZmlnczogWyYjMzQ7VElQQyYjMzQ7LCAmIzM0O0lORVQmIzM0O11gLCBhbmQgdGhlIHNwZWNpZmllZCBgRm9jdXNTeW1ib2xzYC4gRXZlcnl0aGluZyBzZWVtcyB0byBiZSBpbiBvcmRlcjsgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGZ1enppbmcgaXMgY29uY2lzZSBhbmQgYWNjdXJhdGUuCgpBbHJpZ2h0LCBJIGFtIHJlYWR5IHRvIGluaXRpYXRlIHRoZSBwcm9jZXNzLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19nZXRfZ2FwX2Fja19ibGtzJiMzNDssCiAgICAmIzM0O3RpcGNfbGlua19wcm90b19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX2JjYXN0X3N5bmNfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHBhcnNpbmcgR2FwIEFDSyBibG9ja3MgZnJvbSBpbmNvbWluZyBUSVBDIHByb3RvY29sIG1lc3NhZ2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgbG9naWMgaW4gVElQQyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19nZXRfZ2FwX2Fja19ibGtzJiMzNDssCiAgICAmIzM0O3RpcGNfbGlua19wcm90b19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX2JjYXN0X3N5bmNfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHBhcnNpbmcgR2FwIEFDSyBibG9ja3MgZnJvbSBpbmNvbWluZyBUSVBDIHByb3RvY29sIG1lc3NhZ2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgbG9naWMgaW4gVElQQyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzKCkgZW5zdXJpbmcgdGhhdCB0aGUgaW5jb21pbmcgbWVzc2FnZSBwYXlsb2FkIHNpemUgKG1zZ19kYXRhX3N6KGhkcikpIGlzIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MpIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHN0cnVjdCBtZW1iZXJzLiBUaGUgYnVnIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBza19idWZmIGRhdGEgYnVmZmVyIHdoZW4gcGFyc2luZyBtYWxmb3JtZWQgbmV0d29yayBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGFsdGVyIGluaXRpYWxpemF0aW9uIG9mIGFueSBzdGFjay9oZWFwIHN0cnVjdHVyZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YmRlODZhN2RmMGI5MmFlMDExZDRmMWY0ZjY4NWFiNGQwZjQyZGI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwNDoxNjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuYwppbmRleCA2NDI3YzY5Zjg5Mjk0Li4wYmU4NmNiZGM5MTNkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9saW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbGluay5jCkBAIC0xNDE5LDYgJiM0MzsxNDE5LDggQEAgdTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCwKIAogCS8qIERvZXMgcGVlciBzdXBwb3J0IHRoZSBHYXAgQUNLIGJsb2NrcyBmZWF0dXJlPyAqLwogCWlmIChsLSZndDtwZWVyX2NhcHMgJmFtcDsgVElQQ19HQVBfQUNLX0JMT0NLKSB7CiYjNDM7CQlpZiAobXNnX2RhdGFfc3ooaGRyKSAmbHQ7IHNpemVvZigqcCkpCiYjNDM7CQkJZ290byBvdXQ7CiAJCXAgPSAoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICopbXNnX2RhdGEoaGRyKTsKIAkJc3ogPSBudG9ocyhwLSZndDtsZW4pOwogCQkvKiBTYW5pdHkgY2hlY2sgKi8KQEAgLTE0MzUsNiAmIzQzOzE0MzcsNyBAQCB1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLAogCQl9CiAJfQogCS8qIE90aGVyIGNhc2VzOiBpZ25vcmUhICovCiYjNDM7b3V0OgogCXAgPSBOVUxMOwogCiBvazoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gRGV0ZXJtaW5hdGlvbiBmb3IgYG5ldC90aXBjL2xpbmsuY2AgUGF0Y2gqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGluIGBuZXQvdGlwYy9saW5rLmNgIHdhcnJhbnRzIGl0cyBvd24gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIHNlY3VyaXR5IGd1aWRlbGluZXMuIFJpZ2h0LCB0aGlzIGlzIGNvZGUgYW5hbHlzaXMsIGRlZmVuc2l2ZSBRQSwgYW5kIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBmdXp6aW5nIHN0cmF0ZWd5LiBUaGUgZ3VpZGVsaW5lcyBjbGFzc2lmeSB0aGlzIGFzIGEgbG93LXNldmVyaXR5LCBiZW5pZ24gdGFzay4gV2UmIzM5O3JlIHRhbGtpbmcgc291cmNlIGNvZGUgdnVsbmVyYWJpbGl0eSBhbmFseXNpcywgYXVkaXRpbmcsIGFuZCBsZXZlcmFnaW5nIHNhbml0aXplcnMg4oCTIG5vIG9mZmVuc2l2ZSBwYXlsb2FkcyBvciBleHBsb2l0IGF0dGVtcHRzIGFyZSBpbnZvbHZlZC4gVGhhdCYjMzk7cyBnb29kIGNvbnRleHQuIE5vdywgdGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBpbnNwZWN0IHRoZSBjb2RlLCB0aGUgY2hhbmdlcywgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiBgbmV0L3RpcGMvbGluay5jYC4gTGV0JiMzOTtzIGdldCB0byB3b3JrIGFuZCB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGlwYy9saW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MTA6XHQgKiBAdWM6IGRlc2lyZWQgR2FwIEFDSyBibG9ja3MgdHlwZSwgaS5lLiB1bmljYXN0ICg9IDEpIG9yIGJyb2FkY2FzdCAoPSAwKVxuMTQxMTpcdCAqXG4xNDEyOlx0ICogUmV0dXJuOiB0aGUgdG90YWwgR2FwIEFDSyBibG9ja3Mgc2l6ZVxuMTQxMzpcdCAqL1xuMTQxNDpcdHUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4xNDE1Olx0XHRcdFx0ICBzdHJ1Y3QgdGlwY19tc2cgKmhkciwgYm9vbCB1YylcbjE0MTY6XHR7XG4xNDE3Olx0XHRzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKnA7XG4xNDE4Olx0XHR1MTYgc3ogPSAwO1xuMTQxOTpcdFxuMTQyMDpcdFx0LyogRG9lcyBwZWVyIHN1cHBvcnQgdGhlIEdhcCBBQ0sgYmxvY2tzIGZlYXR1cmU/ICovXG4xNDIxOlx0XHRpZiAobC1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSykge1xuMTQyMjpcdFx0XHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcdTAwM2Mgc2l6ZW9mKCpwKSlcbjE0MjM6XHRcdFx0XHRnb3RvIG91dDtcbjE0MjQ6XHRcdFx0cCA9IChzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKiltc2dfZGF0YShoZHIpO1xuMTQyNTpcdFx0XHRzeiA9IG50b2hzKHAtXHUwMDNlbGVuKTtcbjE0MjY6XHRcdFx0LyogU2FuaXR5IGNoZWNrICovXG4xNDI3Olx0XHRcdGlmIChzeiA9PSBzdHJ1Y3Rfc2l6ZShwLCBnYWNrcywgc2l6ZV9hZGQocC1cdTAwM2V1Z2Fja19jbnQsIHAtXHUwMDNlYmdhY2tfY250KSkpIHtcbjE0Mjg6XHRcdFx0XHQvKiBHb29kLCBjaGVjayBpZiB0aGUgZGVzaXJlZCB0eXBlIGV4aXN0cyAqL1xuMTQyOTpcdFx0XHRcdGlmICgodWMgXHUwMDI2XHUwMDI2IHAtXHUwMDNldWdhY2tfY250KSB8fCAoIXVjIFx1MDAyNlx1MDAyNiBwLVx1MDAzZWJnYWNrX2NudCkpXG4xNDMwOlx0XHRcdFx0XHRnb3RvIG9rO1xuMTQzMTpcdFx0XHQvKiBCYWNrd2FyZCBjb21wYXRpYmxlOiBwZWVyIG1pZ2h0IG5vdCBzdXBwb3J0IGJjLCBidXQgdWM/ICovXG4xNDMyOlx0XHRcdH0gZWxzZSBpZiAodWMgXHUwMDI2XHUwMDI2IHN6ID09IHN0cnVjdF9zaXplKHAsIGdhY2tzLCBwLVx1MDAzZXVnYWNrX2NudCkpIHtcbjE0MzM6XHRcdFx0XHRpZiAocC1cdTAwM2V1Z2Fja19jbnQpIHtcbjE0MzQ6XHRcdFx0XHRcdHAtXHUwMDNlYmdhY2tfY250ID0gMDtcbjE0MzU6XHRcdFx0XHRcdGdvdG8gb2s7XG4xNDM2Olx0XHRcdFx0fVxuMTQzNzpcdFx0XHR9XG4xNDM4Olx0XHR9XG4xNDM5Olx0XHQvKiBPdGhlciBjYXNlczogaWdub3JlISAqL1xuMTQ0MDpcdG91dDpcbjE0NDE6XHRcdHAgPSBOVUxMO1xuMTQ0MjpcdFxuMTQ0MzpcdG9rOlxuMTQ0NDpcdFx0KmdhID0gcDtcbjE0NDU6XHRcdHJldHVybiBzejtcbjE0NDY6XHR9XG4xNDQ3Olx0XG4xNDQ4Olx0c3RhdGljIHU4IF9fdGlwY19idWlsZF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICpnYSxcbjE0NDk6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgdGlwY19saW5rICpsLCB1OCBzdGFydF9pbmRleClcbjE0NTA6XHR7XG4xNDUxOlx0XHRzdHJ1Y3QgdGlwY19nYXBfYWNrICpnYWNrcyA9IFx1MDAyNmdhLVx1MDAzZWdhY2tzW3N0YXJ0X2luZGV4XTtcbjE0NTI6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVlayhcdTAwMjZsLVx1MDAzZWRlZmVyZHEpO1xuMTQ1MzpcdFx0dTE2IGV4cGVjdCwgc2Vxbm8gPSAwO1xuMTQ1NDpcdFx0dTggbiA9IDA7XG4xNDU1Olx0XG4xNDU2Olx0XHRpZiAoIXNrYilcbjE0NTc6XHRcdFx0cmV0dXJuIDA7XG4xNDU4Olx0XG4xNDU5Olx0XHRleHBlY3QgPSBidWZfc2Vxbm8oc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1NQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIGludG8gYHRpcGNfZ2V0X2dhcF9hY2tfYmxrc2AqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIHdoZXJlIGB0aXBjX2dldF9nYXBfYWNrX2Jsa3NgIGZpdHMgaW4uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgYWxsIHRoZSBwbGFjZXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGltbWVkaWF0ZSBjb250ZXh0IGFuZCByZXZlYWwgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBUSVBDIChUb3BvbG9neSBJbmRlcGVuZGVudCwgUHJvdG9jb2wgQ29udHJvbGxlZCkgZWNvc3lzdGVtLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBpcyB0aGUgZm91bmRhdGlvbiwgcmlnaHQ/IEl0JiMzOTtsbCBzaG93IG1lIHRoZSBpbnB1dHMgYW5kLCBpZGVhbGx5LCB3aGF0IHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gYWRqdXN0IG9yIG9wdGltaXplIHJlZ2FyZGluZyBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGl0IGlzIGJlaW5nIHVzZWQgaW4gdGhlIG5ldyBjb250ZXh0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19nZXRfZ2FwX2Fja19ibGtzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JjYXN0LmM9NDk4PWludCB0aXBjX2JjYXN0X3N5bmNfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCxcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTUxMy1cdH0gZWxzZSBpZiAoIW1zZ19iY19hY2tfaW52YWxpZChoZHIpKSB7XG5uZXQvdGlwYy9iY2FzdC5jOjUxNDpcdFx0Z2xlbiA9IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhcdTAwMjZnYSwgbCwgaGRyLCBmYWxzZSk7XG5uZXQvdGlwYy9iY2FzdC5jLTUxNS1cdFx0aWYgKGdsZW4gXHUwMDNlIG1zZ19kYXRhX3N6KGhkcikpIHtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTM0MD1zdGF0aWMgaW50IHRpcGNfbGlua190bmxfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbGluay5jLTE0MDUtLyoqXG5uZXQvdGlwYy9saW5rLmM6MTQwNjogKiB0aXBjX2dldF9nYXBfYWNrX2Jsa3MgLSBnZXQgR2FwIEFDSyBibG9ja3MgZnJvbSBQUk9UT0NPTC9TVEFURV9NU0dcbm5ldC90aXBjL2xpbmsuYy0xNDA3LSAqIEBnYTogcmV0dXJuZWQgcG9pbnRlciB0byB0aGUgR2FwIEFDSyBibG9ja3MgaWYgYW55XG4tLVxubmV0L3RpcGMvbGluay5jLTE0MTMtICovXG5uZXQvdGlwYy9saW5rLmM6MTQxNDp1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxubmV0L3RpcGMvbGluay5jLTE0MTUtXHRcdFx0ICBzdHJ1Y3QgdGlwY19tc2cgKmhkciwgYm9vbCB1Yylcbi0tXG5uZXQvdGlwYy9saW5rLmM9MjE3Nz1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjI3NC1cdFx0LyogVmFsaWRhdGUgR2FwIEFDSyBibG9ja3MsIGRyb3AgaWYgaW52YWxpZCAqL1xubmV0L3RpcGMvbGluay5jOjIyNzU6XHRcdGdsZW4gPSB0aXBjX2dldF9nYXBfYWNrX2Jsa3MoXHUwMDI2Z2EsIGwsIGhkciwgdHJ1ZSk7XG5uZXQvdGlwYy9saW5rLmMtMjI3Ni1cdFx0aWYgKGdsZW4gXHUwMDNlIGRsZW4pXG4tLVxubmV0L3RpcGMvbGluay5oPTE0ND1pbnQgdGlwY19saW5rX21zcyhzdHJ1Y3QgdGlwY19saW5rICpsKTtcbm5ldC90aXBjL2xpbmsuaDoxNDU6dTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCxcbm5ldC90aXBjL2xpbmsuaC0xNDYtXHRcdFx0ICBzdHJ1Y3QgdGlwY19tc2cgKmhkciwgYm9vbCB1Yyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTgKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogNzE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRJUEMgVnVsbmVyYWJpbGl0eSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYHRpcGNfZ2V0X2dhcF9hY2tfYmxrc2AsIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCB0aGUgb3JpZ2luYWwgY29kZSBkaWRuJiMzOTt0IGNoZWNrIHRoZSBzaXplIG9mIHRoZSBpbmNvbWluZyBtZXNzYWdlIGRhdGEgKGBoZHJgKSBhZ2FpbnN0IHRoZSBzaXplIG9mIHRoZSBgc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzYC4gVGhpcyBtZWFudCB0aGF0IGlmIHRoZSByZWNlaXZlZCBwYWNrZXQgd2FzIHNtYWxsZXIgdGhhbiBleHBlY3RlZCwgZGVyZWZlcmVuY2luZyBmaWVsZHMgd2l0aGluIHRoZSBgc3RydWN0YCAobGlrZSBgcC0mZ3Q7bGVuYCwgYHAtJmd0O3VnYWNrX2NudGAsIGV0Yy4pIHdvdWxkIGxlYWQgdG8gcmVhZGluZyBwYXN0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyLCBhbiBvYnZpb3VzIG1lbW9yeSBzYWZldHkgaXNzdWUuIEtBU0FOLCBvZiBjb3Vyc2UsIHdvdWxkIGNhdGNoIHRoaXMgZHVyaW5nIHJ1bnRpbWUuCgpUaGUgcGF0Y2gmIzM5O3MgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogYWRkIGEgYm91bmRzIGNoZWNrIHVzaW5nIGBtc2dfZGF0YV9zeihoZHIpICZsdDsgc2l6ZW9mKCpwKWAuIElmIHRoZSBwYWNrZXQmIzM5O3MgZGF0YSBpcyB0b28gc2hvcnQsIHRoZSBjb2RlIG5vdyBqdW1wcyB0byBgb3V0O2AsIGVmZmVjdGl2ZWx5IHByZXZlbnRpbmcgdGhlIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhhdCYjMzk7cyBnb29kLCBidXQgbGV0JiMzOTtzIGdvIGEgYml0IGZ1cnRoZXIuCgpNeSBpbW1lZGlhdGUgY29uY2VybnMgYXJlOiBkb2VzIHRoaXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gRG9lcyBpdCBjcmVhdGUgYW55IGluZm9ybWF0aW9uIGxlYWtzPyBEb2VzIGl0IGludGVyYWN0IHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYW55IG90aGVyIHdheT8KCjEuICAqKkV4cG9zaW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OioqIE5vLCB0aGlzIGlzbiYjMzk7dCBleHBvc2luZyBhbnl0aGluZyB0byB1c2Vyc3BhY2UuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaW50ZXJuYWwgVElQQyBwYWNrZXQgcGFyc2luZyB3aXRoaW4gdGhlIGtlcm5lbC4KMi4gICoqVG91Y2hpbmcgVW5pbml0aWFsaXplZCBTdGFjay9IZWFwIE1lbW9yeToqKiBOby4gVGhlIHBvaW50ZXIgYHBgIGlzIHBvaW50aW5nICppbnRvKiB0aGUgcmVjZWl2ZWQgcGFja2V0IGRhdGEgKGBtc2dfZGF0YShoZHIpYCB3aGljaCBpcyBhbHJlYWR5IGluaXRpYWxpemVkKSBhbmQgYHN6YCBpcyBhIGxvY2FsIHZhcmlhYmxlIGluaXRpYWxpemVkIHRvIDAuIFdoZW4gd2UganVtcCB0byBgb3V0O2AsIGBwYCBnZXRzIHNldCB0byBOVUxMLCBhbmQgYHN6YCByZXR1cm5zIGFzIDAuCjMuICAqKkZpeGluZyBvciBJbnRyb2R1Y2luZyBhbiBVbmluaXRpYWxpemVkIFJlYWQ6KiogVGhlIHBhdGNoIGZpeGVzIGFuICpvdXQtb2YtYm91bmRzKiByZWFkLCB3aGljaCBpcyBhICptZW1vcnkgc2FmZXR5IGlzc3VlKiwgYW5kIG5vdCBhbiAqdW5pbml0aWFsaXplZCByZWFkKi4KClNvLCBpdCYjMzk7cyBhIGNsZWFyIGZpeCBmb3IgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBhcmVuJiMzOTt0IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgcHJvYmxlbXMsIG9yIGFueSBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4KCk5vdywgZm9yIGBLTVNBTlJlYXNvbmluZ2AsIEkgbmVlZCB0byBjbGVhcmx5IGFydGljdWxhdGUgd2h5IEtNU0FOIGlzbiYjMzk7dCBuZWNlc3NhcnkgaGVyZToKCiogICBUaGUgcGF0Y2ggZW5mb3JjZXMgYSBzaXplIGNoZWNrIG9uIGluY29taW5nIFRJUEMgcGFja2V0cy4KKiAgIFRoZSB2dWxuZXJhYmlsaXR5IGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgZXhjZWVkaW5nIHRoZSBza2IgcGFja2V0IGJ1ZmZlciBib3VuZGFyeSB3aGVuIHByb2Nlc3NpbmcgbmV0d29yayBtZXNzYWdlcy4KKiAgIEtBU0FOIGlzIGRlc2lnbmVkIHNwZWNpZmljYWxseSB0byBjYXRjaCB0aGVzZSBraW5kcyBvZiBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIHBhY2tldCBidWZmZXJzIGFuZCBzbGFiIGFsbG9jYXRpb25zLgoqICAgTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0byB1c2VyLXNwYWNlLiBBbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuCiogICBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHJlcXVpcmUgS01TQU4sIGJlY2F1c2UgaXQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgdGhlIGFwcHJvcHJpYXRlIHNvbHV0aW9uLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzKCkgZW5zdXJpbmcgdGhhdCB0aGUgaW5jb21pbmcgbWVzc2FnZSBwYXlsb2FkIHNpemUgKG1zZ19kYXRhX3N6KGhkcikpIGlzIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MpIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHN0cnVjdCBtZW1iZXJzLiBUaGUgYnVnIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBza19idWZmIGRhdGEgYnVmZmVyIHdoZW4gcGFyc2luZyBtYWxmb3JtZWQgbmV0d29yayBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGFsdGVyIGluaXRpYWxpemF0aW9uIG9mIGFueSBzdGFjay9oZWFwIHN0cnVjdHVyZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIHRpcGNfZ2V0X2dhcF9hY2tfYmxrcygpIGVuc3VyaW5nIHRoYXQgdGhlIGluY29taW5nIG1lc3NhZ2UgcGF5bG9hZCBzaXplIChtc2dfZGF0YV9zeihoZHIpKSBpcyBhdCBsZWFzdCBzaXplb2Yoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzKSBiZWZvcmUgZGVyZWZlcmVuY2luZyBzdHJ1Y3QgbWVtYmVycy4gVGhlIGJ1ZyBhZGRyZXNzZWQgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgc2tfYnVmZiBkYXRhIGJ1ZmZlciB3aGVuIHBhcnNpbmcgbWFsZm9ybWVkIG5ldHdvcmsgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weV90b191c2VyIHBhdGhzLCBvciBhbHRlciBpbml0aWFsaXphdGlvbiBvZiBhbnkgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNjo1Mi4xNjI5NjUxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDY0NzA0NjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX2dldF9nYXBfYWNrX2Jsa3NcIixcbiAgICBcInRpcGNfbGlua19wcm90b19yY3ZcIixcbiAgICBcInRpcGNfbGlua19yY3ZcIixcbiAgICBcInRpcGNfYmNhc3Rfc3luY19yY3ZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzKCkgZW5zdXJpbmcgdGhhdCB0aGUgaW5jb21pbmcgbWVzc2FnZSBwYXlsb2FkIHNpemUgKG1zZ19kYXRhX3N6KGhkcikpIGlzIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MpIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHN0cnVjdCBtZW1iZXJzLiBUaGUgYnVnIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBza19idWZmIGRhdGEgYnVmZmVyIHdoZW4gcGFyc2luZyBtYWxmb3JtZWQgbmV0d29yayBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGFsdGVyIGluaXRpYWxpemF0aW9uIG9mIGFueSBzdGFjay9oZWFwIHN0cnVjdHVyZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiB0aXBjX2dldF9nYXBfYWNrX2Jsa3MgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBHYXAgQUNLIGJsb2NrcyBmcm9tIGluY29taW5nIFRJUEMgcHJvdG9jb2wgbWVzc2FnZXMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgcHJvY2Vzc2luZyBsb2dpYyBpbiBUSVBDIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNjo1Mi4xNjI5NzExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5NjIxNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2JkZTg2YTdkZjBiOTJhZTAxMWQ0ZjFmNGY2ODVhYjRkMGY0MmRiN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA0OjE2OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuY1xcbmluZGV4IDY0MjdjNjlmODkyOTQuLjBiZTg2Y2JkYzkxM2QgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbGluay5jXFxuKysrIGIvbmV0L3RpcGMvbGluay5jXFxuQEAgLTE0MTksNiArMTQxOSw4IEBAIHUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxuIFxcbiBcXHQvKiBEb2VzIHBlZXIgc3VwcG9ydCB0aGUgR2FwIEFDSyBibG9ja3MgZmVhdHVyZT8gKi9cXG4gXFx0aWYgKGwtXFx1MDAzZXBlZXJfY2FwcyBcXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSykge1xcbitcXHRcXHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcXHUwMDNjIHNpemVvZigqcCkpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRwID0gKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKW1zZ19kYXRhKGhkcik7XFxuIFxcdFxcdHN6ID0gbnRvaHMocC1cXHUwMDNlbGVuKTtcXG4gXFx0XFx0LyogU2FuaXR5IGNoZWNrICovXFxuQEAgLTE0MzUsNiArMTQzNyw3IEBAIHUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHQvKiBPdGhlciBjYXNlczogaWdub3JlISAqL1xcbitvdXQ6XFxuIFxcdHAgPSBOVUxMO1xcbiBcXG4gb2s6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE2OjUzLjcyMzE2ODI2OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUwMTMzNzA4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfZ2V0X2dhcF9hY2tfYmxrc1wiLFxuICAgIFwidGlwY19saW5rX3Byb3RvX3JjdlwiLFxuICAgIFwidGlwY19saW5rX3JjdlwiLFxuICAgIFwidGlwY19iY2FzdF9zeW5jX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHBhcnNpbmcgR2FwIEFDSyBibG9ja3MgZnJvbSBpbmNvbWluZyBUSVBDIHByb3RvY29sIG1lc3NhZ2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgbG9naWMgaW4gVElQQyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YmRlODZhN2RmMGI5MmFlMDExZDRmMWY0ZjY4NWFiNGQwZjQyZGI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNDoxNjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuY1xuaW5kZXggNjQyN2M2OWY4OTI5NC4uMGJlODZjYmRjOTEzZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2xpbmsuY1xuKysrIGIvbmV0L3RpcGMvbGluay5jXG5AQCAtMTQxOSw2ICsxNDE5LDggQEAgdTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCxcbiBcbiBcdC8qIERvZXMgcGVlciBzdXBwb3J0IHRoZSBHYXAgQUNLIGJsb2NrcyBmZWF0dXJlPyAqL1xuIFx0aWYgKGwtXHUwMDNlcGVlcl9jYXBzIFx1MDAyNiBUSVBDX0dBUF9BQ0tfQkxPQ0spIHtcbitcdFx0aWYgKG1zZ19kYXRhX3N6KGhkcikgXHUwMDNjIHNpemVvZigqcCkpXG4rXHRcdFx0Z290byBvdXQ7XG4gXHRcdHAgPSAoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICopbXNnX2RhdGEoaGRyKTtcbiBcdFx0c3ogPSBudG9ocyhwLVx1MDAzZWxlbik7XG4gXHRcdC8qIFNhbml0eSBjaGVjayAqL1xuQEAgLTE0MzUsNiArMTQzNyw3IEBAIHUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4gXHRcdH1cbiBcdH1cbiBcdC8qIE90aGVyIGNhc2VzOiBpZ25vcmUhICovXG4rb3V0OlxuIFx0cCA9IE5VTEw7XG4gXG4gb2s6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNjo1My43MjMxNjk3MzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTI4MTQ5MTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgTGluayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkndmUgZ290IHRoaXMgcGF0Y2ggYW5kIHJldmlldyByZXF1ZXN0IG9uIG15IGRlc2ssIGFuZCB0aGUgdGFyZ2V0IGlzIGBuZXQvdGlwYy9saW5rLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgd2l0aGluIHRoZSBgdGlwY19nZXRfZ2FwX2Fja19ibGtzYCBmdW5jdGlvbi4gTXkgZmlyc3QgbW92ZSBoZXJlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcgd2l0aGluIHRoZSBsYXJnZXIgVElQQyBmcmFtZXdvcmsuXG5cbkknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgYG5ldC90aXBjL2xpbmsuY2AgaXRzZWxmLCBvZiBjb3Vyc2UuIEknbGwgbmVlZCB0byBzZWUgdGhlIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZmlsZSBhbmQgdW5kZXJzdGFuZCBpdHMgaW1tZWRpYXRlIG5laWdoYm9ycy4gSSBhbHNvIHdhbnQgdG8gcXVpY2tseSBnbGFuY2UgYXQgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcywgYW55dGhpbmcgdGhhdCBtaWdodCBjb25kaXRpb25hbGx5IGluY2x1ZGUgb3IgZW5hYmxlIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIG1lbnRhbCBwaWN0dXJlLlxuXG5UaGVuLCBJJ2xsIGxldmVyYWdlIG15IHVzdWFsIHRvb2xzLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGZpbGUgSSdsbCBjYWxsIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCwgYW5kIHVzZSBpdCB0byBjaGVjayB0aGUgY29udGV4dCBpbiBgbmV0L3RpcGMvbGluay5jYC4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZmxvdywgYW55IGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuIEl04oCZcyBhbGwgYWJvdXQgdGhlIGRldGFpbHM7IG5vdGhpbmcgaXMgbGVmdCB0byBjaGFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjA1LjAwNDY2MzY4OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGlwYy9saW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQxMDpcXHQgKiBAdWM6IGRlc2lyZWQgR2FwIEFDSyBibG9ja3MgdHlwZSwgaS5lLiB1bmljYXN0ICg9IDEpIG9yIGJyb2FkY2FzdCAoPSAwKVxcbjE0MTE6XFx0ICpcXG4xNDEyOlxcdCAqIFJldHVybjogdGhlIHRvdGFsIEdhcCBBQ0sgYmxvY2tzIHNpemVcXG4xNDEzOlxcdCAqL1xcbjE0MTQ6XFx0dTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCxcXG4xNDE1OlxcdFxcdFxcdFxcdCAgc3RydWN0IHRpcGNfbXNnICpoZHIsIGJvb2wgdWMpXFxuMTQxNjpcXHR7XFxuMTQxNzpcXHRcXHRzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKnA7XFxuMTQxODpcXHRcXHR1MTYgc3ogPSAwO1xcbjE0MTk6XFx0XFxuMTQyMDpcXHRcXHQvKiBEb2VzIHBlZXIgc3VwcG9ydCB0aGUgR2FwIEFDSyBibG9ja3MgZmVhdHVyZT8gKi9cXG4xNDIxOlxcdFxcdGlmIChsLVxcdTAwM2VwZWVyX2NhcHMgXFx1MDAyNiBUSVBDX0dBUF9BQ0tfQkxPQ0spIHtcXG4xNDIyOlxcdFxcdFxcdGlmIChtc2dfZGF0YV9zeihoZHIpIFxcdTAwM2Mgc2l6ZW9mKCpwKSlcXG4xNDIzOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0MjQ6XFx0XFx0XFx0cCA9IChzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKiltc2dfZGF0YShoZHIpO1xcbjE0MjU6XFx0XFx0XFx0c3ogPSBudG9ocyhwLVxcdTAwM2VsZW4pO1xcbjE0MjY6XFx0XFx0XFx0LyogU2FuaXR5IGNoZWNrICovXFxuMTQyNzpcXHRcXHRcXHRpZiAoc3ogPT0gc3RydWN0X3NpemUocCwgZ2Fja3MsIHNpemVfYWRkKHAtXFx1MDAzZXVnYWNrX2NudCwgcC1cXHUwMDNlYmdhY2tfY250KSkpIHtcXG4xNDI4OlxcdFxcdFxcdFxcdC8qIEdvb2QsIGNoZWNrIGlmIHRoZSBkZXNpcmVkIHR5cGUgZXhpc3RzICovXFxuMTQyOTpcXHRcXHRcXHRcXHRpZiAoKHVjIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZXVnYWNrX2NudCkgfHwgKCF1YyBcXHUwMDI2XFx1MDAyNiBwLVxcdTAwM2ViZ2Fja19jbnQpKVxcbjE0MzA6XFx0XFx0XFx0XFx0XFx0Z290byBvaztcXG4xNDMxOlxcdFxcdFxcdC8qIEJhY2t3YXJkIGNvbXBhdGlibGU6IHBlZXIgbWlnaHQgbm90IHN1cHBvcnQgYmMsIGJ1dCB1Yz8gKi9cXG4xNDMyOlxcdFxcdFxcdH0gZWxzZSBpZiAodWMgXFx1MDAyNlxcdTAwMjYgc3ogPT0gc3RydWN0X3NpemUocCwgZ2Fja3MsIHAtXFx1MDAzZXVnYWNrX2NudCkpIHtcXG4xNDMzOlxcdFxcdFxcdFxcdGlmIChwLVxcdTAwM2V1Z2Fja19jbnQpIHtcXG4xNDM0OlxcdFxcdFxcdFxcdFxcdHAtXFx1MDAzZWJnYWNrX2NudCA9IDA7XFxuMTQzNTpcXHRcXHRcXHRcXHRcXHRnb3RvIG9rO1xcbjE0MzY6XFx0XFx0XFx0XFx0fVxcbjE0Mzc6XFx0XFx0XFx0fVxcbjE0Mzg6XFx0XFx0fVxcbjE0Mzk6XFx0XFx0LyogT3RoZXIgY2FzZXM6IGlnbm9yZSEgKi9cXG4xNDQwOlxcdG91dDpcXG4xNDQxOlxcdFxcdHAgPSBOVUxMO1xcbjE0NDI6XFx0XFxuMTQ0MzpcXHRvazpcXG4xNDQ0OlxcdFxcdCpnYSA9IHA7XFxuMTQ0NTpcXHRcXHRyZXR1cm4gc3o7XFxuMTQ0NjpcXHR9XFxuMTQ0NzpcXHRcXG4xNDQ4OlxcdHN0YXRpYyB1OCBfX3RpcGNfYnVpbGRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqZ2EsXFxuMTQ0OTpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHRpcGNfbGluayAqbCwgdTggc3RhcnRfaW5kZXgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjA1LjAwNDgwMjY4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTg1NDA0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIHRoZSBzdWJqZWN0IG1hdHRlcjpcblxuKipEZWVwIERpdmUgaW50byBUSVBDIGFuZCBHYXAgQWNrbm93bGVkZ2VtZW50IEJsb2NrcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYHRpcGNfZ2V0X2dhcF9hY2tfYmxrc2AuIEZpcnN0LCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIFRJUEMgY29kZWJhc2UuIENvbnRleHQgaXMgZXZlcnl0aGluZy4gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgVElQQyBjb25maWd1cmF0aW9uIHdpbGwgYmUgY3JpdGljYWwgaW4gbWFraW5nIGFueSBjb25jbHVzaW9ucyBhYm91dCB0aGlzIGZ1bmN0aW9uLlxuXG5UaGVuLCB0aGUgZm9jdXMgc2hpZnRzLiBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGxzIHRvIGB0aXBjX2dldF9nYXBfYWNrX2Jsa3NgLiBBIGdvb2Qgc2VhcmNoIHN0cmF0ZWd5IHdpbGwgYmUga2V5IHRvIHVuY292ZXJpbmcgYWxsIHRoZSBkaWZmZXJlbnQgd2F5cyB0aGlzIGlzIHVzZWQuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCByZWFsbHkgaGVscCBtZSBzZWUgdGhlIGZsb3cgb2YgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgdXNhZ2UgcGF0dGVybnMgdG8gaW5mZXIgdGhlIHB1cnBvc2Ugb2YgdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MTc6MDYuOTIzMzQ1MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgwNjkzODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19nZXRfZ2FwX2Fja19ibGtzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2JjYXN0LmM9NDk4PWludCB0aXBjX2JjYXN0X3N5bmNfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCxcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtNTEzLVxcdH0gZWxzZSBpZiAoIW1zZ19iY19hY2tfaW52YWxpZChoZHIpKSB7XFxubmV0L3RpcGMvYmNhc3QuYzo1MTQ6XFx0XFx0Z2xlbiA9IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhcXHUwMDI2Z2EsIGwsIGhkciwgZmFsc2UpO1xcbm5ldC90aXBjL2JjYXN0LmMtNTE1LVxcdFxcdGlmIChnbGVuIFxcdTAwM2UgbXNnX2RhdGFfc3ooaGRyKSkge1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTEzNDA9c3RhdGljIGludCB0aXBjX2xpbmtfdG5sX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE0MDUtLyoqXFxubmV0L3RpcGMvbGluay5jOjE0MDY6ICogdGlwY19nZXRfZ2FwX2Fja19ibGtzIC0gZ2V0IEdhcCBBQ0sgYmxvY2tzIGZyb20gUFJPVE9DT0wvU1RBVEVfTVNHXFxubmV0L3RpcGMvbGluay5jLTE0MDctICogQGdhOiByZXR1cm5lZCBwb2ludGVyIHRvIHRoZSBHYXAgQUNLIGJsb2NrcyBpZiBhbnlcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNDEzLSAqL1xcbm5ldC90aXBjL2xpbmsuYzoxNDE0OnUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxubmV0L3RpcGMvbGluay5jLTE0MTUtXFx0XFx0XFx0ICBzdHJ1Y3QgdGlwY19tc2cgKmhkciwgYm9vbCB1YylcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0yMTc3PXN0YXRpYyBpbnQgdGlwY19saW5rX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTIyNzQtXFx0XFx0LyogVmFsaWRhdGUgR2FwIEFDSyBibG9ja3MsIGRyb3AgaWYgaW52YWxpZCAqL1xcbm5ldC90aXBjL2xpbmsuYzoyMjc1OlxcdFxcdGdsZW4gPSB0aXBjX2dldF9nYXBfYWNrX2Jsa3MoXFx1MDAyNmdhLCBsLCBoZHIsIHRydWUpO1xcbm5ldC90aXBjL2xpbmsuYy0yMjc2LVxcdFxcdGlmIChnbGVuIFxcdTAwM2UgZGxlbilcXG4tLVxcbm5ldC90aXBjL2xpbmsuaD0xNDQ9aW50IHRpcGNfbGlua19tc3Moc3RydWN0IHRpcGNfbGluayAqbCk7XFxubmV0L3RpcGMvbGluay5oOjE0NTp1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbm5ldC90aXBjL2xpbmsuaC0xNDYtXFx0XFx0XFx0ICBzdHJ1Y3QgdGlwY19tc2cgKmhkciwgYm9vbCB1Yyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjA3LjAxMTQyMTcwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzQ5NjcyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gVElQQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgVElQQyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYG5ldC90aXBjL0tjb25maWdgLiBUaGF0J3MgdGhlIHVzdWFsIHNwb3QsIHJpZ2h0PyBJdCBzaG91bGQgb3V0bGluZSBhbGwgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIHN5bWJvbHMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIG1vZHVsZS4gSSBleHBlY3QgdG8gZmluZCBvcHRpb25zIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgcGVyaGFwcyBmb3IgZGlmZmVyZW50IG5vZGUgdHlwZXMsIGFuZCBkZWZpbml0ZWx5IGZvciB0aGluZ3MgbGlrZSBzZWN1cml0eSBmZWF0dXJlcyBvciBzcGVjaWZpYyB0cmFuc3BvcnQgcHJvdG9jb2xzIGlmIHRoZXkgZXhpc3QuIEnigJlsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UgdHVuaW5nIGFzIHdlbGwuIEdvdHRhIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBpbXBhY3QgbXkgc3BlY2lmaWMgdXNlIGNhc2UuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzowOC44ODYzOTE1NjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGlwYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRJUEMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIFRJUENcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgVElQQyBQcm90b2NvbFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGUgVHJhbnNwYXJlbnQgSW50ZXIgUHJvY2VzcyBDb21tdW5pY2F0aW9uIChUSVBDKSBwcm90b2NvbCBpc1xcbiAgMTE6XFx0XFx0ICBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIGludHJhIGNsdXN0ZXIgY29tbXVuaWNhdGlvbi4gVGhpcyBwcm90b2NvbFxcbiAgMTI6XFx0XFx0ICBvcmlnaW5hdGVzIGZyb20gRXJpY3Nzb24gd2hlcmUgaXQgaGFzIGJlZW4gdXNlZCBpbiBjYXJyaWVyIGdyYWRlXFxuICAxMzpcXHRcXHQgIGNsdXN0ZXIgYXBwbGljYXRpb25zIGZvciBtYW55IHllYXJzLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFRJUEMsIHNlZSBodHRwOi8vdGlwYy5zb3VyY2Vmb3JnZS5uZXQuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgVGhpcyBwcm90b2NvbCBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoXFxuICAxODpcXHRcXHQgIGNhbiBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcXG4gIDE5OlxcdFxcdCAgd2FudCkuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlwYy4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdFxcbiAgMjA6XFx0XFx0ICBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnJzdFxcdTAwM2UuXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgVElQQ19NRURJQV9JQlxcbiAgMjU6XFx0XFx0Ym9vbCBcXFwiSW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcXFwiXFxuICAyNjpcXHRcXHRkZXBlbmRzIG9uIFRJUEMgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORF9JUE9JQlxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgZW5hYmxlIHN1cHBvcnQgZm9yIHJ1bm5pbmcgVElQQyBvblxcbiAgMjk6XFx0XFx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cXG4gIDMwOlxcdGNvbmZpZyBUSVBDX01FRElBX1VEUFxcbiAgMzE6XFx0XFx0Ym9vbCBcXFwiSVAvVURQIG1lZGlhIHR5cGUgc3VwcG9ydFxcXCJcXG4gIDMyOlxcdFxcdGRlcGVuZHMgb24gVElQQ1xcbiAgMzM6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuICAzNDpcXHRcXHRkZWZhdWx0IHlcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGVuYWJsZSBzdXBwb3J0IGZvciBydW5uaW5nIFRJUEMgb3ZlciBJUC9VRFBcXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIFRJUENfQ1JZUFRPXFxuICAzOTpcXHRcXHRib29sIFxcXCJUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gVElQQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzowOC44ODY0ODY1NzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDU4MjI1NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRJUEMgVnVsbmVyYWJpbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIFRJUEMgZGVwZW5kcyBvbiBJTkVULCB3aGljaCBtZWFucyBpdCdzIGEgbmV0d29yayBwcm90b2NvbCwgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZWNoYW5pc21zIGxpa2Ugc29ja2V0cyAoQUZfVElQQyksIG5ldGxpbmssIFVEUCwgYW5kIHRoZSByZXN0LiBHb29kLCB0aGF0IG1lYW5zIFN5emthbGxlciBzaG91bGQgaGF2ZSBkZWNlbnQgY292ZXJhZ2UgZm9yIGZ1enppbmcgaXQuIEluIGZhY3QsIFN5emthbGxlciAqZG9lcyogaGVhdmlseSBmdXp6IFRJUEMsIHdoaWNoIGlzIGEgZ29vZCBzaWduLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBpbiBgbmV0L3RpcGMvbGluay5jYC4gSSBzZWUgdGhleSd2ZSBhZGRlZCBhIGJvdW5kcyBjaGVjazogYG1zZ19kYXRhX3N6KGhkcikgXHUwMDNjIHNpemVvZigqcClgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIGBwID0gKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKW1zZ19kYXRhKGhkcilgLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgcHJldmVudGlvbiwgcHJvdGVjdGluZyBhZ2FpbnN0IGEgbWFsZm9ybWVkIEdhcCBBQ0sgYmxvY2sgaW4gYSByZWNlaXZlZCBUSVBDIHBhY2tldC4gIEdvb2QgY2F0Y2ghIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGxlYWQgdG8gZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUuIFBlcmZlY3QuXG5cbk5vdywgZm9yIGZvY3VzIHN5bWJvbHMsICBgdGlwY19nZXRfZ2FwX2Fja19ibGtzYCwgYHRpcGNfbGlua19wcm90b19yY3ZgLCBgdGlwY19iY2FzdF9zeW5jX3JjdmAsIGFuZCBgdGlwY19yY3ZgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucy4gV2UgbmVlZCB0byBjaGVjayBjYWxsZXJzIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdy5cblxuYHRpcGNfZ2V0X2dhcF9hY2tfYmxrc2AgaXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LlxuXG5Ob3csIGxldCdzIHNlZSB3aGVyZSB0aGUgY2FsbGVycyBhcmUuIGB0aXBjX2xpbmtfcHJvdG9fcmN2YCBpcyBzdGF0aWM7IGB0aXBjX3JjdmAgaXMgaW4gYG5ldC90aXBjL25vZGUuY2Agb3IgYG5ldC90aXBjL2xpbmsuY2AuICBMZXQncyB0cmFjZSBgdGlwY19saW5rX3Byb3RvX3JjdmAgYW5kIHNlZSB3aGVyZSB0aGlzIGJyYW5jaGVzLiBUaGlzIHdpbGwgdGVsbCB1cyB0aGUgZnVsbCBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjEyLjk0NDcxNTE5OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE4NzAwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19saW5rX3Byb3RvX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9saW5rLmM9MjM0PWVudW0ge1xcbi0tXFxubmV0L3RpcGMvbGluay5jLTI0My1cXG5uZXQvdGlwYy9saW5rLmM6MjQ0OnN0YXRpYyBpbnQgdGlwY19saW5rX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC90aXBjL2xpbmsuYy0yNDUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xNzY1PWludCB0aXBjX2xpbmtfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTc3NS1cXHRpZiAodW5saWtlbHkobXNnX3VzZXIoaGRyKSA9PSBMSU5LX1BST1RPQ09MKSlcXG5uZXQvdGlwYy9saW5rLmM6MTc3NjpcXHRcXHRyZXR1cm4gdGlwY19saW5rX3Byb3RvX3JjdihsLCBza2IsIHhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmMtMTc3Ny1cXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0yMTM0PWJvb2wgdGlwY19saW5rX3ZhbGlkYXRlX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3QgdGlwY19tc2cgKmhkcilcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0yMTcxLVxcbm5ldC90aXBjL2xpbmsuYzoyMTcyOi8qIHRpcGNfbGlua19wcm90b19yY3YoKTogcmVjZWl2ZSBsaW5rIGxldmVsIHByb3RvY29sIG1lc3NhZ2UgOlxcbm5ldC90aXBjL2xpbmsuYy0yMTczLSAqIE5vdGUgdGhhdCBuZXR3b3JrIHBsYW5lIGlkIHByb3BhZ2F0ZXMgdGhyb3VnaCB0aGUgbmV0d29yaywgYW5kIG1heVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTIxNzYtICovXFxubmV0L3RpcGMvbGluay5jOjIxNzc6c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvbGluay5jLTIxNzgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzoxMy4wMTY1OTI3ODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxNjAyNjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHRpcGNfbGlua19yY3ZgIGFuZCBgdGlwY19iY2FzdF9zeW5jX3JjdmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlY2VpdmUgcGF0aCBmb3IgVElQQywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGB0aXBjX2xpbmtfcmN2YCBhbmQgYHRpcGNfYmNhc3Rfc3luY19yY3ZgLiBJJ20gZ3Vlc3NpbmcgdGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBoYW5kbGluZyBpbmJvdW5kIHRyYWZmaWMsIHdoZXRoZXIgaXQncyBkaXJlY3QgbGluayBjb21tdW5pY2F0aW9uIG9yIGJyb2FkY2FzdCBzeW5jaHJvbml6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0LiBBcmUgdGhleSBwYXJ0IG9mIHRoZSBzYW1lIHJlY2VpdmUgdGhyZWFkIG9yIGFyZSB0aGV5IHNlcGFyYXRlP1xuXG5JIHNob3VsZCBsb29rIGF0IGhvdyBwYWNrZXRzIGFyZSBkZXF1ZXVlZCwgcHJvY2Vzc2VkLCBhbmQgdWx0aW1hdGVseSBkZWxpdmVyZWQgdG8gdGhlIHVwcGVyIGxheWVycy4gQXJlIHRoZXJlIGFueSBjcml0aWNhbCBzZWN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFdoYXQgbG9ja2luZyBwcmltaXRpdmVzIGFyZSBpbnZvbHZlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGxpa2UgYSBzaW5nbGUgbG9jayBwcm90ZWN0aW5nIHRoZSByZWNlaXZlIHF1ZXVlPyBNZW1vcnkgYWxsb2NhdGlvbiBwYXR0ZXJucyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgaW1wb3J0YW50IHRvbyDigJMgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgbWVtb3J5IGxlYWtzIG9yIHBlcmZvcm1hbmNlLWltcGFjdGluZyBhbGxvY2F0aW9ucy5cblxuSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZy4gSG93IGFyZSBpbnZhbGlkIHBhY2tldHMgZGVhbHQgd2l0aD8gRG8gdGhleSBnZXQgZHJvcHBlZCBzaWxlbnRseSwgbG9nZ2VkLCBvciB0cmlnZ2VyIGEgbW9yZSBzZXJpb3VzIGVycm9yIGNvbmRpdGlvbj8gSG93IHJvYnVzdCBpcyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gZ2VuZXJhbD8gSXMgdGhlcmUgcHJvcGVyIGVycm9yIGNoZWNraW5nIGZvciB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zP1xuXG5GaW5hbGx5LCBob3cgZG9lcyBicm9hZGNhc3Qgc3luY2hyb25pemF0aW9uIGFjdHVhbGx5IHdvcmsgd2l0aGluIHRoZSBgdGlwY19iY2FzdF9zeW5jX3JjdmAgZnVuY3Rpb24/IElzIGl0IHVzaW5nIGEgc2ltcGxlIGhlYXJ0YmVhdCBtZWNoYW5pc20sIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IFdoYXQgaGFwcGVucyBpZiBhIG5vZGUgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUgZHVyaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gcHJvY2Vzcz8gRG9lcyBpdCByZXRyeSwgYW5kIGhvdyBsb25nIGRvZXMgaXQgd2FpdD8gVGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGNsdXN0ZXIgY29udmVyZ2VuY2UuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY29tcGFyZSB0aGlzIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciBUSVBDIHRvIGVuc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgYWNjdXJhdGUgYW5kIGlzIHVwIHRvIHNwZWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzoxNS43MzI2MjE5MzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODQxNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfYmNhc3Rfc3luY19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmNhc3QuYz00NzA9dm9pZCB0aXBjX2JjYXN0X2Fja19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYy00OTctICovXFxubmV0L3RpcGMvYmNhc3QuYzo0OTg6aW50IHRpcGNfYmNhc3Rfc3luY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbm5ldC90aXBjL2JjYXN0LmMtNDk5LVxcdFxcdFxcdHN0cnVjdCB0aXBjX21zZyAqaGRyLFxcbi0tXFxubmV0L3RpcGMvYmNhc3QuaD05Nj12b2lkIHRpcGNfYmNhc3RfYWNrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxubmV0L3RpcGMvYmNhc3QuaC05Ny1cXHRcXHRcXHRzdHJ1Y3QgdGlwY19tc2cgKmhkcik7XFxubmV0L3RpcGMvYmNhc3QuaDo5ODppbnQgdGlwY19iY2FzdF9zeW5jX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxubmV0L3RpcGMvYmNhc3QuaC05OS1cXHRcXHRcXHRzdHJ1Y3QgdGlwY19tc2cgKmhkcixcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xODQwPXN0YXRpYyB2b2lkIHRpcGNfbm9kZV9iY19zeW5jX3JjdihzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3QgdGlwY19tc2cgKmhkcixcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xODQ2LVxcbm5ldC90aXBjL25vZGUuYzoxODQ3OlxcdHJjID0gdGlwY19iY2FzdF9zeW5jX3JjdihuLVxcdTAwM2VuZXQsIG4tXFx1MDAzZWJjX2VudHJ5LmxpbmssIGhkciwgeG1pdHEsIHZhbGlkKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTg0OC1cXHRpZiAoISp2YWxpZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MTc6MTUuODE5NDY4MDU1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NzAwOTU5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBWZXJkaWN0OiBUSVBDIE1vZHVsZSoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbi4gSXQgc2VlbXMgd2UncmUgZW5hYmxpbmcgYENPTkZJR19USVBDYCwgd2hpY2ggaW5oZXJlbnRseSBicmluZ3MgaW4gYENPTkZJR19JTkVUYC4gU28sIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBpbmRlZWQgYFtcIlRJUENcIiwgXCJJTkVUXCJdYC4gVGhhdCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gc2VlIHdoYXQgc3ltYm9scyBhcmUgb2YgcHJpbWFyeSBpbnRlcmVzdC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBsaXN0ZWQgYXM6IGB0aXBjX2dldF9nYXBfYWNrX2Jsa3NgLCBgdGlwY19saW5rX3Byb3RvX3JjdmAsIGB0aXBjX2xpbmtfcmN2YCwgYW5kIGB0aXBjX2JjYXN0X3N5bmNfcmN2YC4gWWVzLCB0aGVzZSBhcmUgYWxsIGNyaXRpY2FsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFRJUEMncyBpbnRlcm5hbCB3b3JraW5ncy4gVGhlc2UgYXJlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBldmVyeXRoaW5nIG9uZSBsYXN0IHRpbWUuIFdlIGhhdmUgYFdvcnRoRnV6emluZzogdHJ1ZWAsIGBFbmFibGVDb25maWdzOiBbXCJUSVBDXCIsIFwiSU5FVFwiXWAsIGFuZCB0aGUgc3BlY2lmaWVkIGBGb2N1c1N5bWJvbHNgLiBFdmVyeXRoaW5nIHNlZW1zIHRvIGJlIGluIG9yZGVyOyB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGUgZnV6emluZyBpcyBjb25jaXNlIGFuZCBhY2N1cmF0ZS5cblxuQWxyaWdodCwgSSBhbSByZWFkeSB0byBpbml0aWF0ZSB0aGUgcHJvY2Vzcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQwLCJPdXRwdXRUb2tlbnMiOjE0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzoxOC41ODk1NjcwNjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY5Njg2OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX2dldF9nYXBfYWNrX2Jsa3NcIixcbiAgICBcInRpcGNfbGlua19wcm90b19yY3ZcIixcbiAgICBcInRpcGNfbGlua19yY3ZcIixcbiAgICBcInRpcGNfYmNhc3Rfc3luY19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwYXJzaW5nIEdhcCBBQ0sgYmxvY2tzIGZyb20gaW5jb21pbmcgVElQQyBwcm90b2NvbCBtZXNzYWdlcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBwcm9jZXNzaW5nIGxvZ2ljIGluIFRJUEMgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfZ2V0X2dhcF9hY2tfYmxrc1wiLFxuICAgIFwidGlwY19saW5rX3Byb3RvX3JjdlwiLFxuICAgIFwidGlwY19saW5rX3JjdlwiLFxuICAgIFwidGlwY19iY2FzdF9zeW5jX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHBhcnNpbmcgR2FwIEFDSyBibG9ja3MgZnJvbSBpbmNvbWluZyBUSVBDIHByb3RvY29sIG1lc3NhZ2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgbG9naWMgaW4gVElQQyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MTc6MTguNzM2NTQyOTU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg5MTExNzEwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjE4LjczNzAyMjg1NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwODkwNjMyNzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIHRpcGNfZ2V0X2dhcF9hY2tfYmxrcygpIGVuc3VyaW5nIHRoYXQgdGhlIGluY29taW5nIG1lc3NhZ2UgcGF5bG9hZCBzaXplIChtc2dfZGF0YV9zeihoZHIpKSBpcyBhdCBsZWFzdCBzaXplb2Yoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzKSBiZWZvcmUgZGVyZWZlcmVuY2luZyBzdHJ1Y3QgbWVtYmVycy4gVGhlIGJ1ZyBhZGRyZXNzZWQgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgc2tfYnVmZiBkYXRhIGJ1ZmZlciB3aGVuIHBhcnNpbmcgbWFsZm9ybWVkIG5ldHdvcmsgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weV90b191c2VyIHBhdGhzLCBvciBhbHRlciBpbml0aWFsaXphdGlvbiBvZiBhbnkgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdiZGU4NmE3ZGYwYjkyYWUwMTFkNGYxZjRmNjg1YWI0ZDBmNDJkYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA0OjE2OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbGluay5jIGIvbmV0L3RpcGMvbGluay5jXG5pbmRleCA2NDI3YzY5Zjg5Mjk0Li4wYmU4NmNiZGM5MTNkIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbGluay5jXG4rKysgYi9uZXQvdGlwYy9saW5rLmNcbkBAIC0xNDE5LDYgKzE0MTksOCBAQCB1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuIFxuIFx0LyogRG9lcyBwZWVyIHN1cHBvcnQgdGhlIEdhcCBBQ0sgYmxvY2tzIGZlYXR1cmU/ICovXG4gXHRpZiAobC1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSykge1xuK1x0XHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcdTAwM2Mgc2l6ZW9mKCpwKSlcbitcdFx0XHRnb3RvIG91dDtcbiBcdFx0cCA9IChzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKiltc2dfZGF0YShoZHIpO1xuIFx0XHRzeiA9IG50b2hzKHAtXHUwMDNlbGVuKTtcbiBcdFx0LyogU2FuaXR5IGNoZWNrICovXG5AQCAtMTQzNSw2ICsxNDM3LDcgQEAgdTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCxcbiBcdFx0fVxuIFx0fVxuIFx0LyogT3RoZXIgY2FzZXM6IGlnbm9yZSEgKi9cbitvdXQ6XG4gXHRwID0gTlVMTDtcbiBcbiBvazpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjE4LjczNzAyNDM5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODQxNTYwMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBEZXRlcm1pbmF0aW9uIGZvciBgbmV0L3RpcGMvbGluay5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpbiBgbmV0L3RpcGMvbGluay5jYCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIHNlY3VyaXR5IGd1aWRlbGluZXMuIFJpZ2h0LCB0aGlzIGlzIGNvZGUgYW5hbHlzaXMsIGRlZmVuc2l2ZSBRQSwgYW5kIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBmdXp6aW5nIHN0cmF0ZWd5LiBUaGUgZ3VpZGVsaW5lcyBjbGFzc2lmeSB0aGlzIGFzIGEgbG93LXNldmVyaXR5LCBiZW5pZ24gdGFzay4gV2UncmUgdGFsa2luZyBzb3VyY2UgY29kZSB2dWxuZXJhYmlsaXR5IGFuYWx5c2lzLCBhdWRpdGluZywgYW5kIGxldmVyYWdpbmcgc2FuaXRpemVycyDigJMgbm8gb2ZmZW5zaXZlIHBheWxvYWRzIG9yIGV4cGxvaXQgYXR0ZW1wdHMgYXJlIGludm9sdmVkLiBUaGF0J3MgZ29vZCBjb250ZXh0LiBOb3csIHRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSSdsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBpbnNwZWN0IHRoZSBjb2RlLCB0aGUgY2hhbmdlcywgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiBgbmV0L3RpcGMvbGluay5jYC4gTGV0J3MgZ2V0IHRvIHdvcmsgYW5kIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzoyNy41Nzg1ODc3NzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2xpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDEwOlxcdCAqIEB1YzogZGVzaXJlZCBHYXAgQUNLIGJsb2NrcyB0eXBlLCBpLmUuIHVuaWNhc3QgKD0gMSkgb3IgYnJvYWRjYXN0ICg9IDApXFxuMTQxMTpcXHQgKlxcbjE0MTI6XFx0ICogUmV0dXJuOiB0aGUgdG90YWwgR2FwIEFDSyBibG9ja3Mgc2l6ZVxcbjE0MTM6XFx0ICovXFxuMTQxNDpcXHR1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbjE0MTU6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGlwY19tc2cgKmhkciwgYm9vbCB1YylcXG4xNDE2OlxcdHtcXG4xNDE3OlxcdFxcdHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqcDtcXG4xNDE4OlxcdFxcdHUxNiBzeiA9IDA7XFxuMTQxOTpcXHRcXG4xNDIwOlxcdFxcdC8qIERvZXMgcGVlciBzdXBwb3J0IHRoZSBHYXAgQUNLIGJsb2NrcyBmZWF0dXJlPyAqL1xcbjE0MjE6XFx0XFx0aWYgKGwtXFx1MDAzZXBlZXJfY2FwcyBcXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSykge1xcbjE0MjI6XFx0XFx0XFx0aWYgKG1zZ19kYXRhX3N6KGhkcikgXFx1MDAzYyBzaXplb2YoKnApKVxcbjE0MjM6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTQyNDpcXHRcXHRcXHRwID0gKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKW1zZ19kYXRhKGhkcik7XFxuMTQyNTpcXHRcXHRcXHRzeiA9IG50b2hzKHAtXFx1MDAzZWxlbik7XFxuMTQyNjpcXHRcXHRcXHQvKiBTYW5pdHkgY2hlY2sgKi9cXG4xNDI3OlxcdFxcdFxcdGlmIChzeiA9PSBzdHJ1Y3Rfc2l6ZShwLCBnYWNrcywgc2l6ZV9hZGQocC1cXHUwMDNldWdhY2tfY250LCBwLVxcdTAwM2ViZ2Fja19jbnQpKSkge1xcbjE0Mjg6XFx0XFx0XFx0XFx0LyogR29vZCwgY2hlY2sgaWYgdGhlIGRlc2lyZWQgdHlwZSBleGlzdHMgKi9cXG4xNDI5OlxcdFxcdFxcdFxcdGlmICgodWMgXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNldWdhY2tfY250KSB8fCAoIXVjIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZWJnYWNrX2NudCkpXFxuMTQzMDpcXHRcXHRcXHRcXHRcXHRnb3RvIG9rO1xcbjE0MzE6XFx0XFx0XFx0LyogQmFja3dhcmQgY29tcGF0aWJsZTogcGVlciBtaWdodCBub3Qgc3VwcG9ydCBiYywgYnV0IHVjPyAqL1xcbjE0MzI6XFx0XFx0XFx0fSBlbHNlIGlmICh1YyBcXHUwMDI2XFx1MDAyNiBzeiA9PSBzdHJ1Y3Rfc2l6ZShwLCBnYWNrcywgcC1cXHUwMDNldWdhY2tfY250KSkge1xcbjE0MzM6XFx0XFx0XFx0XFx0aWYgKHAtXFx1MDAzZXVnYWNrX2NudCkge1xcbjE0MzQ6XFx0XFx0XFx0XFx0XFx0cC1cXHUwMDNlYmdhY2tfY250ID0gMDtcXG4xNDM1OlxcdFxcdFxcdFxcdFxcdGdvdG8gb2s7XFxuMTQzNjpcXHRcXHRcXHRcXHR9XFxuMTQzNzpcXHRcXHRcXHR9XFxuMTQzODpcXHRcXHR9XFxuMTQzOTpcXHRcXHQvKiBPdGhlciBjYXNlczogaWdub3JlISAqL1xcbjE0NDA6XFx0b3V0OlxcbjE0NDE6XFx0XFx0cCA9IE5VTEw7XFxuMTQ0MjpcXHRcXG4xNDQzOlxcdG9rOlxcbjE0NDQ6XFx0XFx0KmdhID0gcDtcXG4xNDQ1OlxcdFxcdHJldHVybiBzejtcXG4xNDQ2OlxcdH1cXG4xNDQ3OlxcdFxcbjE0NDg6XFx0c3RhdGljIHU4IF9fdGlwY19idWlsZF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICpnYSxcXG4xNDQ5OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdGlwY19saW5rICpsLCB1OCBzdGFydF9pbmRleClcXG4xNDUwOlxcdHtcXG4xNDUxOlxcdFxcdHN0cnVjdCB0aXBjX2dhcF9hY2sgKmdhY2tzID0gXFx1MDAyNmdhLVxcdTAwM2VnYWNrc1tzdGFydF9pbmRleF07XFxuMTQ1MjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWsoXFx1MDAyNmwtXFx1MDAzZWRlZmVyZHEpO1xcbjE0NTM6XFx0XFx0dTE2IGV4cGVjdCwgc2Vxbm8gPSAwO1xcbjE0NTQ6XFx0XFx0dTggbiA9IDA7XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdGlmICghc2tiKVxcbjE0NTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTQ1ODpcXHRcXG4xNDU5OlxcdFxcdGV4cGVjdCA9IGJ1Zl9zZXFubyhza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzoyNy41Nzg4ODYyMjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwNDEzNjU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipEaXZpbmcgaW50byBgdGlwY19nZXRfZ2FwX2Fja19ibGtzYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGFuZCB3aGVyZSBgdGlwY19nZXRfZ2FwX2Fja19ibGtzYCBmaXRzIGluLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEknbGwgbmVlZCB0byBsb2NhdGUgYWxsIHRoZSBwbGFjZXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGltbWVkaWF0ZSBjb250ZXh0IGFuZCByZXZlYWwgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBUSVBDIChUb3BvbG9neSBJbmRlcGVuZGVudCwgUHJvdG9jb2wgQ29udHJvbGxlZCkgZWNvc3lzdGVtLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBpcyB0aGUgZm91bmRhdGlvbiwgcmlnaHQ/IEl0J2xsIHNob3cgbWUgdGhlIGlucHV0cyBhbmQsIGlkZWFsbHksIHdoYXQgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBhZGp1c3Qgb3Igb3B0aW1pemUgcmVnYXJkaW5nIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEknbGwgZm9jdXMgb24gaG93IGl0IGlzIGJlaW5nIHVzZWQgaW4gdGhlIG5ldyBjb250ZXh0IG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MTc6MjkuNTgzMDI5MDc1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgwMjI5MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfZ2V0X2dhcF9hY2tfYmxrc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9iY2FzdC5jPTQ5OD1pbnQgdGlwY19iY2FzdF9zeW5jX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jLTUxMy1cXHR9IGVsc2UgaWYgKCFtc2dfYmNfYWNrX2ludmFsaWQoaGRyKSkge1xcbm5ldC90aXBjL2JjYXN0LmM6NTE0OlxcdFxcdGdsZW4gPSB0aXBjX2dldF9nYXBfYWNrX2Jsa3MoXFx1MDAyNmdhLCBsLCBoZHIsIGZhbHNlKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTUxNS1cXHRcXHRpZiAoZ2xlbiBcXHUwMDNlIG1zZ19kYXRhX3N6KGhkcikpIHtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xMzQwPXN0YXRpYyBpbnQgdGlwY19saW5rX3RubF9yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNDA1LS8qKlxcbm5ldC90aXBjL2xpbmsuYzoxNDA2OiAqIHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyAtIGdldCBHYXAgQUNLIGJsb2NrcyBmcm9tIFBST1RPQ09ML1NUQVRFX01TR1xcbm5ldC90aXBjL2xpbmsuYy0xNDA3LSAqIEBnYTogcmV0dXJuZWQgcG9pbnRlciB0byB0aGUgR2FwIEFDSyBibG9ja3MgaWYgYW55XFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTQxMy0gKi9cXG5uZXQvdGlwYy9saW5rLmM6MTQxNDp1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbm5ldC90aXBjL2xpbmsuYy0xNDE1LVxcdFxcdFxcdCAgc3RydWN0IHRpcGNfbXNnICpoZHIsIGJvb2wgdWMpXFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MjE3Nz1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0yMjc0LVxcdFxcdC8qIFZhbGlkYXRlIEdhcCBBQ0sgYmxvY2tzLCBkcm9wIGlmIGludmFsaWQgKi9cXG5uZXQvdGlwYy9saW5rLmM6MjI3NTpcXHRcXHRnbGVuID0gdGlwY19nZXRfZ2FwX2Fja19ibGtzKFxcdTAwMjZnYSwgbCwgaGRyLCB0cnVlKTtcXG5uZXQvdGlwYy9saW5rLmMtMjI3Ni1cXHRcXHRpZiAoZ2xlbiBcXHUwMDNlIGRsZW4pXFxuLS1cXG5uZXQvdGlwYy9saW5rLmg9MTQ0PWludCB0aXBjX2xpbmtfbXNzKHN0cnVjdCB0aXBjX2xpbmsgKmwpO1xcbm5ldC90aXBjL2xpbmsuaDoxNDU6dTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCxcXG5uZXQvdGlwYy9saW5rLmgtMTQ2LVxcdFxcdFxcdCAgc3RydWN0IHRpcGNfbXNnICpoZHIsIGJvb2wgdWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzozMS45NjMyNzIzMDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzY2NDM2MTAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUSVBDIFZ1bG5lcmFiaWxpdHkgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGB0aXBjX2dldF9nYXBfYWNrX2Jsa3NgLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5LiBTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGRpZG4ndCBjaGVjayB0aGUgc2l6ZSBvZiB0aGUgaW5jb21pbmcgbWVzc2FnZSBkYXRhIChgaGRyYCkgYWdhaW5zdCB0aGUgc2l6ZSBvZiB0aGUgYHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrc2AuIFRoaXMgbWVhbnQgdGhhdCBpZiB0aGUgcmVjZWl2ZWQgcGFja2V0IHdhcyBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQsIGRlcmVmZXJlbmNpbmcgZmllbGRzIHdpdGhpbiB0aGUgYHN0cnVjdGAgKGxpa2UgYHAtXHUwMDNlbGVuYCwgYHAtXHUwMDNldWdhY2tfY250YCwgZXRjLikgd291bGQgbGVhZCB0byByZWFkaW5nIHBhc3QgdGhlIGFsbG9jYXRlZCBidWZmZXIsIGFuIG9idmlvdXMgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gS0FTQU4sIG9mIGNvdXJzZSwgd291bGQgY2F0Y2ggdGhpcyBkdXJpbmcgcnVudGltZS5cblxuVGhlIHBhdGNoJ3MgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogYWRkIGEgYm91bmRzIGNoZWNrIHVzaW5nIGBtc2dfZGF0YV9zeihoZHIpIFx1MDAzYyBzaXplb2YoKnApYC4gSWYgdGhlIHBhY2tldCdzIGRhdGEgaXMgdG9vIHNob3J0LCB0aGUgY29kZSBub3cganVtcHMgdG8gYG91dDtgLCBlZmZlY3RpdmVseSBwcmV2ZW50aW5nIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQuIFRoYXQncyBnb29kLCBidXQgbGV0J3MgZ28gYSBiaXQgZnVydGhlci5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm5zIGFyZTogZG9lcyB0aGlzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IERvZXMgaXQgY3JlYXRlIGFueSBpbmZvcm1hdGlvbiBsZWFrcz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGFueSBvdGhlciB3YXk/XG5cbjEuICAqKkV4cG9zaW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OioqIE5vLCB0aGlzIGlzbid0IGV4cG9zaW5nIGFueXRoaW5nIHRvIHVzZXJzcGFjZS4gV2UncmUgZGVhbGluZyB3aXRoIGludGVybmFsIFRJUEMgcGFja2V0IHBhcnNpbmcgd2l0aGluIHRoZSBrZXJuZWwuXG4yLiAgKipUb3VjaGluZyBVbmluaXRpYWxpemVkIFN0YWNrL0hlYXAgTWVtb3J5OioqIE5vLiBUaGUgcG9pbnRlciBgcGAgaXMgcG9pbnRpbmcgKmludG8qIHRoZSByZWNlaXZlZCBwYWNrZXQgZGF0YSAoYG1zZ19kYXRhKGhkcilgIHdoaWNoIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQpIGFuZCBgc3pgIGlzIGEgbG9jYWwgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdG8gMC4gV2hlbiB3ZSBqdW1wIHRvIGBvdXQ7YCwgYHBgIGdldHMgc2V0IHRvIE5VTEwsIGFuZCBgc3pgIHJldHVybnMgYXMgMC5cbjMuICAqKkZpeGluZyBvciBJbnRyb2R1Y2luZyBhbiBVbmluaXRpYWxpemVkIFJlYWQ6KiogVGhlIHBhdGNoIGZpeGVzIGFuICpvdXQtb2YtYm91bmRzKiByZWFkLCB3aGljaCBpcyBhICptZW1vcnkgc2FmZXR5IGlzc3VlKiwgYW5kIG5vdCBhbiAqdW5pbml0aWFsaXplZCByZWFkKi5cblxuU28sIGl0J3MgYSBjbGVhciBmaXggZm9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgYXJlbid0IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgcHJvYmxlbXMsIG9yIGFueSBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy5cblxuTm93LCBmb3IgYEtNU0FOUmVhc29uaW5nYCwgSSBuZWVkIHRvIGNsZWFybHkgYXJ0aWN1bGF0ZSB3aHkgS01TQU4gaXNuJ3QgbmVjZXNzYXJ5IGhlcmU6XG5cbiogICBUaGUgcGF0Y2ggZW5mb3JjZXMgYSBzaXplIGNoZWNrIG9uIGluY29taW5nIFRJUEMgcGFja2V0cy5cbiogICBUaGUgdnVsbmVyYWJpbGl0eSBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGV4Y2VlZGluZyB0aGUgc2tiIHBhY2tldCBidWZmZXIgYm91bmRhcnkgd2hlbiBwcm9jZXNzaW5nIG5ldHdvcmsgbWVzc2FnZXMuXG4qICAgS0FTQU4gaXMgZGVzaWduZWQgc3BlY2lmaWNhbGx5IHRvIGNhdGNoIHRoZXNlIGtpbmRzIG9mIG91dC1vZi1ib3VuZHMgcmVhZHMgb24gcGFja2V0IGJ1ZmZlcnMgYW5kIHNsYWIgYWxsb2NhdGlvbnMuXG4qICAgTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0byB1c2VyLXNwYWNlLiBBbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuXG4qICAgVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCByZXF1aXJlIEtNU0FOLCBiZWNhdXNlIGl0IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHRoZSBhcHByb3ByaWF0ZSBzb2x1dGlvbi5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTgsIk91dHB1dFRva2VucyI6MTY2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjM5LjYyNzYzNTQwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiB0aXBjX2dldF9nYXBfYWNrX2Jsa3MoKSBlbnN1cmluZyB0aGF0IHRoZSBpbmNvbWluZyBtZXNzYWdlIHBheWxvYWQgc2l6ZSAobXNnX2RhdGFfc3ooaGRyKSkgaXMgYXQgbGVhc3Qgc2l6ZW9mKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcykgYmVmb3JlIGRlcmVmZXJlbmNpbmcgc3RydWN0IG1lbWJlcnMuIFRoZSBidWcgYWRkcmVzc2VkIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIHNrX2J1ZmYgZGF0YSBidWZmZXIgd2hlbiBwYXJzaW5nIG1hbGZvcm1lZCBuZXR3b3JrIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IGNvcHlfdG9fdXNlciBwYXRocywgb3IgYWx0ZXIgaW5pdGlhbGl6YXRpb24gb2YgYW55IHN0YWNrL2hlYXAgc3RydWN0dXJlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIHRpcGNfZ2V0X2dhcF9hY2tfYmxrcygpIGVuc3VyaW5nIHRoYXQgdGhlIGluY29taW5nIG1lc3NhZ2UgcGF5bG9hZCBzaXplIChtc2dfZGF0YV9zeihoZHIpKSBpcyBhdCBsZWFzdCBzaXplb2Yoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzKSBiZWZvcmUgZGVyZWZlcmVuY2luZyBzdHJ1Y3QgbWVtYmVycy4gVGhlIGJ1ZyBhZGRyZXNzZWQgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgc2tfYnVmZiBkYXRhIGJ1ZmZlciB3aGVuIHBhcnNpbmcgbWFsZm9ybWVkIG5ldHdvcmsgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weV90b191c2VyIHBhdGhzLCBvciBhbHRlciBpbml0aWFsaXphdGlvbiBvZiBhbnkgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt8s8s[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 03:31:48 +0000 UTC FinishedAt: 2026-09-07 04:17:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TIPC", "INET" ], "series_id": "969497ec-c219-41ef-8a92-559686b22bb3" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tipc_get_gap_ack_blks", "tipc_link_proto_rcv", "tipc_link_rcv", "tipc_bcast_sync_rcv" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RJUEMmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RpcGNfZ2V0X2dhcF9hY2tfYmxrcyYjMzQ7LAogICAgJiMzNDt0aXBjX2xpbmtfcHJvdG9fcmN2JiMzNDssCiAgICAmIzM0O3RpcGNfbGlua19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19iY2FzdF9zeW5jX3JjdiYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzKCkgZW5zdXJpbmcgdGhhdCB0aGUgaW5jb21pbmcgbWVzc2FnZSBwYXlsb2FkIHNpemUgKG1zZ19kYXRhX3N6KGhkcikpIGlzIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MpIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHN0cnVjdCBtZW1iZXJzLiBUaGUgYnVnIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBza19idWZmIGRhdGEgYnVmZmVyIHdoZW4gcGFyc2luZyBtYWxmb3JtZWQgbmV0d29yayBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGFsdGVyIGluaXRpYWxpemF0aW9uIG9mIGFueSBzdGFjay9oZWFwIHN0cnVjdHVyZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHBhcnNpbmcgR2FwIEFDSyBibG9ja3MgZnJvbSBpbmNvbWluZyBUSVBDIHByb3RvY29sIG1lc3NhZ2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgbG9naWMgaW4gVElQQyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDoxNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdiZGU4NmE3ZGYwYjkyYWUwMTFkNGYxZjRmNjg1YWI0ZDBmNDJkYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA0OjE2OjUwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuY1xuaW5kZXggNjQyN2M2OWY4OTI5NC4uMGJlODZjYmRjOTEzZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2xpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbGluay5jXG5AQCAtMTQxOSw2ICYjNDM7MTQxOSw4IEBAIHUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4gXG4gXHQvKiBEb2VzIHBlZXIgc3VwcG9ydCB0aGUgR2FwIEFDSyBibG9ja3MgZmVhdHVyZT8gKi9cbiBcdGlmIChsLVx1MDAzZXBlZXJfY2FwcyBcdTAwMjYgVElQQ19HQVBfQUNLX0JMT0NLKSB7XG4mIzQzO1x0XHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcdTAwM2Mgc2l6ZW9mKCpwKSlcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4gXHRcdHAgPSAoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICopbXNnX2RhdGEoaGRyKTtcbiBcdFx0c3ogPSBudG9ocyhwLVx1MDAzZWxlbik7XG4gXHRcdC8qIFNhbml0eSBjaGVjayAqL1xuQEAgLTE0MzUsNiAmIzQzOzE0MzcsNyBAQCB1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuIFx0XHR9XG4gXHR9XG4gXHQvKiBPdGhlciBjYXNlczogaWdub3JlISAqL1xuJiM0MztvdXQ6XG4gXHRwID0gTlVMTDtcbiBcbiBvazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDoxNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUSVBDJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0aXBjX2dldF9nYXBfYWNrX2Jsa3MmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX3Byb3RvX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX2xpbmtfcmN2JiMzNDssCiAgICAmIzM0O3RpcGNfYmNhc3Rfc3luY19yY3YmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiB0aXBjX2dldF9nYXBfYWNrX2Jsa3MgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBHYXAgQUNLIGJsb2NrcyBmcm9tIGluY29taW5nIFRJUEMgcHJvdG9jb2wgbWVzc2FnZXMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgcHJvY2Vzc2luZyBsb2dpYyBpbiBUSVBDIGFuZCB3YXJyYW50cyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2JkZTg2YTdkZjBiOTJhZTAxMWQ0ZjFmNGY2ODVhYjRkMGY0MmRiNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMDQ6MTY6NTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9saW5rLmMgYi9uZXQvdGlwYy9saW5rLmMKaW5kZXggNjQyN2M2OWY4OTI5NC4uMGJlODZjYmRjOTEzZCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC90aXBjL2xpbmsuYwpAQCAtMTQxOSw2ICYjNDM7MTQxOSw4IEBAIHUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsCiAKIAkvKiBEb2VzIHBlZXIgc3VwcG9ydCB0aGUgR2FwIEFDSyBibG9ja3MgZmVhdHVyZT8gKi8KIAlpZiAobC0mZ3Q7cGVlcl9jYXBzICZhbXA7IFRJUENfR0FQX0FDS19CTE9DSykgewomIzQzOwkJaWYgKG1zZ19kYXRhX3N6KGhkcikgJmx0OyBzaXplb2YoKnApKQomIzQzOwkJCWdvdG8gb3V0OwogCQlwID0gKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKW1zZ19kYXRhKGhkcik7CiAJCXN6ID0gbnRvaHMocC0mZ3Q7bGVuKTsKIAkJLyogU2FuaXR5IGNoZWNrICovCkBAIC0xNDM1LDYgJiM0MzsxNDM3LDcgQEAgdTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCwKIAkJfQogCX0KIAkvKiBPdGhlciBjYXNlczogaWdub3JlISAqLwomIzQzO291dDoKIAlwID0gTlVMTDsKIAogb2s6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5ODYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFRJUEMgTGluayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYW5kIHJldmlldyByZXF1ZXN0IG9uIG15IGRlc2ssIGFuZCB0aGUgdGFyZ2V0IGlzIGBuZXQvdGlwYy9saW5rLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgd2l0aGluIHRoZSBgdGlwY19nZXRfZ2FwX2Fja19ibGtzYCBmdW5jdGlvbi4gTXkgZmlyc3QgbW92ZSBoZXJlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcgd2l0aGluIHRoZSBsYXJnZXIgVElQQyBmcmFtZXdvcmsuCgpJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgYG5ldC90aXBjL2xpbmsuY2AgaXRzZWxmLCBvZiBjb3Vyc2UuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHRoZSBmdW5jdGlvbiB3aXRoaW4gdGhlIGZpbGUgYW5kIHVuZGVyc3RhbmQgaXRzIGltbWVkaWF0ZSBuZWlnaGJvcnMuIEkgYWxzbyB3YW50IHRvIHF1aWNrbHkgZ2xhbmNlIGF0IHJlbGV2YW50IEtjb25maWcgZmlsZXMsIGFueXRoaW5nIHRoYXQgbWlnaHQgY29uZGl0aW9uYWxseSBpbmNsdWRlIG9yIGVuYWJsZSB0aGlzIHNlY3Rpb24gb2YgY29kZS4gSSBuZWVkIHRvIGJ1aWxkIGEgY29tcHJlaGVuc2l2ZSBtZW50YWwgcGljdHVyZS4KClRoZW4sIEkmIzM5O2xsIGxldmVyYWdlIG15IHVzdWFsIHRvb2xzLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGZpbGUgSSYjMzk7bGwgY2FsbCBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAsIGFuZCB1c2UgaXQgdG8gY2hlY2sgdGhlIGNvbnRleHQgaW4gYG5ldC90aXBjL2xpbmsuY2AuIEkgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgdGhlIGZsb3csIGFueSBkZXBlbmRlbmNpZXMsIGFuZCBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzIG9mIHRoaXMgY2hhbmdlLiBJdOKAmXMgYWxsIGFib3V0IHRoZSBkZXRhaWxzOyBub3RoaW5nIGlzIGxlZnQgdG8gY2hhbmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvbGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNDEwOlx0ICogQHVjOiBkZXNpcmVkIEdhcCBBQ0sgYmxvY2tzIHR5cGUsIGkuZS4gdW5pY2FzdCAoPSAxKSBvciBicm9hZGNhc3QgKD0gMClcbjE0MTE6XHQgKlxuMTQxMjpcdCAqIFJldHVybjogdGhlIHRvdGFsIEdhcCBBQ0sgYmxvY2tzIHNpemVcbjE0MTM6XHQgKi9cbjE0MTQ6XHR1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuMTQxNTpcdFx0XHRcdCAgc3RydWN0IHRpcGNfbXNnICpoZHIsIGJvb2wgdWMpXG4xNDE2Olx0e1xuMTQxNzpcdFx0c3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICpwO1xuMTQxODpcdFx0dTE2IHN6ID0gMDtcbjE0MTk6XHRcbjE0MjA6XHRcdC8qIERvZXMgcGVlciBzdXBwb3J0IHRoZSBHYXAgQUNLIGJsb2NrcyBmZWF0dXJlPyAqL1xuMTQyMTpcdFx0aWYgKGwtXHUwMDNlcGVlcl9jYXBzIFx1MDAyNiBUSVBDX0dBUF9BQ0tfQkxPQ0spIHtcbjE0MjI6XHRcdFx0aWYgKG1zZ19kYXRhX3N6KGhkcikgXHUwMDNjIHNpemVvZigqcCkpXG4xNDIzOlx0XHRcdFx0Z290byBvdXQ7XG4xNDI0Olx0XHRcdHAgPSAoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICopbXNnX2RhdGEoaGRyKTtcbjE0MjU6XHRcdFx0c3ogPSBudG9ocyhwLVx1MDAzZWxlbik7XG4xNDI2Olx0XHRcdC8qIFNhbml0eSBjaGVjayAqL1xuMTQyNzpcdFx0XHRpZiAoc3ogPT0gc3RydWN0X3NpemUocCwgZ2Fja3MsIHNpemVfYWRkKHAtXHUwMDNldWdhY2tfY250LCBwLVx1MDAzZWJnYWNrX2NudCkpKSB7XG4xNDI4Olx0XHRcdFx0LyogR29vZCwgY2hlY2sgaWYgdGhlIGRlc2lyZWQgdHlwZSBleGlzdHMgKi9cbjE0Mjk6XHRcdFx0XHRpZiAoKHVjIFx1MDAyNlx1MDAyNiBwLVx1MDAzZXVnYWNrX2NudCkgfHwgKCF1YyBcdTAwMjZcdTAwMjYgcC1cdTAwM2ViZ2Fja19jbnQpKVxuMTQzMDpcdFx0XHRcdFx0Z290byBvaztcbjE0MzE6XHRcdFx0LyogQmFja3dhcmQgY29tcGF0aWJsZTogcGVlciBtaWdodCBub3Qgc3VwcG9ydCBiYywgYnV0IHVjPyAqL1xuMTQzMjpcdFx0XHR9IGVsc2UgaWYgKHVjIFx1MDAyNlx1MDAyNiBzeiA9PSBzdHJ1Y3Rfc2l6ZShwLCBnYWNrcywgcC1cdTAwM2V1Z2Fja19jbnQpKSB7XG4xNDMzOlx0XHRcdFx0aWYgKHAtXHUwMDNldWdhY2tfY250KSB7XG4xNDM0Olx0XHRcdFx0XHRwLVx1MDAzZWJnYWNrX2NudCA9IDA7XG4xNDM1Olx0XHRcdFx0XHRnb3RvIG9rO1xuMTQzNjpcdFx0XHRcdH1cbjE0Mzc6XHRcdFx0fVxuMTQzODpcdFx0fVxuMTQzOTpcdFx0LyogT3RoZXIgY2FzZXM6IGlnbm9yZSEgKi9cbjE0NDA6XHRvdXQ6XG4xNDQxOlx0XHRwID0gTlVMTDtcbjE0NDI6XHRcbjE0NDM6XHRvazpcbjE0NDQ6XHRcdCpnYSA9IHA7XG4xNDQ1Olx0XHRyZXR1cm4gc3o7XG4xNDQ2Olx0fVxuMTQ0NzpcdFxuMTQ0ODpcdHN0YXRpYyB1OCBfX3RpcGNfYnVpbGRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqZ2EsXG4xNDQ5Olx0XHRcdFx0XHQgICAgc3RydWN0IHRpcGNfbGluayAqbCwgdTggc3RhcnRfaW5kZXgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA1OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgZGl2aW5nIGludG8gdGhlIHN1YmplY3QgbWF0dGVyOgoKKipEZWVwIERpdmUgaW50byBUSVBDIGFuZCBHYXAgQWNrbm93bGVkZ2VtZW50IEJsb2NrcyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByb2xlIG9mIGB0aXBjX2dldF9nYXBfYWNrX2Jsa3NgLiBGaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUgVElQQyBjb2RlYmFzZS4gQ29udGV4dCBpcyBldmVyeXRoaW5nLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBUSVBDIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBjcml0aWNhbCBpbiBtYWtpbmcgYW55IGNvbmNsdXNpb25zIGFib3V0IHRoaXMgZnVuY3Rpb24uCgpUaGVuLCB0aGUgZm9jdXMgc2hpZnRzLiBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGxzIHRvIGB0aXBjX2dldF9nYXBfYWNrX2Jsa3NgLiBBIGdvb2Qgc2VhcmNoIHN0cmF0ZWd5IHdpbGwgYmUga2V5IHRvIHVuY292ZXJpbmcgYWxsIHRoZSBkaWZmZXJlbnQgd2F5cyB0aGlzIGlzIHVzZWQuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCByZWFsbHkgaGVscCBtZSBzZWUgdGhlIGZsb3cgb2YgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgdXNhZ2UgcGF0dGVybnMgdG8gaW5mZXIgdGhlIHB1cnBvc2Ugb2YgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2dldF9nYXBfYWNrX2Jsa3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9iY2FzdC5jPTQ5OD1pbnQgdGlwY19iY2FzdF9zeW5jX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4tLVxubmV0L3RpcGMvYmNhc3QuYy01MTMtXHR9IGVsc2UgaWYgKCFtc2dfYmNfYWNrX2ludmFsaWQoaGRyKSkge1xubmV0L3RpcGMvYmNhc3QuYzo1MTQ6XHRcdGdsZW4gPSB0aXBjX2dldF9nYXBfYWNrX2Jsa3MoXHUwMDI2Z2EsIGwsIGhkciwgZmFsc2UpO1xubmV0L3RpcGMvYmNhc3QuYy01MTUtXHRcdGlmIChnbGVuIFx1MDAzZSBtc2dfZGF0YV9zeihoZHIpKSB7XG4tLVxubmV0L3RpcGMvbGluay5jPTEzNDA9c3RhdGljIGludCB0aXBjX2xpbmtfdG5sX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xNDA1LS8qKlxubmV0L3RpcGMvbGluay5jOjE0MDY6ICogdGlwY19nZXRfZ2FwX2Fja19ibGtzIC0gZ2V0IEdhcCBBQ0sgYmxvY2tzIGZyb20gUFJPVE9DT0wvU1RBVEVfTVNHXG5uZXQvdGlwYy9saW5rLmMtMTQwNy0gKiBAZ2E6IHJldHVybmVkIHBvaW50ZXIgdG8gdGhlIEdhcCBBQ0sgYmxvY2tzIGlmIGFueVxuLS1cbm5ldC90aXBjL2xpbmsuYy0xNDEzLSAqL1xubmV0L3RpcGMvbGluay5jOjE0MTQ6dTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCxcbm5ldC90aXBjL2xpbmsuYy0xNDE1LVx0XHRcdCAgc3RydWN0IHRpcGNfbXNnICpoZHIsIGJvb2wgdWMpXG4tLVxubmV0L3RpcGMvbGluay5jPTIxNzc9c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbGluay5jLTIyNzQtXHRcdC8qIFZhbGlkYXRlIEdhcCBBQ0sgYmxvY2tzLCBkcm9wIGlmIGludmFsaWQgKi9cbm5ldC90aXBjL2xpbmsuYzoyMjc1Olx0XHRnbGVuID0gdGlwY19nZXRfZ2FwX2Fja19ibGtzKFx1MDAyNmdhLCBsLCBoZHIsIHRydWUpO1xubmV0L3RpcGMvbGluay5jLTIyNzYtXHRcdGlmIChnbGVuIFx1MDAzZSBkbGVuKVxuLS1cbm5ldC90aXBjL2xpbmsuaD0xNDQ9aW50IHRpcGNfbGlua19tc3Moc3RydWN0IHRpcGNfbGluayAqbCk7XG5uZXQvdGlwYy9saW5rLmg6MTQ1OnUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG5uZXQvdGlwYy9saW5rLmgtMTQ2LVx0XHRcdCAgc3RydWN0IHRpcGNfbXNnICpoZHIsIGJvb2wgdWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5NjcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIFRJUEMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBUSVBDIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byBgbmV0L3RpcGMvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIHVzdWFsIHNwb3QsIHJpZ2h0PyBJdCBzaG91bGQgb3V0bGluZSBhbGwgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIHN5bWJvbHMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIG1vZHVsZS4gSSBleHBlY3QgdG8gZmluZCBvcHRpb25zIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgcGVyaGFwcyBmb3IgZGlmZmVyZW50IG5vZGUgdHlwZXMsIGFuZCBkZWZpbml0ZWx5IGZvciB0aGluZ3MgbGlrZSBzZWN1cml0eSBmZWF0dXJlcyBvciBzcGVjaWZpYyB0cmFuc3BvcnQgcHJvdG9jb2xzIGlmIHRoZXkgZXhpc3QuIEnigJlsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UgdHVuaW5nIGFzIHdlbGwuIEdvdHRhIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIHRoYXQgY291bGQgaW1wYWN0IG15IHNwZWNpZmljIHVzZSBjYXNlLiBUaGlzIGlzIHRoZSBwbGFjZSB0byBzdGFydCBkcmlsbGluZyBkb3duLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3RpcGMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdCNcbiAgIDM6XHQjIFRJUEMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIFRJUENcbiAgIDc6XHRcdHRyaXN0YXRlIFwmIzM0O1RoZSBUSVBDIFByb3RvY29sXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhlIFRyYW5zcGFyZW50IEludGVyIFByb2Nlc3MgQ29tbXVuaWNhdGlvbiAoVElQQykgcHJvdG9jb2wgaXNcbiAgMTE6XHRcdCAgc3BlY2lhbGx5IGRlc2lnbmVkIGZvciBpbnRyYSBjbHVzdGVyIGNvbW11bmljYXRpb24uIFRoaXMgcHJvdG9jb2xcbiAgMTI6XHRcdCAgb3JpZ2luYXRlcyBmcm9tIEVyaWNzc29uIHdoZXJlIGl0IGhhcyBiZWVuIHVzZWQgaW4gY2FycmllciBncmFkZVxuICAxMzpcdFx0ICBjbHVzdGVyIGFwcGxpY2F0aW9ucyBmb3IgbWFueSB5ZWFycy5cbiAgMTQ6XHRcbiAgMTU6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVElQQywgc2VlIGh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC5cbiAgMTY6XHRcbiAgMTc6XHRcdCAgVGhpcyBwcm90b2NvbCBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoXG4gIDE4Olx0XHQgIGNhbiBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcbiAgMTk6XHRcdCAgd2FudCkuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlwYy4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdFxuICAyMDpcdFx0ICBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZCBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24va2J1aWxkL21vZHVsZXMucnN0XHUwMDNlLlxuICAyMTpcdFxuICAyMjpcdFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXG4gIDIzOlx0XG4gIDI0Olx0Y29uZmlnIFRJUENfTUVESUFfSUJcbiAgMjU6XHRcdGJvb2wgXCYjMzQ7SW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcJiMzNDtcbiAgMjY6XHRcdGRlcGVuZHMgb24gVElQQyBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORF9JUE9JQlxuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgZW5hYmxlIHN1cHBvcnQgZm9yIHJ1bm5pbmcgVElQQyBvblxuICAyOTpcdFx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cbiAgMzA6XHRjb25maWcgVElQQ19NRURJQV9VRFBcbiAgMzE6XHRcdGJvb2wgXCYjMzQ7SVAvVURQIG1lZGlhIHR5cGUgc3VwcG9ydFwmIzM0O1xuICAzMjpcdFx0ZGVwZW5kcyBvbiBUSVBDXG4gIDMzOlx0XHRzZWxlY3QgTkVUX1VEUF9UVU5ORUxcbiAgMzQ6XHRcdGRlZmF1bHQgeVxuICAzNTpcdFx0aGVscFxuICAzNjpcdFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgZW5hYmxlIHN1cHBvcnQgZm9yIHJ1bm5pbmcgVElQQyBvdmVyIElQL1VEUFxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBUSVBDX0NSWVBUT1xuICAzOTpcdFx0Ym9vbCBcJiMzNDtUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFwmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBUSVBDXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTcxNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDYxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUSVBDIFZ1bG5lcmFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIFRJUEMgZGVwZW5kcyBvbiBJTkVULCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIG5ldHdvcmsgcHJvdG9jb2wsIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgbWVjaGFuaXNtcyBsaWtlIHNvY2tldHMgKEFGX1RJUEMpLCBuZXRsaW5rLCBVRFAsIGFuZCB0aGUgcmVzdC4gR29vZCwgdGhhdCBtZWFucyBTeXprYWxsZXIgc2hvdWxkIGhhdmUgZGVjZW50IGNvdmVyYWdlIGZvciBmdXp6aW5nIGl0LiBJbiBmYWN0LCBTeXprYWxsZXIgKmRvZXMqIGhlYXZpbHkgZnV6eiBUSVBDLCB3aGljaCBpcyBhIGdvb2Qgc2lnbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgaW4gYG5ldC90aXBjL2xpbmsuY2AuIEkgc2VlIHRoZXkmIzM5O3ZlIGFkZGVkIGEgYm91bmRzIGNoZWNrOiBgbXNnX2RhdGFfc3ooaGRyKSAmbHQ7IHNpemVvZigqcClgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIGBwID0gKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKW1zZ19kYXRhKGhkcilgLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgcHJldmVudGlvbiwgcHJvdGVjdGluZyBhZ2FpbnN0IGEgbWFsZm9ybWVkIEdhcCBBQ0sgYmxvY2sgaW4gYSByZWNlaXZlZCBUSVBDIHBhY2tldC4gIEdvb2QgY2F0Y2ghIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGxlYWQgdG8gZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUuIFBlcmZlY3QuCgpOb3csIGZvciBmb2N1cyBzeW1ib2xzLCAgYHRpcGNfZ2V0X2dhcF9hY2tfYmxrc2AsIGB0aXBjX2xpbmtfcHJvdG9fcmN2YCwgYHRpcGNfYmNhc3Rfc3luY19yY3ZgLCBhbmQgYHRpcGNfcmN2YCBhcmUgdGhlIGtleSBmdW5jdGlvbnMuIFdlIG5lZWQgdG8gY2hlY2sgY2FsbGVycyB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGZsb3cuCgpgdGlwY19nZXRfZ2FwX2Fja19ibGtzYCBpcyBub24tc3RhdGljLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQuCgpOb3csIGxldCYjMzk7cyBzZWUgd2hlcmUgdGhlIGNhbGxlcnMgYXJlLiBgdGlwY19saW5rX3Byb3RvX3JjdmAgaXMgc3RhdGljOyBgdGlwY19yY3ZgIGlzIGluIGBuZXQvdGlwYy9ub2RlLmNgIG9yIGBuZXQvdGlwYy9saW5rLmNgLiAgTGV0JiMzOTtzIHRyYWNlIGB0aXBjX2xpbmtfcHJvdG9fcmN2YCBhbmQgc2VlIHdoZXJlIHRoaXMgYnJhbmNoZXMuIFRoaXMgd2lsbCB0ZWxsIHVzIHRoZSBmdWxsIGF0dGFjayBzdXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aXBjX2xpbmtfcHJvdG9fcmN2JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3RpcGMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3RpcGMvbGluay5jPTIzND1lbnVtIHtcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjQzLVxubmV0L3RpcGMvbGluay5jOjI0NDpzdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC90aXBjL2xpbmsuYy0yNDUtXHRcdFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTc2NT1pbnQgdGlwY19saW5rX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC90aXBjL2xpbmsuYy0xNzc1LVx0aWYgKHVubGlrZWx5KG1zZ191c2VyKGhkcikgPT0gTElOS19QUk9UT0NPTCkpXG5uZXQvdGlwYy9saW5rLmM6MTc3NjpcdFx0cmV0dXJuIHRpcGNfbGlua19wcm90b19yY3YobCwgc2tiLCB4bWl0cSk7XG5uZXQvdGlwYy9saW5rLmMtMTc3Ny1cbi0tXG5uZXQvdGlwYy9saW5rLmM9MjEzND1ib29sIHRpcGNfbGlua192YWxpZGF0ZV9tc2coc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHRpcGNfbXNnICpoZHIpXG4tLVxubmV0L3RpcGMvbGluay5jLTIxNzEtXG5uZXQvdGlwYy9saW5rLmM6MjE3MjovKiB0aXBjX2xpbmtfcHJvdG9fcmN2KCk6IHJlY2VpdmUgbGluayBsZXZlbCBwcm90b2NvbCBtZXNzYWdlIDpcbm5ldC90aXBjL2xpbmsuYy0yMTczLSAqIE5vdGUgdGhhdCBuZXR3b3JrIHBsYW5lIGlkIHByb3BhZ2F0ZXMgdGhyb3VnaCB0aGUgbmV0d29yaywgYW5kIG1heVxuLS1cbm5ldC90aXBjL2xpbmsuYy0yMTc2LSAqL1xubmV0L3RpcGMvbGluay5jOjIxNzc6c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvdGlwYy9saW5rLmMtMjE3OC1cdFx0XHQgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqeG1pdHEpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcyMjEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgdGlwY19saW5rX3JjdmAgYW5kIGB0aXBjX2JjYXN0X3N5bmNfcmN2YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlY2VpdmUgcGF0aCBmb3IgVElQQywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGB0aXBjX2xpbmtfcmN2YCBhbmQgYHRpcGNfYmNhc3Rfc3luY19yY3ZgLiBJJiMzOTttIGd1ZXNzaW5nIHRoZXNlIGFyZSB0aGUgY29yZSBmdW5jdGlvbnMgaGFuZGxpbmcgaW5ib3VuZCB0cmFmZmljLCB3aGV0aGVyIGl0JiMzOTtzIGRpcmVjdCBsaW5rIGNvbW11bmljYXRpb24gb3IgYnJvYWRjYXN0IHN5bmNocm9uaXphdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QuIEFyZSB0aGV5IHBhcnQgb2YgdGhlIHNhbWUgcmVjZWl2ZSB0aHJlYWQgb3IgYXJlIHRoZXkgc2VwYXJhdGU/CgpJIHNob3VsZCBsb29rIGF0IGhvdyBwYWNrZXRzIGFyZSBkZXF1ZXVlZCwgcHJvY2Vzc2VkLCBhbmQgdWx0aW1hdGVseSBkZWxpdmVyZWQgdG8gdGhlIHVwcGVyIGxheWVycy4gQXJlIHRoZXJlIGFueSBjcml0aWNhbCBzZWN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFdoYXQgbG9ja2luZyBwcmltaXRpdmVzIGFyZSBpbnZvbHZlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGxpa2UgYSBzaW5nbGUgbG9jayBwcm90ZWN0aW5nIHRoZSByZWNlaXZlIHF1ZXVlPyBNZW1vcnkgYWxsb2NhdGlvbiBwYXR0ZXJucyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgaW1wb3J0YW50IHRvbyDigJMgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgbWVtb3J5IGxlYWtzIG9yIHBlcmZvcm1hbmNlLWltcGFjdGluZyBhbGxvY2F0aW9ucy4KCkkmIzM5O2xsIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nLiBIb3cgYXJlIGludmFsaWQgcGFja2V0cyBkZWFsdCB3aXRoPyBEbyB0aGV5IGdldCBkcm9wcGVkIHNpbGVudGx5LCBsb2dnZWQsIG9yIHRyaWdnZXIgYSBtb3JlIHNlcmlvdXMgZXJyb3IgY29uZGl0aW9uPyBIb3cgcm9idXN0IGlzIHRoZSBlcnJvciBoYW5kbGluZyBpbiBnZW5lcmFsPyBJcyB0aGVyZSBwcm9wZXIgZXJyb3IgY2hlY2tpbmcgZm9yIHRoZSBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGVzZSBmdW5jdGlvbnM/CgpGaW5hbGx5LCBob3cgZG9lcyBicm9hZGNhc3Qgc3luY2hyb25pemF0aW9uIGFjdHVhbGx5IHdvcmsgd2l0aGluIHRoZSBgdGlwY19iY2FzdF9zeW5jX3JjdmAgZnVuY3Rpb24/IElzIGl0IHVzaW5nIGEgc2ltcGxlIGhlYXJ0YmVhdCBtZWNoYW5pc20sIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IFdoYXQgaGFwcGVucyBpZiBhIG5vZGUgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUgZHVyaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gcHJvY2Vzcz8gRG9lcyBpdCByZXRyeSwgYW5kIGhvdyBsb25nIGRvZXMgaXQgd2FpdD8gVGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGNsdXN0ZXIgY29udmVyZ2VuY2UuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY29tcGFyZSB0aGlzIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciBUSVBDIHRvIGVuc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgYWNjdXJhdGUgYW5kIGlzIHVwIHRvIHNwZWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RpcGNfYmNhc3Rfc3luY19yY3YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdGlwYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdGlwYy9iY2FzdC5jPTQ3MD12b2lkIHRpcGNfYmNhc3RfYWNrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4tLVxubmV0L3RpcGMvYmNhc3QuYy00OTctICovXG5uZXQvdGlwYy9iY2FzdC5jOjQ5ODppbnQgdGlwY19iY2FzdF9zeW5jX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG5uZXQvdGlwYy9iY2FzdC5jLTQ5OS1cdFx0XHRzdHJ1Y3QgdGlwY19tc2cgKmhkcixcbi0tXG5uZXQvdGlwYy9iY2FzdC5oPTk2PXZvaWQgdGlwY19iY2FzdF9hY2tfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCxcbm5ldC90aXBjL2JjYXN0LmgtOTctXHRcdFx0c3RydWN0IHRpcGNfbXNnICpoZHIpO1xubmV0L3RpcGMvYmNhc3QuaDo5ODppbnQgdGlwY19iY2FzdF9zeW5jX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG5uZXQvdGlwYy9iY2FzdC5oLTk5LVx0XHRcdHN0cnVjdCB0aXBjX21zZyAqaGRyLFxuLS1cbm5ldC90aXBjL25vZGUuYz0xODQwPXN0YXRpYyB2b2lkIHRpcGNfbm9kZV9iY19zeW5jX3JjdihzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3QgdGlwY19tc2cgKmhkcixcbi0tXG5uZXQvdGlwYy9ub2RlLmMtMTg0Ni1cbm5ldC90aXBjL25vZGUuYzoxODQ3Olx0cmMgPSB0aXBjX2JjYXN0X3N5bmNfcmN2KG4tXHUwMDNlbmV0LCBuLVx1MDAzZWJjX2VudHJ5LmxpbmssIGhkciwgeG1pdHEsIHZhbGlkKTtcbm5ldC90aXBjL25vZGUuYy0xODQ4LVx0aWYgKCEqdmFsaWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDAKCQkJCQkJCW91dHB1dDogMTQwCgkJCQkJCQl0aG91Z2h0czogMTkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVmVyZGljdDogVElQQyBNb2R1bGUqKgoKT2theSwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbi4gSXQgc2VlbXMgd2UmIzM5O3JlIGVuYWJsaW5nIGBDT05GSUdfVElQQ2AsIHdoaWNoIGluaGVyZW50bHkgYnJpbmdzIGluIGBDT05GSUdfSU5FVGAuIFNvLCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgaW5kZWVkIGBbJiMzNDtUSVBDJiMzNDssICYjMzQ7SU5FVCYjMzQ7XWAuIFRoYXQgYWxpZ25zIHdpdGggbXkgdW5kZXJzdGFuZGluZy4KCk5leHQsIEkgbmVlZCB0byBzZWUgd2hhdCBzeW1ib2xzIGFyZSBvZiBwcmltYXJ5IGludGVyZXN0LiBUaGUgYEZvY3VzU3ltYm9sc2AgYXJlIGxpc3RlZCBhczogYHRpcGNfZ2V0X2dhcF9hY2tfYmxrc2AsIGB0aXBjX2xpbmtfcHJvdG9fcmN2YCwgYHRpcGNfbGlua19yY3ZgLCBhbmQgYHRpcGNfYmNhc3Rfc3luY19yY3ZgLiBZZXMsIHRoZXNlIGFyZSBhbGwgY3JpdGljYWwgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gVElQQyYjMzk7cyBpbnRlcm5hbCB3b3JraW5ncy4gVGhlc2UgYXJlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgZXZlcnl0aGluZyBvbmUgbGFzdCB0aW1lLiBXZSBoYXZlIGBXb3J0aEZ1enppbmc6IHRydWVgLCBgRW5hYmxlQ29uZmlnczogWyYjMzQ7VElQQyYjMzQ7LCAmIzM0O0lORVQmIzM0O11gLCBhbmQgdGhlIHNwZWNpZmllZCBgRm9jdXNTeW1ib2xzYC4gRXZlcnl0aGluZyBzZWVtcyB0byBiZSBpbiBvcmRlcjsgdGhlIHJlYXNvbmluZyBiZWhpbmQgdGhlIGZ1enppbmcgaXMgY29uY2lzZSBhbmQgYWNjdXJhdGUuCgpBbHJpZ2h0LCBJIGFtIHJlYWR5IHRvIGluaXRpYXRlIHRoZSBwcm9jZXNzLiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19nZXRfZ2FwX2Fja19ibGtzJiMzNDssCiAgICAmIzM0O3RpcGNfbGlua19wcm90b19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX2JjYXN0X3N5bmNfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHBhcnNpbmcgR2FwIEFDSyBibG9ja3MgZnJvbSBpbmNvbWluZyBUSVBDIHByb3RvY29sIG1lc3NhZ2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgbG9naWMgaW4gVElQQyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VElQQyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGlwY19nZXRfZ2FwX2Fja19ibGtzJiMzNDssCiAgICAmIzM0O3RpcGNfbGlua19wcm90b19yY3YmIzM0OywKICAgICYjMzQ7dGlwY19saW5rX3JjdiYjMzQ7LAogICAgJiMzNDt0aXBjX2JjYXN0X3N5bmNfcmN2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHBhcnNpbmcgR2FwIEFDSyBibG9ja3MgZnJvbSBpbmNvbWluZyBUSVBDIHByb3RvY29sIG1lc3NhZ2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgbG9naWMgaW4gVElQQyBhbmQgd2FycmFudHMgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwNDoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzKCkgZW5zdXJpbmcgdGhhdCB0aGUgaW5jb21pbmcgbWVzc2FnZSBwYXlsb2FkIHNpemUgKG1zZ19kYXRhX3N6KGhkcikpIGlzIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MpIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHN0cnVjdCBtZW1iZXJzLiBUaGUgYnVnIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBza19idWZmIGRhdGEgYnVmZmVyIHdoZW4gcGFyc2luZyBtYWxmb3JtZWQgbmV0d29yayBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGFsdGVyIGluaXRpYWxpemF0aW9uIG9mIGFueSBzdGFjay9oZWFwIHN0cnVjdHVyZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YmRlODZhN2RmMGI5MmFlMDExZDRmMWY0ZjY4NWFiNGQwZjQyZGI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAwNDoxNjo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuYwppbmRleCA2NDI3YzY5Zjg5Mjk0Li4wYmU4NmNiZGM5MTNkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9saW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3RpcGMvbGluay5jCkBAIC0xNDE5LDYgJiM0MzsxNDE5LDggQEAgdTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCwKIAogCS8qIERvZXMgcGVlciBzdXBwb3J0IHRoZSBHYXAgQUNLIGJsb2NrcyBmZWF0dXJlPyAqLwogCWlmIChsLSZndDtwZWVyX2NhcHMgJmFtcDsgVElQQ19HQVBfQUNLX0JMT0NLKSB7CiYjNDM7CQlpZiAobXNnX2RhdGFfc3ooaGRyKSAmbHQ7IHNpemVvZigqcCkpCiYjNDM7CQkJZ290byBvdXQ7CiAJCXAgPSAoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICopbXNnX2RhdGEoaGRyKTsKIAkJc3ogPSBudG9ocyhwLSZndDtsZW4pOwogCQkvKiBTYW5pdHkgY2hlY2sgKi8KQEAgLTE0MzUsNiAmIzQzOzE0MzcsNyBAQCB1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLAogCQl9CiAJfQogCS8qIE90aGVyIGNhc2VzOiBpZ25vcmUhICovCiYjNDM7b3V0OgogCXAgPSBOVUxMOwogCiBvazoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIFNlc3Npb24gRGV0ZXJtaW5hdGlvbiBmb3IgYG5ldC90aXBjL2xpbmsuY2AgUGF0Y2gqKgoKT2theSwgc28gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIGluIGBuZXQvdGlwYy9saW5rLmNgIHdhcnJhbnRzIGl0cyBvd24gZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIHNlY3VyaXR5IGd1aWRlbGluZXMuIFJpZ2h0LCB0aGlzIGlzIGNvZGUgYW5hbHlzaXMsIGRlZmVuc2l2ZSBRQSwgYW5kIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBmdXp6aW5nIHN0cmF0ZWd5LiBUaGUgZ3VpZGVsaW5lcyBjbGFzc2lmeSB0aGlzIGFzIGEgbG93LXNldmVyaXR5LCBiZW5pZ24gdGFzay4gV2UmIzM5O3JlIHRhbGtpbmcgc291cmNlIGNvZGUgdnVsbmVyYWJpbGl0eSBhbmFseXNpcywgYXVkaXRpbmcsIGFuZCBsZXZlcmFnaW5nIHNhbml0aXplcnMg4oCTIG5vIG9mZmVuc2l2ZSBwYXlsb2FkcyBvciBleHBsb2l0IGF0dGVtcHRzIGFyZSBpbnZvbHZlZC4gVGhhdCYjMzk7cyBnb29kIGNvbnRleHQuIE5vdywgdGltZSB0byByb2xsIHVwIG15IHNsZWV2ZXMgYW5kIGRpdmUgaW50byB0aGUgcGF0Y2ggaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBpbnNwZWN0IHRoZSBjb2RlLCB0aGUgY2hhbmdlcywgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiBgbmV0L3RpcGMvbGluay5jYC4gTGV0JiMzOTtzIGdldCB0byB3b3JrIGFuZCB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdGlwYy9saW5rLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MTA6XHQgKiBAdWM6IGRlc2lyZWQgR2FwIEFDSyBibG9ja3MgdHlwZSwgaS5lLiB1bmljYXN0ICg9IDEpIG9yIGJyb2FkY2FzdCAoPSAwKVxuMTQxMTpcdCAqXG4xNDEyOlx0ICogUmV0dXJuOiB0aGUgdG90YWwgR2FwIEFDSyBibG9ja3Mgc2l6ZVxuMTQxMzpcdCAqL1xuMTQxNDpcdHUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4xNDE1Olx0XHRcdFx0ICBzdHJ1Y3QgdGlwY19tc2cgKmhkciwgYm9vbCB1YylcbjE0MTY6XHR7XG4xNDE3Olx0XHRzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKnA7XG4xNDE4Olx0XHR1MTYgc3ogPSAwO1xuMTQxOTpcdFxuMTQyMDpcdFx0LyogRG9lcyBwZWVyIHN1cHBvcnQgdGhlIEdhcCBBQ0sgYmxvY2tzIGZlYXR1cmU/ICovXG4xNDIxOlx0XHRpZiAobC1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSykge1xuMTQyMjpcdFx0XHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcdTAwM2Mgc2l6ZW9mKCpwKSlcbjE0MjM6XHRcdFx0XHRnb3RvIG91dDtcbjE0MjQ6XHRcdFx0cCA9IChzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKiltc2dfZGF0YShoZHIpO1xuMTQyNTpcdFx0XHRzeiA9IG50b2hzKHAtXHUwMDNlbGVuKTtcbjE0MjY6XHRcdFx0LyogU2FuaXR5IGNoZWNrICovXG4xNDI3Olx0XHRcdGlmIChzeiA9PSBzdHJ1Y3Rfc2l6ZShwLCBnYWNrcywgc2l6ZV9hZGQocC1cdTAwM2V1Z2Fja19jbnQsIHAtXHUwMDNlYmdhY2tfY250KSkpIHtcbjE0Mjg6XHRcdFx0XHQvKiBHb29kLCBjaGVjayBpZiB0aGUgZGVzaXJlZCB0eXBlIGV4aXN0cyAqL1xuMTQyOTpcdFx0XHRcdGlmICgodWMgXHUwMDI2XHUwMDI2IHAtXHUwMDNldWdhY2tfY250KSB8fCAoIXVjIFx1MDAyNlx1MDAyNiBwLVx1MDAzZWJnYWNrX2NudCkpXG4xNDMwOlx0XHRcdFx0XHRnb3RvIG9rO1xuMTQzMTpcdFx0XHQvKiBCYWNrd2FyZCBjb21wYXRpYmxlOiBwZWVyIG1pZ2h0IG5vdCBzdXBwb3J0IGJjLCBidXQgdWM/ICovXG4xNDMyOlx0XHRcdH0gZWxzZSBpZiAodWMgXHUwMDI2XHUwMDI2IHN6ID09IHN0cnVjdF9zaXplKHAsIGdhY2tzLCBwLVx1MDAzZXVnYWNrX2NudCkpIHtcbjE0MzM6XHRcdFx0XHRpZiAocC1cdTAwM2V1Z2Fja19jbnQpIHtcbjE0MzQ6XHRcdFx0XHRcdHAtXHUwMDNlYmdhY2tfY250ID0gMDtcbjE0MzU6XHRcdFx0XHRcdGdvdG8gb2s7XG4xNDM2Olx0XHRcdFx0fVxuMTQzNzpcdFx0XHR9XG4xNDM4Olx0XHR9XG4xNDM5Olx0XHQvKiBPdGhlciBjYXNlczogaWdub3JlISAqL1xuMTQ0MDpcdG91dDpcbjE0NDE6XHRcdHAgPSBOVUxMO1xuMTQ0MjpcdFxuMTQ0MzpcdG9rOlxuMTQ0NDpcdFx0KmdhID0gcDtcbjE0NDU6XHRcdHJldHVybiBzejtcbjE0NDY6XHR9XG4xNDQ3Olx0XG4xNDQ4Olx0c3RhdGljIHU4IF9fdGlwY19idWlsZF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICpnYSxcbjE0NDk6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgdGlwY19saW5rICpsLCB1OCBzdGFydF9pbmRleClcbjE0NTA6XHR7XG4xNDUxOlx0XHRzdHJ1Y3QgdGlwY19nYXBfYWNrICpnYWNrcyA9IFx1MDAyNmdhLVx1MDAzZWdhY2tzW3N0YXJ0X2luZGV4XTtcbjE0NTI6XHRcdHN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVlayhcdTAwMjZsLVx1MDAzZWRlZmVyZHEpO1xuMTQ1MzpcdFx0dTE2IGV4cGVjdCwgc2Vxbm8gPSAwO1xuMTQ1NDpcdFx0dTggbiA9IDA7XG4xNDU1Olx0XG4xNDU2Olx0XHRpZiAoIXNrYilcbjE0NTc6XHRcdFx0cmV0dXJuIDA7XG4xNDU4Olx0XG4xNDU5Olx0XHRleHBlY3QgPSBidWZfc2Vxbm8oc2tiKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM1NQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqRGl2aW5nIGludG8gYHRpcGNfZ2V0X2dhcF9hY2tfYmxrc2AqKgoKUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgcGF0Y2ggYW5kIHdoZXJlIGB0aXBjX2dldF9nYXBfYWNrX2Jsa3NgIGZpdHMgaW4uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMsIGlzIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSYjMzk7bGwgbmVlZCB0byBsb2NhdGUgYWxsIHRoZSBwbGFjZXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGltbWVkaWF0ZSBjb250ZXh0IGFuZCByZXZlYWwgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBUSVBDIChUb3BvbG9neSBJbmRlcGVuZGVudCwgUHJvdG9jb2wgQ29udHJvbGxlZCkgZWNvc3lzdGVtLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBpcyB0aGUgZm91bmRhdGlvbiwgcmlnaHQ/IEl0JiMzOTtsbCBzaG93IG1lIHRoZSBpbnB1dHMgYW5kLCBpZGVhbGx5LCB3aGF0IHRoZSBwYXRjaCBpcyB0cnlpbmcgdG8gYWRqdXN0IG9yIG9wdGltaXplIHJlZ2FyZGluZyBob3cgaXQmIzM5O3MgYmVpbmcgdXNlZC4gSSYjMzk7bGwgZm9jdXMgb24gaG93IGl0IGlzIGJlaW5nIHVzZWQgaW4gdGhlIG5ldyBjb250ZXh0IG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDQ6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGlwY19nZXRfZ2FwX2Fja19ibGtzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC90aXBjL2JjYXN0LmM9NDk4PWludCB0aXBjX2JjYXN0X3N5bmNfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCxcbi0tXG5uZXQvdGlwYy9iY2FzdC5jLTUxMy1cdH0gZWxzZSBpZiAoIW1zZ19iY19hY2tfaW52YWxpZChoZHIpKSB7XG5uZXQvdGlwYy9iY2FzdC5jOjUxNDpcdFx0Z2xlbiA9IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhcdTAwMjZnYSwgbCwgaGRyLCBmYWxzZSk7XG5uZXQvdGlwYy9iY2FzdC5jLTUxNS1cdFx0aWYgKGdsZW4gXHUwMDNlIG1zZ19kYXRhX3N6KGhkcikpIHtcbi0tXG5uZXQvdGlwYy9saW5rLmM9MTM0MD1zdGF0aWMgaW50IHRpcGNfbGlua190bmxfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3RpcGMvbGluay5jLTE0MDUtLyoqXG5uZXQvdGlwYy9saW5rLmM6MTQwNjogKiB0aXBjX2dldF9nYXBfYWNrX2Jsa3MgLSBnZXQgR2FwIEFDSyBibG9ja3MgZnJvbSBQUk9UT0NPTC9TVEFURV9NU0dcbm5ldC90aXBjL2xpbmsuYy0xNDA3LSAqIEBnYTogcmV0dXJuZWQgcG9pbnRlciB0byB0aGUgR2FwIEFDSyBibG9ja3MgaWYgYW55XG4tLVxubmV0L3RpcGMvbGluay5jLTE0MTMtICovXG5uZXQvdGlwYy9saW5rLmM6MTQxNDp1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxubmV0L3RpcGMvbGluay5jLTE0MTUtXHRcdFx0ICBzdHJ1Y3QgdGlwY19tc2cgKmhkciwgYm9vbCB1Yylcbi0tXG5uZXQvdGlwYy9saW5rLmM9MjE3Nz1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvdGlwYy9saW5rLmMtMjI3NC1cdFx0LyogVmFsaWRhdGUgR2FwIEFDSyBibG9ja3MsIGRyb3AgaWYgaW52YWxpZCAqL1xubmV0L3RpcGMvbGluay5jOjIyNzU6XHRcdGdsZW4gPSB0aXBjX2dldF9nYXBfYWNrX2Jsa3MoXHUwMDI2Z2EsIGwsIGhkciwgdHJ1ZSk7XG5uZXQvdGlwYy9saW5rLmMtMjI3Ni1cdFx0aWYgKGdsZW4gXHUwMDNlIGRsZW4pXG4tLVxubmV0L3RpcGMvbGluay5oPTE0ND1pbnQgdGlwY19saW5rX21zcyhzdHJ1Y3QgdGlwY19saW5rICpsKTtcbm5ldC90aXBjL2xpbmsuaDoxNDU6dTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCxcbm5ldC90aXBjL2xpbmsuaC0xNDYtXHRcdFx0ICBzdHJ1Y3QgdGlwY19tc2cgKmhkciwgYm9vbCB1Yyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxOTgKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogNzE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRJUEMgVnVsbmVyYWJpbGl0eSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYHRpcGNfZ2V0X2dhcF9hY2tfYmxrc2AsIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGl0JiMzOTtzIGRlYWxpbmcgd2l0aCBhbiBvdXQtb2YtYm91bmRzIHJlYWQgdnVsbmVyYWJpbGl0eS4gU3BlY2lmaWNhbGx5LCB0aGUgb3JpZ2luYWwgY29kZSBkaWRuJiMzOTt0IGNoZWNrIHRoZSBzaXplIG9mIHRoZSBpbmNvbWluZyBtZXNzYWdlIGRhdGEgKGBoZHJgKSBhZ2FpbnN0IHRoZSBzaXplIG9mIHRoZSBgc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzYC4gVGhpcyBtZWFudCB0aGF0IGlmIHRoZSByZWNlaXZlZCBwYWNrZXQgd2FzIHNtYWxsZXIgdGhhbiBleHBlY3RlZCwgZGVyZWZlcmVuY2luZyBmaWVsZHMgd2l0aGluIHRoZSBgc3RydWN0YCAobGlrZSBgcC0mZ3Q7bGVuYCwgYHAtJmd0O3VnYWNrX2NudGAsIGV0Yy4pIHdvdWxkIGxlYWQgdG8gcmVhZGluZyBwYXN0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyLCBhbiBvYnZpb3VzIG1lbW9yeSBzYWZldHkgaXNzdWUuIEtBU0FOLCBvZiBjb3Vyc2UsIHdvdWxkIGNhdGNoIHRoaXMgZHVyaW5nIHJ1bnRpbWUuCgpUaGUgcGF0Y2gmIzM5O3MgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogYWRkIGEgYm91bmRzIGNoZWNrIHVzaW5nIGBtc2dfZGF0YV9zeihoZHIpICZsdDsgc2l6ZW9mKCpwKWAuIElmIHRoZSBwYWNrZXQmIzM5O3MgZGF0YSBpcyB0b28gc2hvcnQsIHRoZSBjb2RlIG5vdyBqdW1wcyB0byBgb3V0O2AsIGVmZmVjdGl2ZWx5IHByZXZlbnRpbmcgdGhlIG91dC1vZi1ib3VuZHMgcmVhZC4gVGhhdCYjMzk7cyBnb29kLCBidXQgbGV0JiMzOTtzIGdvIGEgYml0IGZ1cnRoZXIuCgpNeSBpbW1lZGlhdGUgY29uY2VybnMgYXJlOiBkb2VzIHRoaXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gRG9lcyBpdCBjcmVhdGUgYW55IGluZm9ybWF0aW9uIGxlYWtzPyBEb2VzIGl0IGludGVyYWN0IHdpdGggdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gYW55IG90aGVyIHdheT8KCjEuICAqKkV4cG9zaW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OioqIE5vLCB0aGlzIGlzbiYjMzk7dCBleHBvc2luZyBhbnl0aGluZyB0byB1c2Vyc3BhY2UuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaW50ZXJuYWwgVElQQyBwYWNrZXQgcGFyc2luZyB3aXRoaW4gdGhlIGtlcm5lbC4KMi4gICoqVG91Y2hpbmcgVW5pbml0aWFsaXplZCBTdGFjay9IZWFwIE1lbW9yeToqKiBOby4gVGhlIHBvaW50ZXIgYHBgIGlzIHBvaW50aW5nICppbnRvKiB0aGUgcmVjZWl2ZWQgcGFja2V0IGRhdGEgKGBtc2dfZGF0YShoZHIpYCB3aGljaCBpcyBhbHJlYWR5IGluaXRpYWxpemVkKSBhbmQgYHN6YCBpcyBhIGxvY2FsIHZhcmlhYmxlIGluaXRpYWxpemVkIHRvIDAuIFdoZW4gd2UganVtcCB0byBgb3V0O2AsIGBwYCBnZXRzIHNldCB0byBOVUxMLCBhbmQgYHN6YCByZXR1cm5zIGFzIDAuCjMuICAqKkZpeGluZyBvciBJbnRyb2R1Y2luZyBhbiBVbmluaXRpYWxpemVkIFJlYWQ6KiogVGhlIHBhdGNoIGZpeGVzIGFuICpvdXQtb2YtYm91bmRzKiByZWFkLCB3aGljaCBpcyBhICptZW1vcnkgc2FmZXR5IGlzc3VlKiwgYW5kIG5vdCBhbiAqdW5pbml0aWFsaXplZCByZWFkKi4KClNvLCBpdCYjMzk7cyBhIGNsZWFyIGZpeCBmb3IgYW4gb3V0LW9mLWJvdW5kcyByZWFkIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGVyZSBhcmVuJiMzOTt0IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgcHJvYmxlbXMsIG9yIGFueSBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy4KCk5vdywgZm9yIGBLTVNBTlJlYXNvbmluZ2AsIEkgbmVlZCB0byBjbGVhcmx5IGFydGljdWxhdGUgd2h5IEtNU0FOIGlzbiYjMzk7dCBuZWNlc3NhcnkgaGVyZToKCiogICBUaGUgcGF0Y2ggZW5mb3JjZXMgYSBzaXplIGNoZWNrIG9uIGluY29taW5nIFRJUEMgcGFja2V0cy4KKiAgIFRoZSB2dWxuZXJhYmlsaXR5IGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCwgZXhjZWVkaW5nIHRoZSBza2IgcGFja2V0IGJ1ZmZlciBib3VuZGFyeSB3aGVuIHByb2Nlc3NpbmcgbmV0d29yayBtZXNzYWdlcy4KKiAgIEtBU0FOIGlzIGRlc2lnbmVkIHNwZWNpZmljYWxseSB0byBjYXRjaCB0aGVzZSBraW5kcyBvZiBvdXQtb2YtYm91bmRzIHJlYWRzIG9uIHBhY2tldCBidWZmZXJzIGFuZCBzbGFiIGFsbG9jYXRpb25zLgoqICAgTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0byB1c2VyLXNwYWNlLiBBbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuCiogICBUaGVyZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IHJlcXVpcmUgS01TQU4sIGJlY2F1c2UgaXQgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFN0YW5kYXJkIEtBU0FOIGZ1enppbmcgaXMgdGhlIGFwcHJvcHJpYXRlIHNvbHV0aW9uLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA0OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzKCkgZW5zdXJpbmcgdGhhdCB0aGUgaW5jb21pbmcgbWVzc2FnZSBwYXlsb2FkIHNpemUgKG1zZ19kYXRhX3N6KGhkcikpIGlzIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MpIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHN0cnVjdCBtZW1iZXJzLiBUaGUgYnVnIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBza19idWZmIGRhdGEgYnVmZmVyIHdoZW4gcGFyc2luZyBtYWxmb3JtZWQgbmV0d29yayBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGFsdGVyIGluaXRpYWxpemF0aW9uIG9mIGFueSBzdGFjay9oZWFwIHN0cnVjdHVyZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIHRpcGNfZ2V0X2dhcF9hY2tfYmxrcygpIGVuc3VyaW5nIHRoYXQgdGhlIGluY29taW5nIG1lc3NhZ2UgcGF5bG9hZCBzaXplIChtc2dfZGF0YV9zeihoZHIpKSBpcyBhdCBsZWFzdCBzaXplb2Yoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzKSBiZWZvcmUgZGVyZWZlcmVuY2luZyBzdHJ1Y3QgbWVtYmVycy4gVGhlIGJ1ZyBhZGRyZXNzZWQgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgc2tfYnVmZiBkYXRhIGJ1ZmZlciB3aGVuIHBhcnNpbmcgbWFsZm9ybWVkIG5ldHdvcmsgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weV90b191c2VyIHBhdGhzLCBvciBhbHRlciBpbml0aWFsaXphdGlvbiBvZiBhbnkgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNjo1Mi4xNjI5NjUxNloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDY0NzA0NjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX2dldF9nYXBfYWNrX2Jsa3NcIixcbiAgICBcInRpcGNfbGlua19wcm90b19yY3ZcIixcbiAgICBcInRpcGNfbGlua19yY3ZcIixcbiAgICBcInRpcGNfYmNhc3Rfc3luY19yY3ZcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzKCkgZW5zdXJpbmcgdGhhdCB0aGUgaW5jb21pbmcgbWVzc2FnZSBwYXlsb2FkIHNpemUgKG1zZ19kYXRhX3N6KGhkcikpIGlzIGF0IGxlYXN0IHNpemVvZihzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MpIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHN0cnVjdCBtZW1iZXJzLiBUaGUgYnVnIGFkZHJlc3NlZCBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBza19idWZmIGRhdGEgYnVmZmVyIHdoZW4gcGFyc2luZyBtYWxmb3JtZWQgbmV0d29yayBwYWNrZXRzLiBPdXQtb2YtYm91bmRzIGJ1ZmZlciByZWFkcyBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgdG91Y2ggdW5pbml0aWFsaXplZCBtZW1vcnksIG1vZGlmeSBjb3B5X3RvX3VzZXIgcGF0aHMsIG9yIGFsdGVyIGluaXRpYWxpemF0aW9uIG9mIGFueSBzdGFjay9oZWFwIHN0cnVjdHVyZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiB0aXBjX2dldF9nYXBfYWNrX2Jsa3MgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIHdoZW4gcGFyc2luZyBHYXAgQUNLIGJsb2NrcyBmcm9tIGluY29taW5nIFRJUEMgcHJvdG9jb2wgbWVzc2FnZXMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgcHJvdG9jb2wgcHJvY2Vzc2luZyBsb2dpYyBpbiBUSVBDIGFuZCB3YXJyYW50cyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNjo1Mi4xNjI5NzExWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTU5NjIxNDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2JkZTg2YTdkZjBiOTJhZTAxMWQ0ZjFmNGY2ODVhYjRkMGY0MmRiN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA0OjE2OjUwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuY1xcbmluZGV4IDY0MjdjNjlmODkyOTQuLjBiZTg2Y2JkYzkxM2QgMTAwNjQ0XFxuLS0tIGEvbmV0L3RpcGMvbGluay5jXFxuKysrIGIvbmV0L3RpcGMvbGluay5jXFxuQEAgLTE0MTksNiArMTQxOSw4IEBAIHUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxuIFxcbiBcXHQvKiBEb2VzIHBlZXIgc3VwcG9ydCB0aGUgR2FwIEFDSyBibG9ja3MgZmVhdHVyZT8gKi9cXG4gXFx0aWYgKGwtXFx1MDAzZXBlZXJfY2FwcyBcXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSykge1xcbitcXHRcXHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcXHUwMDNjIHNpemVvZigqcCkpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRwID0gKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKW1zZ19kYXRhKGhkcik7XFxuIFxcdFxcdHN6ID0gbnRvaHMocC1cXHUwMDNlbGVuKTtcXG4gXFx0XFx0LyogU2FuaXR5IGNoZWNrICovXFxuQEAgLTE0MzUsNiArMTQzNyw3IEBAIHUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHQvKiBPdGhlciBjYXNlczogaWdub3JlISAqL1xcbitvdXQ6XFxuIFxcdHAgPSBOVUxMO1xcbiBcXG4gb2s6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE2OjUzLjcyMzE2ODI2OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjUwMTMzNzA4MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfZ2V0X2dhcF9hY2tfYmxrc1wiLFxuICAgIFwidGlwY19saW5rX3Byb3RvX3JjdlwiLFxuICAgIFwidGlwY19saW5rX3JjdlwiLFxuICAgIFwidGlwY19iY2FzdF9zeW5jX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHBhcnNpbmcgR2FwIEFDSyBibG9ja3MgZnJvbSBpbmNvbWluZyBUSVBDIHByb3RvY29sIG1lc3NhZ2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgbG9naWMgaW4gVElQQyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3YmRlODZhN2RmMGI5MmFlMDExZDRmMWY0ZjY4NWFiNGQwZjQyZGI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwNDoxNjo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuY1xuaW5kZXggNjQyN2M2OWY4OTI5NC4uMGJlODZjYmRjOTEzZCAxMDA2NDRcbi0tLSBhL25ldC90aXBjL2xpbmsuY1xuKysrIGIvbmV0L3RpcGMvbGluay5jXG5AQCAtMTQxOSw2ICsxNDE5LDggQEAgdTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCxcbiBcbiBcdC8qIERvZXMgcGVlciBzdXBwb3J0IHRoZSBHYXAgQUNLIGJsb2NrcyBmZWF0dXJlPyAqL1xuIFx0aWYgKGwtXHUwMDNlcGVlcl9jYXBzIFx1MDAyNiBUSVBDX0dBUF9BQ0tfQkxPQ0spIHtcbitcdFx0aWYgKG1zZ19kYXRhX3N6KGhkcikgXHUwMDNjIHNpemVvZigqcCkpXG4rXHRcdFx0Z290byBvdXQ7XG4gXHRcdHAgPSAoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICopbXNnX2RhdGEoaGRyKTtcbiBcdFx0c3ogPSBudG9ocyhwLVx1MDAzZWxlbik7XG4gXHRcdC8qIFNhbml0eSBjaGVjayAqL1xuQEAgLTE0MzUsNiArMTQzNyw3IEBAIHUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXG4gXHRcdH1cbiBcdH1cbiBcdC8qIE90aGVyIGNhc2VzOiBpZ25vcmUhICovXG4rb3V0OlxuIFx0cCA9IE5VTEw7XG4gXG4gb2s6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNjo1My43MjMxNjk3MzhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTI4MTQ5MTEzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRJUEMgTGluayBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkndmUgZ290IHRoaXMgcGF0Y2ggYW5kIHJldmlldyByZXF1ZXN0IG9uIG15IGRlc2ssIGFuZCB0aGUgdGFyZ2V0IGlzIGBuZXQvdGlwYy9saW5rLmNgLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIHNlZW0gdG8gYmUgd2l0aGluIHRoZSBgdGlwY19nZXRfZ2FwX2Fja19ibGtzYCBmdW5jdGlvbi4gTXkgZmlyc3QgbW92ZSBoZXJlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGNvZGUgaXMgZG9pbmcgd2l0aGluIHRoZSBsYXJnZXIgVElQQyBmcmFtZXdvcmsuXG5cbkknbSB0aGlua2luZyBJJ2xsIHN0YXJ0IGJ5IHB1bGxpbmcgdXAgYG5ldC90aXBjL2xpbmsuY2AgaXRzZWxmLCBvZiBjb3Vyc2UuIEknbGwgbmVlZCB0byBzZWUgdGhlIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZmlsZSBhbmQgdW5kZXJzdGFuZCBpdHMgaW1tZWRpYXRlIG5laWdoYm9ycy4gSSBhbHNvIHdhbnQgdG8gcXVpY2tseSBnbGFuY2UgYXQgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcywgYW55dGhpbmcgdGhhdCBtaWdodCBjb25kaXRpb25hbGx5IGluY2x1ZGUgb3IgZW5hYmxlIHRoaXMgc2VjdGlvbiBvZiBjb2RlLiBJIG5lZWQgdG8gYnVpbGQgYSBjb21wcmVoZW5zaXZlIG1lbnRhbCBwaWN0dXJlLlxuXG5UaGVuLCBJJ2xsIGxldmVyYWdlIG15IHVzdWFsIHRvb2xzLiBEZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgdGhlIGZpbGUgSSdsbCBjYWxsIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCwgYW5kIHVzZSBpdCB0byBjaGVjayB0aGUgY29udGV4dCBpbiBgbmV0L3RpcGMvbGluay5jYC4gSSB3YW50IHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZmxvdywgYW55IGRlcGVuZGVuY2llcywgYW5kIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgb2YgdGhpcyBjaGFuZ2UuIEl04oCZcyBhbGwgYWJvdXQgdGhlIGRldGFpbHM7IG5vdGhpbmcgaXMgbGVmdCB0byBjaGFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5ODYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjA1LjAwNDY2MzY4OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGlwYy9saW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQxMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTQxMDpcXHQgKiBAdWM6IGRlc2lyZWQgR2FwIEFDSyBibG9ja3MgdHlwZSwgaS5lLiB1bmljYXN0ICg9IDEpIG9yIGJyb2FkY2FzdCAoPSAwKVxcbjE0MTE6XFx0ICpcXG4xNDEyOlxcdCAqIFJldHVybjogdGhlIHRvdGFsIEdhcCBBQ0sgYmxvY2tzIHNpemVcXG4xNDEzOlxcdCAqL1xcbjE0MTQ6XFx0dTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCxcXG4xNDE1OlxcdFxcdFxcdFxcdCAgc3RydWN0IHRpcGNfbXNnICpoZHIsIGJvb2wgdWMpXFxuMTQxNjpcXHR7XFxuMTQxNzpcXHRcXHRzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKnA7XFxuMTQxODpcXHRcXHR1MTYgc3ogPSAwO1xcbjE0MTk6XFx0XFxuMTQyMDpcXHRcXHQvKiBEb2VzIHBlZXIgc3VwcG9ydCB0aGUgR2FwIEFDSyBibG9ja3MgZmVhdHVyZT8gKi9cXG4xNDIxOlxcdFxcdGlmIChsLVxcdTAwM2VwZWVyX2NhcHMgXFx1MDAyNiBUSVBDX0dBUF9BQ0tfQkxPQ0spIHtcXG4xNDIyOlxcdFxcdFxcdGlmIChtc2dfZGF0YV9zeihoZHIpIFxcdTAwM2Mgc2l6ZW9mKCpwKSlcXG4xNDIzOlxcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbjE0MjQ6XFx0XFx0XFx0cCA9IChzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKiltc2dfZGF0YShoZHIpO1xcbjE0MjU6XFx0XFx0XFx0c3ogPSBudG9ocyhwLVxcdTAwM2VsZW4pO1xcbjE0MjY6XFx0XFx0XFx0LyogU2FuaXR5IGNoZWNrICovXFxuMTQyNzpcXHRcXHRcXHRpZiAoc3ogPT0gc3RydWN0X3NpemUocCwgZ2Fja3MsIHNpemVfYWRkKHAtXFx1MDAzZXVnYWNrX2NudCwgcC1cXHUwMDNlYmdhY2tfY250KSkpIHtcXG4xNDI4OlxcdFxcdFxcdFxcdC8qIEdvb2QsIGNoZWNrIGlmIHRoZSBkZXNpcmVkIHR5cGUgZXhpc3RzICovXFxuMTQyOTpcXHRcXHRcXHRcXHRpZiAoKHVjIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZXVnYWNrX2NudCkgfHwgKCF1YyBcXHUwMDI2XFx1MDAyNiBwLVxcdTAwM2ViZ2Fja19jbnQpKVxcbjE0MzA6XFx0XFx0XFx0XFx0XFx0Z290byBvaztcXG4xNDMxOlxcdFxcdFxcdC8qIEJhY2t3YXJkIGNvbXBhdGlibGU6IHBlZXIgbWlnaHQgbm90IHN1cHBvcnQgYmMsIGJ1dCB1Yz8gKi9cXG4xNDMyOlxcdFxcdFxcdH0gZWxzZSBpZiAodWMgXFx1MDAyNlxcdTAwMjYgc3ogPT0gc3RydWN0X3NpemUocCwgZ2Fja3MsIHAtXFx1MDAzZXVnYWNrX2NudCkpIHtcXG4xNDMzOlxcdFxcdFxcdFxcdGlmIChwLVxcdTAwM2V1Z2Fja19jbnQpIHtcXG4xNDM0OlxcdFxcdFxcdFxcdFxcdHAtXFx1MDAzZWJnYWNrX2NudCA9IDA7XFxuMTQzNTpcXHRcXHRcXHRcXHRcXHRnb3RvIG9rO1xcbjE0MzY6XFx0XFx0XFx0XFx0fVxcbjE0Mzc6XFx0XFx0XFx0fVxcbjE0Mzg6XFx0XFx0fVxcbjE0Mzk6XFx0XFx0LyogT3RoZXIgY2FzZXM6IGlnbm9yZSEgKi9cXG4xNDQwOlxcdG91dDpcXG4xNDQxOlxcdFxcdHAgPSBOVUxMO1xcbjE0NDI6XFx0XFxuMTQ0MzpcXHRvazpcXG4xNDQ0OlxcdFxcdCpnYSA9IHA7XFxuMTQ0NTpcXHRcXHRyZXR1cm4gc3o7XFxuMTQ0NjpcXHR9XFxuMTQ0NzpcXHRcXG4xNDQ4OlxcdHN0YXRpYyB1OCBfX3RpcGNfYnVpbGRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqZ2EsXFxuMTQ0OTpcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IHRpcGNfbGluayAqbCwgdTggc3RhcnRfaW5kZXgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjA1LjAwNDgwMjY4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5MTg1NDA0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGRpdmluZyBpbnRvIHRoZSBzdWJqZWN0IG1hdHRlcjpcblxuKipEZWVwIERpdmUgaW50byBUSVBDIGFuZCBHYXAgQWNrbm93bGVkZ2VtZW50IEJsb2NrcyoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJvbGUgb2YgYHRpcGNfZ2V0X2dhcF9hY2tfYmxrc2AuIEZpcnN0LCBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIFRJUEMgY29kZWJhc2UuIENvbnRleHQgaXMgZXZlcnl0aGluZy4gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgVElQQyBjb25maWd1cmF0aW9uIHdpbGwgYmUgY3JpdGljYWwgaW4gbWFraW5nIGFueSBjb25jbHVzaW9ucyBhYm91dCB0aGlzIGZ1bmN0aW9uLlxuXG5UaGVuLCB0aGUgZm9jdXMgc2hpZnRzLiBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgdGhlIGNhbGxzIHRvIGB0aXBjX2dldF9nYXBfYWNrX2Jsa3NgLiBBIGdvb2Qgc2VhcmNoIHN0cmF0ZWd5IHdpbGwgYmUga2V5IHRvIHVuY292ZXJpbmcgYWxsIHRoZSBkaWZmZXJlbnQgd2F5cyB0aGlzIGlzIHVzZWQuIEtub3dpbmcgdGhlIGNhbGwgZ3JhcGggd2lsbCByZWFsbHkgaGVscCBtZSBzZWUgdGhlIGZsb3cgb2YgdGhlIGNvZGUgYW5kIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gRnJvbSB0aGVyZSwgSSBjYW4gYW5hbHl6ZSB0aGUgdXNhZ2UgcGF0dGVybnMgdG8gaW5mZXIgdGhlIHB1cnBvc2Ugb2YgdGhhdCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA1OCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MTc6MDYuOTIzMzQ1MzhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgwNjkzODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19nZXRfZ2FwX2Fja19ibGtzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC90aXBjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC90aXBjL2JjYXN0LmM9NDk4PWludCB0aXBjX2JjYXN0X3N5bmNfcmN2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbCxcXG4tLVxcbm5ldC90aXBjL2JjYXN0LmMtNTEzLVxcdH0gZWxzZSBpZiAoIW1zZ19iY19hY2tfaW52YWxpZChoZHIpKSB7XFxubmV0L3RpcGMvYmNhc3QuYzo1MTQ6XFx0XFx0Z2xlbiA9IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhcXHUwMDI2Z2EsIGwsIGhkciwgZmFsc2UpO1xcbm5ldC90aXBjL2JjYXN0LmMtNTE1LVxcdFxcdGlmIChnbGVuIFxcdTAwM2UgbXNnX2RhdGFfc3ooaGRyKSkge1xcbi0tXFxubmV0L3RpcGMvbGluay5jPTEzNDA9c3RhdGljIGludCB0aXBjX2xpbmtfdG5sX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTE0MDUtLyoqXFxubmV0L3RpcGMvbGluay5jOjE0MDY6ICogdGlwY19nZXRfZ2FwX2Fja19ibGtzIC0gZ2V0IEdhcCBBQ0sgYmxvY2tzIGZyb20gUFJPVE9DT0wvU1RBVEVfTVNHXFxubmV0L3RpcGMvbGluay5jLTE0MDctICogQGdhOiByZXR1cm5lZCBwb2ludGVyIHRvIHRoZSBHYXAgQUNLIGJsb2NrcyBpZiBhbnlcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNDEzLSAqL1xcbm5ldC90aXBjL2xpbmsuYzoxNDE0OnUxNiB0aXBjX2dldF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICoqZ2EsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxubmV0L3RpcGMvbGluay5jLTE0MTUtXFx0XFx0XFx0ICBzdHJ1Y3QgdGlwY19tc2cgKmhkciwgYm9vbCB1YylcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0yMTc3PXN0YXRpYyBpbnQgdGlwY19saW5rX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3RpcGMvbGluay5jLTIyNzQtXFx0XFx0LyogVmFsaWRhdGUgR2FwIEFDSyBibG9ja3MsIGRyb3AgaWYgaW52YWxpZCAqL1xcbm5ldC90aXBjL2xpbmsuYzoyMjc1OlxcdFxcdGdsZW4gPSB0aXBjX2dldF9nYXBfYWNrX2Jsa3MoXFx1MDAyNmdhLCBsLCBoZHIsIHRydWUpO1xcbm5ldC90aXBjL2xpbmsuYy0yMjc2LVxcdFxcdGlmIChnbGVuIFxcdTAwM2UgZGxlbilcXG4tLVxcbm5ldC90aXBjL2xpbmsuaD0xNDQ9aW50IHRpcGNfbGlua19tc3Moc3RydWN0IHRpcGNfbGluayAqbCk7XFxubmV0L3RpcGMvbGluay5oOjE0NTp1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbm5ldC90aXBjL2xpbmsuaC0xNDYtXFx0XFx0XFx0ICBzdHJ1Y3QgdGlwY19tc2cgKmhkciwgYm9vbCB1Yyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjA3LjAxMTQyMTcwNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE4NzQ5NjcyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gVElQQyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgVElQQyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZ28gc3RyYWlnaHQgdG8gYG5ldC90aXBjL0tjb25maWdgLiBUaGF0J3MgdGhlIHVzdWFsIHNwb3QsIHJpZ2h0PyBJdCBzaG91bGQgb3V0bGluZSBhbGwgdGhlIG5lY2Vzc2FyeSBLY29uZmlnIHN5bWJvbHMgYW5kIGRlcGVuZGVuY2llcyBmb3IgdGhlIG1vZHVsZS4gSSBleHBlY3QgdG8gZmluZCBvcHRpb25zIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSwgcGVyaGFwcyBmb3IgZGlmZmVyZW50IG5vZGUgdHlwZXMsIGFuZCBkZWZpbml0ZWx5IGZvciB0aGluZ3MgbGlrZSBzZWN1cml0eSBmZWF0dXJlcyBvciBzcGVjaWZpYyB0cmFuc3BvcnQgcHJvdG9jb2xzIGlmIHRoZXkgZXhpc3QuIEnigJlsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgdGhhdCBtaWdodCBhZmZlY3QgcGVyZm9ybWFuY2UgdHVuaW5nIGFzIHdlbGwuIEdvdHRhIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCBjb3VsZCBpbXBhY3QgbXkgc3BlY2lmaWMgdXNlIGNhc2UuIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0IGRyaWxsaW5nIGRvd24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NjcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzowOC44ODYzOTE1NjNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjgyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdGlwYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRJUEMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIFRJUENcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJUaGUgVElQQyBQcm90b2NvbFxcXCJcXG4gICA4OlxcdFxcdGRlcGVuZHMgb24gSU5FVFxcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGUgVHJhbnNwYXJlbnQgSW50ZXIgUHJvY2VzcyBDb21tdW5pY2F0aW9uIChUSVBDKSBwcm90b2NvbCBpc1xcbiAgMTE6XFx0XFx0ICBzcGVjaWFsbHkgZGVzaWduZWQgZm9yIGludHJhIGNsdXN0ZXIgY29tbXVuaWNhdGlvbi4gVGhpcyBwcm90b2NvbFxcbiAgMTI6XFx0XFx0ICBvcmlnaW5hdGVzIGZyb20gRXJpY3Nzb24gd2hlcmUgaXQgaGFzIGJlZW4gdXNlZCBpbiBjYXJyaWVyIGdyYWRlXFxuICAxMzpcXHRcXHQgIGNsdXN0ZXIgYXBwbGljYXRpb25zIGZvciBtYW55IHllYXJzLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFRJUEMsIHNlZSBodHRwOi8vdGlwYy5zb3VyY2Vmb3JnZS5uZXQuXFxuICAxNjpcXHRcXG4gIDE3OlxcdFxcdCAgVGhpcyBwcm90b2NvbCBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoXFxuICAxODpcXHRcXHQgIGNhbiBiZSBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3VcXG4gIDE5OlxcdFxcdCAgd2FudCkuIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGlwYy4gSWYgeW91IHdhbnQgdG8gY29tcGlsZSBpdFxcbiAgMjA6XFx0XFx0ICBhcyBhIG1vZHVsZSwgc2F5IE0gaGVyZSBhbmQgcmVhZCBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnJzdFxcdTAwM2UuXFxuICAyMTpcXHRcXG4gIDIyOlxcdFxcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRjb25maWcgVElQQ19NRURJQV9JQlxcbiAgMjU6XFx0XFx0Ym9vbCBcXFwiSW5maW5pQmFuZCBtZWRpYSB0eXBlIHN1cHBvcnRcXFwiXFxuICAyNjpcXHRcXHRkZXBlbmRzIG9uIFRJUEMgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORF9JUE9JQlxcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBTYXlpbmcgWSBoZXJlIHdpbGwgZW5hYmxlIHN1cHBvcnQgZm9yIHJ1bm5pbmcgVElQQyBvblxcbiAgMjk6XFx0XFx0ICBJUC1vdmVyLUluZmluaUJhbmQgZGV2aWNlcy5cXG4gIDMwOlxcdGNvbmZpZyBUSVBDX01FRElBX1VEUFxcbiAgMzE6XFx0XFx0Ym9vbCBcXFwiSVAvVURQIG1lZGlhIHR5cGUgc3VwcG9ydFxcXCJcXG4gIDMyOlxcdFxcdGRlcGVuZHMgb24gVElQQ1xcbiAgMzM6XFx0XFx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXFxuICAzNDpcXHRcXHRkZWZhdWx0IHlcXG4gIDM1OlxcdFxcdGhlbHBcXG4gIDM2OlxcdFxcdCAgU2F5aW5nIFkgaGVyZSB3aWxsIGVuYWJsZSBzdXBwb3J0IGZvciBydW5uaW5nIFRJUEMgb3ZlciBJUC9VRFBcXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIFRJUENfQ1JZUFRPXFxuICAzOTpcXHRcXHRib29sIFxcXCJUSVBDIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4gIDQwOlxcdFxcdGRlcGVuZHMgb24gVElQQ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzowOC44ODY0ODY1NzNaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDU4MjI1NDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlRJUEMgVnVsbmVyYWJpbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIFRJUEMgZGVwZW5kcyBvbiBJTkVULCB3aGljaCBtZWFucyBpdCdzIGEgbmV0d29yayBwcm90b2NvbCwgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBtZWNoYW5pc21zIGxpa2Ugc29ja2V0cyAoQUZfVElQQyksIG5ldGxpbmssIFVEUCwgYW5kIHRoZSByZXN0LiBHb29kLCB0aGF0IG1lYW5zIFN5emthbGxlciBzaG91bGQgaGF2ZSBkZWNlbnQgY292ZXJhZ2UgZm9yIGZ1enppbmcgaXQuIEluIGZhY3QsIFN5emthbGxlciAqZG9lcyogaGVhdmlseSBmdXp6IFRJUEMsIHdoaWNoIGlzIGEgZ29vZCBzaWduLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBpbiBgbmV0L3RpcGMvbGluay5jYC4gSSBzZWUgdGhleSd2ZSBhZGRlZCBhIGJvdW5kcyBjaGVjazogYG1zZ19kYXRhX3N6KGhkcikgXHUwMDNjIHNpemVvZigqcClgIGJlZm9yZSBkZXJlZmVyZW5jaW5nIGBwID0gKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKW1zZ19kYXRhKGhkcilgLiBUaGlzIGlzIGEgY2xhc3NpYyBvdXQtb2YtYm91bmRzIHJlYWQgcHJldmVudGlvbiwgcHJvdGVjdGluZyBhZ2FpbnN0IGEgbWFsZm9ybWVkIEdhcCBBQ0sgYmxvY2sgaW4gYSByZWNlaXZlZCBUSVBDIHBhY2tldC4gIEdvb2QgY2F0Y2ghIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGxlYWQgdG8gZXhwbG9pdGFibGUgdnVsbmVyYWJpbGl0aWVzLiBTbywgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIHRydWUuIFBlcmZlY3QuXG5cbk5vdywgZm9yIGZvY3VzIHN5bWJvbHMsICBgdGlwY19nZXRfZ2FwX2Fja19ibGtzYCwgYHRpcGNfbGlua19wcm90b19yY3ZgLCBgdGlwY19iY2FzdF9zeW5jX3JjdmAsIGFuZCBgdGlwY19yY3ZgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucy4gV2UgbmVlZCB0byBjaGVjayBjYWxsZXJzIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZmxvdy5cblxuYHRpcGNfZ2V0X2dhcF9hY2tfYmxrc2AgaXMgbm9uLXN0YXRpYywgd2hpY2ggaXMgd2hhdCB3ZSB3YW50LlxuXG5Ob3csIGxldCdzIHNlZSB3aGVyZSB0aGUgY2FsbGVycyBhcmUuIGB0aXBjX2xpbmtfcHJvdG9fcmN2YCBpcyBzdGF0aWM7IGB0aXBjX3JjdmAgaXMgaW4gYG5ldC90aXBjL25vZGUuY2Agb3IgYG5ldC90aXBjL2xpbmsuY2AuICBMZXQncyB0cmFjZSBgdGlwY19saW5rX3Byb3RvX3JjdmAgYW5kIHNlZSB3aGVyZSB0aGlzIGJyYW5jaGVzLiBUaGlzIHdpbGwgdGVsbCB1cyB0aGUgZnVsbCBhdHRhY2sgc3VyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcxNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjEyLjk0NDcxNTE5OFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE4NzAwNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGlwY19saW5rX3Byb3RvX3JjdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdGlwY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9saW5rLmM9MjM0PWVudW0ge1xcbi0tXFxubmV0L3RpcGMvbGluay5jLTI0My1cXG5uZXQvdGlwYy9saW5rLmM6MjQ0OnN0YXRpYyBpbnQgdGlwY19saW5rX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC90aXBjL2xpbmsuYy0yNDUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKTtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xNzY1PWludCB0aXBjX2xpbmtfcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTc3NS1cXHRpZiAodW5saWtlbHkobXNnX3VzZXIoaGRyKSA9PSBMSU5LX1BST1RPQ09MKSlcXG5uZXQvdGlwYy9saW5rLmM6MTc3NjpcXHRcXHRyZXR1cm4gdGlwY19saW5rX3Byb3RvX3JjdihsLCBza2IsIHhtaXRxKTtcXG5uZXQvdGlwYy9saW5rLmMtMTc3Ny1cXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0yMTM0PWJvb2wgdGlwY19saW5rX3ZhbGlkYXRlX21zZyhzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3QgdGlwY19tc2cgKmhkcilcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0yMTcxLVxcbm5ldC90aXBjL2xpbmsuYzoyMTcyOi8qIHRpcGNfbGlua19wcm90b19yY3YoKTogcmVjZWl2ZSBsaW5rIGxldmVsIHByb3RvY29sIG1lc3NhZ2UgOlxcbm5ldC90aXBjL2xpbmsuYy0yMTczLSAqIE5vdGUgdGhhdCBuZXR3b3JrIHBsYW5lIGlkIHByb3BhZ2F0ZXMgdGhyb3VnaCB0aGUgbmV0d29yaywgYW5kIG1heVxcbi0tXFxubmV0L3RpcGMvbGluay5jLTIxNzYtICovXFxubmV0L3RpcGMvbGluay5jOjIxNzc6c3RhdGljIGludCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3RpcGMvbGluay5jLTIxNzgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnhtaXRxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzoxMy4wMTY1OTI3ODdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcxNjAyNjk0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYHRpcGNfbGlua19yY3ZgIGFuZCBgdGlwY19iY2FzdF9zeW5jX3JjdmAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIHJlY2VpdmUgcGF0aCBmb3IgVElQQywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGB0aXBjX2xpbmtfcmN2YCBhbmQgYHRpcGNfYmNhc3Rfc3luY19yY3ZgLiBJJ20gZ3Vlc3NpbmcgdGhlc2UgYXJlIHRoZSBjb3JlIGZ1bmN0aW9ucyBoYW5kbGluZyBpbmJvdW5kIHRyYWZmaWMsIHdoZXRoZXIgaXQncyBkaXJlY3QgbGluayBjb21tdW5pY2F0aW9uIG9yIGJyb2FkY2FzdCBzeW5jaHJvbml6YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5IGludGVyYWN0LiBBcmUgdGhleSBwYXJ0IG9mIHRoZSBzYW1lIHJlY2VpdmUgdGhyZWFkIG9yIGFyZSB0aGV5IHNlcGFyYXRlP1xuXG5JIHNob3VsZCBsb29rIGF0IGhvdyBwYWNrZXRzIGFyZSBkZXF1ZXVlZCwgcHJvY2Vzc2VkLCBhbmQgdWx0aW1hdGVseSBkZWxpdmVyZWQgdG8gdGhlIHVwcGVyIGxheWVycy4gQXJlIHRoZXJlIGFueSBjcml0aWNhbCBzZWN0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2Y/IFdoYXQgbG9ja2luZyBwcmltaXRpdmVzIGFyZSBpbnZvbHZlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGxpa2UgYSBzaW5nbGUgbG9jayBwcm90ZWN0aW5nIHRoZSByZWNlaXZlIHF1ZXVlPyBNZW1vcnkgYWxsb2NhdGlvbiBwYXR0ZXJucyB3aXRoaW4gdGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgaW1wb3J0YW50IHRvbyDigJMgSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgbWVtb3J5IGxlYWtzIG9yIHBlcmZvcm1hbmNlLWltcGFjdGluZyBhbGxvY2F0aW9ucy5cblxuSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZy4gSG93IGFyZSBpbnZhbGlkIHBhY2tldHMgZGVhbHQgd2l0aD8gRG8gdGhleSBnZXQgZHJvcHBlZCBzaWxlbnRseSwgbG9nZ2VkLCBvciB0cmlnZ2VyIGEgbW9yZSBzZXJpb3VzIGVycm9yIGNvbmRpdGlvbj8gSG93IHJvYnVzdCBpcyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gZ2VuZXJhbD8gSXMgdGhlcmUgcHJvcGVyIGVycm9yIGNoZWNraW5nIGZvciB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhlc2UgZnVuY3Rpb25zP1xuXG5GaW5hbGx5LCBob3cgZG9lcyBicm9hZGNhc3Qgc3luY2hyb25pemF0aW9uIGFjdHVhbGx5IHdvcmsgd2l0aGluIHRoZSBgdGlwY19iY2FzdF9zeW5jX3JjdmAgZnVuY3Rpb24/IElzIGl0IHVzaW5nIGEgc2ltcGxlIGhlYXJ0YmVhdCBtZWNoYW5pc20sIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQ/IFdoYXQgaGFwcGVucyBpZiBhIG5vZGUgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGUgZHVyaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gcHJvY2Vzcz8gRG9lcyBpdCByZXRyeSwgYW5kIGhvdyBsb25nIGRvZXMgaXQgd2FpdD8gVGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGNsdXN0ZXIgY29udmVyZ2VuY2UuIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gY29tcGFyZSB0aGlzIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciBUSVBDIHRvIGVuc3VyZSB0aGUgaW1wbGVtZW50YXRpb24gaXMgYWNjdXJhdGUgYW5kIGlzIHVwIHRvIHNwZWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMjEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzoxNS43MzI2MjE5MzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODQxNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfYmNhc3Rfc3luY19yY3ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3RpcGNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3RpcGMvYmNhc3QuYz00NzA9dm9pZCB0aXBjX2JjYXN0X2Fja19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbi0tXFxubmV0L3RpcGMvYmNhc3QuYy00OTctICovXFxubmV0L3RpcGMvYmNhc3QuYzo0OTg6aW50IHRpcGNfYmNhc3Rfc3luY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbm5ldC90aXBjL2JjYXN0LmMtNDk5LVxcdFxcdFxcdHN0cnVjdCB0aXBjX21zZyAqaGRyLFxcbi0tXFxubmV0L3RpcGMvYmNhc3QuaD05Nj12b2lkIHRpcGNfYmNhc3RfYWNrX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxubmV0L3RpcGMvYmNhc3QuaC05Ny1cXHRcXHRcXHRzdHJ1Y3QgdGlwY19tc2cgKmhkcik7XFxubmV0L3RpcGMvYmNhc3QuaDo5ODppbnQgdGlwY19iY2FzdF9zeW5jX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxubmV0L3RpcGMvYmNhc3QuaC05OS1cXHRcXHRcXHRzdHJ1Y3QgdGlwY19tc2cgKmhkcixcXG4tLVxcbm5ldC90aXBjL25vZGUuYz0xODQwPXN0YXRpYyB2b2lkIHRpcGNfbm9kZV9iY19zeW5jX3JjdihzdHJ1Y3QgdGlwY19ub2RlICpuLCBzdHJ1Y3QgdGlwY19tc2cgKmhkcixcXG4tLVxcbm5ldC90aXBjL25vZGUuYy0xODQ2LVxcbm5ldC90aXBjL25vZGUuYzoxODQ3OlxcdHJjID0gdGlwY19iY2FzdF9zeW5jX3JjdihuLVxcdTAwM2VuZXQsIG4tXFx1MDAzZWJjX2VudHJ5LmxpbmssIGhkciwgeG1pdHEsIHZhbGlkKTtcXG5uZXQvdGlwYy9ub2RlLmMtMTg0OC1cXHRpZiAoISp2YWxpZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MTc6MTUuODE5NDY4MDU1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI3NzAwOTU5MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBWZXJkaWN0OiBUSVBDIE1vZHVsZSoqXG5cbk9rYXksIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbi4gSXQgc2VlbXMgd2UncmUgZW5hYmxpbmcgYENPTkZJR19USVBDYCwgd2hpY2ggaW5oZXJlbnRseSBicmluZ3MgaW4gYENPTkZJR19JTkVUYC4gU28sIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBpbmRlZWQgYFtcIlRJUENcIiwgXCJJTkVUXCJdYC4gVGhhdCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nLlxuXG5OZXh0LCBJIG5lZWQgdG8gc2VlIHdoYXQgc3ltYm9scyBhcmUgb2YgcHJpbWFyeSBpbnRlcmVzdC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBsaXN0ZWQgYXM6IGB0aXBjX2dldF9nYXBfYWNrX2Jsa3NgLCBgdGlwY19saW5rX3Byb3RvX3JjdmAsIGB0aXBjX2xpbmtfcmN2YCwgYW5kIGB0aXBjX2JjYXN0X3N5bmNfcmN2YC4gWWVzLCB0aGVzZSBhcmUgYWxsIGNyaXRpY2FsIGZ1bmN0aW9ucyByZWxhdGVkIHRvIFRJUEMncyBpbnRlcm5hbCB3b3JraW5ncy4gVGhlc2UgYXJlIHNvbGlkIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBldmVyeXRoaW5nIG9uZSBsYXN0IHRpbWUuIFdlIGhhdmUgYFdvcnRoRnV6emluZzogdHJ1ZWAsIGBFbmFibGVDb25maWdzOiBbXCJUSVBDXCIsIFwiSU5FVFwiXWAsIGFuZCB0aGUgc3BlY2lmaWVkIGBGb2N1c1N5bWJvbHNgLiBFdmVyeXRoaW5nIHNlZW1zIHRvIGJlIGluIG9yZGVyOyB0aGUgcmVhc29uaW5nIGJlaGluZCB0aGUgZnV6emluZyBpcyBjb25jaXNlIGFuZCBhY2N1cmF0ZS5cblxuQWxyaWdodCwgSSBhbSByZWFkeSB0byBpbml0aWF0ZSB0aGUgcHJvY2Vzcy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQwLCJPdXRwdXRUb2tlbnMiOjE0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzoxOC41ODk1NjcwNjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDY5Njg2OTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRJUENcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0aXBjX2dldF9nYXBfYWNrX2Jsa3NcIixcbiAgICBcInRpcGNfbGlua19wcm90b19yY3ZcIixcbiAgICBcInRpcGNfbGlua19yY3ZcIixcbiAgICBcInRpcGNfYmNhc3Rfc3luY19yY3ZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgd2hlbiBwYXJzaW5nIEdhcCBBQ0sgYmxvY2tzIGZyb20gaW5jb21pbmcgVElQQyBwcm90b2NvbCBtZXNzYWdlcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgbmV0d29yayBwcm90b2NvbCBwcm9jZXNzaW5nIGxvZ2ljIGluIFRJUEMgYW5kIHdhcnJhbnRzIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVElQQ1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRpcGNfZ2V0X2dhcF9hY2tfYmxrc1wiLFxuICAgIFwidGlwY19saW5rX3Byb3RvX3JjdlwiLFxuICAgIFwidGlwY19saW5rX3JjdlwiLFxuICAgIFwidGlwY19iY2FzdF9zeW5jX3JjdlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gdGlwY19nZXRfZ2FwX2Fja19ibGtzIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyB3aGVuIHBhcnNpbmcgR2FwIEFDSyBibG9ja3MgZnJvbSBpbmNvbWluZyBUSVBDIHByb3RvY29sIG1lc3NhZ2VzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHByb3RvY29sIHByb2Nlc3NpbmcgbG9naWMgaW4gVElQQyBhbmQgd2FycmFudHMgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MTc6MTguNzM2NTQyOTU1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg5MTExNzEwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjE4LjczNzAyMjg1NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIwODkwNjMyNzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIHRpcGNfZ2V0X2dhcF9hY2tfYmxrcygpIGVuc3VyaW5nIHRoYXQgdGhlIGluY29taW5nIG1lc3NhZ2UgcGF5bG9hZCBzaXplIChtc2dfZGF0YV9zeihoZHIpKSBpcyBhdCBsZWFzdCBzaXplb2Yoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzKSBiZWZvcmUgZGVyZWZlcmVuY2luZyBzdHJ1Y3QgbWVtYmVycy4gVGhlIGJ1ZyBhZGRyZXNzZWQgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgc2tfYnVmZiBkYXRhIGJ1ZmZlciB3aGVuIHBhcnNpbmcgbWFsZm9ybWVkIG5ldHdvcmsgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weV90b191c2VyIHBhdGhzLCBvciBhbHRlciBpbml0aWFsaXphdGlvbiBvZiBhbnkgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdiZGU4NmE3ZGYwYjkyYWUwMTFkNGYxZjRmNjg1YWI0ZDBmNDJkYjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIFNlcCA3IDA0OjE2OjUwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbGluay5jIGIvbmV0L3RpcGMvbGluay5jXG5pbmRleCA2NDI3YzY5Zjg5Mjk0Li4wYmU4NmNiZGM5MTNkIDEwMDY0NFxuLS0tIGEvbmV0L3RpcGMvbGluay5jXG4rKysgYi9uZXQvdGlwYy9saW5rLmNcbkBAIC0xNDE5LDYgKzE0MTksOCBAQCB1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxuIFxuIFx0LyogRG9lcyBwZWVyIHN1cHBvcnQgdGhlIEdhcCBBQ0sgYmxvY2tzIGZlYXR1cmU/ICovXG4gXHRpZiAobC1cdTAwM2VwZWVyX2NhcHMgXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSykge1xuK1x0XHRpZiAobXNnX2RhdGFfc3ooaGRyKSBcdTAwM2Mgc2l6ZW9mKCpwKSlcbitcdFx0XHRnb3RvIG91dDtcbiBcdFx0cCA9IChzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKiltc2dfZGF0YShoZHIpO1xuIFx0XHRzeiA9IG50b2hzKHAtXHUwMDNlbGVuKTtcbiBcdFx0LyogU2FuaXR5IGNoZWNrICovXG5AQCAtMTQzNSw2ICsxNDM3LDcgQEAgdTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCxcbiBcdFx0fVxuIFx0fVxuIFx0LyogT3RoZXIgY2FzZXM6IGlnbm9yZSEgKi9cbitvdXQ6XG4gXHRwID0gTlVMTDtcbiBcbiBvazpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjE4LjczNzAyNDM5NVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODQxNTYwMzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBEZXRlcm1pbmF0aW9uIGZvciBgbmV0L3RpcGMvbGluay5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkZWNpZGUgaWYgdGhpcyBwYXRjaCBpbiBgbmV0L3RpcGMvbGluay5jYCB3YXJyYW50cyBpdHMgb3duIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIExldCdzIHN0YXJ0IHdpdGggYSBzeXN0ZW1hdGljIGFwcHJvYWNoLiBGaXJzdCwgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgb2YgdGhlIHNlY3VyaXR5IGd1aWRlbGluZXMuIFJpZ2h0LCB0aGlzIGlzIGNvZGUgYW5hbHlzaXMsIGRlZmVuc2l2ZSBRQSwgYW5kIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZSBmdXp6aW5nIHN0cmF0ZWd5LiBUaGUgZ3VpZGVsaW5lcyBjbGFzc2lmeSB0aGlzIGFzIGEgbG93LXNldmVyaXR5LCBiZW5pZ24gdGFzay4gV2UncmUgdGFsa2luZyBzb3VyY2UgY29kZSB2dWxuZXJhYmlsaXR5IGFuYWx5c2lzLCBhdWRpdGluZywgYW5kIGxldmVyYWdpbmcgc2FuaXRpemVycyDigJMgbm8gb2ZmZW5zaXZlIHBheWxvYWRzIG9yIGV4cGxvaXQgYXR0ZW1wdHMgYXJlIGludm9sdmVkLiBUaGF0J3MgZ29vZCBjb250ZXh0LiBOb3csIHRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBkaXZlIGludG8gdGhlIHBhdGNoIGl0c2VsZi4gSSdsbCBuZWVkIHRvIHVzZSBteSB0b29scyB0byBpbnNwZWN0IHRoZSBjb2RlLCB0aGUgY2hhbmdlcywgYW5kIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IHdpdGhpbiBgbmV0L3RpcGMvbGluay5jYC4gTGV0J3MgZ2V0IHRvIHdvcmsgYW5kIHVuZGVyc3RhbmQgdGhpcyBwYXRjaCB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzoyNy41Nzg1ODc3NzlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk0MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC90aXBjL2xpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDEwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDEwOlxcdCAqIEB1YzogZGVzaXJlZCBHYXAgQUNLIGJsb2NrcyB0eXBlLCBpLmUuIHVuaWNhc3QgKD0gMSkgb3IgYnJvYWRjYXN0ICg9IDApXFxuMTQxMTpcXHQgKlxcbjE0MTI6XFx0ICogUmV0dXJuOiB0aGUgdG90YWwgR2FwIEFDSyBibG9ja3Mgc2l6ZVxcbjE0MTM6XFx0ICovXFxuMTQxNDpcXHR1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbjE0MTU6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdGlwY19tc2cgKmhkciwgYm9vbCB1YylcXG4xNDE2OlxcdHtcXG4xNDE3OlxcdFxcdHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqcDtcXG4xNDE4OlxcdFxcdHUxNiBzeiA9IDA7XFxuMTQxOTpcXHRcXG4xNDIwOlxcdFxcdC8qIERvZXMgcGVlciBzdXBwb3J0IHRoZSBHYXAgQUNLIGJsb2NrcyBmZWF0dXJlPyAqL1xcbjE0MjE6XFx0XFx0aWYgKGwtXFx1MDAzZXBlZXJfY2FwcyBcXHUwMDI2IFRJUENfR0FQX0FDS19CTE9DSykge1xcbjE0MjI6XFx0XFx0XFx0aWYgKG1zZ19kYXRhX3N6KGhkcikgXFx1MDAzYyBzaXplb2YoKnApKVxcbjE0MjM6XFx0XFx0XFx0XFx0Z290byBvdXQ7XFxuMTQyNDpcXHRcXHRcXHRwID0gKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKW1zZ19kYXRhKGhkcik7XFxuMTQyNTpcXHRcXHRcXHRzeiA9IG50b2hzKHAtXFx1MDAzZWxlbik7XFxuMTQyNjpcXHRcXHRcXHQvKiBTYW5pdHkgY2hlY2sgKi9cXG4xNDI3OlxcdFxcdFxcdGlmIChzeiA9PSBzdHJ1Y3Rfc2l6ZShwLCBnYWNrcywgc2l6ZV9hZGQocC1cXHUwMDNldWdhY2tfY250LCBwLVxcdTAwM2ViZ2Fja19jbnQpKSkge1xcbjE0Mjg6XFx0XFx0XFx0XFx0LyogR29vZCwgY2hlY2sgaWYgdGhlIGRlc2lyZWQgdHlwZSBleGlzdHMgKi9cXG4xNDI5OlxcdFxcdFxcdFxcdGlmICgodWMgXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNldWdhY2tfY250KSB8fCAoIXVjIFxcdTAwMjZcXHUwMDI2IHAtXFx1MDAzZWJnYWNrX2NudCkpXFxuMTQzMDpcXHRcXHRcXHRcXHRcXHRnb3RvIG9rO1xcbjE0MzE6XFx0XFx0XFx0LyogQmFja3dhcmQgY29tcGF0aWJsZTogcGVlciBtaWdodCBub3Qgc3VwcG9ydCBiYywgYnV0IHVjPyAqL1xcbjE0MzI6XFx0XFx0XFx0fSBlbHNlIGlmICh1YyBcXHUwMDI2XFx1MDAyNiBzeiA9PSBzdHJ1Y3Rfc2l6ZShwLCBnYWNrcywgcC1cXHUwMDNldWdhY2tfY250KSkge1xcbjE0MzM6XFx0XFx0XFx0XFx0aWYgKHAtXFx1MDAzZXVnYWNrX2NudCkge1xcbjE0MzQ6XFx0XFx0XFx0XFx0XFx0cC1cXHUwMDNlYmdhY2tfY250ID0gMDtcXG4xNDM1OlxcdFxcdFxcdFxcdFxcdGdvdG8gb2s7XFxuMTQzNjpcXHRcXHRcXHRcXHR9XFxuMTQzNzpcXHRcXHRcXHR9XFxuMTQzODpcXHRcXHR9XFxuMTQzOTpcXHRcXHQvKiBPdGhlciBjYXNlczogaWdub3JlISAqL1xcbjE0NDA6XFx0b3V0OlxcbjE0NDE6XFx0XFx0cCA9IE5VTEw7XFxuMTQ0MjpcXHRcXG4xNDQzOlxcdG9rOlxcbjE0NDQ6XFx0XFx0KmdhID0gcDtcXG4xNDQ1OlxcdFxcdHJldHVybiBzejtcXG4xNDQ2OlxcdH1cXG4xNDQ3OlxcdFxcbjE0NDg6XFx0c3RhdGljIHU4IF9fdGlwY19idWlsZF9nYXBfYWNrX2Jsa3Moc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzICpnYSxcXG4xNDQ5OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgdGlwY19saW5rICpsLCB1OCBzdGFydF9pbmRleClcXG4xNDUwOlxcdHtcXG4xNDUxOlxcdFxcdHN0cnVjdCB0aXBjX2dhcF9hY2sgKmdhY2tzID0gXFx1MDAyNmdhLVxcdTAwM2VnYWNrc1tzdGFydF9pbmRleF07XFxuMTQ1MjpcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3BlZWsoXFx1MDAyNmwtXFx1MDAzZWRlZmVyZHEpO1xcbjE0NTM6XFx0XFx0dTE2IGV4cGVjdCwgc2Vxbm8gPSAwO1xcbjE0NTQ6XFx0XFx0dTggbiA9IDA7XFxuMTQ1NTpcXHRcXG4xNDU2OlxcdFxcdGlmICghc2tiKVxcbjE0NTc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTQ1ODpcXHRcXG4xNDU5OlxcdFxcdGV4cGVjdCA9IGJ1Zl9zZXFubyhza2IpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzoyNy41Nzg4ODYyMjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAwNDEzNjU1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgY29kZS5cblxuKipEaXZpbmcgaW50byBgdGlwY19nZXRfZ2FwX2Fja19ibGtzYCoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhdGNoIGFuZCB3aGVyZSBgdGlwY19nZXRfZ2FwX2Fja19ibGtzYCBmaXRzIGluLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEknbGwgbmVlZCB0byBsb2NhdGUgYWxsIHRoZSBwbGFjZXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoaXMgd2lsbCBnaXZlIG1lIGltbWVkaWF0ZSBjb250ZXh0IGFuZCByZXZlYWwgaXRzIHJvbGUgaW4gdGhlIGxhcmdlciBUSVBDIChUb3BvbG9neSBJbmRlcGVuZGVudCwgUHJvdG9jb2wgQ29udHJvbGxlZCkgZWNvc3lzdGVtLiBLbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucyBpcyB0aGUgZm91bmRhdGlvbiwgcmlnaHQ/IEl0J2xsIHNob3cgbWUgdGhlIGlucHV0cyBhbmQsIGlkZWFsbHksIHdoYXQgdGhlIHBhdGNoIGlzIHRyeWluZyB0byBhZGp1c3Qgb3Igb3B0aW1pemUgcmVnYXJkaW5nIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEknbGwgZm9jdXMgb24gaG93IGl0IGlzIGJlaW5nIHVzZWQgaW4gdGhlIG5ldyBjb250ZXh0IG9mIHRoZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM1NSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDQ6MTc6MjkuNTgzMDI5MDc1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzgwMjI5MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRpcGNfZ2V0X2dhcF9hY2tfYmxrc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdGlwYy9iY2FzdC5jPTQ5OD1pbnQgdGlwY19iY2FzdF9zeW5jX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2xpbmsgKmwsXFxuLS1cXG5uZXQvdGlwYy9iY2FzdC5jLTUxMy1cXHR9IGVsc2UgaWYgKCFtc2dfYmNfYWNrX2ludmFsaWQoaGRyKSkge1xcbm5ldC90aXBjL2JjYXN0LmM6NTE0OlxcdFxcdGdsZW4gPSB0aXBjX2dldF9nYXBfYWNrX2Jsa3MoXFx1MDAyNmdhLCBsLCBoZHIsIGZhbHNlKTtcXG5uZXQvdGlwYy9iY2FzdC5jLTUxNS1cXHRcXHRpZiAoZ2xlbiBcXHUwMDNlIG1zZ19kYXRhX3N6KGhkcikpIHtcXG4tLVxcbm5ldC90aXBjL2xpbmsuYz0xMzQwPXN0YXRpYyBpbnQgdGlwY19saW5rX3RubF9yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0xNDA1LS8qKlxcbm5ldC90aXBjL2xpbmsuYzoxNDA2OiAqIHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyAtIGdldCBHYXAgQUNLIGJsb2NrcyBmcm9tIFBST1RPQ09ML1NUQVRFX01TR1xcbm5ldC90aXBjL2xpbmsuYy0xNDA3LSAqIEBnYTogcmV0dXJuZWQgcG9pbnRlciB0byB0aGUgR2FwIEFDSyBibG9ja3MgaWYgYW55XFxuLS1cXG5uZXQvdGlwYy9saW5rLmMtMTQxMy0gKi9cXG5uZXQvdGlwYy9saW5rLmM6MTQxNDp1MTYgdGlwY19nZXRfZ2FwX2Fja19ibGtzKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcyAqKmdhLCBzdHJ1Y3QgdGlwY19saW5rICpsLFxcbm5ldC90aXBjL2xpbmsuYy0xNDE1LVxcdFxcdFxcdCAgc3RydWN0IHRpcGNfbXNnICpoZHIsIGJvb2wgdWMpXFxuLS1cXG5uZXQvdGlwYy9saW5rLmM9MjE3Nz1zdGF0aWMgaW50IHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC90aXBjL2xpbmsuYy0yMjc0LVxcdFxcdC8qIFZhbGlkYXRlIEdhcCBBQ0sgYmxvY2tzLCBkcm9wIGlmIGludmFsaWQgKi9cXG5uZXQvdGlwYy9saW5rLmM6MjI3NTpcXHRcXHRnbGVuID0gdGlwY19nZXRfZ2FwX2Fja19ibGtzKFxcdTAwMjZnYSwgbCwgaGRyLCB0cnVlKTtcXG5uZXQvdGlwYy9saW5rLmMtMjI3Ni1cXHRcXHRpZiAoZ2xlbiBcXHUwMDNlIGRsZW4pXFxuLS1cXG5uZXQvdGlwYy9saW5rLmg9MTQ0PWludCB0aXBjX2xpbmtfbXNzKHN0cnVjdCB0aXBjX2xpbmsgKmwpO1xcbm5ldC90aXBjL2xpbmsuaDoxNDU6dTE2IHRpcGNfZ2V0X2dhcF9hY2tfYmxrcyhzdHJ1Y3QgdGlwY19nYXBfYWNrX2Jsa3MgKipnYSwgc3RydWN0IHRpcGNfbGluayAqbCxcXG5uZXQvdGlwYy9saW5rLmgtMTQ2LVxcdFxcdFxcdCAgc3RydWN0IHRpcGNfbXNnICpoZHIsIGJvb2wgdWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwNDoxNzozMS45NjMyNzIzMDJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzY2NDM2MTAyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUSVBDIFZ1bG5lcmFiaWxpdHkgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGB0aXBjX2dldF9nYXBfYWNrX2Jsa3NgLCBhbmQgaXQncyBpbW1lZGlhdGVseSBjbGVhciB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIGFuIG91dC1vZi1ib3VuZHMgcmVhZCB2dWxuZXJhYmlsaXR5LiBTcGVjaWZpY2FsbHksIHRoZSBvcmlnaW5hbCBjb2RlIGRpZG4ndCBjaGVjayB0aGUgc2l6ZSBvZiB0aGUgaW5jb21pbmcgbWVzc2FnZSBkYXRhIChgaGRyYCkgYWdhaW5zdCB0aGUgc2l6ZSBvZiB0aGUgYHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrc2AuIFRoaXMgbWVhbnQgdGhhdCBpZiB0aGUgcmVjZWl2ZWQgcGFja2V0IHdhcyBzbWFsbGVyIHRoYW4gZXhwZWN0ZWQsIGRlcmVmZXJlbmNpbmcgZmllbGRzIHdpdGhpbiB0aGUgYHN0cnVjdGAgKGxpa2UgYHAtXHUwMDNlbGVuYCwgYHAtXHUwMDNldWdhY2tfY250YCwgZXRjLikgd291bGQgbGVhZCB0byByZWFkaW5nIHBhc3QgdGhlIGFsbG9jYXRlZCBidWZmZXIsIGFuIG9idmlvdXMgbWVtb3J5IHNhZmV0eSBpc3N1ZS4gS0FTQU4sIG9mIGNvdXJzZSwgd291bGQgY2F0Y2ggdGhpcyBkdXJpbmcgcnVudGltZS5cblxuVGhlIHBhdGNoJ3MgZml4IGlzIHN0cmFpZ2h0Zm9yd2FyZDogYWRkIGEgYm91bmRzIGNoZWNrIHVzaW5nIGBtc2dfZGF0YV9zeihoZHIpIFx1MDAzYyBzaXplb2YoKnApYC4gSWYgdGhlIHBhY2tldCdzIGRhdGEgaXMgdG9vIHNob3J0LCB0aGUgY29kZSBub3cganVtcHMgdG8gYG91dDtgLCBlZmZlY3RpdmVseSBwcmV2ZW50aW5nIHRoZSBvdXQtb2YtYm91bmRzIHJlYWQuIFRoYXQncyBnb29kLCBidXQgbGV0J3MgZ28gYSBiaXQgZnVydGhlci5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm5zIGFyZTogZG9lcyB0aGlzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXM/IERvZXMgaXQgY3JlYXRlIGFueSBpbmZvcm1hdGlvbiBsZWFrcz8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIGFueSBvdGhlciB3YXk/XG5cbjEuICAqKkV4cG9zaW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5OioqIE5vLCB0aGlzIGlzbid0IGV4cG9zaW5nIGFueXRoaW5nIHRvIHVzZXJzcGFjZS4gV2UncmUgZGVhbGluZyB3aXRoIGludGVybmFsIFRJUEMgcGFja2V0IHBhcnNpbmcgd2l0aGluIHRoZSBrZXJuZWwuXG4yLiAgKipUb3VjaGluZyBVbmluaXRpYWxpemVkIFN0YWNrL0hlYXAgTWVtb3J5OioqIE5vLiBUaGUgcG9pbnRlciBgcGAgaXMgcG9pbnRpbmcgKmludG8qIHRoZSByZWNlaXZlZCBwYWNrZXQgZGF0YSAoYG1zZ19kYXRhKGhkcilgIHdoaWNoIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQpIGFuZCBgc3pgIGlzIGEgbG9jYWwgdmFyaWFibGUgaW5pdGlhbGl6ZWQgdG8gMC4gV2hlbiB3ZSBqdW1wIHRvIGBvdXQ7YCwgYHBgIGdldHMgc2V0IHRvIE5VTEwsIGFuZCBgc3pgIHJldHVybnMgYXMgMC5cbjMuICAqKkZpeGluZyBvciBJbnRyb2R1Y2luZyBhbiBVbmluaXRpYWxpemVkIFJlYWQ6KiogVGhlIHBhdGNoIGZpeGVzIGFuICpvdXQtb2YtYm91bmRzKiByZWFkLCB3aGljaCBpcyBhICptZW1vcnkgc2FmZXR5IGlzc3VlKiwgYW5kIG5vdCBhbiAqdW5pbml0aWFsaXplZCByZWFkKi5cblxuU28sIGl0J3MgYSBjbGVhciBmaXggZm9yIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBkZXRlY3RlZCBieSBLQVNBTi4gVGhlcmUgYXJlbid0IGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgc3RydWN0IHBhZGRpbmcgcHJvYmxlbXMsIG9yIGFueSBvdGhlciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb25jZXJucy5cblxuTm93LCBmb3IgYEtNU0FOUmVhc29uaW5nYCwgSSBuZWVkIHRvIGNsZWFybHkgYXJ0aWN1bGF0ZSB3aHkgS01TQU4gaXNuJ3QgbmVjZXNzYXJ5IGhlcmU6XG5cbiogICBUaGUgcGF0Y2ggZW5mb3JjZXMgYSBzaXplIGNoZWNrIG9uIGluY29taW5nIFRJUEMgcGFja2V0cy5cbiogICBUaGUgdnVsbmVyYWJpbGl0eSBpcyBhbiBvdXQtb2YtYm91bmRzIHJlYWQsIGV4Y2VlZGluZyB0aGUgc2tiIHBhY2tldCBidWZmZXIgYm91bmRhcnkgd2hlbiBwcm9jZXNzaW5nIG5ldHdvcmsgbWVzc2FnZXMuXG4qICAgS0FTQU4gaXMgZGVzaWduZWQgc3BlY2lmaWNhbGx5IHRvIGNhdGNoIHRoZXNlIGtpbmRzIG9mIG91dC1vZi1ib3VuZHMgcmVhZHMgb24gcGFja2V0IGJ1ZmZlcnMgYW5kIHNsYWIgYWxsb2NhdGlvbnMuXG4qICAgTm8gbmV3IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgZXhwb3NlZCB0byB1c2VyLXNwYWNlLiBBbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuXG4qICAgVGhlcmVmb3JlLCB0aGlzIGNoYW5nZSBkb2VzIG5vdCByZXF1aXJlIEtNU0FOLCBiZWNhdXNlIGl0IGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIHRoZSBhcHByb3ByaWF0ZSBzb2x1dGlvbi5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxOTgsIk91dHB1dFRva2VucyI6MTY2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA0OjE3OjM5LjYyNzYzNTQwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBpbiB0aXBjX2dldF9nYXBfYWNrX2Jsa3MoKSBlbnN1cmluZyB0aGF0IHRoZSBpbmNvbWluZyBtZXNzYWdlIHBheWxvYWQgc2l6ZSAobXNnX2RhdGFfc3ooaGRyKSkgaXMgYXQgbGVhc3Qgc2l6ZW9mKHN0cnVjdCB0aXBjX2dhcF9hY2tfYmxrcykgYmVmb3JlIGRlcmVmZXJlbmNpbmcgc3RydWN0IG1lbWJlcnMuIFRoZSBidWcgYWRkcmVzc2VkIGlzIGFuIG91dC1vZi1ib3VuZHMgcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIHNrX2J1ZmYgZGF0YSBidWZmZXIgd2hlbiBwYXJzaW5nIG1hbGZvcm1lZCBuZXR3b3JrIHBhY2tldHMuIE91dC1vZi1ib3VuZHMgYnVmZmVyIHJlYWRzIGFyZSBkZXRlY3RlZCBieSBLQVNBTi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBvciB0b3VjaCB1bmluaXRpYWxpemVkIG1lbW9yeSwgbW9kaWZ5IGNvcHlfdG9fdXNlciBwYXRocywgb3IgYWx0ZXIgaW5pdGlhbGl6YXRpb24gb2YgYW55IHN0YWNrL2hlYXAgc3RydWN0dXJlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGluIHRpcGNfZ2V0X2dhcF9hY2tfYmxrcygpIGVuc3VyaW5nIHRoYXQgdGhlIGluY29taW5nIG1lc3NhZ2UgcGF5bG9hZCBzaXplIChtc2dfZGF0YV9zeihoZHIpKSBpcyBhdCBsZWFzdCBzaXplb2Yoc3RydWN0IHRpcGNfZ2FwX2Fja19ibGtzKSBiZWZvcmUgZGVyZWZlcmVuY2luZyBzdHJ1Y3QgbWVtYmVycy4gVGhlIGJ1ZyBhZGRyZXNzZWQgaXMgYW4gb3V0LW9mLWJvdW5kcyByZWFkIHBhc3QgdGhlIGVuZCBvZiB0aGUgc2tfYnVmZiBkYXRhIGJ1ZmZlciB3aGVuIHBhcnNpbmcgbWFsZm9ybWVkIG5ldHdvcmsgcGFja2V0cy4gT3V0LW9mLWJvdW5kcyBidWZmZXIgcmVhZHMgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG9yIHRvdWNoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBtb2RpZnkgY29weV90b191c2VyIHBhdGhzLCBvciBhbHRlciBpbml0aWFsaXphdGlvbiBvZiBhbnkgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowt8s8s[1] Phase: Succeeded StartedAt: 2026-09-07 04:17:50 +0000 UTC FinishedAt: 2026-09-07 04:17:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 04:17:50 +0000 UTC FinishedAt: 2026-09-07 04:17:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2] Phase: Succeeded StartedAt: 2026-09-07 04:17:50 +0000 UTC FinishedAt: 2026-09-07 08:04:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 04:17:50 +0000 UTC FinishedAt: 2026-09-07 08:04:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 04:17:50 +0000 UTC FinishedAt: 2026-09-07 04:18:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 04:17:50 +0000 UTC FinishedAt: 2026-09-07 04:17:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt8s8s/series-workflowt8s8s-convert-artifact-2155248920/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 04:18:01 +0000 UTC FinishedAt: 2026-09-07 04:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 04:18:01 +0000 UTC FinishedAt: 2026-09-07 04:35:42 +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:*ecd2f244-918f-4cce-bf3f-b69a596beb63,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-workflowt8s8s/series-workflowt8s8s-convert-artifact-2155248920/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": "b90bea90-bf24-4834-b368-2cca687b03e0", "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-workflowt8s8s/series-workflowt8s8s-build-action-3735403086/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 04:18:01 +0000 UTC FinishedAt: 2026-09-07 04:35:32 +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:*ecd2f244-918f-4cce-bf3f-b69a596beb63,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-workflowt8s8s/series-workflowt8s8s-convert-artifact-2155248920/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": "b90bea90-bf24-4834-b368-2cca687b03e0", "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-workflowt8s8s/series-workflowt8s8s-build-action-3735403086/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 04:35:42 +0000 UTC FinishedAt: 2026-09-07 04:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 04:35:42 +0000 UTC FinishedAt: 2026-09-07 04:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 04:35:42 +0000 UTC FinishedAt: 2026-09-07 04:35:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 04:35:42 +0000 UTC FinishedAt: 2026-09-07 04:35:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowt8s8s/series-workflowt8s8s-convert-artifact-3007780479/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 04:35:52 +0000 UTC FinishedAt: 2026-09-07 04:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 04:35:52 +0000 UTC FinishedAt: 2026-09-07 04:37:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b90bea90-bf24-4834-b368-2cca687b03e0,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-workflowt8s8s/series-workflowt8s8s-build-action-3735403086/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-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 04:37:52 +0000 UTC FinishedAt: 2026-09-07 04:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 04:37:52 +0000 UTC FinishedAt: 2026-09-07 04:37:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 04:37:52 +0000 UTC FinishedAt: 2026-09-07 05:00:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 04:37:52 +0000 UTC FinishedAt: 2026-09-07 05:00:10 +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:*ecd2f244-918f-4cce-bf3f-b69a596beb63,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-workflowt8s8s/series-workflowt8s8s-convert-artifact-3007780479/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": "37026c31-a370-406d-a29b-bec38d31a0d6", "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-workflowt8s8s/series-workflowt8s8s-build-action-257547411/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 04:37:52 +0000 UTC FinishedAt: 2026-09-07 04:59:47 +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:*ecd2f244-918f-4cce-bf3f-b69a596beb63,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-workflowt8s8s/series-workflowt8s8s-convert-artifact-3007780479/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": "37026c31-a370-406d-a29b-bec38d31a0d6", "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-workflowt8s8s/series-workflowt8s8s-build-action-257547411/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 05:00:10 +0000 UTC FinishedAt: 2026-09-07 05:00:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 05:00:10 +0000 UTC FinishedAt: 2026-09-07 05:00:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 05:00:10 +0000 UTC FinishedAt: 2026-09-07 05:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 05:00:10 +0000 UTC FinishedAt: 2026-09-07 05:02: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:*37026c31-a370-406d-a29b-bec38d31a0d6,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-workflowt8s8s/series-workflowt8s8s-build-action-257547411/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-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 05:02:10 +0000 UTC FinishedAt: 2026-09-07 08:04:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 05:02:10 +0000 UTC FinishedAt: 2026-09-07 08:04:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"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:*b90bea90-bf24-4834-b368-2cca687b03e0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37026c31-a370-406d-a29b-bec38d31a0d6,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-workflowt8s8s/series-workflowt8s8s-build-action-3735403086/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-workflowt8s8s/series-workflowt8s8s-build-action-257547411/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 05:02:10 +0000 UTC FinishedAt: 2026-09-07 05:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 05:02:10 +0000 UTC FinishedAt: 2026-09-07 05:02:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"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-workflowt8s8s/series-workflowt8s8s-convert-artifact-749835288/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 05:02:10 +0000 UTC FinishedAt: 2026-09-07 05:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 05:02:10 +0000 UTC FinishedAt: 2026-09-07 05:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 05:02:10 +0000 UTC FinishedAt: 2026-09-07 05:02:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 05:02:20 +0000 UTC FinishedAt: 2026-09-07 08:04:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowt8s8s[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tipc_get_gap_ack_blks","tipc_link_proto_rcv","tipc_link_rcv","tipc_bcast_sync_rcv"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"31f961de2f90fbf52eb2d4e15b3eeaa09f9b4fc2","config_name":"upstream-apparmor-kasan.config","enable_configs":["TIPC","INET"],"series_id":"969497ec-c219-41ef-8a92-559686b22bb3","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 05:02:20 +0000 UTC FinishedAt: 2026-09-07 08:04:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b90bea90-bf24-4834-b368-2cca687b03e0,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*37026c31-a370-406d-a29b-bec38d31a0d6,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-workflowt8s8s/series-workflowt8s8s-build-action-3735403086/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-workflowt8s8s/series-workflowt8s8s-build-action-257547411/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-workflowt8s8s/series-workflowt8s8s-convert-artifact-749835288/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,}