Name: series-workflowwk2sz Phase: Succeeded StartedAt: 2026-09-03 17:40:48 +0000 UTC FinishedAt: 2026-09-03 21:39:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[0] Phase: Succeeded StartedAt: 2026-09-03 17:40:48 +0000 UTC FinishedAt: 2026-09-03 17:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 17:40:48 +0000 UTC FinishedAt: 2026-09-03 17:59:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "5a3f7a683aee56e1f15c9d53041f3236767eaae7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "SMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "5a3f7a683aee56e1f15c9d53041f3236767eaae7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "SMP" ], "series_id": "39d0a82a-0723-4f47-97a9-3abf72d9d8d4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "napi_threaded_poll_loop", "napi_threaded_poll", "run_backlog_napi", "napi_set_threaded" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYXBpX3RocmVhZGVkX3BvbGxfbG9vcCYjMzQ7LAogICAgJiMzNDtuYXBpX3RocmVhZGVkX3BvbGwmIzM0OywKICAgICYjMzQ7cnVuX2JhY2tsb2dfbmFwaSYjMzQ7LAogICAgJiMzNDtuYXBpX3NldF90aHJlYWRlZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcCgpYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGNhbGwgYGNvbmRfcmVzY2hlZCgpYCB1bmNvbmRpdGlvbmFsbHkgb24gZXZlcnkgcGFzcyB0aHJvdWdoIHRoZSBsb29wLCByYXRoZXIgdGhhbiBvbmx5IHdoZW4gYHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xc2AgaXMgdHJ1ZS4gVGhpcyBpcyBhIHRhc2sgc2NoZWR1bGluZyAvIENQVSB5aWVsZGluZyBjaGFuZ2UgdG8gYXZvaWQgd2F0Y2hkb2cgd2FybmluZ3Mgd2hlbiBgbmFwaV90aHJlYWRfd2FpdCgpYCByZXR1cm5zIHdpdGhvdXQgc2NoZWR1bGluZy5cblxuVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCBkYXRhIGJ1ZmZlcnMsIGFsdGVyIHBhY2tldC9kYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNjaGVkdWxpbmcgYW5kIGNvb3BlcmF0aXZlIHlpZWxkIGJlaGF2aW9yIChjb25kX3Jlc2NoZWQpIGluIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKCkgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChuZXQvY29yZS9kZXYuYykuIFRoaXMgY29kZSBleGVjdXRlcyBpbiB0aHJlYWRlZCBOQVBJIGFuZCBiYWNrbG9nIHBvbGxpbmcga3RocmVhZHMgYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTc6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNzRkMzY2YTRkYzZjMjFjYjAxYWRhZjYyZmI4OGE1ODlhZjY2MmI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxNzo1Nzo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAzODMzNjg1OGMxNjhmLi41YzdmOGNkZjg0NDM1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzkyNCwxMSAmIzQzOzc5MjQsMTMgQEAgc3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdGdyb19mbHVzaF9ub3JtYWwoXHUwMDI2bmFwaS1cdTAwM2Vncm8sIEhaIFx1MDAzZT0gMTAwMCk7XG4gXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFxuLVx0XHQvKiBDYWxsIGNvbmRfcmVzY2hlZCBoZXJlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzLiAqL1xuLVx0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKSB7XG4mIzQzO1x0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxuIFx0XHRcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xuLVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogbmFwaV90aHJlYWRfd2FpdCgpIGNhbiByZXR1cm4gd2l0aG91dCBzY2hlZHVsaW5nLCBzbyB5aWVsZCBvblxuJiM0MztcdFx0ICogZXZlcnkgZXhpdCwgbm90IG9ubHkgd2hlbiB0aGUgbG9vcCBpdGVyYXRlcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4gXHRcdGlmICghcmVwb2xsKVxuIFx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYXBpX3RocmVhZGVkX3BvbGxfbG9vcCYjMzQ7LAogICAgJiMzNDtuYXBpX3RocmVhZGVkX3BvbGwmIzM0OywKICAgICYjMzQ7cnVuX2JhY2tsb2dfbmFwaSYjMzQ7LAogICAgJiMzNDtuYXBpX3NldF90aHJlYWRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzY2hlZHVsaW5nIGFuZCBjb29wZXJhdGl2ZSB5aWVsZCBiZWhhdmlvciAoY29uZF9yZXNjaGVkKSBpbiBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcCgpIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSAobmV0L2NvcmUvZGV2LmMpLiBUaGlzIGNvZGUgZXhlY3V0ZXMgaW4gdGhyZWFkZWQgTkFQSSBhbmQgYmFja2xvZyBwb2xsaW5nIGt0aHJlYWRzIGFuZCBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTc0ZDM2NmE0ZGM2YzIxY2IwMWFkYWY2MmZiODhhNTg5YWY2NjJiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTc6NTc6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDM4MzM2ODU4YzE2OGYuLjVjN2Y4Y2RmODQ0MzUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC03OTI0LDExICYjNDM7NzkyNCwxMyBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQlncm9fZmx1c2hfbm9ybWFsKCZhbXA7bmFwaS0mZ3Q7Z3JvLCBIWiAmZ3Q7PSAxMDAwKTsKIAkJbG9jYWxfYmhfZW5hYmxlKCk7CiAKLQkJLyogQ2FsbCBjb25kX3Jlc2NoZWQgaGVyZSB0byBhdm9pZCB3YXRjaGRvZyB3YXJuaW5ncy4gKi8KLQkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykgewomIzQzOwkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykKIAkJCXJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpOwotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCX0KJiM0MzsKJiM0MzsJCS8qIG5hcGlfdGhyZWFkX3dhaXQoKSBjYW4gcmV0dXJuIHdpdGhvdXQgc2NoZWR1bGluZywgc28geWllbGQgb24KJiM0MzsJCSAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuCiYjNDM7CQkgKi8KJiM0MzsJCWNvbmRfcmVzY2hlZCgpOwogCiAJCWlmICghcmVwb2xsKQogCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBjYXJlZnVsbHkgZXhhbWluaW5nIHRoaXMgcGF0Y2ggZm9yIGBuZXQvY29yZS9kZXYuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgdGhlIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgZnVuY3Rpb24sIHdoaWNoIHN1Z2dlc3RzIGl04oCZcyBkZWFsaW5nIHdpdGggbmV0d29yayBpbnRlcmZhY2UgaW50ZXJydXB0IGhhbmRsaW5nIGFuZCBob3cgd2UgZGVhbCB3aXRoIHRoZSBOQVBJIChOZXcgQVBJKSBwb2xsaW5nIG1lY2hhbmlzbS4gVGhlIGRpZmYgaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIGl0LgoKTG9va2luZyBhdCB0aGUgY29kZSBhcm91bmQgbGluZSA3OTI0LCBJIGNhbiBzZWUgdGhlIG9yaWdpbmFsIGxvZ2ljIGFuZCB0aGVuIHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSByZW9yZ2FuaXplZCB0aGUgY29uZGl0aW9uYWwgYGNvbmRfcmVzY2hlZCgpYCBjYWxsLiBQcmV2aW91c2x5LCBgY29uZF9yZXNjaGVkKClgIHdhcyBjYWxsZWQgb25seSBpZiBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgIHdlcmUgdHJ1ZSAoYW5kIGFmdGVyIGByY3Vfc29mdGlycV9xc19wZXJpb2RpY2ApLiBOb3cgdGhlIGBjb25kX3Jlc2NoZWQoKWAgY2FsbCBpcyAqYWx3YXlzKiBtYWRlLiBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGUgbW90aXZhdGlvbiBpcyB0byAmIzM0O2F2b2lkIHdhdGNoZG9nIHdhcm5pbmdzJiMzNDsgYW5kICYjMzQ7eWllbGQgb24gZXZlcnkgZXhpdC4mIzM0OyBUaGUgb3JpZ2luYWwgY29kZSBtYXkgaGF2ZSBiZWVuIGJsb2NraW5nIGZvciB0b28gbG9uZyBpbiBzb21lIGVkZ2UgY2FzZXMuIFRoZSBjb21tZW50IHJlZ2FyZGluZyBgbmFwaV90aHJlYWRfd2FpdCgpYCByZXR1cm5pbmcgd2l0aG91dCBzY2hlZHVsaW5nIGltcGxpZXMgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHByZXZlbnQgc3RhcnZhdGlvbiBvZiBvdGhlciB0aHJlYWRzIG9yIHByb2Nlc3NlcyBpZiB0aGUgTkFQSSBsb29wIGJlY29tZXMgYnVzeS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgZ29vZCBjaGFuZ2UsIGEgc3VidGxlIG9wdGltaXphdGlvbiBwZXJoYXBzLiBUaGUgd2F0Y2hkb2cgd2FybmluZ3MgYXJlIGEgY2x1ZSB0aGF0IHRoZSBvcmlnaW5hbCBsb2dpYyBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGxhdGVuY3kgb3IgZXZlbiBzeXN0ZW0gaGFuZ3MgdW5kZXIgaGVhdnkgbmV0d29yayBsb2FkLiBUaGlzIGNoYW5nZSBlc3NlbnRpYWxseSBhZGRzIGEgeWllbGQgcG9pbnQgdG8gdGhlIHBvbGwgbG9vcC4gSXQgbG9va3MgbGlrZSBpdCBjb3VsZCBpbXByb3ZlIG92ZXJhbGwgc3lzdGVtIHJlc3BvbnNpdmVuZXNzLCBldmVuIGlmIGl0IGNvbWVzIGF0IGEgc21hbGwgY29zdCBpbiB0aHJvdWdocHV0IHVuZGVyIGlkZWFsIGNvbmRpdGlvbnMuIEJ1dCB0aGUgZGV2aWwmIzM5O3MgaW4gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBrZWVwIGNvbnRleHQgaW4gbWluZCwgYW5kIGFsc28gdW5kZXJzdGFuZCB3aGV0aGVyIG9yIG5vdCB0aGlzIGNoYW5nZSB3aWxsIGhhdmUgYSBtZWFzdXJhYmxlIGltcGFjdCBvbiB0aGUgc3lzdGVtcyB0aGF0IHVzZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3OTAwOlx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjc5MDE6XHRcdFx0YnBmX25ldF9jdHggPSBicGZfbmV0X2N0eF9zZXQoXHUwMDI2X19icGZfbmV0X2N0eCk7XG43OTAyOlx0XG43OTAzOlx0XHRcdHNkID0gdGhpc19jcHVfcHRyKFx1MDAyNnNvZnRuZXRfZGF0YSk7XG43OTA0Olx0XHRcdHNkLVx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IHRydWU7XG43OTA1Olx0XG43OTA2Olx0XHRcdGhhdmUgPSBuZXRwb2xsX3BvbGxfbG9jayhuYXBpKTtcbjc5MDc6XHRcdFx0X19uYXBpX3BvbGwobmFwaSwgXHUwMDI2cmVwb2xsKTtcbjc5MDg6XHRcdFx0bmV0cG9sbF9wb2xsX3VubG9jayhoYXZlKTtcbjc5MDk6XHRcbjc5MTA6XHRcdFx0c2QtXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gZmFsc2U7XG43OTExOlx0XHRcdGJhcnJpZXIoKTtcbjc5MTI6XHRcbjc5MTM6XHRcdFx0aWYgKHNkX2hhc19ycHNfaXBpX3dhaXRpbmcoc2QpKSB7XG43OTE0Olx0XHRcdFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcbjc5MTU6XHRcdFx0XHRuZXRfcnBzX2FjdGlvbl9hbmRfaXJxX2VuYWJsZShzZCk7XG43OTE2Olx0XHRcdH1cbjc5MTc6XHRcdFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcbjc5MTg6XHRcdFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xuNzkxOTpcdFxuNzkyMDpcdFx0XHQvKiBXaGVuIGJ1c3kgcG9sbCBpcyBlbmFibGVkLCB0aGUgb2xkIHBhY2tldHMgYXJlIG5vdCBmbHVzaGVkIGluXG43OTIxOlx0XHRcdCAqIG5hcGlfY29tcGxldGVfZG9uZS4gU28gZmx1c2ggdGhlbSBoZXJlLlxuNzkyMjpcdFx0XHQgKi9cbjc5MjM6XHRcdFx0aWYgKGJ1c3lfcG9sbF9sYXN0X3FzKVxuNzkyNDpcdFx0XHRcdGdyb19mbHVzaF9ub3JtYWwoXHUwMDI2bmFwaS1cdTAwM2Vncm8sIEhaIFx1MDAzZT0gMTAwMCk7XG43OTI1Olx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuNzkyNjpcdFxuNzkyNzpcdFx0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxuNzkyODpcdFx0XHRcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xuNzkyOTpcdFxuNzkzMDpcdFx0XHQvKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIHlpZWxkIG9uXG43OTMxOlx0XHRcdCAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuXG43OTMyOlx0XHRcdCAqL1xuNzkzMzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjc5MzQ6XHRcbjc5MzU6XHRcdFx0aWYgKCFyZXBvbGwpXG43OTM2Olx0XHRcdFx0YnJlYWs7XG43OTM3Olx0XHR9XG43OTM4Olx0XG43OTM5Olx0XHRpZiAoYnVzeV9wb2xsX2xhc3RfcXMpXG43OTQwOlx0XHRcdCpidXN5X3BvbGxfbGFzdF9xcyA9IGxhc3RfcXM7XG43OTQxOlx0fVxuNzk0MjpcdFxuNzk0MzpcdHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpXG43OTQ0Olx0e1xuNzk0NTpcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGF0YTtcbjc5NDY6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGppZmZpZXM7XG43OTQ3Olx0XHRib29sIHdhbnRfYnVzeV9wb2xsO1xuNzk0ODpcdFx0Ym9vbCBpbl9idXN5X3BvbGw7XG43OTQ5Olx0XHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgbGFuZHNjYXBlIG9mIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUgc3lzdGVtPyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgaXRzIGNhbGwgc2l0ZXMg4oCTIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGl0JiMzOTtzIGludm9rZWQuIE1vcmUgaW1wb3J0YW50bHksIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBjb250ZXh0LiBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGF5IHdoZW4gaXQmIzM5O3MgY2FsbGVkPyBXaGF0IHVwc3RyZWFtIGNhbGxlcnMgdHJpZ2dlciBpdD8gVW5kZXJzdGFuZGluZyB0aGUgJiMzOTt3aHkmIzM5OyBiZWhpbmQgaXRzIGV4ZWN1dGlvbiBpcyBqdXN0IGFzIGNyaXRpY2FsIGFzIGtub3dpbmcgdGhlICYjMzk7d2hlcmUuJiMzOTsgVGhpcyB3aWxsIGhlbHAgbWUgZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwdXJwb3NlIGFuZCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHBhaW50IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgb3BlcmF0aW9uYWwgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFwaV90aHJlYWRlZF9wb2xsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9MTY2Nj1FWFBPUlRfU1lNQk9MKG5ldGRldl9ub3RpZnlfcGVlcnMpO1xubmV0L2NvcmUvZGV2LmMtMTY2Ny1cbm5ldC9jb3JlL2Rldi5jOjE2Njg6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSk7XG5uZXQvY29yZS9kZXYuYy0xNjY5LVxubmV0L2NvcmUvZGV2LmM9MTY3MD1zdGF0aWMgaW50IG5hcGlfa3RocmVhZF9jcmVhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE2NzctXHQgKi9cbm5ldC9jb3JlL2Rldi5jOjE2Nzg6XHRuLVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKG5hcGlfdGhyZWFkZWRfcG9sbCwgbiwgXCYjMzQ7bmFwaS8lcy0lZFwmIzM0Oyxcbm5ldC9jb3JlL2Rldi5jLTE2NzktXHRcdFx0XHRuLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBuLVx1MDAzZW5hcGlfaWQpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTUzNDA9c3RhdGljIHZvaWQgbmFwaV9zY2hlZHVsZV9ycHMoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTM1My1cbm5ldC9jb3JlL2Rldi5jOjUzNTQ6XHRcdC8qIElmIG5vdCBjYWxsZWQgZnJvbSBuZXRfcnhfYWN0aW9uKCkgb3IgbmFwaV90aHJlYWRlZF9wb2xsKClcbm5ldC9jb3JlL2Rldi5jLTUzNTUtXHRcdCAqIHdlIGhhdmUgdG8gcmFpc2UgTkVUX1JYX1NPRlRJUlEuXG5uZXQvY29yZS9kZXYuYy01MzU2LVx0XHQgKi9cbm5ldC9jb3JlL2Rldi5jOjUzNTc6XHRcdGlmICghbXlzZC1cdTAwM2Vpbl9uZXRfcnhfYWN0aW9uIFx1MDAyNlx1MDAyNiAhbXlzZC1cdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwpXG5uZXQvY29yZS9kZXYuYy01MzU4LVx0XHRcdF9fcmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1JYX1NPRlRJUlEpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTc4NjU9c3RhdGljIGludCBuYXBpX3RocmVhZF93YWl0KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbi0tXG5uZXQvY29yZS9kZXYuYy03ODg4LVxubmV0L2NvcmUvZGV2LmM6Nzg4OTpzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5uZXQvY29yZS9kZXYuYy03ODkwLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKmJ1c3lfcG9sbF9sYXN0X3FzKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTc5MDMtXHRcdHNkID0gdGhpc19jcHVfcHRyKFx1MDAyNnNvZnRuZXRfZGF0YSk7XG5uZXQvY29yZS9kZXYuYzo3OTA0Olx0XHRzZC1cdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSB0cnVlO1xubmV0L2NvcmUvZGV2LmMtNzkwNS1cbi0tXG5uZXQvY29yZS9kZXYuYy03OTA5LVxubmV0L2NvcmUvZGV2LmM6NzkxMDpcdFx0c2QtXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gZmFsc2U7XG5uZXQvY29yZS9kZXYuYy03OTExLVx0XHRiYXJyaWVyKCk7XG4tLVxubmV0L2NvcmUvZGV2LmMtNzk0Mi1cbm5ldC9jb3JlL2Rldi5jOjc5NDM6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSlcbm5ldC9jb3JlL2Rldi5jLTc5NDQte1xuLS1cbm5ldC9jb3JlL2Rldi5jLTc5NjMtXG5uZXQvY29yZS9kZXYuYzo3OTY0Olx0XHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChuYXBpLCB3YW50X2J1c3lfcG9sbCA/IFx1MDAyNmxhc3RfcXMgOiBOVUxMKTtcbm5ldC9jb3JlL2Rldi5jLTc5NjUtXHR9XG4tLVxubmV0L2NvcmUvZGV2LmM9MTMzOTk9c3RhdGljIHZvaWQgcnVuX2JhY2tsb2dfbmFwaSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEzNDAyLVxubmV0L2NvcmUvZGV2LmM6MTM0MDM6XHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChcdTAwMjZzZC1cdTAwM2ViYWNrbG9nLCBOVUxMKTtcbm5ldC9jb3JlL2Rldi5jLTEzNDA0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTM4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHJ1bl9iYWNrbG9nX25hcGlgIGFuZCBUaHJlYWRlZCBOLUFQSSBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGBydW5fYmFja2xvZ19uYXBpYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhyZWFkZWQgTi1BUEkgY2FsbHMuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciBtYW5hZ2luZyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucywgcGVyaGFwcyB3aXRoaW4gYSB3b3JrZXIgdGhyZWFkIGNvbnRleHQuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIGFuZCBob3cgZGF0YSBpcyBtYXJzaGFsZWQgYmV0d2VlbiB0aGUgbWFpbiBKYXZhU2NyaXB0IHRocmVhZCBhbmQgdGhlIHdvcmtlciB0aHJlYWRzIHVzaW5nIE4tQVBJLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZDoKCiogICAqKlRoZSBvcmlnaW4gb2YgYHJ1bl9iYWNrbG9nX25hcGlgOioqIElzIHRoaXMgZnVuY3Rpb24gcGFydCBvZiBhIGN1c3RvbSBhZGRvbiwgYSBsaWJyYXJ5LCBvciBhIGNvcmUgTm9kZS5qcyBmZWF0dXJlPyBLbm93aW5nIGl0cyBwcm92ZW5hbmNlIHdpbGwgaGVscCBtZSBpZGVudGlmeSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIGFuZCB1cHN0cmVhbSBpc3N1ZXMuCiogICAqKlRoZSAmIzM0O2JhY2tsb2cmIzM0OzoqKiBXaGF0IGV4YWN0bHkgaXMgYmVpbmcgJiMzNDtiYWNrbG9nZ2VkJiMzNDs/IElzIGl0IHRhc2tzLCBmdW5jdGlvbiBjYWxscywgZGF0YSB1cGRhdGVzLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgbmF0dXJlIG9mIHRoZSBiYWNrbG9nIGlzIGNydWNpYWwgdG8gcGlucG9pbnRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGFuZCBpbmVmZmljaWVuY2llcy4KKiAgICoqVGhyZWFkIHNhZmV0eToqKiBBcmUgdGhlcmUgbXV0ZXhlcywgYXRvbWljcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdXNlZCB3aXRoaW4gYHJ1bl9iYWNrbG9nX25hcGlgPyBPciBpcyBpdCBhc3N1bWluZyBhIHNpbXBsZSwgbm9uLWNvbmN1cnJlbnQgZW52aXJvbm1lbnQ/IElmIHRoZSBsYXR0ZXIsIGl0JiMzOTtzIGEgaHVnZSByZWQgZmxhZyB3aGVuIGRlYWxpbmcgd2l0aCB0aHJlYWRlZCBOLUFQSS4KKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSG93IGFyZSBlcnJvcnMgcHJvcGFnYXRlZCBmcm9tIHRoZSB3b3JrZXIgdGhyZWFkcyBiYWNrIHRvIHRoZSBKYXZhU2NyaXB0IGNvZGU/IEFyZSBleGNlcHRpb25zIGNhdWdodCBhbmQgY29udmVydGVkIHRvIE4tQVBJIGVycm9yIGNvZGVzPyBQcm9wZXIgZXJyb3IgaGFuZGxpbmcgaXMgZXNzZW50aWFsIGZvciByZWxpYWJpbGl0eS4KKiAgICoqTWVtb3J5IG1hbmFnZW1lbnQ6KiogSG93IGlzIG1lbW9yeSBtYW5hZ2VkIGJldHdlZW4gdGhlIHRocmVhZHM/IElzIHRoZXJlIGEgcmlzayBvZiBtZW1vcnkgbGVha3MsIGRvdWJsZSBmcmVlcywgb3Igb3RoZXIgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBlc3BlY2lhbGx5IHdoZW4gcGFzc2luZyBkYXRhIGJldHdlZW4gdGhlIEMmIzQzOyYjNDM7IGFuZCBKYXZhU2NyaXB0IHJlYWxtcz8KKiAgICoqVGhlIE4tQVBJIGNvbnRleHQ6KiogV2hhdCBpcyB0aGUgTi1BUEkgZW52aXJvbm1lbnQgbGlrZSB3aGVuIGBydW5fYmFja2xvZ19uYXBpYCBpcyBpbnZva2VkPyBJcyBpdCB3aXRoaW4gYSB3b3JrZXIgdGhyZWFkIG9yIHRoZSBtYWluIHRocmVhZD8gS25vd2luZyB0aGlzIGlzIGZ1bmRhbWVudGFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBOLUFQSSBBUElzIHNob3VsZCBvciBzaG91bGQgbm90IGJlIHVzZWQgaW4gdGhpcyBjb250ZXh0LgoKTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgdG8gY2hlY2sgZm9yIGFueSB1c2Ugb2YgdGhyZWFkLXVuc2FmZSBOLUFQSSBBUElzIHdpdGhpbiBgcnVuX2JhY2tsb2dfbmFwaWAuIFRoYXQgd2lsbCBsaWtlbHkgYmUgdGhlIGZpcnN0IHBvaW50IHRvIGF1ZGl0LiBJIGFsc28gbmVlZCB0byB0cmFjayB0aGUgcGF0aCBvZiBhbnkgZGF0YSB0byBlbnN1cmUgaXQgaXMgdGhyZWFkIHNhZmUgYW5kIHRoYXQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgZGF0YSBpcyBwcm9wZXJseSBhY2NvdW50ZWQgZm9yLiBPbmNlIEkgaGF2ZSB0aG9zZSBkZXRhaWxzLCBJJiMzOTtsbCBhc3Nlc3MgYW55IGJvdHRsZW5lY2tzIGFuZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODcwOlx0XHRcdC8qIFRlc3RpbmcgU0NIRURfVEhSRUFERUQgYml0IGhlcmUgdG8gbWFrZSBzdXJlIHRoZSBjdXJyZW50XG43ODcxOlx0XHRcdCAqIGt0aHJlYWQgb3ducyB0aGlzIG5hcGkgYW5kIGNvdWxkIHBvbGwgb24gdGhpcyBuYXBpLlxuNzg3MjpcdFx0XHQgKiBUZXN0aW5nIFNDSEVEIGJpdCBpcyBub3QgZW5vdWdoIGJlY2F1c2UgU0NIRUQgYml0IG1pZ2h0IGJlXG43ODczOlx0XHRcdCAqIHNldCBieSBzb21lIG90aGVyIGJ1c3kgcG9sbCB0aHJlYWQgb3IgYnkgbmFwaV9kaXNhYmxlKCkuXG43ODc0Olx0XHRcdCAqL1xuNzg3NTpcdFx0XHRpZiAodGVzdF9iaXQoTkFQSV9TVEFURV9TQ0hFRF9USFJFQURFRCwgXHUwMDI2bmFwaS1cdTAwM2VzdGF0ZSkpIHtcbjc4NzY6XHRcdFx0XHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNm5hcGktXHUwMDNlcG9sbF9saXN0KSk7XG43ODc3Olx0XHRcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuNzg3ODpcdFx0XHRcdHJldHVybiAwO1xuNzg3OTpcdFx0XHR9XG43ODgwOlx0XG43ODgxOlx0XHRcdHNjaGVkdWxlKCk7XG43ODgyOlx0XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG43ODgzOlx0XHR9XG43ODg0Olx0XHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG43ODg1Olx0XG43ODg2Olx0XHRyZXR1cm4gLTE7XG43ODg3Olx0fVxuNzg4ODpcdFxuNzg4OTpcdHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbjc4OTA6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nICpidXN5X3BvbGxfbGFzdF9xcylcbjc4OTE6XHR7XG43ODkyOlx0XHR1bnNpZ25lZCBsb25nIGxhc3RfcXMgPSBidXN5X3BvbGxfbGFzdF9xcyA/ICpidXN5X3BvbGxfbGFzdF9xcyA6IGppZmZpZXM7XG43ODkzOlx0XHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcbjc4OTQ6XHRcdHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkO1xuNzg5NTpcdFxuNzg5NjpcdFx0Zm9yICg7Oykge1xuNzg5NzpcdFx0XHRib29sIHJlcG9sbCA9IGZhbHNlO1xuNzg5ODpcdFx0XHR2b2lkICpoYXZlO1xuNzg5OTpcdFxuNzkwMDpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG43OTAxOlx0XHRcdGJwZl9uZXRfY3R4ID0gYnBmX25ldF9jdHhfc2V0KFx1MDAyNl9fYnBmX25ldF9jdHgpO1xuNzkwMjpcdFxuNzkwMzpcdFx0XHRzZCA9IHRoaXNfY3B1X3B0cihcdTAwMjZzb2Z0bmV0X2RhdGEpO1xuNzkwNDpcdFx0XHRzZC1cdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSB0cnVlO1xuNzkwNTpcdFxuNzkwNjpcdFx0XHRoYXZlID0gbmV0cG9sbF9wb2xsX2xvY2sobmFwaSk7XG43OTA3Olx0XHRcdF9fbmFwaV9wb2xsKG5hcGksIFx1MDAyNnJlcG9sbCk7XG43OTA4Olx0XHRcdG5ldHBvbGxfcG9sbF91bmxvY2soaGF2ZSk7XG43OTA5Olx0XG43OTEwOlx0XHRcdHNkLVx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IGZhbHNlO1xuNzkxMTpcdFx0XHRiYXJyaWVyKCk7XG43OTEyOlx0XG43OTEzOlx0XHRcdGlmIChzZF9oYXNfcnBzX2lwaV93YWl0aW5nKHNkKSkge1xuNzkxNDpcdFx0XHRcdGxvY2FsX2lycV9kaXNhYmxlKCk7XG43OTE1Olx0XHRcdFx0bmV0X3Jwc19hY3Rpb25fYW5kX2lycV9lbmFibGUoc2QpO1xuNzkxNjpcdFx0XHR9XG43OTE3Olx0XHRcdHNrYl9kZWZlcl9mcmVlX2ZsdXNoKCk7XG43OTE4Olx0XHRcdGJwZl9uZXRfY3R4X2NsZWFyKGJwZl9uZXRfY3R4KTtcbjc5MTk6XHRcbjc5MjA6XHRcdFx0LyogV2hlbiBidXN5IHBvbGwgaXMgZW5hYmxlZCwgdGhlIG9sZCBwYWNrZXRzIGFyZSBub3QgZmx1c2hlZCBpblxuNzkyMTpcdFx0XHQgKiBuYXBpX2NvbXBsZXRlX2RvbmUuIFNvIGZsdXNoIHRoZW0gaGVyZS5cbjc5MjI6XHRcdFx0ICovXG43OTIzOlx0XHRcdGlmIChidXN5X3BvbGxfbGFzdF9xcylcbjc5MjQ6XHRcdFx0XHRncm9fZmx1c2hfbm9ybWFsKFx1MDAyNm5hcGktXHUwMDNlZ3JvLCBIWiBcdTAwM2U9IDEwMDApO1xuNzkyNTpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjc5MjY6XHRcbjc5Mjc6XHRcdFx0aWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcylcbjc5Mjg6XHRcdFx0XHRyY3Vfc29mdGlycV9xc19wZXJpb2RpYyhsYXN0X3FzKTtcbjc5Mjk6XHRcbjc5MzA6XHRcdFx0LyogbmFwaV90aHJlYWRfd2FpdCgpIGNhbiByZXR1cm4gd2l0aG91dCBzY2hlZHVsaW5nLCBzbyB5aWVsZCBvblxuNzkzMTpcdFx0XHQgKiBldmVyeSBleGl0LCBub3Qgb25seSB3aGVuIHRoZSBsb29wIGl0ZXJhdGVzLlxuNzkzMjpcdFx0XHQgKi9cbjc5MzM6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG43OTM0Olx0XG43OTM1Olx0XHRcdGlmICghcmVwb2xsKVxuNzkzNjpcdFx0XHRcdGJyZWFrO1xuNzkzNzpcdFx0fVxuNzkzODpcdFxuNzkzOTpcdFx0aWYgKGJ1c3lfcG9sbF9sYXN0X3FzKVxuNzk0MDpcdFx0XHQqYnVzeV9wb2xsX2xhc3RfcXMgPSBsYXN0X3FzO1xuNzk0MTpcdH1cbjc5NDI6XHRcbjc5NDM6XHRzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKVxuNzk0NDpcdHtcbjc5NDU6XHRcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRhdGE7XG43OTQ2Olx0XHR1bnNpZ25lZCBsb25nIGxhc3RfcXMgPSBqaWZmaWVzO1xuNzk0NzpcdFx0Ym9vbCB3YW50X2J1c3lfcG9sbDtcbjc5NDg6XHRcdGJvb2wgaW5fYnVzeV9wb2xsO1xuNzk0OTpcdFx0dW5zaWduZWQgbG9uZyB2YWw7XG43OTUwOlx0XG43OTUxOlx0XHR3aGlsZSAoIW5hcGlfdGhyZWFkX3dhaXQobmFwaSkpIHtcbjc5NTI6XHRcdFx0dmFsID0gUkVBRF9PTkNFKG5hcGktXHUwMDNlc3RhdGUpO1xuNzk1MzpcdFxuNzk1NDpcdFx0XHR3YW50X2J1c3lfcG9sbCA9IHZhbCBcdTAwMjYgTkFQSUZfU1RBVEVfVEhSRUFERURfQlVTWV9QT0xMO1xuNzk1NTpcdFx0XHRpbl9idXN5X3BvbGwgPSB2YWwgXHUwMDI2IE5BUElGX1NUQVRFX0lOX0JVU1lfUE9MTDtcbjc5NTY6XHRcbjc5NTc6XHRcdFx0aWYgKHVubGlrZWx5KHZhbCBcdTAwMjYgTkFQSUZfU1RBVEVfRElTQUJMRSkpXG43OTU4Olx0XHRcdFx0d2FudF9idXN5X3BvbGwgPSBmYWxzZTtcbjc5NTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRocmVhZGVkIE5BUEkgUG9sbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCByZXNpZGVzIHdpdGhpbiBgbmV0L2NvcmUvZGV2LmNgLiBHaXZlbiB0aGF0JiMzOTtzIGEgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBmaWxlLCBpdCBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gbmV0d29yayBkZXZpY2Ugb3BlcmF0aW9uLiBJcyBpdCBhY3R1YWxseSB1c2VkPyBZZXMsIGl0IGFwcGVhcnMgdG8gYmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aHJlYWRlZCBOQVBJIHBvbGxpbmcgYW5kIGJhY2tsb2cgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBwYXRoLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG5ldHdvcmsgZGV2aWNlcywgb3Igd2hlbiBkZWFsaW5nIHdpdGggYmFja2xvZyBwcm9jZXNzaW5nLiBOb3csIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgaW4gbW9yZSBkZXRhaWwuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgcnVuX2JhY2tsb2dfbmFwaWAgYW5kIHBpbnBvaW50IHdoZXJlIHRocmVhZGVkIE5BUEkgaXMgY29uZmlndXJlZCBvciBhY3RpdmVseSBlbmdhZ2VkLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIHNwZWNpZmljIGNvbnRleHRzIGluIHdoaWNoIHRoaXMgdGhyZWFkZWQgcG9sbGluZyBtZWNoYW5pc20gaXMgYmVpbmcgbGV2ZXJhZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMzOTA6XHRcbjEzMzkxOlx0c3RhdGljIGludCBiYWNrbG9nX25hcGlfc2hvdWxkX3J1bih1bnNpZ25lZCBpbnQgY3B1KVxuMTMzOTI6XHR7XG4xMzM5MzpcdFx0c3RydWN0IHNvZnRuZXRfZGF0YSAqc2QgPSBwZXJfY3B1X3B0cihcdTAwMjZzb2Z0bmV0X2RhdGEsIGNwdSk7XG4xMzM5NDpcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gXHUwMDI2c2QtXHUwMDNlYmFja2xvZztcbjEzMzk1Olx0XG4xMzM5NjpcdFx0cmV0dXJuIHRlc3RfYml0KE5BUElfU1RBVEVfU0NIRURfVEhSRUFERUQsIFx1MDAyNm5hcGktXHUwMDNlc3RhdGUpO1xuMTMzOTc6XHR9XG4xMzM5ODpcdFxuMTMzOTk6XHRzdGF0aWMgdm9pZCBydW5fYmFja2xvZ19uYXBpKHVuc2lnbmVkIGludCBjcHUpXG4xMzQwMDpcdHtcbjEzNDAxOlx0XHRzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCA9IHBlcl9jcHVfcHRyKFx1MDAyNnNvZnRuZXRfZGF0YSwgY3B1KTtcbjEzNDAyOlx0XG4xMzQwMzpcdFx0bmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoXHUwMDI2c2QtXHUwMDNlYmFja2xvZywgTlVMTCk7XG4xMzQwNDpcdH1cbjEzNDA1Olx0XG4xMzQwNjpcdHN0YXRpYyB2b2lkIGJhY2tsb2dfbmFwaV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxuMTM0MDc6XHR7XG4xMzQwODpcdFx0c3RydWN0IHNvZnRuZXRfZGF0YSAqc2QgPSBwZXJfY3B1X3B0cihcdTAwMjZzb2Z0bmV0X2RhdGEsIGNwdSk7XG4xMzQwOTpcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gXHUwMDI2c2QtXHUwMDNlYmFja2xvZztcbjEzNDEwOlx0XG4xMzQxMTpcdFx0bmFwaS1cdTAwM2V0aHJlYWQgPSB0aGlzX2NwdV9yZWFkKGJhY2tsb2dfbmFwaSk7XG4xMzQxMjpcdFx0c2V0X2JpdChOQVBJX1NUQVRFX1RIUkVBREVELCBcdTAwMjZuYXBpLVx1MDAzZXN0YXRlKTtcbjEzNDEzOlx0fVxuMTM0MTQ6XHRcbjEzNDE1Olx0c3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xuMTM0MTY6XHRcdC5zdG9yZVx0XHRcdD0gXHUwMDI2YmFja2xvZ19uYXBpLFxuMTM0MTc6XHRcdC50aHJlYWRfc2hvdWxkX3J1blx0PSBiYWNrbG9nX25hcGlfc2hvdWxkX3J1bixcbjEzNDE4Olx0XHQudGhyZWFkX2ZuXHRcdD0gcnVuX2JhY2tsb2dfbmFwaSxcbjEzNDE5Olx0XHQudGhyZWFkX2NvbW1cdFx0PSBcJiMzNDtiYWNrbG9nX25hcGkvJXVcJiMzNDssXG4xMzQyMDpcdFx0LnNldHVwXHRcdFx0PSBiYWNrbG9nX25hcGlfc2V0dXAsXG4xMzQyMTpcdH07XG4xMzQyMjpcdFxuMTM0MjM6XHQvKlxuMTM0MjQ6XHQgKiAgICAgICBUaGlzIGlzIGNhbGxlZCBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGJvb3QsIHNvIG5vIG5lZWRcbjEzNDI1Olx0ICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuXG4xMzQyNjpcdCAqL1xuMTM0Mjc6XHRzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbjEzNDI4Olx0e1xuMTM0Mjk6XHRcdGludCBpLCByYyA9IC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBUaHJlYWRlZCBOQVBJIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBzcGVjaWZpY3MgZm9yIHRocmVhZGVkIE5BUEksIGZvY3VzaW5nIG9uIGBuZXQvY29yZS9kZXYuY2Agc2luY2UgdGhhdCYjMzk7cyBhIGNlbnRyYWwgcGllY2UuIFRoZSBmYWN0IHRoYXQgYG5ldC9jb3JlL2Rldi5jYCBpcyBjb21waWxlZCB3aGVuZXZlciBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCBpcywgb2YgY291cnNlLCBleHBlY3RlZDsgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gTGludXggbmV0d29ya2luZy4gTm93LCBJIHdhbnQgdG8gY2xhcmlmeSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvbiB0aGUgc3RhbmRhcmQgY29uZmlncy4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgd2hldGhlciBgYmFja2xvZ190aHJlYWRzYCBvciB0aHJlYWRlZCBOQVBJIGlzIHJlbGlhbnQgb24gYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYG5ldF9kZXZfaW5pdGAgc2V0cyB1cCBgc21wYm9vdF9yZWdpc3Rlcl9wZXJjcHVfdGhyZWFkKCZhbXA7YmFja2xvZ190aHJlYWRzKWAsIGFuZCB0aGF0JiMzOTtzIHByZXNlbnQgaW4gcHJldHR5IG11Y2ggZXZlcnkgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24gd2l0aCBTTVAgYW5kIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBTaW5jZSBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB0aGlzIHNlZW1zIGxpa2VseSwgYnV0IEkgbmVlZCB0byBjb25maXJtLiBCZXlvbmQgdGhvc2UsIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBvdGhlciBjb25maWdzIHRvIGFzY2VydGFpbiBpZiB0aGVyZSBhcmUgYW55IG90aGVycy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gYG5hcGlfa3RocmVhZF9jcmVhdGVgIGFzIHdlbGwgYXMgZXhwbG9yZSB0aGUgdGhyZWFkZWQgbmV0ZGV2IGF0dHJpYnV0ZXMsIHRvIG1ha2Ugc3VyZSBJIGFtIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05BUElfU1RBVEVfVEhSRUFERUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTUwMTM9c3RhdGljIGlubGluZSB2b2lkIF9fX19uYXBpX3NjaGVkdWxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTUwMTktXG5uZXQvY29yZS9kZXYuYzo1MDIwOlx0aWYgKHRlc3RfYml0KE5BUElfU1RBVEVfVEhSRUFERUQsIFx1MDAyNm5hcGktXHUwMDNlc3RhdGUpKSB7XG5uZXQvY29yZS9kZXYuYy01MDIxLVx0XHQvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKSBpblxuLS1cbm5ldC9jb3JlL2Rldi5jPTcyNDc9c3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTcyNTItXG5uZXQvY29yZS9kZXYuYzo3MjUzOlx0YXNzaWduX2JpdChOQVBJX1NUQVRFX1RIUkVBREVELCBcdTAwMjZuYXBpLVx1MDAzZXN0YXRlLCB0aHJlYWRlZCk7XG5uZXQvY29yZS9kZXYuYzo3MjU0Olx0YXNzaWduX2JpdChOQVBJX1NUQVRFX1RIUkVBREVEX0JVU1lfUE9MTCwgXHUwMDI2bmFwaS1cdTAwM2VzdGF0ZSwgYnVzeV9wb2xsKTtcbm5ldC9jb3JlL2Rldi5jLTcyNTUtfVxuLS1cbm5ldC9jb3JlL2Rldi5jPTEzNDA2PXN0YXRpYyB2b2lkIGJhY2tsb2dfbmFwaV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEzNDExLVx0bmFwaS1cdTAwM2V0aHJlYWQgPSB0aGlzX2NwdV9yZWFkKGJhY2tsb2dfbmFwaSk7XG5uZXQvY29yZS9kZXYuYzoxMzQxMjpcdHNldF9iaXQoTkFQSV9TVEFURV9USFJFQURFRCwgXHUwMDI2bmFwaS1cdTAwM2VzdGF0ZSk7XG5uZXQvY29yZS9kZXYuYy0xMzQxMy19XG4tLVxubmV0L2NvcmUvZGV2Lmg9MzU3PXN0YXRpYyBpbmxpbmUgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCBuYXBpX2dldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG5uZXQvY29yZS9kZXYuaC0zNTgte1xubmV0L2NvcmUvZGV2Lmg6MzU5Olx0aWYgKHRlc3RfYml0KE5BUElfU1RBVEVfVEhSRUFERURfQlVTWV9QT0xMLCBcdTAwMjZuLVx1MDAzZXN0YXRlKSlcbm5ldC9jb3JlL2Rldi5oLTM2MC1cdFx0cmV0dXJuIE5FVERFVl9OQVBJX1RIUkVBREVEX0JVU1lfUE9MTDtcbm5ldC9jb3JlL2Rldi5oLTM2MS1cbm5ldC9jb3JlL2Rldi5oOjM2MjpcdGlmICh0ZXN0X2JpdChOQVBJX1NUQVRFX1RIUkVBREVELCBcdTAwMjZuLVx1MDAzZXN0YXRlKSlcbm5ldC9jb3JlL2Rldi5oLTM2My1cdFx0cmV0dXJuIE5FVERFVl9OQVBJX1RIUkVBREVEX0VOQUJMRUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gVGhyZWFkZWQgTkFQSSB3aXRoIGBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZWAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0aHJlYWRlZCBOQVBJIHNldHVwLCBzcGVjaWZpY2FsbHkgaG93IGBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZWAgZmFjdG9ycyBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHVzZXItc3BhY2UgaW1wbGljYXRpb25zIGhlcmUuIERvZXMgYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIGFjdHVhbGx5ICplbmFibGUqIHRocmVhZGVkIE5BUEkgZXhwbGljaXRseSB1c2luZyB0aGF0IGZ1bmN0aW9uPyBPciwgcGVyaGFwcywgaXMgdGhlcmUgc29tZSBjbGV2ZXIgbG9naWMgYnVyaWVkIGluIHRoZSBiYWNrbG9nIE5BUEkgY29kZSB0aGF0IHVzZXMgaXQgYXV0b21hdGljYWxseSBpbiBjZXJ0YWluIHNjZW5hcmlvcz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZWAgYW5kIGJhY2tsb2cgTkFQSSB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBhbmQgZGVidWdnaW5nLCBhbmQgSSB3YW50IHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIGltcGFjdHMgZXZlcnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFwaV9zZXRfdGhyZWFkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTcyMDk9c3RhdGljIHZvaWQgbmFwaV9zdG9wX2t0aHJlYWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTcyNDYtXG5uZXQvY29yZS9kZXYuYzo3MjQ3OnN0YXRpYyB2b2lkIG5hcGlfc2V0X3RocmVhZGVkX3N0YXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbm5ldC9jb3JlL2Rldi5jLTcyNDgtXHRcdFx0XHQgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZF9tb2RlKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTcyNTYtXG5uZXQvY29yZS9kZXYuYzo3MjU3OmludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5uZXQvY29yZS9kZXYuYy03MjU4LVx0XHQgICAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTcyODItXHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xubmV0L2NvcmUvZGV2LmM6NzI4MzpcdFx0bmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUobmFwaSwgdGhyZWFkZWQpO1xubmV0L2NvcmUvZGV2LmMtNzI4NC1cdH1cbi0tXG5uZXQvY29yZS9kZXYuYz03Mjg5PWludCBuZXRpZl9zZXRfdGhyZWFkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYy03MzEyLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShuYXBpLCBcdTAwMjZkZXYtXHUwMDNlbmFwaV9saXN0LCBkZXZfbGlzdClcbm5ldC9jb3JlL2Rldi5jOjczMTM6XHRcdFdBUk5fT05fT05DRShuYXBpX3NldF90aHJlYWRlZChuYXBpLCB0aHJlYWRlZCkpO1xubmV0L2NvcmUvZGV2LmMtNzMxNC1cbi0tXG5uZXQvY29yZS9kZXYuYz03NTM0PXN0YXRpYyB2b2lkIG5hcGlfcmVzdG9yZV9jb25maWcoc3RydWN0IG5hcGlfc3RydWN0ICpuKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTc1NTMtXG5uZXQvY29yZS9kZXYuYzo3NTU0Olx0V0FSTl9PTl9PTkNFKG5hcGlfc2V0X3RocmVhZGVkKG4sIG4tXHUwMDNlY29uZmlnLVx1MDAzZXRocmVhZGVkKSk7XG5uZXQvY29yZS9kZXYuYy03NTU1LX1cbi0tXG5uZXQvY29yZS9kZXYuaD0zNjk9bmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcbi0tXG5uZXQvY29yZS9kZXYuaC0zNzUtXG5uZXQvY29yZS9kZXYuaDozNzY6aW50IG5hcGlfc2V0X3RocmVhZGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbixcbm5ldC9jb3JlL2Rldi5oLTM3Ny1cdFx0ICAgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZCk7XG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0zMjc9bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zMzctXHRcdHRocmVhZGVkID0gbmxhX2dldF91aW50KGluZm8tXHUwMDNlYXR0cnNbTkVUREVWX0FfTkFQSV9USFJFQURFRF0pO1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzozMzg6XHRcdHJldCA9IG5hcGlfc2V0X3RocmVhZGVkKG5hcGksIHRocmVhZGVkKTtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMzM5LVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQxMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUaHJlYWRlZCBOQVBJIEZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaHJlYWRlZCBOQVBJIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBgbmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZ2AgKHZpYSBuZXRsaW5rKSBvciB0aGUgc3RhbmRhcmQgYmFja2xvZyBwcm9jZXNzaW5nIGluIHRoZSBTTVAgbmV0d29yayBkZXZpY2UgcGF0aCwgd2hpY2ggbWVhbnMgYHJ1bl9iYWNrbG9nX25hcGlgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhlIHBvbGxpbmcgbG9vcCBpdHNlbGYsIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAsIHJlc2lkZXMgaW4gYG5ldC9jb3JlL2Rldi5jYC4KClJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBmdXp6YWJsZS4gVGhlIGNvcmUgYXJlYSBvZiBjb25jZXJuIGlzIGluIGBuZXQvY29yZS9kZXYuY2AsIHByZWNpc2VseSBob3cgdGhlIHNjaGVkdWxpbmcvcmVzY2hlZHVsaW5nIGJlaGF2aW9yIChgY29uZF9yZXNjaGVkKClgKSB3aXRoaW4gYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCBpcyBtb2RpZmllZCBmb3IgdGhyZWFkZWQgTkFQSSBwb2xsaW5nLiAgVGhpcyBsb29rcyBwcm9taXNpbmcuCgpSZWFjaGFiaWxpdHkgaXMgc3RyYWlnaHRmb3J3YXJkOyBhbnkgc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIGEgTGludXggbmV0d29ya2luZyBzdGFjayBpcyBnb2luZyB0byBoaXQgdGhpcyBjb2RlLiBUaGUgcG9zaXRpdmUgY3JpdGVyaWEgY2hlY2tzIGFyZSBtZXQgYmVjYXVzZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGNvcmUgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IHNjaGVkdWxpbmcuICAqV29ydGhGdXp6aW5nID0gdHJ1ZSosIGl0JiMzOTtzIGEgZ28uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGZvY3VzIHN5bWJvbHMuICBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgbmFwaV90aHJlYWRlZF9wb2xsYCwgYHJ1bl9iYWNrbG9nX25hcGlgLCBgbmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZ2AsIGFuZCBgbmFwaV9zZXRfdGhyZWFkZWRgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGlzIHN0YXRpYyBvciBpbmxpbmVkLiBDaGVja2luZyBgbmV0L2NvcmUvZGV2LmNgIGNvbmZpcm1zIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLiBFeGNlbGxlbnQuCgpOb3csIGNoZWNraW5nIHRoZSBjYWxsZXJzIGluIHRoZSBzYW1lIGZpbGUgYG5ldC9jb3JlL2Rldi5jYDogYG5hcGlfdGhyZWFkZWRfcG9sbGAsIGBydW5fYmFja2xvZ19uYXBpYCwgYW5kIGBuYXBpX3NldF90aHJlYWRlZGAgYXJlIGFsbCB0aGVyZS4gVGhlc2Ugc2hvdWxkIGJlIGdvb2Qgc3ltYm9scyB0byBmb2N1cyBvbiwgYXMgdGhleSBhcmUgbm9uLXViaXF1aXRvdXMgZW50cnlwb2ludHMgYW5kIGZ1bmN0aW9ucyBkaXJlY3RseSByZWxhdGVkIHRvIHRocmVhZGVkIE5BUEkgYW5kIGJhY2tsb2cgcHJvY2Vzc2luZy4KCkZpbmFsbHksIHRoZSBlbmFibGUgY29uZmlncy4gYENPTkZJR19ORVRgIChiYXNpYyBuZXR3b3JraW5nKSBhbmQgYENPTkZJR19TTVBgIChuZWVkZWQgZm9yIHNtcF9ob3RwbHVnX3RocmVhZCB1c2VkIGluIGJhY2tsb2cgdGhyZWFkcykg4oCTIHN0YW5kYXJkIHN0dWZmLiAgV2UmIzM5O3JlIGdvb2QgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldlxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX1NZU0NUTCkgJiM0Mzs9IHN5c2N0bF9uZXRfY29yZS5vXG5uZXQvY29yZS9NYWtlZmlsZS0xMS1cbm5ldC9jb3JlL01ha2VmaWxlOjEyOm9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTEzLVx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTY4CgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyBgZGV2Lm9gIGlzIGluZGVlZCBidWlsdCBhcyBgb2JqLXlgIHdpdGhpbiBgbmV0L2NvcmUvTWFrZWZpbGVgLCBhbmQgdGhlIGBuZXQvTWFrZWZpbGVgIGl0c2VsZiBpbmNsdWRlcyBgb2JqLSQoQ09ORklHX05FVCkgJiM0Mzs9IGNvcmUvYC4gVGhlcmVmb3JlLCBgQ09ORklHX05FVGAgaXMgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIEZ1cnRoZXJtb3JlLCBgU01QYCBpcyBhbHNvIHJlbGV2YW50LCBwYXJ0aWN1bGFybHkgYmVjYXVzZSBvZiB0aGUgdGhyZWFkZWQgYmFja2xvZyBOQVBJIHByb2Nlc3NpbmcuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gYWxsIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYCBhcmUgaW4gb3JkZXI6CgoqICAgYFdvcnRoRnV6emluZ2A6IERlZmluaXRlbHkgdHJ1ZS4KKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlc2NoZWR1bGluZyBpbiBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKWAgd2l0aGluIHRoZSBuZXR3b3JraW5nIGNvcmUgKGBuZXQvY29yZS9kZXYuY2ApLiBJdCBlbnN1cmVzIGBjb25kX3Jlc2NoZWQoKWAgaXMgY2FsbGVkIG9uIGV2ZXJ5IGV4aXQsIG5vdCBqdXN0IGR1cmluZyByZXBvbGwgaXRlcmF0aW9ucy4gVGhpcyBpcyBjcnVjaWFsIGFzIGl0IHJ1bnMgd2l0aGluIHRocmVhZGVkIE5BUEkgd29ya2VyIHRocmVhZHMgYW5kIGJhY2tsb2cgTkFQSSwgYW5kIGlzIGFjY2Vzc2libGUgaW4gYW55IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBTb3VuZHMgc29saWQuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O25hcGlfdGhyZWFkZWRfcG9sbF9sb29wJiMzNDssICYjMzQ7bmFwaV90aHJlYWRlZF9wb2xsJiMzNDssICYjMzQ7cnVuX2JhY2tsb2dfbmFwaSYjMzQ7LCAmIzM0O25hcGlfc2V0X3RocmVhZGVkJiMzNDtdYCAtIFl1cCwgdGhhdCYjMzk7cyBzcG90IG9uLCB0aGVzZSBzeW1ib2xzIGVuY29tcGFzcyB0aGUga2V5IGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGUgcGF0Y2guCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtORVQmIzM0OywgJiMzNDtTTVAmIzM0O11gIC0gWWVzLCBgTkVUYCBhbmQgYFNNUGAgYXJlIHRoZSBrZXkgZW5hYmxpbmcgY29uZmlncyB0aGF0IHdlIGFscmVhZHkgaWRlbnRpZmllZC4KCkFscmlnaHQsIGEgZmluYWwgc2FuaXR5IGNoZWNrLi4uIEV2ZXJ5dGhpbmcgaXMgcHJlY2lzZSwgY29tcGxldGUsIGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgcmVxdWlyZWQuIE5vIGlzc3VlcyBkZXRlY3RlZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7U01QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmFwaV90aHJlYWRlZF9wb2xsX2xvb3AmIzM0OywKICAgICYjMzQ7bmFwaV90aHJlYWRlZF9wb2xsJiMzNDssCiAgICAmIzM0O3J1bl9iYWNrbG9nX25hcGkmIzM0OywKICAgICYjMzQ7bmFwaV9zZXRfdGhyZWFkZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2NoZWR1bGluZyBhbmQgY29vcGVyYXRpdmUgeWllbGQgYmVoYXZpb3IgKGNvbmRfcmVzY2hlZCkgaW4gbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gKG5ldC9jb3JlL2Rldi5jKS4gVGhpcyBjb2RlIGV4ZWN1dGVzIGluIHRocmVhZGVkIE5BUEkgYW5kIGJhY2tsb2cgcG9sbGluZyBrdGhyZWFkcyBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25hcGlfdGhyZWFkZWRfcG9sbF9sb29wJiMzNDssCiAgICAmIzM0O25hcGlfdGhyZWFkZWRfcG9sbCYjMzQ7LAogICAgJiMzNDtydW5fYmFja2xvZ19uYXBpJiMzNDssCiAgICAmIzM0O25hcGlfc2V0X3RocmVhZGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNjaGVkdWxpbmcgYW5kIGNvb3BlcmF0aXZlIHlpZWxkIGJlaGF2aW9yIChjb25kX3Jlc2NoZWQpIGluIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKCkgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChuZXQvY29yZS9kZXYuYykuIFRoaXMgY29kZSBleGVjdXRlcyBpbiB0aHJlYWRlZCBOQVBJIGFuZCBiYWNrbG9nIHBvbGxpbmcga3RocmVhZHMgYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBjYWxsIGBjb25kX3Jlc2NoZWQoKWAgdW5jb25kaXRpb25hbGx5IG9uIGV2ZXJ5IHBhc3MgdGhyb3VnaCB0aGUgbG9vcCwgcmF0aGVyIHRoYW4gb25seSB3aGVuIGByZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgaXMgYSB0YXNrIHNjaGVkdWxpbmcgLyBDUFUgeWllbGRpbmcgY2hhbmdlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJucyB3aXRob3V0IHNjaGVkdWxpbmcuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgZGF0YSBidWZmZXJzLCBhbHRlciBwYWNrZXQvZGF0YSBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3Iga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTc0ZDM2NmE0ZGM2YzIxY2IwMWFkYWY2MmZiODhhNTg5YWY2NjJiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTc6NTc6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDM4MzM2ODU4YzE2OGYuLjVjN2Y4Y2RmODQ0MzUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC03OTI0LDExICYjNDM7NzkyNCwxMyBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQlncm9fZmx1c2hfbm9ybWFsKCZhbXA7bmFwaS0mZ3Q7Z3JvLCBIWiAmZ3Q7PSAxMDAwKTsKIAkJbG9jYWxfYmhfZW5hYmxlKCk7CiAKLQkJLyogQ2FsbCBjb25kX3Jlc2NoZWQgaGVyZSB0byBhdm9pZCB3YXRjaGRvZyB3YXJuaW5ncy4gKi8KLQkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykgewomIzQzOwkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykKIAkJCXJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpOwotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCX0KJiM0MzsKJiM0MzsJCS8qIG5hcGlfdGhyZWFkX3dhaXQoKSBjYW4gcmV0dXJuIHdpdGhvdXQgc2NoZWR1bGluZywgc28geWllbGQgb24KJiM0MzsJCSAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuCiYjNDM7CQkgKi8KJiM0MzsJCWNvbmRfcmVzY2hlZCgpOwogCiAJCWlmICghcmVwb2xsKQogCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgdGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGNvZGUgY2hhbmdlIHRoYXQgY291bGQgaW50cm9kdWNlIGtlcm5lbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gTGV0JiMzOTtzIGRpdmUgaW4uCgpGaXJzdCwgSSBzZWUgdGhlIGBkaWZmYCBpdHNlbGYuIEl0IHNlZW1zIHRvIGJlIGluIGBuZXQvY29yZS9kZXYuY2AuIEFscmlnaHQsIG5ldHdvcmsgZGV2aWNlIGNvcmUsIG5vdCBhIGJhZCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBtZW1vcnkgYnVncy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjaGFuZ2UgYWN0dWFsbHkgKmlzKi4gSSBzZWUgc29tZSBhZGRpdGlvbnMgYXJvdW5kIGxpbmUgNzkyNC4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSBpcyByZWxhdGVkIHRvIHRoZSBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaW5jbHVkZXMgYSBgY29uZF9yZXNjaGVkKClgIGNhbGwuIEl0JiMzOTtzIGJlaW5nIG1vdmVkIG91dCBvZiBhIGNvbmRpdGlvbmFsIGJsb2NrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgZG9uZSwgdG8gYXNzZXNzIGlmIHRoZXJlIG1pZ2h0IGJlIGEgbWVtb3J5IHNhZmV0eSBjb25jZXJuLiBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGUgcGxhY2VtZW50IGlzIHJlbGF0ZWQgdG8gd2F0Y2hkb2cgd2FybmluZ3MgYW5kIHNjaGVkdWxpbmcsIGJ1dCB0aGUgYWRkZWQgY29tbWVudCBhYm91dCBgbmFwaV90aHJlYWRfd2FpdCgpYCBpcyBpbnRyaWd1aW5nLiBTZWVtcyBsaWtlIHRoZXJlJiMzOTtzIGEgcmVhc29uIGZvciBpdC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYXJvdW5kIHRoaXMgY2hhbmdlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBtZW1vcnkgaW1wbGljYXRpb25zLiBJIHdpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlIGFmZmVjdHMgbWVtb3J5IGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uLiBJdCYjMzk7cyB0b28gZWFybHkgdG8gc2F5IGlmIEtNU0FOIGlzIG5lZWRlZCwgYnV0IEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW91ciBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3OTAwOlx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjc5MDE6XHRcdFx0YnBmX25ldF9jdHggPSBicGZfbmV0X2N0eF9zZXQoXHUwMDI2X19icGZfbmV0X2N0eCk7XG43OTAyOlx0XG43OTAzOlx0XHRcdHNkID0gdGhpc19jcHVfcHRyKFx1MDAyNnNvZnRuZXRfZGF0YSk7XG43OTA0Olx0XHRcdHNkLVx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IHRydWU7XG43OTA1Olx0XG43OTA2Olx0XHRcdGhhdmUgPSBuZXRwb2xsX3BvbGxfbG9jayhuYXBpKTtcbjc5MDc6XHRcdFx0X19uYXBpX3BvbGwobmFwaSwgXHUwMDI2cmVwb2xsKTtcbjc5MDg6XHRcdFx0bmV0cG9sbF9wb2xsX3VubG9jayhoYXZlKTtcbjc5MDk6XHRcbjc5MTA6XHRcdFx0c2QtXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gZmFsc2U7XG43OTExOlx0XHRcdGJhcnJpZXIoKTtcbjc5MTI6XHRcbjc5MTM6XHRcdFx0aWYgKHNkX2hhc19ycHNfaXBpX3dhaXRpbmcoc2QpKSB7XG43OTE0Olx0XHRcdFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcbjc5MTU6XHRcdFx0XHRuZXRfcnBzX2FjdGlvbl9hbmRfaXJxX2VuYWJsZShzZCk7XG43OTE2Olx0XHRcdH1cbjc5MTc6XHRcdFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcbjc5MTg6XHRcdFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xuNzkxOTpcdFxuNzkyMDpcdFx0XHQvKiBXaGVuIGJ1c3kgcG9sbCBpcyBlbmFibGVkLCB0aGUgb2xkIHBhY2tldHMgYXJlIG5vdCBmbHVzaGVkIGluXG43OTIxOlx0XHRcdCAqIG5hcGlfY29tcGxldGVfZG9uZS4gU28gZmx1c2ggdGhlbSBoZXJlLlxuNzkyMjpcdFx0XHQgKi9cbjc5MjM6XHRcdFx0aWYgKGJ1c3lfcG9sbF9sYXN0X3FzKVxuNzkyNDpcdFx0XHRcdGdyb19mbHVzaF9ub3JtYWwoXHUwMDI2bmFwaS1cdTAwM2Vncm8sIEhaIFx1MDAzZT0gMTAwMCk7XG43OTI1Olx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuNzkyNjpcdFxuNzkyNzpcdFx0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxuNzkyODpcdFx0XHRcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xuNzkyOTpcdFxuNzkzMDpcdFx0XHQvKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIHlpZWxkIG9uXG43OTMxOlx0XHRcdCAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuXG43OTMyOlx0XHRcdCAqL1xuNzkzMzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjc5MzQ6XHRcbjc5MzU6XHRcdFx0aWYgKCFyZXBvbGwpXG43OTM2Olx0XHRcdFx0YnJlYWs7XG43OTM3Olx0XHR9XG43OTM4Olx0XG43OTM5Olx0XHRpZiAoYnVzeV9wb2xsX2xhc3RfcXMpXG43OTQwOlx0XHRcdCpidXN5X3BvbGxfbGFzdF9xcyA9IGxhc3RfcXM7XG43OTQxOlx0fVxuNzk0MjpcdFxuNzk0MzpcdHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpXG43OTQ0Olx0e1xuNzk0NTpcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGF0YTtcbjc5NDY6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGppZmZpZXM7XG43OTQ3Olx0XHRib29sIHdhbnRfYnVzeV9wb2xsO1xuNzk0ODpcdFx0Ym9vbCBpbl9idXN5X3BvbGw7XG43OTQ5Olx0XHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNwoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIHdpdGhpbiBgbmV0L2NvcmUvZGV2LmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IHRoZSByZXNjaGVkdWxpbmcgbG9naWM7IG1vdmluZyBgY29uZF9yZXNjaGVkKClgIG91dHNpZGUgb2YgYSBjb25kaXRpb25hbCBibG9jay4gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGlzIGlzIHB1cmVseSBhIGNoYW5nZSBpbiBob3cgdGhlIGtlcm5lbCB0aHJlYWQgeWllbGRzIHRpbWUuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gZm9yIG15IHB1cnBvc2VzIGhlcmUgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLCBhbmQgSSB0aGluayBub3QuIEl0JiMzOTtzIGp1c3QgYSByZXNjaGVkdWxpbmcgY2hhbmdlIOKAkyBubyBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gdXNlci1zcGFjZSBjb3BpZXMsIG5vIHBvdGVudGlhbCBmb3IgaW5mbyBsZWFrcyBzdGVtbWluZyBmcm9tIHVuaXRpYWxpemVkIG1lbW9yeSBvciBhbnl0aGluZyBvZiB0aGF0IG5hdHVyZS4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBtb2RpZmljYXRpb25zIHRvIGluaXRpYWxpemF0aW9uLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIGJvdW5kcyBjaGVja2luZywgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlcy4KClNvLCB0aGlzIGNsZWFybHkgaGFzICpub3RoaW5nKiB0byBkbyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gU3RhbmRhcmQgc2FuaXRpemVycywgb3IgZXZlbiBLQVNBTiBhbmQgbG9ja2RlcCwgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGdlbmVyYWwgcmVncmVzc2lvbnMgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkLiBLTVNBTiBpcyBkZWZpbml0ZWx5IG92ZXJraWxsIGhlcmUuCgpMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgS01TQU4gY3JpdGVyaWEsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKS01TQU4gc2F5cyBgTmVlZHNLTVNBTj10cnVlYCAqb25seSogaWYgdGhlcmUmIzM5O3MgYW55IGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2Y6CjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHRocm91Z2ggdmFyaW91cyBtZWFucykgd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuIE5vcGUuCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gTm9wZS4KMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBOb3BlLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlcy4gTm9wZS4KCkFuZCBpdCBzYXlzIGBOZWVkc0tNU0FOPWZhbHNlYCBpZjoKKiAgIFRoZSByaXNrcyBhcmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIOKAkyB0aGluZ3MgS0FTQU4vTE9DS0RFUC9zdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGNhdGNoLiBFeGFjdGx5IQoqICAgQWxsIHRvdWNoZWQgc3RydWN0dXJlcyBhcmUgemVyb2VkIG9yIGluaXRpYWxpemVkLiBBbmQgYXMgZmFyIGFzIEkgY2FuIHNlZSwgYWxsIHN0cnVjdHVyZSBhcmUgemVyb2VkLgoqICAgVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgbGVha3MuIFByZWNpc2VseS4KClRoZXJlZm9yZSwgaXQmIzM5O3MgY2xlYXI6IGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcCgpYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGNhbGwgYGNvbmRfcmVzY2hlZCgpYCB1bmNvbmRpdGlvbmFsbHkgb24gZXZlcnkgcGFzcyB0aHJvdWdoIHRoZSBsb29wLCByYXRoZXIgdGhhbiBvbmx5IHdoZW4gYHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xc2AgaXMgdHJ1ZS4gVGhpcyBpcyBhIHRhc2sgc2NoZWR1bGluZyAvIENQVSB5aWVsZGluZyBjaGFuZ2UgdG8gYXZvaWQgd2F0Y2hkb2cgd2FybmluZ3Mgd2hlbiBgbmFwaV90aHJlYWRfd2FpdCgpYCByZXR1cm5zIHdpdGhvdXQgc2NoZWR1bGluZy5cblxuVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCBkYXRhIGJ1ZmZlcnMsIGFsdGVyIHBhY2tldC9kYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBjYWxsIGBjb25kX3Jlc2NoZWQoKWAgdW5jb25kaXRpb25hbGx5IG9uIGV2ZXJ5IHBhc3MgdGhyb3VnaCB0aGUgbG9vcCwgcmF0aGVyIHRoYW4gb25seSB3aGVuIGByZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgaXMgYSB0YXNrIHNjaGVkdWxpbmcgLyBDUFUgeWllbGRpbmcgY2hhbmdlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJucyB3aXRob3V0IHNjaGVkdWxpbmcuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgZGF0YSBidWZmZXJzLCBhbHRlciBwYWNrZXQvZGF0YSBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3Iga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1Nzo1OS42NDc0MzU3MzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA2ODk2NzExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5hcGlfdGhyZWFkZWRfcG9sbF9sb29wXCIsXG4gICAgXCJuYXBpX3RocmVhZGVkX3BvbGxcIixcbiAgICBcInJ1bl9iYWNrbG9nX25hcGlcIixcbiAgICBcIm5hcGlfc2V0X3RocmVhZGVkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBjYWxsIGBjb25kX3Jlc2NoZWQoKWAgdW5jb25kaXRpb25hbGx5IG9uIGV2ZXJ5IHBhc3MgdGhyb3VnaCB0aGUgbG9vcCwgcmF0aGVyIHRoYW4gb25seSB3aGVuIGByZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgaXMgYSB0YXNrIHNjaGVkdWxpbmcgLyBDUFUgeWllbGRpbmcgY2hhbmdlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJucyB3aXRob3V0IHNjaGVkdWxpbmcuXFxuXFxuVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCBkYXRhIGJ1ZmZlcnMsIGFsdGVyIHBhY2tldC9kYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2NoZWR1bGluZyBhbmQgY29vcGVyYXRpdmUgeWllbGQgYmVoYXZpb3IgKGNvbmRfcmVzY2hlZCkgaW4gbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gKG5ldC9jb3JlL2Rldi5jKS4gVGhpcyBjb2RlIGV4ZWN1dGVzIGluIHRocmVhZGVkIE5BUEkgYW5kIGJhY2tsb2cgcG9sbGluZyBrdGhyZWFkcyBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTc6NTc6NTkuNjQ3NDQxNDI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY0MzU4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhNzRkMzY2YTRkYzZjMjFjYjAxYWRhZjYyZmI4OGE1ODlhZjY2MmI2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTc6NTc6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDM4MzM2ODU4YzE2OGYuLjVjN2Y4Y2RmODQ0MzUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC03OTI0LDExICs3OTI0LDEzIEBAIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0XFx0Z3JvX2ZsdXNoX25vcm1hbChcXHUwMDI2bmFwaS1cXHUwMDNlZ3JvLCBIWiBcXHUwMDNlPSAxMDAwKTtcXG4gXFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIFxcbi1cXHRcXHQvKiBDYWxsIGNvbmRfcmVzY2hlZCBoZXJlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzLiAqL1xcbi1cXHRcXHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKSB7XFxuK1xcdFxcdGlmIChyZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXMpXFxuIFxcdFxcdFxcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xcbi1cXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4tXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogbmFwaV90aHJlYWRfd2FpdCgpIGNhbiByZXR1cm4gd2l0aG91dCBzY2hlZHVsaW5nLCBzbyB5aWVsZCBvblxcbitcXHRcXHQgKiBldmVyeSBleGl0LCBub3Qgb25seSB3aGVuIHRoZSBsb29wIGl0ZXJhdGVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcbiBcXHRcXHRpZiAoIXJlcG9sbClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjAwLjE4NDcyMDI2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzkwNDA5Njk0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCIsXG4gICAgXCJTTVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYXBpX3RocmVhZGVkX3BvbGxfbG9vcFwiLFxuICAgIFwibmFwaV90aHJlYWRlZF9wb2xsXCIsXG4gICAgXCJydW5fYmFja2xvZ19uYXBpXCIsXG4gICAgXCJuYXBpX3NldF90aHJlYWRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNjaGVkdWxpbmcgYW5kIGNvb3BlcmF0aXZlIHlpZWxkIGJlaGF2aW9yIChjb25kX3Jlc2NoZWQpIGluIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKCkgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChuZXQvY29yZS9kZXYuYykuIFRoaXMgY29kZSBleGVjdXRlcyBpbiB0aHJlYWRlZCBOQVBJIGFuZCBiYWNrbG9nIHBvbGxpbmcga3RocmVhZHMgYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTc0ZDM2NmE0ZGM2YzIxY2IwMWFkYWY2MmZiODhhNTg5YWY2NjJiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTc6NTc6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAzODMzNjg1OGMxNjhmLi41YzdmOGNkZjg0NDM1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzkyNCwxMSArNzkyNCwxMyBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0Z3JvX2ZsdXNoX25vcm1hbChcdTAwMjZuYXBpLVx1MDAzZWdybywgSFogXHUwMDNlPSAxMDAwKTtcbiBcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXG4tXHRcdC8qIENhbGwgY29uZF9yZXNjaGVkIGhlcmUgdG8gYXZvaWQgd2F0Y2hkb2cgd2FybmluZ3MuICovXG4tXHRcdGlmIChyZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXMpIHtcbitcdFx0aWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcylcbiBcdFx0XHRyY3Vfc29mdGlycV9xc19wZXJpb2RpYyhsYXN0X3FzKTtcbi1cdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdFx0fVxuK1xuK1x0XHQvKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIHlpZWxkIG9uXG4rXHRcdCAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuXG4rXHRcdCAqL1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbiBcdFx0aWYgKCFyZXBvbGwpXG4gXHRcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODowMC4xODQ3MjIwODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDU2NTg2MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgY2FyZWZ1bGx5IGV4YW1pbmluZyB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvZGV2LmNgLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgdGhlIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgZnVuY3Rpb24sIHdoaWNoIHN1Z2dlc3RzIGl04oCZcyBkZWFsaW5nIHdpdGggbmV0d29yayBpbnRlcmZhY2UgaW50ZXJydXB0IGhhbmRsaW5nIGFuZCBob3cgd2UgZGVhbCB3aXRoIHRoZSBOQVBJIChOZXcgQVBJKSBwb2xsaW5nIG1lY2hhbmlzbS4gVGhlIGRpZmYgaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIGl0LlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGFyb3VuZCBsaW5lIDc5MjQsIEkgY2FuIHNlZSB0aGUgb3JpZ2luYWwgbG9naWMgYW5kIHRoZW4gdGhlIGNoYW5nZXMuIEl0IHNlZW1zIHRoZXkndmUgcmVvcmdhbml6ZWQgdGhlIGNvbmRpdGlvbmFsIGBjb25kX3Jlc2NoZWQoKWAgY2FsbC4gUHJldmlvdXNseSwgYGNvbmRfcmVzY2hlZCgpYCB3YXMgY2FsbGVkIG9ubHkgaWYgYHJlcG9sbGAgb3IgYGJ1c3lfcG9sbF9sYXN0X3FzYCB3ZXJlIHRydWUgKGFuZCBhZnRlciBgcmN1X3NvZnRpcnFfcXNfcGVyaW9kaWNgKS4gTm93IHRoZSBgY29uZF9yZXNjaGVkKClgIGNhbGwgaXMgKmFsd2F5cyogbWFkZS4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhlIG1vdGl2YXRpb24gaXMgdG8gXCJhdm9pZCB3YXRjaGRvZyB3YXJuaW5nc1wiIGFuZCBcInlpZWxkIG9uIGV2ZXJ5IGV4aXQuXCIgVGhlIG9yaWdpbmFsIGNvZGUgbWF5IGhhdmUgYmVlbiBibG9ja2luZyBmb3IgdG9vIGxvbmcgaW4gc29tZSBlZGdlIGNhc2VzLiBUaGUgY29tbWVudCByZWdhcmRpbmcgYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJuaW5nIHdpdGhvdXQgc2NoZWR1bGluZyBpbXBsaWVzIHRoZXkncmUgdHJ5aW5nIHRvIHByZXZlbnQgc3RhcnZhdGlvbiBvZiBvdGhlciB0aHJlYWRzIG9yIHByb2Nlc3NlcyBpZiB0aGUgTkFQSSBsb29wIGJlY29tZXMgYnVzeS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBnb29kIGNoYW5nZSwgYSBzdWJ0bGUgb3B0aW1pemF0aW9uIHBlcmhhcHMuIFRoZSB3YXRjaGRvZyB3YXJuaW5ncyBhcmUgYSBjbHVlIHRoYXQgdGhlIG9yaWdpbmFsIGxvZ2ljIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gbGF0ZW5jeSBvciBldmVuIHN5c3RlbSBoYW5ncyB1bmRlciBoZWF2eSBuZXR3b3JrIGxvYWQuIFRoaXMgY2hhbmdlIGVzc2VudGlhbGx5IGFkZHMgYSB5aWVsZCBwb2ludCB0byB0aGUgcG9sbCBsb29wLiBJdCBsb29rcyBsaWtlIGl0IGNvdWxkIGltcHJvdmUgb3ZlcmFsbCBzeXN0ZW0gcmVzcG9uc2l2ZW5lc3MsIGV2ZW4gaWYgaXQgY29tZXMgYXQgYSBzbWFsbCBjb3N0IGluIHRocm91Z2hwdXQgdW5kZXIgaWRlYWwgY29uZGl0aW9ucy4gQnV0IHRoZSBkZXZpbCdzIGluIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8ga2VlcCBjb250ZXh0IGluIG1pbmQsIGFuZCBhbHNvIHVuZGVyc3RhbmQgd2hldGhlciBvciBub3QgdGhpcyBjaGFuZ2Ugd2lsbCBoYXZlIGEgbWVhc3VyYWJsZSBpbXBhY3Qgb24gdGhlIHN5c3RlbXMgdGhhdCB1c2UgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODowOS4yNDEzMTA1MTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTcyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzkwMDpcXHRcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuNzkwMTpcXHRcXHRcXHRicGZfbmV0X2N0eCA9IGJwZl9uZXRfY3R4X3NldChcXHUwMDI2X19icGZfbmV0X2N0eCk7XFxuNzkwMjpcXHRcXG43OTAzOlxcdFxcdFxcdHNkID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzb2Z0bmV0X2RhdGEpO1xcbjc5MDQ6XFx0XFx0XFx0c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IHRydWU7XFxuNzkwNTpcXHRcXG43OTA2OlxcdFxcdFxcdGhhdmUgPSBuZXRwb2xsX3BvbGxfbG9jayhuYXBpKTtcXG43OTA3OlxcdFxcdFxcdF9fbmFwaV9wb2xsKG5hcGksIFxcdTAwMjZyZXBvbGwpO1xcbjc5MDg6XFx0XFx0XFx0bmV0cG9sbF9wb2xsX3VubG9jayhoYXZlKTtcXG43OTA5OlxcdFxcbjc5MTA6XFx0XFx0XFx0c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IGZhbHNlO1xcbjc5MTE6XFx0XFx0XFx0YmFycmllcigpO1xcbjc5MTI6XFx0XFxuNzkxMzpcXHRcXHRcXHRpZiAoc2RfaGFzX3Jwc19pcGlfd2FpdGluZyhzZCkpIHtcXG43OTE0OlxcdFxcdFxcdFxcdGxvY2FsX2lycV9kaXNhYmxlKCk7XFxuNzkxNTpcXHRcXHRcXHRcXHRuZXRfcnBzX2FjdGlvbl9hbmRfaXJxX2VuYWJsZShzZCk7XFxuNzkxNjpcXHRcXHRcXHR9XFxuNzkxNzpcXHRcXHRcXHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xcbjc5MTg6XFx0XFx0XFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xcbjc5MTk6XFx0XFxuNzkyMDpcXHRcXHRcXHQvKiBXaGVuIGJ1c3kgcG9sbCBpcyBlbmFibGVkLCB0aGUgb2xkIHBhY2tldHMgYXJlIG5vdCBmbHVzaGVkIGluXFxuNzkyMTpcXHRcXHRcXHQgKiBuYXBpX2NvbXBsZXRlX2RvbmUuIFNvIGZsdXNoIHRoZW0gaGVyZS5cXG43OTIyOlxcdFxcdFxcdCAqL1xcbjc5MjM6XFx0XFx0XFx0aWYgKGJ1c3lfcG9sbF9sYXN0X3FzKVxcbjc5MjQ6XFx0XFx0XFx0XFx0Z3JvX2ZsdXNoX25vcm1hbChcXHUwMDI2bmFwaS1cXHUwMDNlZ3JvLCBIWiBcXHUwMDNlPSAxMDAwKTtcXG43OTI1OlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjc5MjY6XFx0XFxuNzkyNzpcXHRcXHRcXHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxcbjc5Mjg6XFx0XFx0XFx0XFx0cmN1X3NvZnRpcnFfcXNfcGVyaW9kaWMobGFzdF9xcyk7XFxuNzkyOTpcXHRcXG43OTMwOlxcdFxcdFxcdC8qIG5hcGlfdGhyZWFkX3dhaXQoKSBjYW4gcmV0dXJuIHdpdGhvdXQgc2NoZWR1bGluZywgc28geWllbGQgb25cXG43OTMxOlxcdFxcdFxcdCAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuXFxuNzkzMjpcXHRcXHRcXHQgKi9cXG43OTMzOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjc5MzQ6XFx0XFxuNzkzNTpcXHRcXHRcXHRpZiAoIXJlcG9sbClcXG43OTM2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjc5Mzc6XFx0XFx0fVxcbjc5Mzg6XFx0XFxuNzkzOTpcXHRcXHRpZiAoYnVzeV9wb2xsX2xhc3RfcXMpXFxuNzk0MDpcXHRcXHRcXHQqYnVzeV9wb2xsX2xhc3RfcXMgPSBsYXN0X3FzO1xcbjc5NDE6XFx0fVxcbjc5NDI6XFx0XFxuNzk0MzpcXHRzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKVxcbjc5NDQ6XFx0e1xcbjc5NDU6XFx0XFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGF0YTtcXG43OTQ2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGppZmZpZXM7XFxuNzk0NzpcXHRcXHRib29sIHdhbnRfYnVzeV9wb2xsO1xcbjc5NDg6XFx0XFx0Ym9vbCBpbl9idXN5X3BvbGw7XFxuNzk0OTpcXHRcXHR1bnNpZ25lZCBsb25nIHZhbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTc6NTg6MDkuMjQxNzA5NjU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0OTc2MDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGxhbmRzY2FwZSBvZiBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIHN5c3RlbT8gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIGl0cyBjYWxsIHNpdGVzIOKAkyBldmVyeSBpbnN0YW5jZSB3aGVyZSBpdCdzIGludm9rZWQuIE1vcmUgaW1wb3J0YW50bHksIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBjb250ZXh0LiBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGF5IHdoZW4gaXQncyBjYWxsZWQ/IFdoYXQgdXBzdHJlYW0gY2FsbGVycyB0cmlnZ2VyIGl0PyBVbmRlcnN0YW5kaW5nIHRoZSAnd2h5JyBiZWhpbmQgaXRzIGV4ZWN1dGlvbiBpcyBqdXN0IGFzIGNyaXRpY2FsIGFzIGtub3dpbmcgdGhlICd3aGVyZS4nIFRoaXMgd2lsbCBoZWxwIG1lIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSBhbmQgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIG9wZXJhdGlvbmFsIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDQ5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoxMS45OTE0NzQwODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQxMTk3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmFwaV90aHJlYWRlZF9wb2xsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTE2NjY9RVhQT1JUX1NZTUJPTChuZXRkZXZfbm90aWZ5X3BlZXJzKTtcXG5uZXQvY29yZS9kZXYuYy0xNjY3LVxcbm5ldC9jb3JlL2Rldi5jOjE2Njg6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSk7XFxubmV0L2NvcmUvZGV2LmMtMTY2OS1cXG5uZXQvY29yZS9kZXYuYz0xNjcwPXN0YXRpYyBpbnQgbmFwaV9rdGhyZWFkX2NyZWF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xNjc3LVxcdCAqL1xcbm5ldC9jb3JlL2Rldi5jOjE2Nzg6XFx0bi1cXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4obmFwaV90aHJlYWRlZF9wb2xsLCBuLCBcXFwibmFwaS8lcy0lZFxcXCIsXFxubmV0L2NvcmUvZGV2LmMtMTY3OS1cXHRcXHRcXHRcXHRuLVxcdTAwM2VkZXYtXFx1MDAzZW5hbWUsIG4tXFx1MDAzZW5hcGlfaWQpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTM0MD1zdGF0aWMgdm9pZCBuYXBpX3NjaGVkdWxlX3JwcyhzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzNTMtXFxubmV0L2NvcmUvZGV2LmM6NTM1NDpcXHRcXHQvKiBJZiBub3QgY2FsbGVkIGZyb20gbmV0X3J4X2FjdGlvbigpIG9yIG5hcGlfdGhyZWFkZWRfcG9sbCgpXFxubmV0L2NvcmUvZGV2LmMtNTM1NS1cXHRcXHQgKiB3ZSBoYXZlIHRvIHJhaXNlIE5FVF9SWF9TT0ZUSVJRLlxcbm5ldC9jb3JlL2Rldi5jLTUzNTYtXFx0XFx0ICovXFxubmV0L2NvcmUvZGV2LmM6NTM1NzpcXHRcXHRpZiAoIW15c2QtXFx1MDAzZWluX25ldF9yeF9hY3Rpb24gXFx1MDAyNlxcdTAwMjYgIW15c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbClcXG5uZXQvY29yZS9kZXYuYy01MzU4LVxcdFxcdFxcdF9fcmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1JYX1NPRlRJUlEpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9Nzg2NT1zdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzg4OC1cXG5uZXQvY29yZS9kZXYuYzo3ODg5OnN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG5uZXQvY29yZS9kZXYuYy03ODkwLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICpidXN5X3BvbGxfbGFzdF9xcylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5MDMtXFx0XFx0c2QgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNnNvZnRuZXRfZGF0YSk7XFxubmV0L2NvcmUvZGV2LmM6NzkwNDpcXHRcXHRzZC1cXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gdHJ1ZTtcXG5uZXQvY29yZS9kZXYuYy03OTA1LVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzkwOS1cXG5uZXQvY29yZS9kZXYuYzo3OTEwOlxcdFxcdHNkLVxcdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSBmYWxzZTtcXG5uZXQvY29yZS9kZXYuYy03OTExLVxcdFxcdGJhcnJpZXIoKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5NDItXFxubmV0L2NvcmUvZGV2LmM6Nzk0MzpzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKVxcbm5ldC9jb3JlL2Rldi5jLTc5NDQte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzk2My1cXG5uZXQvY29yZS9kZXYuYzo3OTY0OlxcdFxcdG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKG5hcGksIHdhbnRfYnVzeV9wb2xsID8gXFx1MDAyNmxhc3RfcXMgOiBOVUxMKTtcXG5uZXQvY29yZS9kZXYuYy03OTY1LVxcdH1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEzMzk5PXN0YXRpYyB2b2lkIHJ1bl9iYWNrbG9nX25hcGkodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzNDAyLVxcbm5ldC9jb3JlL2Rldi5jOjEzNDAzOlxcdG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKFxcdTAwMjZzZC1cXHUwMDNlYmFja2xvZywgTlVMTCk7XFxubmV0L2NvcmUvZGV2LmMtMTM0MDQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoxMi4wNDU2MDA3MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzM4MzcxMDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcnVuX2JhY2tsb2dfbmFwaWAgYW5kIFRocmVhZGVkIE4tQVBJIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgcnVuX2JhY2tsb2dfbmFwaWAgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRocmVhZGVkIE4tQVBJIGNhbGxzLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBmb3IgbWFuYWdpbmcgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMsIHBlcmhhcHMgd2l0aGluIGEgd29ya2VyIHRocmVhZCBjb250ZXh0LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIGFuZCBob3cgZGF0YSBpcyBtYXJzaGFsZWQgYmV0d2VlbiB0aGUgbWFpbiBKYXZhU2NyaXB0IHRocmVhZCBhbmQgdGhlIHdvcmtlciB0aHJlYWRzIHVzaW5nIE4tQVBJLlxuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kOlxuXG4qICAgKipUaGUgb3JpZ2luIG9mIGBydW5fYmFja2xvZ19uYXBpYDoqKiBJcyB0aGlzIGZ1bmN0aW9uIHBhcnQgb2YgYSBjdXN0b20gYWRkb24sIGEgbGlicmFyeSwgb3IgYSBjb3JlIE5vZGUuanMgZmVhdHVyZT8gS25vd2luZyBpdHMgcHJvdmVuYW5jZSB3aWxsIGhlbHAgbWUgaWRlbnRpZnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBhbmQgdXBzdHJlYW0gaXNzdWVzLlxuKiAgICoqVGhlIFwiYmFja2xvZ1wiOioqIFdoYXQgZXhhY3RseSBpcyBiZWluZyBcImJhY2tsb2dnZWRcIj8gSXMgaXQgdGFza3MsIGZ1bmN0aW9uIGNhbGxzLCBkYXRhIHVwZGF0ZXMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGJhY2tsb2cgaXMgY3J1Y2lhbCB0byBwaW5wb2ludGluZyBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIGluZWZmaWNpZW5jaWVzLlxuKiAgICoqVGhyZWFkIHNhZmV0eToqKiBBcmUgdGhlcmUgbXV0ZXhlcywgYXRvbWljcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdXNlZCB3aXRoaW4gYHJ1bl9iYWNrbG9nX25hcGlgPyBPciBpcyBpdCBhc3N1bWluZyBhIHNpbXBsZSwgbm9uLWNvbmN1cnJlbnQgZW52aXJvbm1lbnQ/IElmIHRoZSBsYXR0ZXIsIGl0J3MgYSBodWdlIHJlZCBmbGFnIHdoZW4gZGVhbGluZyB3aXRoIHRocmVhZGVkIE4tQVBJLlxuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSG93IGFyZSBlcnJvcnMgcHJvcGFnYXRlZCBmcm9tIHRoZSB3b3JrZXIgdGhyZWFkcyBiYWNrIHRvIHRoZSBKYXZhU2NyaXB0IGNvZGU/IEFyZSBleGNlcHRpb25zIGNhdWdodCBhbmQgY29udmVydGVkIHRvIE4tQVBJIGVycm9yIGNvZGVzPyBQcm9wZXIgZXJyb3IgaGFuZGxpbmcgaXMgZXNzZW50aWFsIGZvciByZWxpYWJpbGl0eS5cbiogICAqKk1lbW9yeSBtYW5hZ2VtZW50OioqIEhvdyBpcyBtZW1vcnkgbWFuYWdlZCBiZXR3ZWVuIHRoZSB0aHJlYWRzPyBJcyB0aGVyZSBhIHJpc2sgb2YgbWVtb3J5IGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGlzc3VlcywgZXNwZWNpYWxseSB3aGVuIHBhc3NpbmcgZGF0YSBiZXR3ZWVuIHRoZSBDKysgYW5kIEphdmFTY3JpcHQgcmVhbG1zP1xuKiAgICoqVGhlIE4tQVBJIGNvbnRleHQ6KiogV2hhdCBpcyB0aGUgTi1BUEkgZW52aXJvbm1lbnQgbGlrZSB3aGVuIGBydW5fYmFja2xvZ19uYXBpYCBpcyBpbnZva2VkPyBJcyBpdCB3aXRoaW4gYSB3b3JrZXIgdGhyZWFkIG9yIHRoZSBtYWluIHRocmVhZD8gS25vd2luZyB0aGlzIGlzIGZ1bmRhbWVudGFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBOLUFQSSBBUElzIHNob3VsZCBvciBzaG91bGQgbm90IGJlIHVzZWQgaW4gdGhpcyBjb250ZXh0LlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSB0byBjaGVjayBmb3IgYW55IHVzZSBvZiB0aHJlYWQtdW5zYWZlIE4tQVBJIEFQSXMgd2l0aGluIGBydW5fYmFja2xvZ19uYXBpYC4gVGhhdCB3aWxsIGxpa2VseSBiZSB0aGUgZmlyc3QgcG9pbnQgdG8gYXVkaXQuIEkgYWxzbyBuZWVkIHRvIHRyYWNrIHRoZSBwYXRoIG9mIGFueSBkYXRhIHRvIGVuc3VyZSBpdCBpcyB0aHJlYWQgc2FmZSBhbmQgdGhhdCB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBkYXRhIGlzIHByb3Blcmx5IGFjY291bnRlZCBmb3IuIE9uY2UgSSBoYXZlIHRob3NlIGRldGFpbHMsIEknbGwgYXNzZXNzIGFueSBib3R0bGVuZWNrcyBhbmQgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoxNi4zODM5NzYyNDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4NzAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc4NzA6XFx0XFx0XFx0LyogVGVzdGluZyBTQ0hFRF9USFJFQURFRCBiaXQgaGVyZSB0byBtYWtlIHN1cmUgdGhlIGN1cnJlbnRcXG43ODcxOlxcdFxcdFxcdCAqIGt0aHJlYWQgb3ducyB0aGlzIG5hcGkgYW5kIGNvdWxkIHBvbGwgb24gdGhpcyBuYXBpLlxcbjc4NzI6XFx0XFx0XFx0ICogVGVzdGluZyBTQ0hFRCBiaXQgaXMgbm90IGVub3VnaCBiZWNhdXNlIFNDSEVEIGJpdCBtaWdodCBiZVxcbjc4NzM6XFx0XFx0XFx0ICogc2V0IGJ5IHNvbWUgb3RoZXIgYnVzeSBwb2xsIHRocmVhZCBvciBieSBuYXBpX2Rpc2FibGUoKS5cXG43ODc0OlxcdFxcdFxcdCAqL1xcbjc4NzU6XFx0XFx0XFx0aWYgKHRlc3RfYml0KE5BUElfU1RBVEVfU0NIRURfVEhSRUFERUQsIFxcdTAwMjZuYXBpLVxcdTAwM2VzdGF0ZSkpIHtcXG43ODc2OlxcdFxcdFxcdFxcdFdBUk5fT04oIWxpc3RfZW1wdHkoXFx1MDAyNm5hcGktXFx1MDAzZXBvbGxfbGlzdCkpO1xcbjc4Nzc6XFx0XFx0XFx0XFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbjc4Nzg6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzg3OTpcXHRcXHRcXHR9XFxuNzg4MDpcXHRcXG43ODgxOlxcdFxcdFxcdHNjaGVkdWxlKCk7XFxuNzg4MjpcXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbjc4ODM6XFx0XFx0fVxcbjc4ODQ6XFx0XFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbjc4ODU6XFx0XFxuNzg4NjpcXHRcXHRyZXR1cm4gLTE7XFxuNzg4NzpcXHR9XFxuNzg4ODpcXHRcXG43ODg5OlxcdHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG43ODkwOlxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICpidXN5X3BvbGxfbGFzdF9xcylcXG43ODkxOlxcdHtcXG43ODkyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGJ1c3lfcG9sbF9sYXN0X3FzID8gKmJ1c3lfcG9sbF9sYXN0X3FzIDogamlmZmllcztcXG43ODkzOlxcdFxcdHN0cnVjdCBicGZfbmV0X2NvbnRleHQgX19icGZfbmV0X2N0eCwgKmJwZl9uZXRfY3R4O1xcbjc4OTQ6XFx0XFx0c3RydWN0IHNvZnRuZXRfZGF0YSAqc2Q7XFxuNzg5NTpcXHRcXG43ODk2OlxcdFxcdGZvciAoOzspIHtcXG43ODk3OlxcdFxcdFxcdGJvb2wgcmVwb2xsID0gZmFsc2U7XFxuNzg5ODpcXHRcXHRcXHR2b2lkICpoYXZlO1xcbjc4OTk6XFx0XFxuNzkwMDpcXHRcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuNzkwMTpcXHRcXHRcXHRicGZfbmV0X2N0eCA9IGJwZl9uZXRfY3R4X3NldChcXHUwMDI2X19icGZfbmV0X2N0eCk7XFxuNzkwMjpcXHRcXG43OTAzOlxcdFxcdFxcdHNkID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzb2Z0bmV0X2RhdGEpO1xcbjc5MDQ6XFx0XFx0XFx0c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IHRydWU7XFxuNzkwNTpcXHRcXG43OTA2OlxcdFxcdFxcdGhhdmUgPSBuZXRwb2xsX3BvbGxfbG9jayhuYXBpKTtcXG43OTA3OlxcdFxcdFxcdF9fbmFwaV9wb2xsKG5hcGksIFxcdTAwMjZyZXBvbGwpO1xcbjc5MDg6XFx0XFx0XFx0bmV0cG9sbF9wb2xsX3VubG9jayhoYXZlKTtcXG43OTA5OlxcdFxcbjc5MTA6XFx0XFx0XFx0c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IGZhbHNlO1xcbjc5MTE6XFx0XFx0XFx0YmFycmllcigpO1xcbjc5MTI6XFx0XFxuNzkxMzpcXHRcXHRcXHRpZiAoc2RfaGFzX3Jwc19pcGlfd2FpdGluZyhzZCkpIHtcXG43OTE0OlxcdFxcdFxcdFxcdGxvY2FsX2lycV9kaXNhYmxlKCk7XFxuNzkxNTpcXHRcXHRcXHRcXHRuZXRfcnBzX2FjdGlvbl9hbmRfaXJxX2VuYWJsZShzZCk7XFxuNzkxNjpcXHRcXHRcXHR9XFxuNzkxNzpcXHRcXHRcXHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xcbjc5MTg6XFx0XFx0XFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xcbjc5MTk6XFx0XFxuNzkyMDpcXHRcXHRcXHQvKiBXaGVuIGJ1c3kgcG9sbCBpcyBlbmFibGVkLCB0aGUgb2xkIHBhY2tldHMgYXJlIG5vdCBmbHVzaGVkIGluXFxuNzkyMTpcXHRcXHRcXHQgKiBuYXBpX2NvbXBsZXRlX2RvbmUuIFNvIGZsdXNoIHRoZW0gaGVyZS5cXG43OTIyOlxcdFxcdFxcdCAqL1xcbjc5MjM6XFx0XFx0XFx0aWYgKGJ1c3lfcG9sbF9sYXN0X3FzKVxcbjc5MjQ6XFx0XFx0XFx0XFx0Z3JvX2ZsdXNoX25vcm1hbChcXHUwMDI2bmFwaS1cXHUwMDNlZ3JvLCBIWiBcXHUwMDNlPSAxMDAwKTtcXG43OTI1OlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjc5MjY6XFx0XFxuNzkyNzpcXHRcXHRcXHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxcbjc5Mjg6XFx0XFx0XFx0XFx0cmN1X3NvZnRpcnFfcXNfcGVyaW9kaWMobGFzdF9xcyk7XFxuNzkyOTpcXHRcXG43OTMwOlxcdFxcdFxcdC8qIG5hcGlfdGhyZWFkX3dhaXQoKSBjYW4gcmV0dXJuIHdpdGhvdXQgc2NoZWR1bGluZywgc28geWllbGQgb25cXG43OTMxOlxcdFxcdFxcdCAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuXFxuNzkzMjpcXHRcXHRcXHQgKi9cXG43OTMzOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjc5MzQ6XFx0XFxuNzkzNTpcXHRcXHRcXHRpZiAoIXJlcG9sbClcXG43OTM2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjc5Mzc6XFx0XFx0fVxcbjc5Mzg6XFx0XFxuNzkzOTpcXHRcXHRpZiAoYnVzeV9wb2xsX2xhc3RfcXMpXFxuNzk0MDpcXHRcXHRcXHQqYnVzeV9wb2xsX2xhc3RfcXMgPSBsYXN0X3FzO1xcbjc5NDE6XFx0fVxcbjc5NDI6XFx0XFxuNzk0MzpcXHRzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKVxcbjc5NDQ6XFx0e1xcbjc5NDU6XFx0XFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGF0YTtcXG43OTQ2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGppZmZpZXM7XFxuNzk0NzpcXHRcXHRib29sIHdhbnRfYnVzeV9wb2xsO1xcbjc5NDg6XFx0XFx0Ym9vbCBpbl9idXN5X3BvbGw7XFxuNzk0OTpcXHRcXHR1bnNpZ25lZCBsb25nIHZhbDtcXG43OTUwOlxcdFxcbjc5NTE6XFx0XFx0d2hpbGUgKCFuYXBpX3RocmVhZF93YWl0KG5hcGkpKSB7XFxuNzk1MjpcXHRcXHRcXHR2YWwgPSBSRUFEX09OQ0UobmFwaS1cXHUwMDNlc3RhdGUpO1xcbjc5NTM6XFx0XFxuNzk1NDpcXHRcXHRcXHR3YW50X2J1c3lfcG9sbCA9IHZhbCBcXHUwMDI2IE5BUElGX1NUQVRFX1RIUkVBREVEX0JVU1lfUE9MTDtcXG43OTU1OlxcdFxcdFxcdGluX2J1c3lfcG9sbCA9IHZhbCBcXHUwMDI2IE5BUElGX1NUQVRFX0lOX0JVU1lfUE9MTDtcXG43OTU2OlxcdFxcbjc5NTc6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHZhbCBcXHUwMDI2IE5BUElGX1NUQVRFX0RJU0FCTEUpKVxcbjc5NTg6XFx0XFx0XFx0XFx0d2FudF9idXN5X3BvbGwgPSBmYWxzZTtcXG43OTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoxNi4zODUxMDkxMjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE5MTY0OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaHJlYWRlZCBOQVBJIFBvbGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIHJlc2lkZXMgd2l0aGluIGBuZXQvY29yZS9kZXYuY2AuIEdpdmVuIHRoYXQncyBhIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gZmlsZSwgaXQgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbi4gSXMgaXQgYWN0dWFsbHkgdXNlZD8gWWVzLCBpdCBhcHBlYXJzIHRvIGJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhyZWFkZWQgTkFQSSBwb2xsaW5nIGFuZCBiYWNrbG9nIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgcGF0aC4gSXQncyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG5ldHdvcmsgZGV2aWNlcywgb3Igd2hlbiBkZWFsaW5nIHdpdGggYmFja2xvZyBwcm9jZXNzaW5nLiBOb3csIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgaW4gbW9yZSBkZXRhaWwuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgcnVuX2JhY2tsb2dfbmFwaWAgYW5kIHBpbnBvaW50IHdoZXJlIHRocmVhZGVkIE5BUEkgaXMgY29uZmlndXJlZCBvciBhY3RpdmVseSBlbmdhZ2VkLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIHNwZWNpZmljIGNvbnRleHRzIGluIHdoaWNoIHRoaXMgdGhyZWFkZWQgcG9sbGluZyBtZWNoYW5pc20gaXMgYmVpbmcgbGV2ZXJhZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoxOC40MDQyNzg2MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMzkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzM5MDpcXHRcXG4xMzM5MTpcXHRzdGF0aWMgaW50IGJhY2tsb2dfbmFwaV9zaG91bGRfcnVuKHVuc2lnbmVkIGludCBjcHUpXFxuMTMzOTI6XFx0e1xcbjEzMzkzOlxcdFxcdHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkID0gcGVyX2NwdV9wdHIoXFx1MDAyNnNvZnRuZXRfZGF0YSwgY3B1KTtcXG4xMzM5NDpcXHRcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBcXHUwMDI2c2QtXFx1MDAzZWJhY2tsb2c7XFxuMTMzOTU6XFx0XFxuMTMzOTY6XFx0XFx0cmV0dXJuIHRlc3RfYml0KE5BUElfU1RBVEVfU0NIRURfVEhSRUFERUQsIFxcdTAwMjZuYXBpLVxcdTAwM2VzdGF0ZSk7XFxuMTMzOTc6XFx0fVxcbjEzMzk4OlxcdFxcbjEzMzk5OlxcdHN0YXRpYyB2b2lkIHJ1bl9iYWNrbG9nX25hcGkodW5zaWduZWQgaW50IGNwdSlcXG4xMzQwMDpcXHR7XFxuMTM0MDE6XFx0XFx0c3RydWN0IHNvZnRuZXRfZGF0YSAqc2QgPSBwZXJfY3B1X3B0cihcXHUwMDI2c29mdG5ldF9kYXRhLCBjcHUpO1xcbjEzNDAyOlxcdFxcbjEzNDAzOlxcdFxcdG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKFxcdTAwMjZzZC1cXHUwMDNlYmFja2xvZywgTlVMTCk7XFxuMTM0MDQ6XFx0fVxcbjEzNDA1OlxcdFxcbjEzNDA2OlxcdHN0YXRpYyB2b2lkIGJhY2tsb2dfbmFwaV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxcbjEzNDA3OlxcdHtcXG4xMzQwODpcXHRcXHRzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCA9IHBlcl9jcHVfcHRyKFxcdTAwMjZzb2Z0bmV0X2RhdGEsIGNwdSk7XFxuMTM0MDk6XFx0XFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gXFx1MDAyNnNkLVxcdTAwM2ViYWNrbG9nO1xcbjEzNDEwOlxcdFxcbjEzNDExOlxcdFxcdG5hcGktXFx1MDAzZXRocmVhZCA9IHRoaXNfY3B1X3JlYWQoYmFja2xvZ19uYXBpKTtcXG4xMzQxMjpcXHRcXHRzZXRfYml0KE5BUElfU1RBVEVfVEhSRUFERUQsIFxcdTAwMjZuYXBpLVxcdTAwM2VzdGF0ZSk7XFxuMTM0MTM6XFx0fVxcbjEzNDE0OlxcdFxcbjEzNDE1OlxcdHN0YXRpYyBzdHJ1Y3Qgc21wX2hvdHBsdWdfdGhyZWFkIGJhY2tsb2dfdGhyZWFkcyA9IHtcXG4xMzQxNjpcXHRcXHQuc3RvcmVcXHRcXHRcXHQ9IFxcdTAwMjZiYWNrbG9nX25hcGksXFxuMTM0MTc6XFx0XFx0LnRocmVhZF9zaG91bGRfcnVuXFx0PSBiYWNrbG9nX25hcGlfc2hvdWxkX3J1bixcXG4xMzQxODpcXHRcXHQudGhyZWFkX2ZuXFx0XFx0PSBydW5fYmFja2xvZ19uYXBpLFxcbjEzNDE5OlxcdFxcdC50aHJlYWRfY29tbVxcdFxcdD0gXFxcImJhY2tsb2dfbmFwaS8ldVxcXCIsXFxuMTM0MjA6XFx0XFx0LnNldHVwXFx0XFx0XFx0PSBiYWNrbG9nX25hcGlfc2V0dXAsXFxuMTM0MjE6XFx0fTtcXG4xMzQyMjpcXHRcXG4xMzQyMzpcXHQvKlxcbjEzNDI0OlxcdCAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZFxcbjEzNDI1OlxcdCAqICAgICAgIHRvIHRha2UgdGhlIHJ0bmwgc2VtYXBob3JlLlxcbjEzNDI2OlxcdCAqL1xcbjEzNDI3OlxcdHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxcbjEzNDI4OlxcdHtcXG4xMzQyOTpcXHRcXHRpbnQgaSwgcmMgPSAtRU5PTUVNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoxOC40MDQ3MDE3MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQzNjQyMTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFRocmVhZGVkIE5BUEkgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNzIGZvciB0aHJlYWRlZCBOQVBJLCBmb2N1c2luZyBvbiBgbmV0L2NvcmUvZGV2LmNgIHNpbmNlIHRoYXQncyBhIGNlbnRyYWwgcGllY2UuIFRoZSBmYWN0IHRoYXQgYG5ldC9jb3JlL2Rldi5jYCBpcyBjb21waWxlZCB3aGVuZXZlciBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCBpcywgb2YgY291cnNlLCBleHBlY3RlZDsgaXQncyBmdW5kYW1lbnRhbCB0byBMaW51eCBuZXR3b3JraW5nLiBOb3csIEkgd2FudCB0byBjbGFyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZSBzdGFuZGFyZCBjb25maWdzLiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHdoZXRoZXIgYGJhY2tsb2dfdGhyZWFkc2Agb3IgdGhyZWFkZWQgTkFQSSBpcyByZWxpYW50IG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBuZXRfZGV2X2luaXRgIHNldHMgdXAgYHNtcGJvb3RfcmVnaXN0ZXJfcGVyY3B1X3RocmVhZChcdTAwMjZiYWNrbG9nX3RocmVhZHMpYCwgYW5kIHRoYXQncyBwcmVzZW50IGluIHByZXR0eSBtdWNoIGV2ZXJ5IHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9uIHdpdGggU01QIGFuZCB0aGUgbmV0d29ya2luZyBzdGFjay4gU2luY2UgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgdGhpcyBzZWVtcyBsaWtlbHksIGJ1dCBJIG5lZWQgdG8gY29uZmlybS4gQmV5b25kIHRob3NlLCBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBvdGhlciBjb25maWdzIHRvIGFzY2VydGFpbiBpZiB0aGVyZSBhcmUgYW55IG90aGVycy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBgbmFwaV9rdGhyZWFkX2NyZWF0ZWAgYXMgd2VsbCBhcyBleHBsb3JlIHRoZSB0aHJlYWRlZCBuZXRkZXYgYXR0cmlidXRlcywgdG8gbWFrZSBzdXJlIEkgYW0gY292ZXJpbmcgYWxsIHRoZSBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjIxLjg0MTEyNjU3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxODQzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkFQSV9TVEFURV9USFJFQURFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTUwMTM9c3RhdGljIGlubGluZSB2b2lkIF9fX19uYXBpX3NjaGVkdWxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTAxOS1cXG5uZXQvY29yZS9kZXYuYzo1MDIwOlxcdGlmICh0ZXN0X2JpdChOQVBJX1NUQVRFX1RIUkVBREVELCBcXHUwMDI2bmFwaS1cXHUwMDNlc3RhdGUpKSB7XFxubmV0L2NvcmUvZGV2LmMtNTAyMS1cXHRcXHQvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKSBpblxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzI0Nz1zdGF0aWMgdm9pZCBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03MjUyLVxcbm5ldC9jb3JlL2Rldi5jOjcyNTM6XFx0YXNzaWduX2JpdChOQVBJX1NUQVRFX1RIUkVBREVELCBcXHUwMDI2bmFwaS1cXHUwMDNlc3RhdGUsIHRocmVhZGVkKTtcXG5uZXQvY29yZS9kZXYuYzo3MjU0OlxcdGFzc2lnbl9iaXQoTkFQSV9TVEFURV9USFJFQURFRF9CVVNZX1BPTEwsIFxcdTAwMjZuYXBpLVxcdTAwM2VzdGF0ZSwgYnVzeV9wb2xsKTtcXG5uZXQvY29yZS9kZXYuYy03MjU1LX1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEzNDA2PXN0YXRpYyB2b2lkIGJhY2tsb2dfbmFwaV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTM0MTEtXFx0bmFwaS1cXHUwMDNldGhyZWFkID0gdGhpc19jcHVfcmVhZChiYWNrbG9nX25hcGkpO1xcbm5ldC9jb3JlL2Rldi5jOjEzNDEyOlxcdHNldF9iaXQoTkFQSV9TVEFURV9USFJFQURFRCwgXFx1MDAyNm5hcGktXFx1MDAzZXN0YXRlKTtcXG5uZXQvY29yZS9kZXYuYy0xMzQxMy19XFxuLS1cXG5uZXQvY29yZS9kZXYuaD0zNTc9c3RhdGljIGlubGluZSBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIG5hcGlfZ2V0X3RocmVhZGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG5uZXQvY29yZS9kZXYuaC0zNTgte1xcbm5ldC9jb3JlL2Rldi5oOjM1OTpcXHRpZiAodGVzdF9iaXQoTkFQSV9TVEFURV9USFJFQURFRF9CVVNZX1BPTEwsIFxcdTAwMjZuLVxcdTAwM2VzdGF0ZSkpXFxubmV0L2NvcmUvZGV2LmgtMzYwLVxcdFxcdHJldHVybiBORVRERVZfTkFQSV9USFJFQURFRF9CVVNZX1BPTEw7XFxubmV0L2NvcmUvZGV2LmgtMzYxLVxcbm5ldC9jb3JlL2Rldi5oOjM2MjpcXHRpZiAodGVzdF9iaXQoTkFQSV9TVEFURV9USFJFQURFRCwgXFx1MDAyNm4tXFx1MDAzZXN0YXRlKSlcXG5uZXQvY29yZS9kZXYuaC0zNjMtXFx0XFx0cmV0dXJuIE5FVERFVl9OQVBJX1RIUkVBREVEX0VOQUJMRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjIxLjkxNjMxNzQ2NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzIyOTk4Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gVGhyZWFkZWQgTkFQSSB3aXRoIGBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZWAqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdGhyZWFkZWQgTkFQSSBzZXR1cCwgc3BlY2lmaWNhbGx5IGhvdyBgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGVgIGZhY3RvcnMgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSB1c2VyLXNwYWNlIGltcGxpY2F0aW9ucyBoZXJlLiBEb2VzIGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBhY3R1YWxseSAqZW5hYmxlKiB0aHJlYWRlZCBOQVBJIGV4cGxpY2l0bHkgdXNpbmcgdGhhdCBmdW5jdGlvbj8gT3IsIHBlcmhhcHMsIGlzIHRoZXJlIHNvbWUgY2xldmVyIGxvZ2ljIGJ1cmllZCBpbiB0aGUgYmFja2xvZyBOQVBJIGNvZGUgdGhhdCB1c2VzIGl0IGF1dG9tYXRpY2FsbHkgaW4gY2VydGFpbiBzY2VuYXJpb3M/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGVgIGFuZCBiYWNrbG9nIE5BUEkgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gYW5kIGRlYnVnZ2luZywgYW5kIEkgd2FudCB0byBmdWxseSBncmFzcCBob3cgdGhpcyBpbXBhY3RzIGV2ZXJ5dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoyNi42MzkzMTk0NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjMwNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5hcGlfc2V0X3RocmVhZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NzIwOT1zdGF0aWMgdm9pZCBuYXBpX3N0b3Bfa3RocmVhZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03MjQ2LVxcbm5ldC9jb3JlL2Rldi5jOjcyNDc6c3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbm5ldC9jb3JlL2Rldi5jLTcyNDgtXFx0XFx0XFx0XFx0ICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWRfbW9kZSlcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTcyNTYtXFxubmV0L2NvcmUvZGV2LmM6NzI1NzppbnQgbmFwaV9zZXRfdGhyZWFkZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbm5ldC9jb3JlL2Rldi5jLTcyNTgtXFx0XFx0ICAgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTcyODItXFx0XFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxubmV0L2NvcmUvZGV2LmM6NzI4MzpcXHRcXHRuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShuYXBpLCB0aHJlYWRlZCk7XFxubmV0L2NvcmUvZGV2LmMtNzI4NC1cXHR9XFxuLS1cXG5uZXQvY29yZS9kZXYuYz03Mjg5PWludCBuZXRpZl9zZXRfdGhyZWFkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTczMTItXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShuYXBpLCBcXHUwMDI2ZGV2LVxcdTAwM2VuYXBpX2xpc3QsIGRldl9saXN0KVxcbm5ldC9jb3JlL2Rldi5jOjczMTM6XFx0XFx0V0FSTl9PTl9PTkNFKG5hcGlfc2V0X3RocmVhZGVkKG5hcGksIHRocmVhZGVkKSk7XFxubmV0L2NvcmUvZGV2LmMtNzMxNC1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTc1MzQ9c3RhdGljIHZvaWQgbmFwaV9yZXN0b3JlX2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03NTUzLVxcbm5ldC9jb3JlL2Rldi5jOjc1NTQ6XFx0V0FSTl9PTl9PTkNFKG5hcGlfc2V0X3RocmVhZGVkKG4sIG4tXFx1MDAzZWNvbmZpZy1cXHUwMDNldGhyZWFkZWQpKTtcXG5uZXQvY29yZS9kZXYuYy03NTU1LX1cXG4tLVxcbm5ldC9jb3JlL2Rldi5oPTM2OT1uYXBpX2dldF90aHJlYWRlZF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5hcGlfc3RydWN0ICpuKVxcbi0tXFxubmV0L2NvcmUvZGV2LmgtMzc1LVxcbm5ldC9jb3JlL2Rldi5oOjM3NjppbnQgbmFwaV9zZXRfdGhyZWFkZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuLFxcbm5ldC9jb3JlL2Rldi5oLTM3Ny1cXHRcXHQgICAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkKTtcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9MzI3PW5ldGRldl9ubF9uYXBpX3NldF9jb25maWcoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zMzctXFx0XFx0dGhyZWFkZWQgPSBubGFfZ2V0X3VpbnQoaW5mby1cXHUwMDNlYXR0cnNbTkVUREVWX0FfTkFQSV9USFJFQURFRF0pO1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MzM4OlxcdFxcdHJldCA9IG5hcGlfc2V0X3RocmVhZGVkKG5hcGksIHRocmVhZGVkKTtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTMzOS1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoyNi43MTA5NTc3NjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzg2ODUwOTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUaHJlYWRlZCBOQVBJIEZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhyZWFkZWQgTkFQSSBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggYG5ldGRldl9ubF9uYXBpX3NldF9jb25maWdgICh2aWEgbmV0bGluaykgb3IgdGhlIHN0YW5kYXJkIGJhY2tsb2cgcHJvY2Vzc2luZyBpbiB0aGUgU01QIG5ldHdvcmsgZGV2aWNlIHBhdGgsIHdoaWNoIG1lYW5zIGBydW5fYmFja2xvZ19uYXBpYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIHRoZSBwb2xsaW5nIGxvb3AgaXRzZWxmLCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCByZXNpZGVzIGluIGBuZXQvY29yZS9kZXYuY2AuXG5cblJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIGZ1enphYmxlLiBUaGUgY29yZSBhcmVhIG9mIGNvbmNlcm4gaXMgaW4gYG5ldC9jb3JlL2Rldi5jYCwgcHJlY2lzZWx5IGhvdyB0aGUgc2NoZWR1bGluZy9yZXNjaGVkdWxpbmcgYmVoYXZpb3IgKGBjb25kX3Jlc2NoZWQoKWApIHdpdGhpbiBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGlzIG1vZGlmaWVkIGZvciB0aHJlYWRlZCBOQVBJIHBvbGxpbmcuICBUaGlzIGxvb2tzIHByb21pc2luZy5cblxuUmVhY2hhYmlsaXR5IGlzIHN0cmFpZ2h0Zm9yd2FyZDsgYW55IHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aCBhIExpbnV4IG5ldHdvcmtpbmcgc3RhY2sgaXMgZ29pbmcgdG8gaGl0IHRoaXMgY29kZS4gVGhlIHBvc2l0aXZlIGNyaXRlcmlhIGNoZWNrcyBhcmUgbWV0IGJlY2F1c2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBzY2hlZHVsaW5nLiAgKldvcnRoRnV6emluZyA9IHRydWUqLCBpdCdzIGEgZ28uXG5cbk5vdywgbGV0J3MgbG9vayBhdCBmb2N1cyBzeW1ib2xzLiAgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIGFuZCBpdCdzIGNhbGxlZCBieSBgbmFwaV90aHJlYWRlZF9wb2xsYCwgYHJ1bl9iYWNrbG9nX25hcGlgLCBgbmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZ2AsIGFuZCBgbmFwaV9zZXRfdGhyZWFkZWRgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGlzIHN0YXRpYyBvciBpbmxpbmVkLiBDaGVja2luZyBgbmV0L2NvcmUvZGV2LmNgIGNvbmZpcm1zIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIEV4Y2VsbGVudC5cblxuTm93LCBjaGVja2luZyB0aGUgY2FsbGVycyBpbiB0aGUgc2FtZSBmaWxlIGBuZXQvY29yZS9kZXYuY2A6IGBuYXBpX3RocmVhZGVkX3BvbGxgLCBgcnVuX2JhY2tsb2dfbmFwaWAsIGFuZCBgbmFwaV9zZXRfdGhyZWFkZWRgIGFyZSBhbGwgdGhlcmUuIFRoZXNlIHNob3VsZCBiZSBnb29kIHN5bWJvbHMgdG8gZm9jdXMgb24sIGFzIHRoZXkgYXJlIG5vbi11YmlxdWl0b3VzIGVudHJ5cG9pbnRzIGFuZCBmdW5jdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aHJlYWRlZCBOQVBJIGFuZCBiYWNrbG9nIHByb2Nlc3NpbmcuXG5cbkZpbmFsbHksIHRoZSBlbmFibGUgY29uZmlncy4gYENPTkZJR19ORVRgIChiYXNpYyBuZXR3b3JraW5nKSBhbmQgYENPTkZJR19TTVBgIChuZWVkZWQgZm9yIHNtcF9ob3RwbHVnX3RocmVhZCB1c2VkIGluIGJhY2tsb2cgdGhyZWFkcykg4oCTIHN0YW5kYXJkIHN0dWZmLiAgV2UncmUgZ29vZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTc6NTg6MzQuNTc5NDcwNDc1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTExMDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfY29yZS5vXFxubmV0L2NvcmUvTWFrZWZpbGUtMTEtXFxubmV0L2NvcmUvTWFrZWZpbGU6MTI6b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTEzLVxcdFxcdFxcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTc6NTg6MzQuNjMwNTg2MDUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MDMyNTI2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgZGV2Lm9gIGlzIGluZGVlZCBidWlsdCBhcyBgb2JqLXlgIHdpdGhpbiBgbmV0L2NvcmUvTWFrZWZpbGVgLCBhbmQgdGhlIGBuZXQvTWFrZWZpbGVgIGl0c2VsZiBpbmNsdWRlcyBgb2JqLSQoQ09ORklHX05FVCkgKz0gY29yZS9gLiBUaGVyZWZvcmUsIGBDT05GSUdfTkVUYCBpcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gRnVydGhlcm1vcmUsIGBTTVBgIGlzIGFsc28gcmVsZXZhbnQsIHBhcnRpY3VsYXJseSBiZWNhdXNlIG9mIHRoZSB0aHJlYWRlZCBiYWNrbG9nIE5BUEkgcHJvY2Vzc2luZy4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuTm93LCBsZXQncyBqdXN0IGNvbmZpcm0gYWxsIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYCBhcmUgaW4gb3JkZXI6XG5cbiogICBgV29ydGhGdXp6aW5nYDogRGVmaW5pdGVseSB0cnVlLlxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlc2NoZWR1bGluZyBpbiBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKWAgd2l0aGluIHRoZSBuZXR3b3JraW5nIGNvcmUgKGBuZXQvY29yZS9kZXYuY2ApLiBJdCBlbnN1cmVzIGBjb25kX3Jlc2NoZWQoKWAgaXMgY2FsbGVkIG9uIGV2ZXJ5IGV4aXQsIG5vdCBqdXN0IGR1cmluZyByZXBvbGwgaXRlcmF0aW9ucy4gVGhpcyBpcyBjcnVjaWFsIGFzIGl0IHJ1bnMgd2l0aGluIHRocmVhZGVkIE5BUEkgd29ya2VyIHRocmVhZHMgYW5kIGJhY2tsb2cgTkFQSSwgYW5kIGlzIGFjY2Vzc2libGUgaW4gYW55IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBTb3VuZHMgc29saWQuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJuYXBpX3RocmVhZGVkX3BvbGxfbG9vcFwiLCBcIm5hcGlfdGhyZWFkZWRfcG9sbFwiLCBcInJ1bl9iYWNrbG9nX25hcGlcIiwgXCJuYXBpX3NldF90aHJlYWRlZFwiXWAgLSBZdXAsIHRoYXQncyBzcG90IG9uLCB0aGVzZSBzeW1ib2xzIGVuY29tcGFzcyB0aGUga2V5IGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGUgcGF0Y2guXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiTkVUXCIsIFwiU01QXCJdYCAtIFllcywgYE5FVGAgYW5kIGBTTVBgIGFyZSB0aGUga2V5IGVuYWJsaW5nIGNvbmZpZ3MgdGhhdCB3ZSBhbHJlYWR5IGlkZW50aWZpZWQuXG5cbkFscmlnaHQsIGEgZmluYWwgc2FuaXR5IGNoZWNrLi4uIEV2ZXJ5dGhpbmcgaXMgcHJlY2lzZSwgY29tcGxldGUsIGFuZCBleGFjdGx5IHdoYXQncyByZXF1aXJlZC4gTm8gaXNzdWVzIGRldGVjdGVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NjgsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjM5LjEzMzg0NjQ3NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODM4MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5hcGlfdGhyZWFkZWRfcG9sbF9sb29wXCIsXG4gICAgXCJuYXBpX3RocmVhZGVkX3BvbGxcIixcbiAgICBcInJ1bl9iYWNrbG9nX25hcGlcIixcbiAgICBcIm5hcGlfc2V0X3RocmVhZGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2NoZWR1bGluZyBhbmQgY29vcGVyYXRpdmUgeWllbGQgYmVoYXZpb3IgKGNvbmRfcmVzY2hlZCkgaW4gbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gKG5ldC9jb3JlL2Rldi5jKS4gVGhpcyBjb2RlIGV4ZWN1dGVzIGluIHRocmVhZGVkIE5BUEkgYW5kIGJhY2tsb2cgcG9sbGluZyBrdGhyZWFkcyBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5hcGlfdGhyZWFkZWRfcG9sbF9sb29wXCIsXG4gICAgXCJuYXBpX3RocmVhZGVkX3BvbGxcIixcbiAgICBcInJ1bl9iYWNrbG9nX25hcGlcIixcbiAgICBcIm5hcGlfc2V0X3RocmVhZGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2NoZWR1bGluZyBhbmQgY29vcGVyYXRpdmUgeWllbGQgYmVoYXZpb3IgKGNvbmRfcmVzY2hlZCkgaW4gbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gKG5ldC9jb3JlL2Rldi5jKS4gVGhpcyBjb2RlIGV4ZWN1dGVzIGluIHRocmVhZGVkIE5BUEkgYW5kIGJhY2tsb2cgcG9sbGluZyBrdGhyZWFkcyBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTc6NTg6MzkuMjI1Njk0MzY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ5MDY5NzQ4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjM5LjIyNjMyOTczN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExNDkwMDU3MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBjYWxsIGBjb25kX3Jlc2NoZWQoKWAgdW5jb25kaXRpb25hbGx5IG9uIGV2ZXJ5IHBhc3MgdGhyb3VnaCB0aGUgbG9vcCwgcmF0aGVyIHRoYW4gb25seSB3aGVuIGByZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgaXMgYSB0YXNrIHNjaGVkdWxpbmcgLyBDUFUgeWllbGRpbmcgY2hhbmdlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJucyB3aXRob3V0IHNjaGVkdWxpbmcuXFxuXFxuVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCBkYXRhIGJ1ZmZlcnMsIGFsdGVyIHBhY2tldC9kYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTc0ZDM2NmE0ZGM2YzIxY2IwMWFkYWY2MmZiODhhNTg5YWY2NjJiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTc6NTc6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAzODMzNjg1OGMxNjhmLi41YzdmOGNkZjg0NDM1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzkyNCwxMSArNzkyNCwxMyBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0Z3JvX2ZsdXNoX25vcm1hbChcdTAwMjZuYXBpLVx1MDAzZWdybywgSFogXHUwMDNlPSAxMDAwKTtcbiBcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXG4tXHRcdC8qIENhbGwgY29uZF9yZXNjaGVkIGhlcmUgdG8gYXZvaWQgd2F0Y2hkb2cgd2FybmluZ3MuICovXG4tXHRcdGlmIChyZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXMpIHtcbitcdFx0aWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcylcbiBcdFx0XHRyY3Vfc29mdGlycV9xc19wZXJpb2RpYyhsYXN0X3FzKTtcbi1cdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdFx0fVxuK1xuK1x0XHQvKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIHlpZWxkIG9uXG4rXHRcdCAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuXG4rXHRcdCAqL1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbiBcdFx0aWYgKCFyZXBvbGwpXG4gXHRcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODozOS4yMjYzMzA2NjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk2ODUzODM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgdGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSdyZSBsb29raW5nIGF0IGEgY29kZSBjaGFuZ2UgdGhhdCBjb3VsZCBpbnRyb2R1Y2Uga2VybmVsIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBMZXQncyBkaXZlIGluLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGBkaWZmYCBpdHNlbGYuIEl0IHNlZW1zIHRvIGJlIGluIGBuZXQvY29yZS9kZXYuY2AuIEFscmlnaHQsIG5ldHdvcmsgZGV2aWNlIGNvcmUsIG5vdCBhIGJhZCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBtZW1vcnkgYnVncy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNoYW5nZSBhY3R1YWxseSAqaXMqLiBJIHNlZSBzb21lIGFkZGl0aW9ucyBhcm91bmQgbGluZSA3OTI0LiBJdCBsb29rcyBsaWtlIHRoZSBjb2RlIGlzIHJlbGF0ZWQgdG8gdGhlIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgZnVuY3Rpb24uIFRoZSBwYXRjaCBpbmNsdWRlcyBhIGBjb25kX3Jlc2NoZWQoKWAgY2FsbC4gSXQncyBiZWluZyBtb3ZlZCBvdXQgb2YgYSBjb25kaXRpb25hbCBibG9jay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGRvbmUsIHRvIGFzc2VzcyBpZiB0aGVyZSBtaWdodCBiZSBhIG1lbW9yeSBzYWZldHkgY29uY2Vybi4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhlIHBsYWNlbWVudCBpcyByZWxhdGVkIHRvIHdhdGNoZG9nIHdhcm5pbmdzIGFuZCBzY2hlZHVsaW5nLCBidXQgdGhlIGFkZGVkIGNvbW1lbnQgYWJvdXQgYG5hcGlfdGhyZWFkX3dhaXQoKWAgaXMgaW50cmlndWluZy4gU2VlbXMgbGlrZSB0aGVyZSdzIGEgcmVhc29uIGZvciBpdC4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBhcm91bmQgdGhpcyBjaGFuZ2UgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIG1lbW9yeSBpbXBsaWNhdGlvbnMuIEkgd2lsbCBoYXZlIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjaGFuZ2UgYWZmZWN0cyBtZW1vcnkgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24uIEl0J3MgdG9vIGVhcmx5IHRvIHNheSBpZiBLTVNBTiBpcyBuZWVkZWQsIGJ1dCBJJ20gbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGZ1bmN0aW9uJ3MgYmVoYXZpb3VyIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODo0NC4xOTQ4NzI4NzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc5MDA6XFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbjc5MDE6XFx0XFx0XFx0YnBmX25ldF9jdHggPSBicGZfbmV0X2N0eF9zZXQoXFx1MDAyNl9fYnBmX25ldF9jdHgpO1xcbjc5MDI6XFx0XFxuNzkwMzpcXHRcXHRcXHRzZCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c29mdG5ldF9kYXRhKTtcXG43OTA0OlxcdFxcdFxcdHNkLVxcdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSB0cnVlO1xcbjc5MDU6XFx0XFxuNzkwNjpcXHRcXHRcXHRoYXZlID0gbmV0cG9sbF9wb2xsX2xvY2sobmFwaSk7XFxuNzkwNzpcXHRcXHRcXHRfX25hcGlfcG9sbChuYXBpLCBcXHUwMDI2cmVwb2xsKTtcXG43OTA4OlxcdFxcdFxcdG5ldHBvbGxfcG9sbF91bmxvY2soaGF2ZSk7XFxuNzkwOTpcXHRcXG43OTEwOlxcdFxcdFxcdHNkLVxcdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSBmYWxzZTtcXG43OTExOlxcdFxcdFxcdGJhcnJpZXIoKTtcXG43OTEyOlxcdFxcbjc5MTM6XFx0XFx0XFx0aWYgKHNkX2hhc19ycHNfaXBpX3dhaXRpbmcoc2QpKSB7XFxuNzkxNDpcXHRcXHRcXHRcXHRsb2NhbF9pcnFfZGlzYWJsZSgpO1xcbjc5MTU6XFx0XFx0XFx0XFx0bmV0X3Jwc19hY3Rpb25fYW5kX2lycV9lbmFibGUoc2QpO1xcbjc5MTY6XFx0XFx0XFx0fVxcbjc5MTc6XFx0XFx0XFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcXG43OTE4OlxcdFxcdFxcdGJwZl9uZXRfY3R4X2NsZWFyKGJwZl9uZXRfY3R4KTtcXG43OTE5OlxcdFxcbjc5MjA6XFx0XFx0XFx0LyogV2hlbiBidXN5IHBvbGwgaXMgZW5hYmxlZCwgdGhlIG9sZCBwYWNrZXRzIGFyZSBub3QgZmx1c2hlZCBpblxcbjc5MjE6XFx0XFx0XFx0ICogbmFwaV9jb21wbGV0ZV9kb25lLiBTbyBmbHVzaCB0aGVtIGhlcmUuXFxuNzkyMjpcXHRcXHRcXHQgKi9cXG43OTIzOlxcdFxcdFxcdGlmIChidXN5X3BvbGxfbGFzdF9xcylcXG43OTI0OlxcdFxcdFxcdFxcdGdyb19mbHVzaF9ub3JtYWwoXFx1MDAyNm5hcGktXFx1MDAzZWdybywgSFogXFx1MDAzZT0gMTAwMCk7XFxuNzkyNTpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG43OTI2OlxcdFxcbjc5Mjc6XFx0XFx0XFx0aWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcylcXG43OTI4OlxcdFxcdFxcdFxcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xcbjc5Mjk6XFx0XFxuNzkzMDpcXHRcXHRcXHQvKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIHlpZWxkIG9uXFxuNzkzMTpcXHRcXHRcXHQgKiBldmVyeSBleGl0LCBub3Qgb25seSB3aGVuIHRoZSBsb29wIGl0ZXJhdGVzLlxcbjc5MzI6XFx0XFx0XFx0ICovXFxuNzkzMzpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG43OTM0OlxcdFxcbjc5MzU6XFx0XFx0XFx0aWYgKCFyZXBvbGwpXFxuNzkzNjpcXHRcXHRcXHRcXHRicmVhaztcXG43OTM3OlxcdFxcdH1cXG43OTM4OlxcdFxcbjc5Mzk6XFx0XFx0aWYgKGJ1c3lfcG9sbF9sYXN0X3FzKVxcbjc5NDA6XFx0XFx0XFx0KmJ1c3lfcG9sbF9sYXN0X3FzID0gbGFzdF9xcztcXG43OTQxOlxcdH1cXG43OTQyOlxcdFxcbjc5NDM6XFx0c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSlcXG43OTQ0OlxcdHtcXG43OTQ1OlxcdFxcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRhdGE7XFxuNzk0NjpcXHRcXHR1bnNpZ25lZCBsb25nIGxhc3RfcXMgPSBqaWZmaWVzO1xcbjc5NDc6XFx0XFx0Ym9vbCB3YW50X2J1c3lfcG9sbDtcXG43OTQ4OlxcdFxcdGJvb2wgaW5fYnVzeV9wb2xsO1xcbjc5NDk6XFx0XFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjQ0LjE5NTQxODI0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MjA5NDU3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBJbXBhY3QqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIHdpdGhpbiBgbmV0L2NvcmUvZGV2LmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgdGhlIHJlc2NoZWR1bGluZyBsb2dpYzsgbW92aW5nIGBjb25kX3Jlc2NoZWQoKWAgb3V0c2lkZSBvZiBhIGNvbmRpdGlvbmFsIGJsb2NrLiBJJ20gc2VlaW5nIHRoYXQgdGhpcyBpcyBwdXJlbHkgYSBjaGFuZ2UgaW4gaG93IHRoZSBrZXJuZWwgdGhyZWFkIHlpZWxkcyB0aW1lLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gZm9yIG15IHB1cnBvc2VzIGhlcmUgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLCBhbmQgSSB0aGluayBub3QuIEl0J3MganVzdCBhIHJlc2NoZWR1bGluZyBjaGFuZ2Ug4oCTIG5vIG1lbW9yeSBhbGxvY2F0aW9uLCBubyB1c2VyLXNwYWNlIGNvcGllcywgbm8gcG90ZW50aWFsIGZvciBpbmZvIGxlYWtzIHN0ZW1taW5nIGZyb20gdW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueXRoaW5nIG9mIHRoYXQgbmF0dXJlLiBJJ20gbm90IHNlZWluZyBhbnkgbW9kaWZpY2F0aW9ucyB0byBpbml0aWFsaXphdGlvbiwgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBib3VuZHMgY2hlY2tpbmcsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cblNvLCB0aGlzIGNsZWFybHkgaGFzICpub3RoaW5nKiB0byBkbyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gU3RhbmRhcmQgc2FuaXRpemVycywgb3IgZXZlbiBLQVNBTiBhbmQgbG9ja2RlcCwgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGdlbmVyYWwgcmVncmVzc2lvbnMgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkLiBLTVNBTiBpcyBkZWZpbml0ZWx5IG92ZXJraWxsIGhlcmUuXG5cbkxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cbktNU0FOIHNheXMgYE5lZWRzS01TQU49dHJ1ZWAgKm9ubHkqIGlmIHRoZXJlJ3MgYW55IGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2Y6XG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh0aHJvdWdoIHZhcmlvdXMgbWVhbnMpIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkLiBOb3BlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBOb3BlLlxuMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBOb3BlLlxuNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIE5vcGUuXG5cbkFuZCBpdCBzYXlzIGBOZWVkc0tNU0FOPWZhbHNlYCBpZjpcbiogICBUaGUgcmlza3MgYXJlIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSDigJMgdGhpbmdzIEtBU0FOL0xPQ0tERVAvc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBjYXRjaC4gRXhhY3RseSFcbiogICBBbGwgdG91Y2hlZCBzdHJ1Y3R1cmVzIGFyZSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQuIEFuZCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBhbGwgc3RydWN0dXJlIGFyZSB6ZXJvZWQuXG4qICAgVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrcy4gUHJlY2lzZWx5LlxuXG5UaGVyZWZvcmUsIGl0J3MgY2xlYXI6IGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA3LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjUwLjcxNjM2ODQyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKClgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gY2FsbCBgY29uZF9yZXNjaGVkKClgIHVuY29uZGl0aW9uYWxseSBvbiBldmVyeSBwYXNzIHRocm91Z2ggdGhlIGxvb3AsIHJhdGhlciB0aGFuIG9ubHkgd2hlbiBgcmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzYCBpcyB0cnVlLiBUaGlzIGlzIGEgdGFzayBzY2hlZHVsaW5nIC8gQ1BVIHlpZWxkaW5nIGNoYW5nZSB0byBhdm9pZCB3YXRjaGRvZyB3YXJuaW5ncyB3aGVuIGBuYXBpX3RocmVhZF93YWl0KClgIHJldHVybnMgd2l0aG91dCBzY2hlZHVsaW5nLlxcblxcblRoZSBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgZGF0YSBidWZmZXJzLCBhbHRlciBwYWNrZXQvZGF0YSBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3Iga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcCgpYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGNhbGwgYGNvbmRfcmVzY2hlZCgpYCB1bmNvbmRpdGlvbmFsbHkgb24gZXZlcnkgcGFzcyB0aHJvdWdoIHRoZSBsb29wLCByYXRoZXIgdGhhbiBvbmx5IHdoZW4gYHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xc2AgaXMgdHJ1ZS4gVGhpcyBpcyBhIHRhc2sgc2NoZWR1bGluZyAvIENQVSB5aWVsZGluZyBjaGFuZ2UgdG8gYXZvaWQgd2F0Y2hkb2cgd2FybmluZ3Mgd2hlbiBgbmFwaV90aHJlYWRfd2FpdCgpYCByZXR1cm5zIHdpdGhvdXQgc2NoZWR1bGluZy5cXG5cXG5UaGUgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgaW5pdGlhbGl6ZSBvciByZWFkIGRhdGEgYnVmZmVycywgYWx0ZXIgcGFja2V0L2RhdGEgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgbm8gcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwk2sz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 17:40:48 +0000 UTC FinishedAt: 2026-09-03 17:58:53 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "5a3f7a683aee56e1f15c9d53041f3236767eaae7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "SMP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "5a3f7a683aee56e1f15c9d53041f3236767eaae7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "SMP" ], "series_id": "39d0a82a-0723-4f47-97a9-3abf72d9d8d4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "napi_threaded_poll_loop", "napi_threaded_poll", "run_backlog_napi", "napi_set_threaded" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYXBpX3RocmVhZGVkX3BvbGxfbG9vcCYjMzQ7LAogICAgJiMzNDtuYXBpX3RocmVhZGVkX3BvbGwmIzM0OywKICAgICYjMzQ7cnVuX2JhY2tsb2dfbmFwaSYjMzQ7LAogICAgJiMzNDtuYXBpX3NldF90aHJlYWRlZCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcCgpYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGNhbGwgYGNvbmRfcmVzY2hlZCgpYCB1bmNvbmRpdGlvbmFsbHkgb24gZXZlcnkgcGFzcyB0aHJvdWdoIHRoZSBsb29wLCByYXRoZXIgdGhhbiBvbmx5IHdoZW4gYHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xc2AgaXMgdHJ1ZS4gVGhpcyBpcyBhIHRhc2sgc2NoZWR1bGluZyAvIENQVSB5aWVsZGluZyBjaGFuZ2UgdG8gYXZvaWQgd2F0Y2hkb2cgd2FybmluZ3Mgd2hlbiBgbmFwaV90aHJlYWRfd2FpdCgpYCByZXR1cm5zIHdpdGhvdXQgc2NoZWR1bGluZy5cblxuVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCBkYXRhIGJ1ZmZlcnMsIGFsdGVyIHBhY2tldC9kYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNjaGVkdWxpbmcgYW5kIGNvb3BlcmF0aXZlIHlpZWxkIGJlaGF2aW9yIChjb25kX3Jlc2NoZWQpIGluIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKCkgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChuZXQvY29yZS9kZXYuYykuIFRoaXMgY29kZSBleGVjdXRlcyBpbiB0aHJlYWRlZCBOQVBJIGFuZCBiYWNrbG9nIHBvbGxpbmcga3RocmVhZHMgYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTc6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhNzRkMzY2YTRkYzZjMjFjYjAxYWRhZjYyZmI4OGE1ODlhZjY2MmI2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAxNzo1Nzo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAzODMzNjg1OGMxNjhmLi41YzdmOGNkZjg0NDM1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzkyNCwxMSAmIzQzOzc5MjQsMTMgQEAgc3RhdGljIHZvaWQgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3Aoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuIFx0XHRcdGdyb19mbHVzaF9ub3JtYWwoXHUwMDI2bmFwaS1cdTAwM2Vncm8sIEhaIFx1MDAzZT0gMTAwMCk7XG4gXHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuIFxuLVx0XHQvKiBDYWxsIGNvbmRfcmVzY2hlZCBoZXJlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzLiAqL1xuLVx0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKSB7XG4mIzQzO1x0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxuIFx0XHRcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xuLVx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuLVx0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogbmFwaV90aHJlYWRfd2FpdCgpIGNhbiByZXR1cm4gd2l0aG91dCBzY2hlZHVsaW5nLCBzbyB5aWVsZCBvblxuJiM0MztcdFx0ICogZXZlcnkgZXhpdCwgbm90IG9ubHkgd2hlbiB0aGUgbG9vcCBpdGVyYXRlcy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXG4gXHRcdGlmICghcmVwb2xsKVxuIFx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtTTVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuYXBpX3RocmVhZGVkX3BvbGxfbG9vcCYjMzQ7LAogICAgJiMzNDtuYXBpX3RocmVhZGVkX3BvbGwmIzM0OywKICAgICYjMzQ7cnVuX2JhY2tsb2dfbmFwaSYjMzQ7LAogICAgJiMzNDtuYXBpX3NldF90aHJlYWRlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzY2hlZHVsaW5nIGFuZCBjb29wZXJhdGl2ZSB5aWVsZCBiZWhhdmlvciAoY29uZF9yZXNjaGVkKSBpbiBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcCgpIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSAobmV0L2NvcmUvZGV2LmMpLiBUaGlzIGNvZGUgZXhlY3V0ZXMgaW4gdGhyZWFkZWQgTkFQSSBhbmQgYmFja2xvZyBwb2xsaW5nIGt0aHJlYWRzIGFuZCBpcyBmdWxseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTc0ZDM2NmE0ZGM2YzIxY2IwMWFkYWY2MmZiODhhNTg5YWY2NjJiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTc6NTc6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDM4MzM2ODU4YzE2OGYuLjVjN2Y4Y2RmODQ0MzUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC03OTI0LDExICYjNDM7NzkyNCwxMyBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQlncm9fZmx1c2hfbm9ybWFsKCZhbXA7bmFwaS0mZ3Q7Z3JvLCBIWiAmZ3Q7PSAxMDAwKTsKIAkJbG9jYWxfYmhfZW5hYmxlKCk7CiAKLQkJLyogQ2FsbCBjb25kX3Jlc2NoZWQgaGVyZSB0byBhdm9pZCB3YXRjaGRvZyB3YXJuaW5ncy4gKi8KLQkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykgewomIzQzOwkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykKIAkJCXJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpOwotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCX0KJiM0MzsKJiM0MzsJCS8qIG5hcGlfdGhyZWFkX3dhaXQoKSBjYW4gcmV0dXJuIHdpdGhvdXQgc2NoZWR1bGluZywgc28geWllbGQgb24KJiM0MzsJCSAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuCiYjNDM7CQkgKi8KJiM0MzsJCWNvbmRfcmVzY2hlZCgpOwogCiAJCWlmICghcmVwb2xsKQogCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTmV0d29yayBEcml2ZXIgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBUaGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBkb2luZyBpcyBjYXJlZnVsbHkgZXhhbWluaW5nIHRoaXMgcGF0Y2ggZm9yIGBuZXQvY29yZS9kZXYuY2AuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdG91Y2hpbmcgdGhlIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgZnVuY3Rpb24sIHdoaWNoIHN1Z2dlc3RzIGl04oCZcyBkZWFsaW5nIHdpdGggbmV0d29yayBpbnRlcmZhY2UgaW50ZXJydXB0IGhhbmRsaW5nIGFuZCBob3cgd2UgZGVhbCB3aXRoIHRoZSBOQVBJIChOZXcgQVBJKSBwb2xsaW5nIG1lY2hhbmlzbS4gVGhlIGRpZmYgaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIGl0LgoKTG9va2luZyBhdCB0aGUgY29kZSBhcm91bmQgbGluZSA3OTI0LCBJIGNhbiBzZWUgdGhlIG9yaWdpbmFsIGxvZ2ljIGFuZCB0aGVuIHRoZSBjaGFuZ2VzLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSByZW9yZ2FuaXplZCB0aGUgY29uZGl0aW9uYWwgYGNvbmRfcmVzY2hlZCgpYCBjYWxsLiBQcmV2aW91c2x5LCBgY29uZF9yZXNjaGVkKClgIHdhcyBjYWxsZWQgb25seSBpZiBgcmVwb2xsYCBvciBgYnVzeV9wb2xsX2xhc3RfcXNgIHdlcmUgdHJ1ZSAoYW5kIGFmdGVyIGByY3Vfc29mdGlycV9xc19wZXJpb2RpY2ApLiBOb3cgdGhlIGBjb25kX3Jlc2NoZWQoKWAgY2FsbCBpcyAqYWx3YXlzKiBtYWRlLiBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGUgbW90aXZhdGlvbiBpcyB0byAmIzM0O2F2b2lkIHdhdGNoZG9nIHdhcm5pbmdzJiMzNDsgYW5kICYjMzQ7eWllbGQgb24gZXZlcnkgZXhpdC4mIzM0OyBUaGUgb3JpZ2luYWwgY29kZSBtYXkgaGF2ZSBiZWVuIGJsb2NraW5nIGZvciB0b28gbG9uZyBpbiBzb21lIGVkZ2UgY2FzZXMuIFRoZSBjb21tZW50IHJlZ2FyZGluZyBgbmFwaV90aHJlYWRfd2FpdCgpYCByZXR1cm5pbmcgd2l0aG91dCBzY2hlZHVsaW5nIGltcGxpZXMgdGhleSYjMzk7cmUgdHJ5aW5nIHRvIHByZXZlbnQgc3RhcnZhdGlvbiBvZiBvdGhlciB0aHJlYWRzIG9yIHByb2Nlc3NlcyBpZiB0aGUgTkFQSSBsb29wIGJlY29tZXMgYnVzeS4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgZ29vZCBjaGFuZ2UsIGEgc3VidGxlIG9wdGltaXphdGlvbiBwZXJoYXBzLiBUaGUgd2F0Y2hkb2cgd2FybmluZ3MgYXJlIGEgY2x1ZSB0aGF0IHRoZSBvcmlnaW5hbCBsb2dpYyBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGxhdGVuY3kgb3IgZXZlbiBzeXN0ZW0gaGFuZ3MgdW5kZXIgaGVhdnkgbmV0d29yayBsb2FkLiBUaGlzIGNoYW5nZSBlc3NlbnRpYWxseSBhZGRzIGEgeWllbGQgcG9pbnQgdG8gdGhlIHBvbGwgbG9vcC4gSXQgbG9va3MgbGlrZSBpdCBjb3VsZCBpbXByb3ZlIG92ZXJhbGwgc3lzdGVtIHJlc3BvbnNpdmVuZXNzLCBldmVuIGlmIGl0IGNvbWVzIGF0IGEgc21hbGwgY29zdCBpbiB0aHJvdWdocHV0IHVuZGVyIGlkZWFsIGNvbmRpdGlvbnMuIEJ1dCB0aGUgZGV2aWwmIzM5O3MgaW4gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBrZWVwIGNvbnRleHQgaW4gbWluZCwgYW5kIGFsc28gdW5kZXJzdGFuZCB3aGV0aGVyIG9yIG5vdCB0aGlzIGNoYW5nZSB3aWxsIGhhdmUgYSBtZWFzdXJhYmxlIGltcGFjdCBvbiB0aGUgc3lzdGVtcyB0aGF0IHVzZSBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3OTAwOlx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjc5MDE6XHRcdFx0YnBmX25ldF9jdHggPSBicGZfbmV0X2N0eF9zZXQoXHUwMDI2X19icGZfbmV0X2N0eCk7XG43OTAyOlx0XG43OTAzOlx0XHRcdHNkID0gdGhpc19jcHVfcHRyKFx1MDAyNnNvZnRuZXRfZGF0YSk7XG43OTA0Olx0XHRcdHNkLVx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IHRydWU7XG43OTA1Olx0XG43OTA2Olx0XHRcdGhhdmUgPSBuZXRwb2xsX3BvbGxfbG9jayhuYXBpKTtcbjc5MDc6XHRcdFx0X19uYXBpX3BvbGwobmFwaSwgXHUwMDI2cmVwb2xsKTtcbjc5MDg6XHRcdFx0bmV0cG9sbF9wb2xsX3VubG9jayhoYXZlKTtcbjc5MDk6XHRcbjc5MTA6XHRcdFx0c2QtXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gZmFsc2U7XG43OTExOlx0XHRcdGJhcnJpZXIoKTtcbjc5MTI6XHRcbjc5MTM6XHRcdFx0aWYgKHNkX2hhc19ycHNfaXBpX3dhaXRpbmcoc2QpKSB7XG43OTE0Olx0XHRcdFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcbjc5MTU6XHRcdFx0XHRuZXRfcnBzX2FjdGlvbl9hbmRfaXJxX2VuYWJsZShzZCk7XG43OTE2Olx0XHRcdH1cbjc5MTc6XHRcdFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcbjc5MTg6XHRcdFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xuNzkxOTpcdFxuNzkyMDpcdFx0XHQvKiBXaGVuIGJ1c3kgcG9sbCBpcyBlbmFibGVkLCB0aGUgb2xkIHBhY2tldHMgYXJlIG5vdCBmbHVzaGVkIGluXG43OTIxOlx0XHRcdCAqIG5hcGlfY29tcGxldGVfZG9uZS4gU28gZmx1c2ggdGhlbSBoZXJlLlxuNzkyMjpcdFx0XHQgKi9cbjc5MjM6XHRcdFx0aWYgKGJ1c3lfcG9sbF9sYXN0X3FzKVxuNzkyNDpcdFx0XHRcdGdyb19mbHVzaF9ub3JtYWwoXHUwMDI2bmFwaS1cdTAwM2Vncm8sIEhaIFx1MDAzZT0gMTAwMCk7XG43OTI1Olx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuNzkyNjpcdFxuNzkyNzpcdFx0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxuNzkyODpcdFx0XHRcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xuNzkyOTpcdFxuNzkzMDpcdFx0XHQvKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIHlpZWxkIG9uXG43OTMxOlx0XHRcdCAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuXG43OTMyOlx0XHRcdCAqL1xuNzkzMzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjc5MzQ6XHRcbjc5MzU6XHRcdFx0aWYgKCFyZXBvbGwpXG43OTM2Olx0XHRcdFx0YnJlYWs7XG43OTM3Olx0XHR9XG43OTM4Olx0XG43OTM5Olx0XHRpZiAoYnVzeV9wb2xsX2xhc3RfcXMpXG43OTQwOlx0XHRcdCpidXN5X3BvbGxfbGFzdF9xcyA9IGxhc3RfcXM7XG43OTQxOlx0fVxuNzk0MjpcdFxuNzk0MzpcdHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpXG43OTQ0Olx0e1xuNzk0NTpcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGF0YTtcbjc5NDY6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGppZmZpZXM7XG43OTQ3Olx0XHRib29sIHdhbnRfYnVzeV9wb2xsO1xuNzk0ODpcdFx0Ym9vbCBpbl9idXN5X3BvbGw7XG43OTQ5Olx0XHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDQ5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqSW52ZXN0aWdhdGluZyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdW5kZXJzdGFuZGluZyB0aGUgbGFuZHNjYXBlIG9mIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUgc3lzdGVtPyBJIG5lZWQgdG8gdHJhY2sgZG93biBhbGwgaXRzIGNhbGwgc2l0ZXMg4oCTIGV2ZXJ5IGluc3RhbmNlIHdoZXJlIGl0JiMzOTtzIGludm9rZWQuIE1vcmUgaW1wb3J0YW50bHksIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBjb250ZXh0LiBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGF5IHdoZW4gaXQmIzM5O3MgY2FsbGVkPyBXaGF0IHVwc3RyZWFtIGNhbGxlcnMgdHJpZ2dlciBpdD8gVW5kZXJzdGFuZGluZyB0aGUgJiMzOTt3aHkmIzM5OyBiZWhpbmQgaXRzIGV4ZWN1dGlvbiBpcyBqdXN0IGFzIGNyaXRpY2FsIGFzIGtub3dpbmcgdGhlICYjMzk7d2hlcmUuJiMzOTsgVGhpcyB3aWxsIGhlbHAgbWUgZ2FpbiBhIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBwdXJwb3NlIGFuZCBpbnRlcmFjdGlvbnMgd2l0aGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIHBhaW50IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgb3BlcmF0aW9uYWwgZW52aXJvbm1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFwaV90aHJlYWRlZF9wb2xsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9MTY2Nj1FWFBPUlRfU1lNQk9MKG5ldGRldl9ub3RpZnlfcGVlcnMpO1xubmV0L2NvcmUvZGV2LmMtMTY2Ny1cbm5ldC9jb3JlL2Rldi5jOjE2Njg6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSk7XG5uZXQvY29yZS9kZXYuYy0xNjY5LVxubmV0L2NvcmUvZGV2LmM9MTY3MD1zdGF0aWMgaW50IG5hcGlfa3RocmVhZF9jcmVhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTE2NzctXHQgKi9cbm5ldC9jb3JlL2Rldi5jOjE2Nzg6XHRuLVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKG5hcGlfdGhyZWFkZWRfcG9sbCwgbiwgXCYjMzQ7bmFwaS8lcy0lZFwmIzM0Oyxcbm5ldC9jb3JlL2Rldi5jLTE2NzktXHRcdFx0XHRuLVx1MDAzZWRldi1cdTAwM2VuYW1lLCBuLVx1MDAzZW5hcGlfaWQpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTUzNDA9c3RhdGljIHZvaWQgbmFwaV9zY2hlZHVsZV9ycHMoc3RydWN0IHNvZnRuZXRfZGF0YSAqc2QpXG4tLVxubmV0L2NvcmUvZGV2LmMtNTM1My1cbm5ldC9jb3JlL2Rldi5jOjUzNTQ6XHRcdC8qIElmIG5vdCBjYWxsZWQgZnJvbSBuZXRfcnhfYWN0aW9uKCkgb3IgbmFwaV90aHJlYWRlZF9wb2xsKClcbm5ldC9jb3JlL2Rldi5jLTUzNTUtXHRcdCAqIHdlIGhhdmUgdG8gcmFpc2UgTkVUX1JYX1NPRlRJUlEuXG5uZXQvY29yZS9kZXYuYy01MzU2LVx0XHQgKi9cbm5ldC9jb3JlL2Rldi5jOjUzNTc6XHRcdGlmICghbXlzZC1cdTAwM2Vpbl9uZXRfcnhfYWN0aW9uIFx1MDAyNlx1MDAyNiAhbXlzZC1cdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwpXG5uZXQvY29yZS9kZXYuYy01MzU4LVx0XHRcdF9fcmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1JYX1NPRlRJUlEpO1xuLS1cbm5ldC9jb3JlL2Rldi5jPTc4NjU9c3RhdGljIGludCBuYXBpX3RocmVhZF93YWl0KHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSlcbi0tXG5uZXQvY29yZS9kZXYuYy03ODg4LVxubmV0L2NvcmUvZGV2LmM6Nzg4OTpzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5uZXQvY29yZS9kZXYuYy03ODkwLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgKmJ1c3lfcG9sbF9sYXN0X3FzKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTc5MDMtXHRcdHNkID0gdGhpc19jcHVfcHRyKFx1MDAyNnNvZnRuZXRfZGF0YSk7XG5uZXQvY29yZS9kZXYuYzo3OTA0Olx0XHRzZC1cdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSB0cnVlO1xubmV0L2NvcmUvZGV2LmMtNzkwNS1cbi0tXG5uZXQvY29yZS9kZXYuYy03OTA5LVxubmV0L2NvcmUvZGV2LmM6NzkxMDpcdFx0c2QtXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gZmFsc2U7XG5uZXQvY29yZS9kZXYuYy03OTExLVx0XHRiYXJyaWVyKCk7XG4tLVxubmV0L2NvcmUvZGV2LmMtNzk0Mi1cbm5ldC9jb3JlL2Rldi5jOjc5NDM6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSlcbm5ldC9jb3JlL2Rldi5jLTc5NDQte1xuLS1cbm5ldC9jb3JlL2Rldi5jLTc5NjMtXG5uZXQvY29yZS9kZXYuYzo3OTY0Olx0XHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChuYXBpLCB3YW50X2J1c3lfcG9sbCA/IFx1MDAyNmxhc3RfcXMgOiBOVUxMKTtcbm5ldC9jb3JlL2Rldi5jLTc5NjUtXHR9XG4tLVxubmV0L2NvcmUvZGV2LmM9MTMzOTk9c3RhdGljIHZvaWQgcnVuX2JhY2tsb2dfbmFwaSh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEzNDAyLVxubmV0L2NvcmUvZGV2LmM6MTM0MDM6XHRuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChcdTAwMjZzZC1cdTAwM2ViYWNrbG9nLCBOVUxMKTtcbm5ldC9jb3JlL2Rldi5jLTEzNDA0LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTM4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHJ1bl9iYWNrbG9nX25hcGlgIGFuZCBUaHJlYWRlZCBOLUFQSSBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGBydW5fYmFja2xvZ19uYXBpYCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhyZWFkZWQgTi1BUEkgY2FsbHMuIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGZvciBtYW5hZ2luZyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucywgcGVyaGFwcyB3aXRoaW4gYSB3b3JrZXIgdGhyZWFkIGNvbnRleHQuIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIGFuZCBob3cgZGF0YSBpcyBtYXJzaGFsZWQgYmV0d2VlbiB0aGUgbWFpbiBKYXZhU2NyaXB0IHRocmVhZCBhbmQgdGhlIHdvcmtlciB0aHJlYWRzIHVzaW5nIE4tQVBJLgoKU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZDoKCiogICAqKlRoZSBvcmlnaW4gb2YgYHJ1bl9iYWNrbG9nX25hcGlgOioqIElzIHRoaXMgZnVuY3Rpb24gcGFydCBvZiBhIGN1c3RvbSBhZGRvbiwgYSBsaWJyYXJ5LCBvciBhIGNvcmUgTm9kZS5qcyBmZWF0dXJlPyBLbm93aW5nIGl0cyBwcm92ZW5hbmNlIHdpbGwgaGVscCBtZSBpZGVudGlmeSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIGFuZCB1cHN0cmVhbSBpc3N1ZXMuCiogICAqKlRoZSAmIzM0O2JhY2tsb2cmIzM0OzoqKiBXaGF0IGV4YWN0bHkgaXMgYmVpbmcgJiMzNDtiYWNrbG9nZ2VkJiMzNDs/IElzIGl0IHRhc2tzLCBmdW5jdGlvbiBjYWxscywgZGF0YSB1cGRhdGVzLCBvciBzb21ldGhpbmcgZWxzZT8gVW5kZXJzdGFuZGluZyB0aGUgbmF0dXJlIG9mIHRoZSBiYWNrbG9nIGlzIGNydWNpYWwgdG8gcGlucG9pbnRpbmcgcG90ZW50aWFsIGJvdHRsZW5lY2tzIGFuZCBpbmVmZmljaWVuY2llcy4KKiAgICoqVGhyZWFkIHNhZmV0eToqKiBBcmUgdGhlcmUgbXV0ZXhlcywgYXRvbWljcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdXNlZCB3aXRoaW4gYHJ1bl9iYWNrbG9nX25hcGlgPyBPciBpcyBpdCBhc3N1bWluZyBhIHNpbXBsZSwgbm9uLWNvbmN1cnJlbnQgZW52aXJvbm1lbnQ/IElmIHRoZSBsYXR0ZXIsIGl0JiMzOTtzIGEgaHVnZSByZWQgZmxhZyB3aGVuIGRlYWxpbmcgd2l0aCB0aHJlYWRlZCBOLUFQSS4KKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSG93IGFyZSBlcnJvcnMgcHJvcGFnYXRlZCBmcm9tIHRoZSB3b3JrZXIgdGhyZWFkcyBiYWNrIHRvIHRoZSBKYXZhU2NyaXB0IGNvZGU/IEFyZSBleGNlcHRpb25zIGNhdWdodCBhbmQgY29udmVydGVkIHRvIE4tQVBJIGVycm9yIGNvZGVzPyBQcm9wZXIgZXJyb3IgaGFuZGxpbmcgaXMgZXNzZW50aWFsIGZvciByZWxpYWJpbGl0eS4KKiAgICoqTWVtb3J5IG1hbmFnZW1lbnQ6KiogSG93IGlzIG1lbW9yeSBtYW5hZ2VkIGJldHdlZW4gdGhlIHRocmVhZHM/IElzIHRoZXJlIGEgcmlzayBvZiBtZW1vcnkgbGVha3MsIGRvdWJsZSBmcmVlcywgb3Igb3RoZXIgbWVtb3J5LXJlbGF0ZWQgaXNzdWVzLCBlc3BlY2lhbGx5IHdoZW4gcGFzc2luZyBkYXRhIGJldHdlZW4gdGhlIEMmIzQzOyYjNDM7IGFuZCBKYXZhU2NyaXB0IHJlYWxtcz8KKiAgICoqVGhlIE4tQVBJIGNvbnRleHQ6KiogV2hhdCBpcyB0aGUgTi1BUEkgZW52aXJvbm1lbnQgbGlrZSB3aGVuIGBydW5fYmFja2xvZ19uYXBpYCBpcyBpbnZva2VkPyBJcyBpdCB3aXRoaW4gYSB3b3JrZXIgdGhyZWFkIG9yIHRoZSBtYWluIHRocmVhZD8gS25vd2luZyB0aGlzIGlzIGZ1bmRhbWVudGFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBOLUFQSSBBUElzIHNob3VsZCBvciBzaG91bGQgbm90IGJlIHVzZWQgaW4gdGhpcyBjb250ZXh0LgoKTXkgaW1tZWRpYXRlIGZvY3VzIHdpbGwgYmUgdG8gY2hlY2sgZm9yIGFueSB1c2Ugb2YgdGhyZWFkLXVuc2FmZSBOLUFQSSBBUElzIHdpdGhpbiBgcnVuX2JhY2tsb2dfbmFwaWAuIFRoYXQgd2lsbCBsaWtlbHkgYmUgdGhlIGZpcnN0IHBvaW50IHRvIGF1ZGl0LiBJIGFsc28gbmVlZCB0byB0cmFjayB0aGUgcGF0aCBvZiBhbnkgZGF0YSB0byBlbnN1cmUgaXQgaXMgdGhyZWFkIHNhZmUgYW5kIHRoYXQgdGhlIGxpZmVjeWNsZSBvZiB0aGUgZGF0YSBpcyBwcm9wZXJseSBhY2NvdW50ZWQgZm9yLiBPbmNlIEkgaGF2ZSB0aG9zZSBkZXRhaWxzLCBJJiMzOTtsbCBhc3Nlc3MgYW55IGJvdHRsZW5lY2tzIGFuZCBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3ODcwOlx0XHRcdC8qIFRlc3RpbmcgU0NIRURfVEhSRUFERUQgYml0IGhlcmUgdG8gbWFrZSBzdXJlIHRoZSBjdXJyZW50XG43ODcxOlx0XHRcdCAqIGt0aHJlYWQgb3ducyB0aGlzIG5hcGkgYW5kIGNvdWxkIHBvbGwgb24gdGhpcyBuYXBpLlxuNzg3MjpcdFx0XHQgKiBUZXN0aW5nIFNDSEVEIGJpdCBpcyBub3QgZW5vdWdoIGJlY2F1c2UgU0NIRUQgYml0IG1pZ2h0IGJlXG43ODczOlx0XHRcdCAqIHNldCBieSBzb21lIG90aGVyIGJ1c3kgcG9sbCB0aHJlYWQgb3IgYnkgbmFwaV9kaXNhYmxlKCkuXG43ODc0Olx0XHRcdCAqL1xuNzg3NTpcdFx0XHRpZiAodGVzdF9iaXQoTkFQSV9TVEFURV9TQ0hFRF9USFJFQURFRCwgXHUwMDI2bmFwaS1cdTAwM2VzdGF0ZSkpIHtcbjc4NzY6XHRcdFx0XHRXQVJOX09OKCFsaXN0X2VtcHR5KFx1MDAyNm5hcGktXHUwMDNlcG9sbF9saXN0KSk7XG43ODc3Olx0XHRcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuNzg3ODpcdFx0XHRcdHJldHVybiAwO1xuNzg3OTpcdFx0XHR9XG43ODgwOlx0XG43ODgxOlx0XHRcdHNjaGVkdWxlKCk7XG43ODgyOlx0XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG43ODgzOlx0XHR9XG43ODg0Olx0XHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG43ODg1Olx0XG43ODg2Olx0XHRyZXR1cm4gLTE7XG43ODg3Olx0fVxuNzg4ODpcdFxuNzg4OTpcdHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbjc4OTA6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nICpidXN5X3BvbGxfbGFzdF9xcylcbjc4OTE6XHR7XG43ODkyOlx0XHR1bnNpZ25lZCBsb25nIGxhc3RfcXMgPSBidXN5X3BvbGxfbGFzdF9xcyA/ICpidXN5X3BvbGxfbGFzdF9xcyA6IGppZmZpZXM7XG43ODkzOlx0XHRzdHJ1Y3QgYnBmX25ldF9jb250ZXh0IF9fYnBmX25ldF9jdHgsICpicGZfbmV0X2N0eDtcbjc4OTQ6XHRcdHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkO1xuNzg5NTpcdFxuNzg5NjpcdFx0Zm9yICg7Oykge1xuNzg5NzpcdFx0XHRib29sIHJlcG9sbCA9IGZhbHNlO1xuNzg5ODpcdFx0XHR2b2lkICpoYXZlO1xuNzg5OTpcdFxuNzkwMDpcdFx0XHRsb2NhbF9iaF9kaXNhYmxlKCk7XG43OTAxOlx0XHRcdGJwZl9uZXRfY3R4ID0gYnBmX25ldF9jdHhfc2V0KFx1MDAyNl9fYnBmX25ldF9jdHgpO1xuNzkwMjpcdFxuNzkwMzpcdFx0XHRzZCA9IHRoaXNfY3B1X3B0cihcdTAwMjZzb2Z0bmV0X2RhdGEpO1xuNzkwNDpcdFx0XHRzZC1cdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSB0cnVlO1xuNzkwNTpcdFxuNzkwNjpcdFx0XHRoYXZlID0gbmV0cG9sbF9wb2xsX2xvY2sobmFwaSk7XG43OTA3Olx0XHRcdF9fbmFwaV9wb2xsKG5hcGksIFx1MDAyNnJlcG9sbCk7XG43OTA4Olx0XHRcdG5ldHBvbGxfcG9sbF91bmxvY2soaGF2ZSk7XG43OTA5Olx0XG43OTEwOlx0XHRcdHNkLVx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IGZhbHNlO1xuNzkxMTpcdFx0XHRiYXJyaWVyKCk7XG43OTEyOlx0XG43OTEzOlx0XHRcdGlmIChzZF9oYXNfcnBzX2lwaV93YWl0aW5nKHNkKSkge1xuNzkxNDpcdFx0XHRcdGxvY2FsX2lycV9kaXNhYmxlKCk7XG43OTE1Olx0XHRcdFx0bmV0X3Jwc19hY3Rpb25fYW5kX2lycV9lbmFibGUoc2QpO1xuNzkxNjpcdFx0XHR9XG43OTE3Olx0XHRcdHNrYl9kZWZlcl9mcmVlX2ZsdXNoKCk7XG43OTE4Olx0XHRcdGJwZl9uZXRfY3R4X2NsZWFyKGJwZl9uZXRfY3R4KTtcbjc5MTk6XHRcbjc5MjA6XHRcdFx0LyogV2hlbiBidXN5IHBvbGwgaXMgZW5hYmxlZCwgdGhlIG9sZCBwYWNrZXRzIGFyZSBub3QgZmx1c2hlZCBpblxuNzkyMTpcdFx0XHQgKiBuYXBpX2NvbXBsZXRlX2RvbmUuIFNvIGZsdXNoIHRoZW0gaGVyZS5cbjc5MjI6XHRcdFx0ICovXG43OTIzOlx0XHRcdGlmIChidXN5X3BvbGxfbGFzdF9xcylcbjc5MjQ6XHRcdFx0XHRncm9fZmx1c2hfbm9ybWFsKFx1MDAyNm5hcGktXHUwMDNlZ3JvLCBIWiBcdTAwM2U9IDEwMDApO1xuNzkyNTpcdFx0XHRsb2NhbF9iaF9lbmFibGUoKTtcbjc5MjY6XHRcbjc5Mjc6XHRcdFx0aWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcylcbjc5Mjg6XHRcdFx0XHRyY3Vfc29mdGlycV9xc19wZXJpb2RpYyhsYXN0X3FzKTtcbjc5Mjk6XHRcbjc5MzA6XHRcdFx0LyogbmFwaV90aHJlYWRfd2FpdCgpIGNhbiByZXR1cm4gd2l0aG91dCBzY2hlZHVsaW5nLCBzbyB5aWVsZCBvblxuNzkzMTpcdFx0XHQgKiBldmVyeSBleGl0LCBub3Qgb25seSB3aGVuIHRoZSBsb29wIGl0ZXJhdGVzLlxuNzkzMjpcdFx0XHQgKi9cbjc5MzM6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG43OTM0Olx0XG43OTM1Olx0XHRcdGlmICghcmVwb2xsKVxuNzkzNjpcdFx0XHRcdGJyZWFrO1xuNzkzNzpcdFx0fVxuNzkzODpcdFxuNzkzOTpcdFx0aWYgKGJ1c3lfcG9sbF9sYXN0X3FzKVxuNzk0MDpcdFx0XHQqYnVzeV9wb2xsX2xhc3RfcXMgPSBsYXN0X3FzO1xuNzk0MTpcdH1cbjc5NDI6XHRcbjc5NDM6XHRzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKVxuNzk0NDpcdHtcbjc5NDU6XHRcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRhdGE7XG43OTQ2Olx0XHR1bnNpZ25lZCBsb25nIGxhc3RfcXMgPSBqaWZmaWVzO1xuNzk0NzpcdFx0Ym9vbCB3YW50X2J1c3lfcG9sbDtcbjc5NDg6XHRcdGJvb2wgaW5fYnVzeV9wb2xsO1xuNzk0OTpcdFx0dW5zaWduZWQgbG9uZyB2YWw7XG43OTUwOlx0XG43OTUxOlx0XHR3aGlsZSAoIW5hcGlfdGhyZWFkX3dhaXQobmFwaSkpIHtcbjc5NTI6XHRcdFx0dmFsID0gUkVBRF9PTkNFKG5hcGktXHUwMDNlc3RhdGUpO1xuNzk1MzpcdFxuNzk1NDpcdFx0XHR3YW50X2J1c3lfcG9sbCA9IHZhbCBcdTAwMjYgTkFQSUZfU1RBVEVfVEhSRUFERURfQlVTWV9QT0xMO1xuNzk1NTpcdFx0XHRpbl9idXN5X3BvbGwgPSB2YWwgXHUwMDI2IE5BUElGX1NUQVRFX0lOX0JVU1lfUE9MTDtcbjc5NTY6XHRcbjc5NTc6XHRcdFx0aWYgKHVubGlrZWx5KHZhbCBcdTAwMjYgTkFQSUZfU1RBVEVfRElTQUJMRSkpXG43OTU4Olx0XHRcdFx0d2FudF9idXN5X3BvbGwgPSBmYWxzZTtcbjc5NTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRocmVhZGVkIE5BUEkgUG9sbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCByZXNpZGVzIHdpdGhpbiBgbmV0L2NvcmUvZGV2LmNgLiBHaXZlbiB0aGF0JiMzOTtzIGEgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBmaWxlLCBpdCBzdWdnZXN0cyB0aGlzIGZ1bmN0aW9uIGlzIGNlbnRyYWwgdG8gbmV0d29yayBkZXZpY2Ugb3BlcmF0aW9uLiBJcyBpdCBhY3R1YWxseSB1c2VkPyBZZXMsIGl0IGFwcGVhcnMgdG8gYmUgZGlyZWN0bHkgcmVsYXRlZCB0byB0aHJlYWRlZCBOQVBJIHBvbGxpbmcgYW5kIGJhY2tsb2cgcHJvY2Vzc2luZyB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBwYXRoLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG5ldHdvcmsgZGV2aWNlcywgb3Igd2hlbiBkZWFsaW5nIHdpdGggYmFja2xvZyBwcm9jZXNzaW5nLiBOb3csIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgaW4gbW9yZSBkZXRhaWwuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgcnVuX2JhY2tsb2dfbmFwaWAgYW5kIHBpbnBvaW50IHdoZXJlIHRocmVhZGVkIE5BUEkgaXMgY29uZmlndXJlZCBvciBhY3RpdmVseSBlbmdhZ2VkLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIHNwZWNpZmljIGNvbnRleHRzIGluIHdoaWNoIHRoaXMgdGhyZWFkZWQgcG9sbGluZyBtZWNoYW5pc20gaXMgYmVpbmcgbGV2ZXJhZ2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTMzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMzOTA6XHRcbjEzMzkxOlx0c3RhdGljIGludCBiYWNrbG9nX25hcGlfc2hvdWxkX3J1bih1bnNpZ25lZCBpbnQgY3B1KVxuMTMzOTI6XHR7XG4xMzM5MzpcdFx0c3RydWN0IHNvZnRuZXRfZGF0YSAqc2QgPSBwZXJfY3B1X3B0cihcdTAwMjZzb2Z0bmV0X2RhdGEsIGNwdSk7XG4xMzM5NDpcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gXHUwMDI2c2QtXHUwMDNlYmFja2xvZztcbjEzMzk1Olx0XG4xMzM5NjpcdFx0cmV0dXJuIHRlc3RfYml0KE5BUElfU1RBVEVfU0NIRURfVEhSRUFERUQsIFx1MDAyNm5hcGktXHUwMDNlc3RhdGUpO1xuMTMzOTc6XHR9XG4xMzM5ODpcdFxuMTMzOTk6XHRzdGF0aWMgdm9pZCBydW5fYmFja2xvZ19uYXBpKHVuc2lnbmVkIGludCBjcHUpXG4xMzQwMDpcdHtcbjEzNDAxOlx0XHRzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCA9IHBlcl9jcHVfcHRyKFx1MDAyNnNvZnRuZXRfZGF0YSwgY3B1KTtcbjEzNDAyOlx0XG4xMzQwMzpcdFx0bmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoXHUwMDI2c2QtXHUwMDNlYmFja2xvZywgTlVMTCk7XG4xMzQwNDpcdH1cbjEzNDA1Olx0XG4xMzQwNjpcdHN0YXRpYyB2b2lkIGJhY2tsb2dfbmFwaV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxuMTM0MDc6XHR7XG4xMzQwODpcdFx0c3RydWN0IHNvZnRuZXRfZGF0YSAqc2QgPSBwZXJfY3B1X3B0cihcdTAwMjZzb2Z0bmV0X2RhdGEsIGNwdSk7XG4xMzQwOTpcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gXHUwMDI2c2QtXHUwMDNlYmFja2xvZztcbjEzNDEwOlx0XG4xMzQxMTpcdFx0bmFwaS1cdTAwM2V0aHJlYWQgPSB0aGlzX2NwdV9yZWFkKGJhY2tsb2dfbmFwaSk7XG4xMzQxMjpcdFx0c2V0X2JpdChOQVBJX1NUQVRFX1RIUkVBREVELCBcdTAwMjZuYXBpLVx1MDAzZXN0YXRlKTtcbjEzNDEzOlx0fVxuMTM0MTQ6XHRcbjEzNDE1Olx0c3RhdGljIHN0cnVjdCBzbXBfaG90cGx1Z190aHJlYWQgYmFja2xvZ190aHJlYWRzID0ge1xuMTM0MTY6XHRcdC5zdG9yZVx0XHRcdD0gXHUwMDI2YmFja2xvZ19uYXBpLFxuMTM0MTc6XHRcdC50aHJlYWRfc2hvdWxkX3J1blx0PSBiYWNrbG9nX25hcGlfc2hvdWxkX3J1bixcbjEzNDE4Olx0XHQudGhyZWFkX2ZuXHRcdD0gcnVuX2JhY2tsb2dfbmFwaSxcbjEzNDE5Olx0XHQudGhyZWFkX2NvbW1cdFx0PSBcJiMzNDtiYWNrbG9nX25hcGkvJXVcJiMzNDssXG4xMzQyMDpcdFx0LnNldHVwXHRcdFx0PSBiYWNrbG9nX25hcGlfc2V0dXAsXG4xMzQyMTpcdH07XG4xMzQyMjpcdFxuMTM0MjM6XHQvKlxuMTM0MjQ6XHQgKiAgICAgICBUaGlzIGlzIGNhbGxlZCBzaW5nbGUgdGhyZWFkZWQgZHVyaW5nIGJvb3QsIHNvIG5vIG5lZWRcbjEzNDI1Olx0ICogICAgICAgdG8gdGFrZSB0aGUgcnRubCBzZW1hcGhvcmUuXG4xMzQyNjpcdCAqL1xuMTM0Mjc6XHRzdGF0aWMgaW50IF9faW5pdCBuZXRfZGV2X2luaXQodm9pZClcbjEzNDI4Olx0e1xuMTM0Mjk6XHRcdGludCBpLCByYyA9IC1FTk9NRU07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NDgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBUaHJlYWRlZCBOQVBJIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBzcGVjaWZpY3MgZm9yIHRocmVhZGVkIE5BUEksIGZvY3VzaW5nIG9uIGBuZXQvY29yZS9kZXYuY2Agc2luY2UgdGhhdCYjMzk7cyBhIGNlbnRyYWwgcGllY2UuIFRoZSBmYWN0IHRoYXQgYG5ldC9jb3JlL2Rldi5jYCBpcyBjb21waWxlZCB3aGVuZXZlciBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCBpcywgb2YgY291cnNlLCBleHBlY3RlZDsgaXQmIzM5O3MgZnVuZGFtZW50YWwgdG8gTGludXggbmV0d29ya2luZy4gTm93LCBJIHdhbnQgdG8gY2xhcmlmeSBpZiB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvbiB0aGUgc3RhbmRhcmQgY29uZmlncy4gSSYjMzk7bSBnb2luZyB0byBkb3VibGUtY2hlY2sgd2hldGhlciBgYmFja2xvZ190aHJlYWRzYCBvciB0aHJlYWRlZCBOQVBJIGlzIHJlbGlhbnQgb24gYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiBJIGtub3cgYG5ldF9kZXZfaW5pdGAgc2V0cyB1cCBgc21wYm9vdF9yZWdpc3Rlcl9wZXJjcHVfdGhyZWFkKCZhbXA7YmFja2xvZ190aHJlYWRzKWAsIGFuZCB0aGF0JiMzOTtzIHByZXNlbnQgaW4gcHJldHR5IG11Y2ggZXZlcnkgc3RhbmRhcmQga2VybmVsIGNvbmZpZ3VyYXRpb24gd2l0aCBTTVAgYW5kIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBTaW5jZSBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCB0aGlzIHNlZW1zIGxpa2VseSwgYnV0IEkgbmVlZCB0byBjb25maXJtLiBCZXlvbmQgdGhvc2UsIEkmIzM5O2xsIG5lZWQgdG8gc2NydXRpbml6ZSBvdGhlciBjb25maWdzIHRvIGFzY2VydGFpbiBpZiB0aGVyZSBhcmUgYW55IG90aGVycy4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gYG5hcGlfa3RocmVhZF9jcmVhdGVgIGFzIHdlbGwgYXMgZXhwbG9yZSB0aGUgdGhyZWFkZWQgbmV0ZGV2IGF0dHJpYnV0ZXMsIHRvIG1ha2Ugc3VyZSBJIGFtIGNvdmVyaW5nIGFsbCB0aGUgYmFzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05BUElfU1RBVEVfVEhSRUFERUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTUwMTM9c3RhdGljIGlubGluZSB2b2lkIF9fX19uYXBpX3NjaGVkdWxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTUwMTktXG5uZXQvY29yZS9kZXYuYzo1MDIwOlx0aWYgKHRlc3RfYml0KE5BUElfU1RBVEVfVEhSRUFERUQsIFx1MDAyNm5hcGktXHUwMDNlc3RhdGUpKSB7XG5uZXQvY29yZS9kZXYuYy01MDIxLVx0XHQvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKSBpblxuLS1cbm5ldC9jb3JlL2Rldi5jPTcyNDc9c3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTcyNTItXG5uZXQvY29yZS9kZXYuYzo3MjUzOlx0YXNzaWduX2JpdChOQVBJX1NUQVRFX1RIUkVBREVELCBcdTAwMjZuYXBpLVx1MDAzZXN0YXRlLCB0aHJlYWRlZCk7XG5uZXQvY29yZS9kZXYuYzo3MjU0Olx0YXNzaWduX2JpdChOQVBJX1NUQVRFX1RIUkVBREVEX0JVU1lfUE9MTCwgXHUwMDI2bmFwaS1cdTAwM2VzdGF0ZSwgYnVzeV9wb2xsKTtcbm5ldC9jb3JlL2Rldi5jLTcyNTUtfVxuLS1cbm5ldC9jb3JlL2Rldi5jPTEzNDA2PXN0YXRpYyB2b2lkIGJhY2tsb2dfbmFwaV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm5ldC9jb3JlL2Rldi5jLTEzNDExLVx0bmFwaS1cdTAwM2V0aHJlYWQgPSB0aGlzX2NwdV9yZWFkKGJhY2tsb2dfbmFwaSk7XG5uZXQvY29yZS9kZXYuYzoxMzQxMjpcdHNldF9iaXQoTkFQSV9TVEFURV9USFJFQURFRCwgXHUwMDI2bmFwaS1cdTAwM2VzdGF0ZSk7XG5uZXQvY29yZS9kZXYuYy0xMzQxMy19XG4tLVxubmV0L2NvcmUvZGV2Lmg9MzU3PXN0YXRpYyBpbmxpbmUgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCBuYXBpX2dldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXG5uZXQvY29yZS9kZXYuaC0zNTgte1xubmV0L2NvcmUvZGV2Lmg6MzU5Olx0aWYgKHRlc3RfYml0KE5BUElfU1RBVEVfVEhSRUFERURfQlVTWV9QT0xMLCBcdTAwMjZuLVx1MDAzZXN0YXRlKSlcbm5ldC9jb3JlL2Rldi5oLTM2MC1cdFx0cmV0dXJuIE5FVERFVl9OQVBJX1RIUkVBREVEX0JVU1lfUE9MTDtcbm5ldC9jb3JlL2Rldi5oLTM2MS1cbm5ldC9jb3JlL2Rldi5oOjM2MjpcdGlmICh0ZXN0X2JpdChOQVBJX1NUQVRFX1RIUkVBREVELCBcdTAwMjZuLVx1MDAzZXN0YXRlKSlcbm5ldC9jb3JlL2Rldi5oLTM2My1cdFx0cmV0dXJuIE5FVERFVl9OQVBJX1RIUkVBREVEX0VOQUJMRUQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NDgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gVGhyZWFkZWQgTkFQSSB3aXRoIGBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZWAqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0aHJlYWRlZCBOQVBJIHNldHVwLCBzcGVjaWZpY2FsbHkgaG93IGBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZWAgZmFjdG9ycyBpbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHVzZXItc3BhY2UgaW1wbGljYXRpb25zIGhlcmUuIERvZXMgYSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9uIGFjdHVhbGx5ICplbmFibGUqIHRocmVhZGVkIE5BUEkgZXhwbGljaXRseSB1c2luZyB0aGF0IGZ1bmN0aW9uPyBPciwgcGVyaGFwcywgaXMgdGhlcmUgc29tZSBjbGV2ZXIgbG9naWMgYnVyaWVkIGluIHRoZSBiYWNrbG9nIE5BUEkgY29kZSB0aGF0IHVzZXMgaXQgYXV0b21hdGljYWxseSBpbiBjZXJ0YWluIHNjZW5hcmlvcz8gSSBuZWVkIHRvIGNsYXJpZnkgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZWAgYW5kIGJhY2tsb2cgTkFQSSB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBUaGlzIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBhbmQgZGVidWdnaW5nLCBhbmQgSSB3YW50IHRvIGZ1bGx5IGdyYXNwIGhvdyB0aGlzIGltcGFjdHMgZXZlcnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTc6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmFwaV9zZXRfdGhyZWFkZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jPTcyMDk9c3RhdGljIHZvaWQgbmFwaV9zdG9wX2t0aHJlYWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTcyNDYtXG5uZXQvY29yZS9kZXYuYzo3MjQ3OnN0YXRpYyB2b2lkIG5hcGlfc2V0X3RocmVhZGVkX3N0YXRlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcbm5ldC9jb3JlL2Rldi5jLTcyNDgtXHRcdFx0XHQgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZF9tb2RlKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTcyNTYtXG5uZXQvY29yZS9kZXYuYzo3MjU3OmludCBuYXBpX3NldF90aHJlYWRlZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG5uZXQvY29yZS9kZXYuYy03MjU4LVx0XHQgICAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTcyODItXHRcdHNtcF9tYl9fYmVmb3JlX2F0b21pYygpO1xubmV0L2NvcmUvZGV2LmM6NzI4MzpcdFx0bmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUobmFwaSwgdGhyZWFkZWQpO1xubmV0L2NvcmUvZGV2LmMtNzI4NC1cdH1cbi0tXG5uZXQvY29yZS9kZXYuYz03Mjg5PWludCBuZXRpZl9zZXRfdGhyZWFkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvY29yZS9kZXYuYy03MzEyLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShuYXBpLCBcdTAwMjZkZXYtXHUwMDNlbmFwaV9saXN0LCBkZXZfbGlzdClcbm5ldC9jb3JlL2Rldi5jOjczMTM6XHRcdFdBUk5fT05fT05DRShuYXBpX3NldF90aHJlYWRlZChuYXBpLCB0aHJlYWRlZCkpO1xubmV0L2NvcmUvZGV2LmMtNzMxNC1cbi0tXG5uZXQvY29yZS9kZXYuYz03NTM0PXN0YXRpYyB2b2lkIG5hcGlfcmVzdG9yZV9jb25maWcoc3RydWN0IG5hcGlfc3RydWN0ICpuKVxuLS1cbm5ldC9jb3JlL2Rldi5jLTc1NTMtXG5uZXQvY29yZS9kZXYuYzo3NTU0Olx0V0FSTl9PTl9PTkNFKG5hcGlfc2V0X3RocmVhZGVkKG4sIG4tXHUwMDNlY29uZmlnLVx1MDAzZXRocmVhZGVkKSk7XG5uZXQvY29yZS9kZXYuYy03NTU1LX1cbi0tXG5uZXQvY29yZS9kZXYuaD0zNjk9bmFwaV9nZXRfdGhyZWFkZWRfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcbi0tXG5uZXQvY29yZS9kZXYuaC0zNzUtXG5uZXQvY29yZS9kZXYuaDozNzY6aW50IG5hcGlfc2V0X3RocmVhZGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbixcbm5ldC9jb3JlL2Rldi5oLTM3Ny1cdFx0ICAgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZCk7XG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYz0zMjc9bmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zMzctXHRcdHRocmVhZGVkID0gbmxhX2dldF91aW50KGluZm8tXHUwMDNlYXR0cnNbTkVUREVWX0FfTkFQSV9USFJFQURFRF0pO1xubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYzozMzg6XHRcdHJldCA9IG5hcGlfc2V0X3RocmVhZGVkKG5hcGksIHRocmVhZGVkKTtcbm5ldC9jb3JlL25ldGRldi1nZW5sLmMtMzM5LVx0XHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQxMwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDUzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipUaHJlYWRlZCBOQVBJIEZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaHJlYWRlZCBOQVBJIGlzIGFjY2Vzc2libGUgdGhyb3VnaCBgbmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZ2AgKHZpYSBuZXRsaW5rKSBvciB0aGUgc3RhbmRhcmQgYmFja2xvZyBwcm9jZXNzaW5nIGluIHRoZSBTTVAgbmV0d29yayBkZXZpY2UgcGF0aCwgd2hpY2ggbWVhbnMgYHJ1bl9iYWNrbG9nX25hcGlgIGlzIGEga2V5IGZ1bmN0aW9uLCBhbmQgdGhlIHBvbGxpbmcgbG9vcCBpdHNlbGYsIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAsIHJlc2lkZXMgaW4gYG5ldC9jb3JlL2Rldi5jYC4KClJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyBmdXp6YWJsZS4gVGhlIGNvcmUgYXJlYSBvZiBjb25jZXJuIGlzIGluIGBuZXQvY29yZS9kZXYuY2AsIHByZWNpc2VseSBob3cgdGhlIHNjaGVkdWxpbmcvcmVzY2hlZHVsaW5nIGJlaGF2aW9yIChgY29uZF9yZXNjaGVkKClgKSB3aXRoaW4gYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCBpcyBtb2RpZmllZCBmb3IgdGhyZWFkZWQgTkFQSSBwb2xsaW5nLiAgVGhpcyBsb29rcyBwcm9taXNpbmcuCgpSZWFjaGFiaWxpdHkgaXMgc3RyYWlnaHRmb3J3YXJkOyBhbnkgc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIGEgTGludXggbmV0d29ya2luZyBzdGFjayBpcyBnb2luZyB0byBoaXQgdGhpcyBjb2RlLiBUaGUgcG9zaXRpdmUgY3JpdGVyaWEgY2hlY2tzIGFyZSBtZXQgYmVjYXVzZSB3ZSBhcmUgZGVhbGluZyB3aXRoIGNvcmUgbmV0d29ya2luZyBsb2dpYywgc3BlY2lmaWNhbGx5IHNjaGVkdWxpbmcuICAqV29ydGhGdXp6aW5nID0gdHJ1ZSosIGl0JiMzOTtzIGEgZ28uCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IGZvY3VzIHN5bWJvbHMuICBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGlzIHRoZSBtb2RpZmllZCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBieSBgbmFwaV90aHJlYWRlZF9wb2xsYCwgYHJ1bl9iYWNrbG9nX25hcGlgLCBgbmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZ2AsIGFuZCBgbmFwaV9zZXRfdGhyZWFkZWRgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGlzIHN0YXRpYyBvciBpbmxpbmVkLiBDaGVja2luZyBgbmV0L2NvcmUvZGV2LmNgIGNvbmZpcm1zIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLiBFeGNlbGxlbnQuCgpOb3csIGNoZWNraW5nIHRoZSBjYWxsZXJzIGluIHRoZSBzYW1lIGZpbGUgYG5ldC9jb3JlL2Rldi5jYDogYG5hcGlfdGhyZWFkZWRfcG9sbGAsIGBydW5fYmFja2xvZ19uYXBpYCwgYW5kIGBuYXBpX3NldF90aHJlYWRlZGAgYXJlIGFsbCB0aGVyZS4gVGhlc2Ugc2hvdWxkIGJlIGdvb2Qgc3ltYm9scyB0byBmb2N1cyBvbiwgYXMgdGhleSBhcmUgbm9uLXViaXF1aXRvdXMgZW50cnlwb2ludHMgYW5kIGZ1bmN0aW9ucyBkaXJlY3RseSByZWxhdGVkIHRvIHRocmVhZGVkIE5BUEkgYW5kIGJhY2tsb2cgcHJvY2Vzc2luZy4KCkZpbmFsbHksIHRoZSBlbmFibGUgY29uZmlncy4gYENPTkZJR19ORVRgIChiYXNpYyBuZXR3b3JraW5nKSBhbmQgYENPTkZJR19TTVBgIChuZWVkZWQgZm9yIHNtcF9ob3RwbHVnX3RocmVhZCB1c2VkIGluIGJhY2tsb2cgdGhyZWFkcykg4oCTIHN0YW5kYXJkIHN0dWZmLiAgV2UmIzM5O3JlIGdvb2QgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RldlxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvY29yZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX1NZU0NUTCkgJiM0Mzs9IHN5c2N0bF9uZXRfY29yZS5vXG5uZXQvY29yZS9NYWtlZmlsZS0xMS1cbm5ldC9jb3JlL01ha2VmaWxlOjEyOm9iai15XHRcdCAgICAgJiM0Mzs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcbm5ldC9jb3JlL01ha2VmaWxlLTEzLVx0XHRcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTY4CgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDI1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQcm9wb3NlZCBQYXRjaCoqCgpPa2F5LCBzbyBgZGV2Lm9gIGlzIGluZGVlZCBidWlsdCBhcyBgb2JqLXlgIHdpdGhpbiBgbmV0L2NvcmUvTWFrZWZpbGVgLCBhbmQgdGhlIGBuZXQvTWFrZWZpbGVgIGl0c2VsZiBpbmNsdWRlcyBgb2JqLSQoQ09ORklHX05FVCkgJiM0Mzs9IGNvcmUvYC4gVGhlcmVmb3JlLCBgQ09ORklHX05FVGAgaXMgdGhlIGNyaXRpY2FsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIEZ1cnRoZXJtb3JlLCBgU01QYCBpcyBhbHNvIHJlbGV2YW50LCBwYXJ0aWN1bGFybHkgYmVjYXVzZSBvZiB0aGUgdGhyZWFkZWQgYmFja2xvZyBOQVBJIHByb2Nlc3NpbmcuIE1ha2VzIHBlcmZlY3Qgc2Vuc2UuCgpOb3csIGxldCYjMzk7cyBqdXN0IGNvbmZpcm0gYWxsIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYCBhcmUgaW4gb3JkZXI6CgoqICAgYFdvcnRoRnV6emluZ2A6IERlZmluaXRlbHkgdHJ1ZS4KKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlc2NoZWR1bGluZyBpbiBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKWAgd2l0aGluIHRoZSBuZXR3b3JraW5nIGNvcmUgKGBuZXQvY29yZS9kZXYuY2ApLiBJdCBlbnN1cmVzIGBjb25kX3Jlc2NoZWQoKWAgaXMgY2FsbGVkIG9uIGV2ZXJ5IGV4aXQsIG5vdCBqdXN0IGR1cmluZyByZXBvbGwgaXRlcmF0aW9ucy4gVGhpcyBpcyBjcnVjaWFsIGFzIGl0IHJ1bnMgd2l0aGluIHRocmVhZGVkIE5BUEkgd29ya2VyIHRocmVhZHMgYW5kIGJhY2tsb2cgTkFQSSwgYW5kIGlzIGFjY2Vzc2libGUgaW4gYW55IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBTb3VuZHMgc29saWQuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O25hcGlfdGhyZWFkZWRfcG9sbF9sb29wJiMzNDssICYjMzQ7bmFwaV90aHJlYWRlZF9wb2xsJiMzNDssICYjMzQ7cnVuX2JhY2tsb2dfbmFwaSYjMzQ7LCAmIzM0O25hcGlfc2V0X3RocmVhZGVkJiMzNDtdYCAtIFl1cCwgdGhhdCYjMzk7cyBzcG90IG9uLCB0aGVzZSBzeW1ib2xzIGVuY29tcGFzcyB0aGUga2V5IGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGUgcGF0Y2guCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbJiMzNDtORVQmIzM0OywgJiMzNDtTTVAmIzM0O11gIC0gWWVzLCBgTkVUYCBhbmQgYFNNUGAgYXJlIHRoZSBrZXkgZW5hYmxpbmcgY29uZmlncyB0aGF0IHdlIGFscmVhZHkgaWRlbnRpZmllZC4KCkFscmlnaHQsIGEgZmluYWwgc2FuaXR5IGNoZWNrLi4uIEV2ZXJ5dGhpbmcgaXMgcHJlY2lzZSwgY29tcGxldGUsIGFuZCBleGFjdGx5IHdoYXQmIzM5O3MgcmVxdWlyZWQuIE5vIGlzc3VlcyBkZXRlY3RlZC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7U01QJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmFwaV90aHJlYWRlZF9wb2xsX2xvb3AmIzM0OywKICAgICYjMzQ7bmFwaV90aHJlYWRlZF9wb2xsJiMzNDssCiAgICAmIzM0O3J1bl9iYWNrbG9nX25hcGkmIzM0OywKICAgICYjMzQ7bmFwaV9zZXRfdGhyZWFkZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2NoZWR1bGluZyBhbmQgY29vcGVyYXRpdmUgeWllbGQgYmVoYXZpb3IgKGNvbmRfcmVzY2hlZCkgaW4gbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gKG5ldC9jb3JlL2Rldi5jKS4gVGhpcyBjb2RlIGV4ZWN1dGVzIGluIHRocmVhZGVkIE5BUEkgYW5kIGJhY2tsb2cgcG9sbGluZyBrdGhyZWFkcyBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUJiMzNDssCiAgICAmIzM0O1NNUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25hcGlfdGhyZWFkZWRfcG9sbF9sb29wJiMzNDssCiAgICAmIzM0O25hcGlfdGhyZWFkZWRfcG9sbCYjMzQ7LAogICAgJiMzNDtydW5fYmFja2xvZ19uYXBpJiMzNDssCiAgICAmIzM0O25hcGlfc2V0X3RocmVhZGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHNjaGVkdWxpbmcgYW5kIGNvb3BlcmF0aXZlIHlpZWxkIGJlaGF2aW9yIChjb25kX3Jlc2NoZWQpIGluIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKCkgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChuZXQvY29yZS9kZXYuYykuIFRoaXMgY29kZSBleGVjdXRlcyBpbiB0aHJlYWRlZCBOQVBJIGFuZCBiYWNrbG9nIHBvbGxpbmcga3RocmVhZHMgYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTc6NTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBjYWxsIGBjb25kX3Jlc2NoZWQoKWAgdW5jb25kaXRpb25hbGx5IG9uIGV2ZXJ5IHBhc3MgdGhyb3VnaCB0aGUgbG9vcCwgcmF0aGVyIHRoYW4gb25seSB3aGVuIGByZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgaXMgYSB0YXNrIHNjaGVkdWxpbmcgLyBDUFUgeWllbGRpbmcgY2hhbmdlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJucyB3aXRob3V0IHNjaGVkdWxpbmcuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgZGF0YSBidWZmZXJzLCBhbHRlciBwYWNrZXQvZGF0YSBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3Iga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTc0ZDM2NmE0ZGM2YzIxY2IwMWFkYWY2MmZiODhhNTg5YWY2NjJiNgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTc6NTc6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDM4MzM2ODU4YzE2OGYuLjVjN2Y4Y2RmODQ0MzUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL2Rldi5jCkBAIC03OTI0LDExICYjNDM7NzkyNCwxMyBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQlncm9fZmx1c2hfbm9ybWFsKCZhbXA7bmFwaS0mZ3Q7Z3JvLCBIWiAmZ3Q7PSAxMDAwKTsKIAkJbG9jYWxfYmhfZW5hYmxlKCk7CiAKLQkJLyogQ2FsbCBjb25kX3Jlc2NoZWQgaGVyZSB0byBhdm9pZCB3YXRjaGRvZyB3YXJuaW5ncy4gKi8KLQkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykgewomIzQzOwkJaWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcykKIAkJCXJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpOwotCQkJY29uZF9yZXNjaGVkKCk7Ci0JCX0KJiM0MzsKJiM0MzsJCS8qIG5hcGlfdGhyZWFkX3dhaXQoKSBjYW4gcmV0dXJuIHdpdGhvdXQgc2NoZWR1bGluZywgc28geWllbGQgb24KJiM0MzsJCSAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuCiYjNDM7CQkgKi8KJiM0MzsJCWNvbmRfcmVzY2hlZCgpOwogCiAJCWlmICghcmVwb2xsKQogCQkJYnJlYWs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEtNU0FOIEZ1enppbmcgTmVlZHMqKgoKT2theSwgdGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSYjMzk7cmUgbG9va2luZyBhdCBhIGNvZGUgY2hhbmdlIHRoYXQgY291bGQgaW50cm9kdWNlIGtlcm5lbCBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gTGV0JiMzOTtzIGRpdmUgaW4uCgpGaXJzdCwgSSBzZWUgdGhlIGBkaWZmYCBpdHNlbGYuIEl0IHNlZW1zIHRvIGJlIGluIGBuZXQvY29yZS9kZXYuY2AuIEFscmlnaHQsIG5ldHdvcmsgZGV2aWNlIGNvcmUsIG5vdCBhIGJhZCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBtZW1vcnkgYnVncy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjaGFuZ2UgYWN0dWFsbHkgKmlzKi4gSSBzZWUgc29tZSBhZGRpdGlvbnMgYXJvdW5kIGxpbmUgNzkyNC4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSBpcyByZWxhdGVkIHRvIHRoZSBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGZ1bmN0aW9uLiBUaGUgcGF0Y2ggaW5jbHVkZXMgYSBgY29uZF9yZXNjaGVkKClgIGNhbGwuIEl0JiMzOTtzIGJlaW5nIG1vdmVkIG91dCBvZiBhIGNvbmRpdGlvbmFsIGJsb2NrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyB3YXMgZG9uZSwgdG8gYXNzZXNzIGlmIHRoZXJlIG1pZ2h0IGJlIGEgbWVtb3J5IHNhZmV0eSBjb25jZXJuLiBUaGUgY29tbWVudCBzdWdnZXN0cyB0aGUgcGxhY2VtZW50IGlzIHJlbGF0ZWQgdG8gd2F0Y2hkb2cgd2FybmluZ3MgYW5kIHNjaGVkdWxpbmcsIGJ1dCB0aGUgYWRkZWQgY29tbWVudCBhYm91dCBgbmFwaV90aHJlYWRfd2FpdCgpYCBpcyBpbnRyaWd1aW5nLiBTZWVtcyBsaWtlIHRoZXJlJiMzOTtzIGEgcmVhc29uIGZvciBpdC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGUgYXJvdW5kIHRoaXMgY2hhbmdlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHBvdGVudGlhbCBtZW1vcnkgaW1wbGljYXRpb25zLiBJIHdpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlIGFmZmVjdHMgbWVtb3J5IGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uLiBJdCYjMzk7cyB0b28gZWFybHkgdG8gc2F5IGlmIEtNU0FOIGlzIG5lZWRlZCwgYnV0IEkmIzM5O20gbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGJlaGF2aW91ciBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9jb3JlL2Rldi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3OTAwOlx0XHRcdGxvY2FsX2JoX2Rpc2FibGUoKTtcbjc5MDE6XHRcdFx0YnBmX25ldF9jdHggPSBicGZfbmV0X2N0eF9zZXQoXHUwMDI2X19icGZfbmV0X2N0eCk7XG43OTAyOlx0XG43OTAzOlx0XHRcdHNkID0gdGhpc19jcHVfcHRyKFx1MDAyNnNvZnRuZXRfZGF0YSk7XG43OTA0Olx0XHRcdHNkLVx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IHRydWU7XG43OTA1Olx0XG43OTA2Olx0XHRcdGhhdmUgPSBuZXRwb2xsX3BvbGxfbG9jayhuYXBpKTtcbjc5MDc6XHRcdFx0X19uYXBpX3BvbGwobmFwaSwgXHUwMDI2cmVwb2xsKTtcbjc5MDg6XHRcdFx0bmV0cG9sbF9wb2xsX3VubG9jayhoYXZlKTtcbjc5MDk6XHRcbjc5MTA6XHRcdFx0c2QtXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gZmFsc2U7XG43OTExOlx0XHRcdGJhcnJpZXIoKTtcbjc5MTI6XHRcbjc5MTM6XHRcdFx0aWYgKHNkX2hhc19ycHNfaXBpX3dhaXRpbmcoc2QpKSB7XG43OTE0Olx0XHRcdFx0bG9jYWxfaXJxX2Rpc2FibGUoKTtcbjc5MTU6XHRcdFx0XHRuZXRfcnBzX2FjdGlvbl9hbmRfaXJxX2VuYWJsZShzZCk7XG43OTE2Olx0XHRcdH1cbjc5MTc6XHRcdFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcbjc5MTg6XHRcdFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xuNzkxOTpcdFxuNzkyMDpcdFx0XHQvKiBXaGVuIGJ1c3kgcG9sbCBpcyBlbmFibGVkLCB0aGUgb2xkIHBhY2tldHMgYXJlIG5vdCBmbHVzaGVkIGluXG43OTIxOlx0XHRcdCAqIG5hcGlfY29tcGxldGVfZG9uZS4gU28gZmx1c2ggdGhlbSBoZXJlLlxuNzkyMjpcdFx0XHQgKi9cbjc5MjM6XHRcdFx0aWYgKGJ1c3lfcG9sbF9sYXN0X3FzKVxuNzkyNDpcdFx0XHRcdGdyb19mbHVzaF9ub3JtYWwoXHUwMDI2bmFwaS1cdTAwM2Vncm8sIEhaIFx1MDAzZT0gMTAwMCk7XG43OTI1Olx0XHRcdGxvY2FsX2JoX2VuYWJsZSgpO1xuNzkyNjpcdFxuNzkyNzpcdFx0XHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxuNzkyODpcdFx0XHRcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xuNzkyOTpcdFxuNzkzMDpcdFx0XHQvKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIHlpZWxkIG9uXG43OTMxOlx0XHRcdCAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuXG43OTMyOlx0XHRcdCAqL1xuNzkzMzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjc5MzQ6XHRcbjc5MzU6XHRcdFx0aWYgKCFyZXBvbGwpXG43OTM2Olx0XHRcdFx0YnJlYWs7XG43OTM3Olx0XHR9XG43OTM4Olx0XG43OTM5Olx0XHRpZiAoYnVzeV9wb2xsX2xhc3RfcXMpXG43OTQwOlx0XHRcdCpidXN5X3BvbGxfbGFzdF9xcyA9IGxhc3RfcXM7XG43OTQxOlx0fVxuNzk0MjpcdFxuNzk0MzpcdHN0YXRpYyBpbnQgbmFwaV90aHJlYWRlZF9wb2xsKHZvaWQgKmRhdGEpXG43OTQ0Olx0e1xuNzk0NTpcdFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGF0YTtcbjc5NDY6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGppZmZpZXM7XG43OTQ3Olx0XHRib29sIHdhbnRfYnVzeV9wb2xsO1xuNzk0ODpcdFx0Ym9vbCBpbl9idXN5X3BvbGw7XG43OTQ5Olx0XHR1bnNpZ25lZCBsb25nIHZhbDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTc6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYwNwoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiA1NjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgSW1wYWN0KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIHdpdGhpbiBgbmV0L2NvcmUvZGV2LmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGFib3V0IHRoZSByZXNjaGVkdWxpbmcgbG9naWM7IG1vdmluZyBgY29uZF9yZXNjaGVkKClgIG91dHNpZGUgb2YgYSBjb25kaXRpb25hbCBibG9jay4gSSYjMzk7bSBzZWVpbmcgdGhhdCB0aGlzIGlzIHB1cmVseSBhIGNoYW5nZSBpbiBob3cgdGhlIGtlcm5lbCB0aHJlYWQgeWllbGRzIHRpbWUuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gZm9yIG15IHB1cnBvc2VzIGhlcmUgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLCBhbmQgSSB0aGluayBub3QuIEl0JiMzOTtzIGp1c3QgYSByZXNjaGVkdWxpbmcgY2hhbmdlIOKAkyBubyBtZW1vcnkgYWxsb2NhdGlvbiwgbm8gdXNlci1zcGFjZSBjb3BpZXMsIG5vIHBvdGVudGlhbCBmb3IgaW5mbyBsZWFrcyBzdGVtbWluZyBmcm9tIHVuaXRpYWxpemVkIG1lbW9yeSBvciBhbnl0aGluZyBvZiB0aGF0IG5hdHVyZS4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBtb2RpZmljYXRpb25zIHRvIGluaXRpYWxpemF0aW9uLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnksIGJvdW5kcyBjaGVja2luZywgb3IgYnVmZmVyIGxlbmd0aCBjYWxjdWxhdGlvbnMgdGhhdCBtaWdodCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlcy4KClNvLCB0aGlzIGNsZWFybHkgaGFzICpub3RoaW5nKiB0byBkbyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gU3RhbmRhcmQgc2FuaXRpemVycywgb3IgZXZlbiBLQVNBTiBhbmQgbG9ja2RlcCwgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGdlbmVyYWwgcmVncmVzc2lvbnMgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkLiBLTVNBTiBpcyBkZWZpbml0ZWx5IG92ZXJraWxsIGhlcmUuCgpMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgYWdhaW5zdCB0aGUgS01TQU4gY3JpdGVyaWEsIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLgoKS01TQU4gc2F5cyBgTmVlZHNLTVNBTj10cnVlYCAqb25seSogaWYgdGhlcmUmIzM5O3MgYW55IGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2Y6CjEuICBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHRocm91Z2ggdmFyaW91cyBtZWFucykgd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuIE5vcGUuCjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcy4gTm9wZS4KMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBOb3BlLgo0LiAgQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBieXRlcy4gTm9wZS4KCkFuZCBpdCBzYXlzIGBOZWVkc0tNU0FOPWZhbHNlYCBpZjoKKiAgIFRoZSByaXNrcyBhcmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgZGVhZGxvY2tzIG9yIHVzZS1hZnRlci1mcmVlIOKAkyB0aGluZ3MgS0FTQU4vTE9DS0RFUC9zdGFuZGFyZCBidWcgZGV0ZWN0b3JzIGNhdGNoLiBFeGFjdGx5IQoqICAgQWxsIHRvdWNoZWQgc3RydWN0dXJlcyBhcmUgemVyb2VkIG9yIGluaXRpYWxpemVkLiBBbmQgYXMgZmFyIGFzIEkgY2FuIHNlZSwgYWxsIHN0cnVjdHVyZSBhcmUgemVyb2VkLgoqICAgVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgbGVha3MuIFByZWNpc2VseS4KClRoZXJlZm9yZSwgaXQmIzM5O3MgY2xlYXI6IGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE3OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcCgpYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGNhbGwgYGNvbmRfcmVzY2hlZCgpYCB1bmNvbmRpdGlvbmFsbHkgb24gZXZlcnkgcGFzcyB0aHJvdWdoIHRoZSBsb29wLCByYXRoZXIgdGhhbiBvbmx5IHdoZW4gYHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xc2AgaXMgdHJ1ZS4gVGhpcyBpcyBhIHRhc2sgc2NoZWR1bGluZyAvIENQVSB5aWVsZGluZyBjaGFuZ2UgdG8gYXZvaWQgd2F0Y2hkb2cgd2FybmluZ3Mgd2hlbiBgbmFwaV90aHJlYWRfd2FpdCgpYCByZXR1cm5zIHdpdGhvdXQgc2NoZWR1bGluZy5cblxuVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCBkYXRhIGJ1ZmZlcnMsIGFsdGVyIHBhY2tldC9kYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBjYWxsIGBjb25kX3Jlc2NoZWQoKWAgdW5jb25kaXRpb25hbGx5IG9uIGV2ZXJ5IHBhc3MgdGhyb3VnaCB0aGUgbG9vcCwgcmF0aGVyIHRoYW4gb25seSB3aGVuIGByZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgaXMgYSB0YXNrIHNjaGVkdWxpbmcgLyBDUFUgeWllbGRpbmcgY2hhbmdlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJucyB3aXRob3V0IHNjaGVkdWxpbmcuXG5cblRoZSBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgZGF0YSBidWZmZXJzLCBhbHRlciBwYWNrZXQvZGF0YSBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3Iga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1Nzo1OS42NDc0MzU3MzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA2ODk2NzExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5hcGlfdGhyZWFkZWRfcG9sbF9sb29wXCIsXG4gICAgXCJuYXBpX3RocmVhZGVkX3BvbGxcIixcbiAgICBcInJ1bl9iYWNrbG9nX25hcGlcIixcbiAgICBcIm5hcGlfc2V0X3RocmVhZGVkXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBjYWxsIGBjb25kX3Jlc2NoZWQoKWAgdW5jb25kaXRpb25hbGx5IG9uIGV2ZXJ5IHBhc3MgdGhyb3VnaCB0aGUgbG9vcCwgcmF0aGVyIHRoYW4gb25seSB3aGVuIGByZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgaXMgYSB0YXNrIHNjaGVkdWxpbmcgLyBDUFUgeWllbGRpbmcgY2hhbmdlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJucyB3aXRob3V0IHNjaGVkdWxpbmcuXFxuXFxuVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCBkYXRhIGJ1ZmZlcnMsIGFsdGVyIHBhY2tldC9kYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2NoZWR1bGluZyBhbmQgY29vcGVyYXRpdmUgeWllbGQgYmVoYXZpb3IgKGNvbmRfcmVzY2hlZCkgaW4gbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gKG5ldC9jb3JlL2Rldi5jKS4gVGhpcyBjb2RlIGV4ZWN1dGVzIGluIHRocmVhZGVkIE5BUEkgYW5kIGJhY2tsb2cgcG9sbGluZyBrdGhyZWFkcyBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTc6NTc6NTkuNjQ3NDQxNDI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY0MzU4NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhNzRkMzY2YTRkYzZjMjFjYjAxYWRhZjYyZmI4OGE1ODlhZjY2MmI2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgU2VwIDMgMTc6NTc6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDM4MzM2ODU4YzE2OGYuLjVjN2Y4Y2RmODQ0MzUgMTAwNjQ0XFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcXG4rKysgYi9uZXQvY29yZS9kZXYuY1xcbkBAIC03OTI0LDExICs3OTI0LDEzIEBAIHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG4gXFx0XFx0XFx0Z3JvX2ZsdXNoX25vcm1hbChcXHUwMDI2bmFwaS1cXHUwMDNlZ3JvLCBIWiBcXHUwMDNlPSAxMDAwKTtcXG4gXFx0XFx0bG9jYWxfYmhfZW5hYmxlKCk7XFxuIFxcbi1cXHRcXHQvKiBDYWxsIGNvbmRfcmVzY2hlZCBoZXJlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzLiAqL1xcbi1cXHRcXHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKSB7XFxuK1xcdFxcdGlmIChyZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXMpXFxuIFxcdFxcdFxcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xcbi1cXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4tXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogbmFwaV90aHJlYWRfd2FpdCgpIGNhbiByZXR1cm4gd2l0aG91dCBzY2hlZHVsaW5nLCBzbyB5aWVsZCBvblxcbitcXHRcXHQgKiBldmVyeSBleGl0LCBub3Qgb25seSB3aGVuIHRoZSBsb29wIGl0ZXJhdGVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcbiBcXHRcXHRpZiAoIXJlcG9sbClcXG4gXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjAwLjE4NDcyMDI2NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzkwNDA5Njk0NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUXCIsXG4gICAgXCJTTVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuYXBpX3RocmVhZGVkX3BvbGxfbG9vcFwiLFxuICAgIFwibmFwaV90aHJlYWRlZF9wb2xsXCIsXG4gICAgXCJydW5fYmFja2xvZ19uYXBpXCIsXG4gICAgXCJuYXBpX3NldF90aHJlYWRlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNjaGVkdWxpbmcgYW5kIGNvb3BlcmF0aXZlIHlpZWxkIGJlaGF2aW9yIChjb25kX3Jlc2NoZWQpIGluIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKCkgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIChuZXQvY29yZS9kZXYuYykuIFRoaXMgY29kZSBleGVjdXRlcyBpbiB0aHJlYWRlZCBOQVBJIGFuZCBiYWNrbG9nIHBvbGxpbmcga3RocmVhZHMgYW5kIGlzIGZ1bGx5IHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTc0ZDM2NmE0ZGM2YzIxY2IwMWFkYWY2MmZiODhhNTg5YWY2NjJiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTc6NTc6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAzODMzNjg1OGMxNjhmLi41YzdmOGNkZjg0NDM1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzkyNCwxMSArNzkyNCwxMyBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0Z3JvX2ZsdXNoX25vcm1hbChcdTAwMjZuYXBpLVx1MDAzZWdybywgSFogXHUwMDNlPSAxMDAwKTtcbiBcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXG4tXHRcdC8qIENhbGwgY29uZF9yZXNjaGVkIGhlcmUgdG8gYXZvaWQgd2F0Y2hkb2cgd2FybmluZ3MuICovXG4tXHRcdGlmIChyZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXMpIHtcbitcdFx0aWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcylcbiBcdFx0XHRyY3Vfc29mdGlycV9xc19wZXJpb2RpYyhsYXN0X3FzKTtcbi1cdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdFx0fVxuK1xuK1x0XHQvKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIHlpZWxkIG9uXG4rXHRcdCAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuXG4rXHRcdCAqL1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbiBcdFx0aWYgKCFyZXBvbGwpXG4gXHRcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODowMC4xODQ3MjIwODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MDU2NTg2MTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE5ldHdvcmsgRHJpdmVyIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJJ20gZG9pbmcgaXMgY2FyZWZ1bGx5IGV4YW1pbmluZyB0aGlzIHBhdGNoIGZvciBgbmV0L2NvcmUvZGV2LmNgLiBJdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgdGhlIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgZnVuY3Rpb24sIHdoaWNoIHN1Z2dlc3RzIGl04oCZcyBkZWFsaW5nIHdpdGggbmV0d29yayBpbnRlcmZhY2UgaW50ZXJydXB0IGhhbmRsaW5nIGFuZCBob3cgd2UgZGVhbCB3aXRoIHRoZSBOQVBJIChOZXcgQVBJKSBwb2xsaW5nIG1lY2hhbmlzbS4gVGhlIGRpZmYgaXRzZWxmIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKndoeSogYmVoaW5kIGl0LlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGFyb3VuZCBsaW5lIDc5MjQsIEkgY2FuIHNlZSB0aGUgb3JpZ2luYWwgbG9naWMgYW5kIHRoZW4gdGhlIGNoYW5nZXMuIEl0IHNlZW1zIHRoZXkndmUgcmVvcmdhbml6ZWQgdGhlIGNvbmRpdGlvbmFsIGBjb25kX3Jlc2NoZWQoKWAgY2FsbC4gUHJldmlvdXNseSwgYGNvbmRfcmVzY2hlZCgpYCB3YXMgY2FsbGVkIG9ubHkgaWYgYHJlcG9sbGAgb3IgYGJ1c3lfcG9sbF9sYXN0X3FzYCB3ZXJlIHRydWUgKGFuZCBhZnRlciBgcmN1X3NvZnRpcnFfcXNfcGVyaW9kaWNgKS4gTm93IHRoZSBgY29uZF9yZXNjaGVkKClgIGNhbGwgaXMgKmFsd2F5cyogbWFkZS4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhlIG1vdGl2YXRpb24gaXMgdG8gXCJhdm9pZCB3YXRjaGRvZyB3YXJuaW5nc1wiIGFuZCBcInlpZWxkIG9uIGV2ZXJ5IGV4aXQuXCIgVGhlIG9yaWdpbmFsIGNvZGUgbWF5IGhhdmUgYmVlbiBibG9ja2luZyBmb3IgdG9vIGxvbmcgaW4gc29tZSBlZGdlIGNhc2VzLiBUaGUgY29tbWVudCByZWdhcmRpbmcgYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJuaW5nIHdpdGhvdXQgc2NoZWR1bGluZyBpbXBsaWVzIHRoZXkncmUgdHJ5aW5nIHRvIHByZXZlbnQgc3RhcnZhdGlvbiBvZiBvdGhlciB0aHJlYWRzIG9yIHByb2Nlc3NlcyBpZiB0aGUgTkFQSSBsb29wIGJlY29tZXMgYnVzeS5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBnb29kIGNoYW5nZSwgYSBzdWJ0bGUgb3B0aW1pemF0aW9uIHBlcmhhcHMuIFRoZSB3YXRjaGRvZyB3YXJuaW5ncyBhcmUgYSBjbHVlIHRoYXQgdGhlIG9yaWdpbmFsIGxvZ2ljIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gbGF0ZW5jeSBvciBldmVuIHN5c3RlbSBoYW5ncyB1bmRlciBoZWF2eSBuZXR3b3JrIGxvYWQuIFRoaXMgY2hhbmdlIGVzc2VudGlhbGx5IGFkZHMgYSB5aWVsZCBwb2ludCB0byB0aGUgcG9sbCBsb29wLiBJdCBsb29rcyBsaWtlIGl0IGNvdWxkIGltcHJvdmUgb3ZlcmFsbCBzeXN0ZW0gcmVzcG9uc2l2ZW5lc3MsIGV2ZW4gaWYgaXQgY29tZXMgYXQgYSBzbWFsbCBjb3N0IGluIHRocm91Z2hwdXQgdW5kZXIgaWRlYWwgY29uZGl0aW9ucy4gQnV0IHRoZSBkZXZpbCdzIGluIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8ga2VlcCBjb250ZXh0IGluIG1pbmQsIGFuZCBhbHNvIHVuZGVyc3RhbmQgd2hldGhlciBvciBub3QgdGhpcyBjaGFuZ2Ugd2lsbCBoYXZlIGEgbWVhc3VyYWJsZSBpbXBhY3Qgb24gdGhlIHN5c3RlbXMgdGhhdCB1c2UgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODowOS4yNDEzMTA1MTRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTcyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2NvcmUvZGV2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzkwMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNzkwMDpcXHRcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuNzkwMTpcXHRcXHRcXHRicGZfbmV0X2N0eCA9IGJwZl9uZXRfY3R4X3NldChcXHUwMDI2X19icGZfbmV0X2N0eCk7XFxuNzkwMjpcXHRcXG43OTAzOlxcdFxcdFxcdHNkID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzb2Z0bmV0X2RhdGEpO1xcbjc5MDQ6XFx0XFx0XFx0c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IHRydWU7XFxuNzkwNTpcXHRcXG43OTA2OlxcdFxcdFxcdGhhdmUgPSBuZXRwb2xsX3BvbGxfbG9jayhuYXBpKTtcXG43OTA3OlxcdFxcdFxcdF9fbmFwaV9wb2xsKG5hcGksIFxcdTAwMjZyZXBvbGwpO1xcbjc5MDg6XFx0XFx0XFx0bmV0cG9sbF9wb2xsX3VubG9jayhoYXZlKTtcXG43OTA5OlxcdFxcbjc5MTA6XFx0XFx0XFx0c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IGZhbHNlO1xcbjc5MTE6XFx0XFx0XFx0YmFycmllcigpO1xcbjc5MTI6XFx0XFxuNzkxMzpcXHRcXHRcXHRpZiAoc2RfaGFzX3Jwc19pcGlfd2FpdGluZyhzZCkpIHtcXG43OTE0OlxcdFxcdFxcdFxcdGxvY2FsX2lycV9kaXNhYmxlKCk7XFxuNzkxNTpcXHRcXHRcXHRcXHRuZXRfcnBzX2FjdGlvbl9hbmRfaXJxX2VuYWJsZShzZCk7XFxuNzkxNjpcXHRcXHRcXHR9XFxuNzkxNzpcXHRcXHRcXHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xcbjc5MTg6XFx0XFx0XFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xcbjc5MTk6XFx0XFxuNzkyMDpcXHRcXHRcXHQvKiBXaGVuIGJ1c3kgcG9sbCBpcyBlbmFibGVkLCB0aGUgb2xkIHBhY2tldHMgYXJlIG5vdCBmbHVzaGVkIGluXFxuNzkyMTpcXHRcXHRcXHQgKiBuYXBpX2NvbXBsZXRlX2RvbmUuIFNvIGZsdXNoIHRoZW0gaGVyZS5cXG43OTIyOlxcdFxcdFxcdCAqL1xcbjc5MjM6XFx0XFx0XFx0aWYgKGJ1c3lfcG9sbF9sYXN0X3FzKVxcbjc5MjQ6XFx0XFx0XFx0XFx0Z3JvX2ZsdXNoX25vcm1hbChcXHUwMDI2bmFwaS1cXHUwMDNlZ3JvLCBIWiBcXHUwMDNlPSAxMDAwKTtcXG43OTI1OlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjc5MjY6XFx0XFxuNzkyNzpcXHRcXHRcXHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxcbjc5Mjg6XFx0XFx0XFx0XFx0cmN1X3NvZnRpcnFfcXNfcGVyaW9kaWMobGFzdF9xcyk7XFxuNzkyOTpcXHRcXG43OTMwOlxcdFxcdFxcdC8qIG5hcGlfdGhyZWFkX3dhaXQoKSBjYW4gcmV0dXJuIHdpdGhvdXQgc2NoZWR1bGluZywgc28geWllbGQgb25cXG43OTMxOlxcdFxcdFxcdCAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuXFxuNzkzMjpcXHRcXHRcXHQgKi9cXG43OTMzOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjc5MzQ6XFx0XFxuNzkzNTpcXHRcXHRcXHRpZiAoIXJlcG9sbClcXG43OTM2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjc5Mzc6XFx0XFx0fVxcbjc5Mzg6XFx0XFxuNzkzOTpcXHRcXHRpZiAoYnVzeV9wb2xsX2xhc3RfcXMpXFxuNzk0MDpcXHRcXHRcXHQqYnVzeV9wb2xsX2xhc3RfcXMgPSBsYXN0X3FzO1xcbjc5NDE6XFx0fVxcbjc5NDI6XFx0XFxuNzk0MzpcXHRzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKVxcbjc5NDQ6XFx0e1xcbjc5NDU6XFx0XFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGF0YTtcXG43OTQ2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGppZmZpZXM7XFxuNzk0NzpcXHRcXHRib29sIHdhbnRfYnVzeV9wb2xsO1xcbjc5NDg6XFx0XFx0Ym9vbCBpbl9idXN5X3BvbGw7XFxuNzk0OTpcXHRcXHR1bnNpZ25lZCBsb25nIHZhbDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTc6NTg6MDkuMjQxNzA5NjU0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc0OTc2MDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHVuZGVyc3RhbmRpbmcgdGhlIGxhbmRzY2FwZSBvZiBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKiB3aXRoaW4gdGhlIHN5c3RlbT8gSSBuZWVkIHRvIHRyYWNrIGRvd24gYWxsIGl0cyBjYWxsIHNpdGVzIOKAkyBldmVyeSBpbnN0YW5jZSB3aGVyZSBpdCdzIGludm9rZWQuIE1vcmUgaW1wb3J0YW50bHksIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBjb250ZXh0LiBXaGF0IGNvbmZpZ3VyYXRpb25zIGFyZSBpbiBwbGF5IHdoZW4gaXQncyBjYWxsZWQ/IFdoYXQgdXBzdHJlYW0gY2FsbGVycyB0cmlnZ2VyIGl0PyBVbmRlcnN0YW5kaW5nIHRoZSAnd2h5JyBiZWhpbmQgaXRzIGV4ZWN1dGlvbiBpcyBqdXN0IGFzIGNyaXRpY2FsIGFzIGtub3dpbmcgdGhlICd3aGVyZS4nIFRoaXMgd2lsbCBoZWxwIG1lIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSBhbmQgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBwYWludCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgaXRzIG9wZXJhdGlvbmFsIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDQ5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoxMS45OTE0NzQwODJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQxMTk3MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmFwaV90aHJlYWRlZF9wb2xsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL2Rldi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTE2NjY9RVhQT1JUX1NZTUJPTChuZXRkZXZfbm90aWZ5X3BlZXJzKTtcXG5uZXQvY29yZS9kZXYuYy0xNjY3LVxcbm5ldC9jb3JlL2Rldi5jOjE2Njg6c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSk7XFxubmV0L2NvcmUvZGV2LmMtMTY2OS1cXG5uZXQvY29yZS9kZXYuYz0xNjcwPXN0YXRpYyBpbnQgbmFwaV9rdGhyZWFkX2NyZWF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXFxuLS1cXG5uZXQvY29yZS9kZXYuYy0xNjc3LVxcdCAqL1xcbm5ldC9jb3JlL2Rldi5jOjE2Nzg6XFx0bi1cXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4obmFwaV90aHJlYWRlZF9wb2xsLCBuLCBcXFwibmFwaS8lcy0lZFxcXCIsXFxubmV0L2NvcmUvZGV2LmMtMTY3OS1cXHRcXHRcXHRcXHRuLVxcdTAwM2VkZXYtXFx1MDAzZW5hbWUsIG4tXFx1MDAzZW5hcGlfaWQpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9NTM0MD1zdGF0aWMgdm9pZCBuYXBpX3NjaGVkdWxlX3JwcyhzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTUzNTMtXFxubmV0L2NvcmUvZGV2LmM6NTM1NDpcXHRcXHQvKiBJZiBub3QgY2FsbGVkIGZyb20gbmV0X3J4X2FjdGlvbigpIG9yIG5hcGlfdGhyZWFkZWRfcG9sbCgpXFxubmV0L2NvcmUvZGV2LmMtNTM1NS1cXHRcXHQgKiB3ZSBoYXZlIHRvIHJhaXNlIE5FVF9SWF9TT0ZUSVJRLlxcbm5ldC9jb3JlL2Rldi5jLTUzNTYtXFx0XFx0ICovXFxubmV0L2NvcmUvZGV2LmM6NTM1NzpcXHRcXHRpZiAoIW15c2QtXFx1MDAzZWluX25ldF9yeF9hY3Rpb24gXFx1MDAyNlxcdTAwMjYgIW15c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbClcXG5uZXQvY29yZS9kZXYuYy01MzU4LVxcdFxcdFxcdF9fcmFpc2Vfc29mdGlycV9pcnFvZmYoTkVUX1JYX1NPRlRJUlEpO1xcbi0tXFxubmV0L2NvcmUvZGV2LmM9Nzg2NT1zdGF0aWMgaW50IG5hcGlfdGhyZWFkX3dhaXQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzg4OC1cXG5uZXQvY29yZS9kZXYuYzo3ODg5OnN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG5uZXQvY29yZS9kZXYuYy03ODkwLVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICpidXN5X3BvbGxfbGFzdF9xcylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5MDMtXFx0XFx0c2QgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNnNvZnRuZXRfZGF0YSk7XFxubmV0L2NvcmUvZGV2LmM6NzkwNDpcXHRcXHRzZC1cXHUwMDNlaW5fbmFwaV90aHJlYWRlZF9wb2xsID0gdHJ1ZTtcXG5uZXQvY29yZS9kZXYuYy03OTA1LVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzkwOS1cXG5uZXQvY29yZS9kZXYuYzo3OTEwOlxcdFxcdHNkLVxcdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSBmYWxzZTtcXG5uZXQvY29yZS9kZXYuYy03OTExLVxcdFxcdGJhcnJpZXIoKTtcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTc5NDItXFxubmV0L2NvcmUvZGV2LmM6Nzk0MzpzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKVxcbm5ldC9jb3JlL2Rldi5jLTc5NDQte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzk2My1cXG5uZXQvY29yZS9kZXYuYzo3OTY0OlxcdFxcdG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKG5hcGksIHdhbnRfYnVzeV9wb2xsID8gXFx1MDAyNmxhc3RfcXMgOiBOVUxMKTtcXG5uZXQvY29yZS9kZXYuYy03OTY1LVxcdH1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEzMzk5PXN0YXRpYyB2b2lkIHJ1bl9iYWNrbG9nX25hcGkodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTEzNDAyLVxcbm5ldC9jb3JlL2Rldi5jOjEzNDAzOlxcdG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKFxcdTAwMjZzZC1cXHUwMDNlYmFja2xvZywgTlVMTCk7XFxubmV0L2NvcmUvZGV2LmMtMTM0MDQtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoxMi4wNDU2MDA3MThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzM4MzcxMDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgcnVuX2JhY2tsb2dfbmFwaWAgYW5kIFRocmVhZGVkIE4tQVBJIEludGVyYWN0aW9ucyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgcnVuX2JhY2tsb2dfbmFwaWAgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRocmVhZGVkIE4tQVBJIGNhbGxzLiBNeSBndXQgZmVlbGluZyBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBmb3IgbWFuYWdpbmcgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMsIHBlcmhhcHMgd2l0aGluIGEgd29ya2VyIHRocmVhZCBjb250ZXh0LiBJJ20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMsIGFuZCBob3cgZGF0YSBpcyBtYXJzaGFsZWQgYmV0d2VlbiB0aGUgbWFpbiBKYXZhU2NyaXB0IHRocmVhZCBhbmQgdGhlIHdvcmtlciB0aHJlYWRzIHVzaW5nIE4tQVBJLlxuXG5TcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kOlxuXG4qICAgKipUaGUgb3JpZ2luIG9mIGBydW5fYmFja2xvZ19uYXBpYDoqKiBJcyB0aGlzIGZ1bmN0aW9uIHBhcnQgb2YgYSBjdXN0b20gYWRkb24sIGEgbGlicmFyeSwgb3IgYSBjb3JlIE5vZGUuanMgZmVhdHVyZT8gS25vd2luZyBpdHMgcHJvdmVuYW5jZSB3aWxsIGhlbHAgbWUgaWRlbnRpZnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyBhbmQgdXBzdHJlYW0gaXNzdWVzLlxuKiAgICoqVGhlIFwiYmFja2xvZ1wiOioqIFdoYXQgZXhhY3RseSBpcyBiZWluZyBcImJhY2tsb2dnZWRcIj8gSXMgaXQgdGFza3MsIGZ1bmN0aW9uIGNhbGxzLCBkYXRhIHVwZGF0ZXMsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGJhY2tsb2cgaXMgY3J1Y2lhbCB0byBwaW5wb2ludGluZyBwb3RlbnRpYWwgYm90dGxlbmVja3MgYW5kIGluZWZmaWNpZW5jaWVzLlxuKiAgICoqVGhyZWFkIHNhZmV0eToqKiBBcmUgdGhlcmUgbXV0ZXhlcywgYXRvbWljcywgb3Igb3RoZXIgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdXNlZCB3aXRoaW4gYHJ1bl9iYWNrbG9nX25hcGlgPyBPciBpcyBpdCBhc3N1bWluZyBhIHNpbXBsZSwgbm9uLWNvbmN1cnJlbnQgZW52aXJvbm1lbnQ/IElmIHRoZSBsYXR0ZXIsIGl0J3MgYSBodWdlIHJlZCBmbGFnIHdoZW4gZGVhbGluZyB3aXRoIHRocmVhZGVkIE4tQVBJLlxuKiAgICoqRXJyb3IgaGFuZGxpbmc6KiogSG93IGFyZSBlcnJvcnMgcHJvcGFnYXRlZCBmcm9tIHRoZSB3b3JrZXIgdGhyZWFkcyBiYWNrIHRvIHRoZSBKYXZhU2NyaXB0IGNvZGU/IEFyZSBleGNlcHRpb25zIGNhdWdodCBhbmQgY29udmVydGVkIHRvIE4tQVBJIGVycm9yIGNvZGVzPyBQcm9wZXIgZXJyb3IgaGFuZGxpbmcgaXMgZXNzZW50aWFsIGZvciByZWxpYWJpbGl0eS5cbiogICAqKk1lbW9yeSBtYW5hZ2VtZW50OioqIEhvdyBpcyBtZW1vcnkgbWFuYWdlZCBiZXR3ZWVuIHRoZSB0aHJlYWRzPyBJcyB0aGVyZSBhIHJpc2sgb2YgbWVtb3J5IGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yIG90aGVyIG1lbW9yeS1yZWxhdGVkIGlzc3VlcywgZXNwZWNpYWxseSB3aGVuIHBhc3NpbmcgZGF0YSBiZXR3ZWVuIHRoZSBDKysgYW5kIEphdmFTY3JpcHQgcmVhbG1zP1xuKiAgICoqVGhlIE4tQVBJIGNvbnRleHQ6KiogV2hhdCBpcyB0aGUgTi1BUEkgZW52aXJvbm1lbnQgbGlrZSB3aGVuIGBydW5fYmFja2xvZ19uYXBpYCBpcyBpbnZva2VkPyBJcyBpdCB3aXRoaW4gYSB3b3JrZXIgdGhyZWFkIG9yIHRoZSBtYWluIHRocmVhZD8gS25vd2luZyB0aGlzIGlzIGZ1bmRhbWVudGFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBOLUFQSSBBUElzIHNob3VsZCBvciBzaG91bGQgbm90IGJlIHVzZWQgaW4gdGhpcyBjb250ZXh0LlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgd2lsbCBiZSB0byBjaGVjayBmb3IgYW55IHVzZSBvZiB0aHJlYWQtdW5zYWZlIE4tQVBJIEFQSXMgd2l0aGluIGBydW5fYmFja2xvZ19uYXBpYC4gVGhhdCB3aWxsIGxpa2VseSBiZSB0aGUgZmlyc3QgcG9pbnQgdG8gYXVkaXQuIEkgYWxzbyBuZWVkIHRvIHRyYWNrIHRoZSBwYXRoIG9mIGFueSBkYXRhIHRvIGVuc3VyZSBpdCBpcyB0aHJlYWQgc2FmZSBhbmQgdGhhdCB0aGUgbGlmZWN5Y2xlIG9mIHRoZSBkYXRhIGlzIHByb3Blcmx5IGFjY291bnRlZCBmb3IuIE9uY2UgSSBoYXZlIHRob3NlIGRldGFpbHMsIEknbGwgYXNzZXNzIGFueSBib3R0bGVuZWNrcyBhbmQgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU1MzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoxNi4zODM5NzYyNDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI3ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4NzAsXG4gIFwiTGluZUNvdW50XCI6IDkwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc4NzA6XFx0XFx0XFx0LyogVGVzdGluZyBTQ0hFRF9USFJFQURFRCBiaXQgaGVyZSB0byBtYWtlIHN1cmUgdGhlIGN1cnJlbnRcXG43ODcxOlxcdFxcdFxcdCAqIGt0aHJlYWQgb3ducyB0aGlzIG5hcGkgYW5kIGNvdWxkIHBvbGwgb24gdGhpcyBuYXBpLlxcbjc4NzI6XFx0XFx0XFx0ICogVGVzdGluZyBTQ0hFRCBiaXQgaXMgbm90IGVub3VnaCBiZWNhdXNlIFNDSEVEIGJpdCBtaWdodCBiZVxcbjc4NzM6XFx0XFx0XFx0ICogc2V0IGJ5IHNvbWUgb3RoZXIgYnVzeSBwb2xsIHRocmVhZCBvciBieSBuYXBpX2Rpc2FibGUoKS5cXG43ODc0OlxcdFxcdFxcdCAqL1xcbjc4NzU6XFx0XFx0XFx0aWYgKHRlc3RfYml0KE5BUElfU1RBVEVfU0NIRURfVEhSRUFERUQsIFxcdTAwMjZuYXBpLVxcdTAwM2VzdGF0ZSkpIHtcXG43ODc2OlxcdFxcdFxcdFxcdFdBUk5fT04oIWxpc3RfZW1wdHkoXFx1MDAyNm5hcGktXFx1MDAzZXBvbGxfbGlzdCkpO1xcbjc4Nzc6XFx0XFx0XFx0XFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbjc4Nzg6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzg3OTpcXHRcXHRcXHR9XFxuNzg4MDpcXHRcXG43ODgxOlxcdFxcdFxcdHNjaGVkdWxlKCk7XFxuNzg4MjpcXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbjc4ODM6XFx0XFx0fVxcbjc4ODQ6XFx0XFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbjc4ODU6XFx0XFxuNzg4NjpcXHRcXHRyZXR1cm4gLTE7XFxuNzg4NzpcXHR9XFxuNzg4ODpcXHRcXG43ODg5OlxcdHN0YXRpYyB2b2lkIG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSxcXG43ODkwOlxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nICpidXN5X3BvbGxfbGFzdF9xcylcXG43ODkxOlxcdHtcXG43ODkyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGJ1c3lfcG9sbF9sYXN0X3FzID8gKmJ1c3lfcG9sbF9sYXN0X3FzIDogamlmZmllcztcXG43ODkzOlxcdFxcdHN0cnVjdCBicGZfbmV0X2NvbnRleHQgX19icGZfbmV0X2N0eCwgKmJwZl9uZXRfY3R4O1xcbjc4OTQ6XFx0XFx0c3RydWN0IHNvZnRuZXRfZGF0YSAqc2Q7XFxuNzg5NTpcXHRcXG43ODk2OlxcdFxcdGZvciAoOzspIHtcXG43ODk3OlxcdFxcdFxcdGJvb2wgcmVwb2xsID0gZmFsc2U7XFxuNzg5ODpcXHRcXHRcXHR2b2lkICpoYXZlO1xcbjc4OTk6XFx0XFxuNzkwMDpcXHRcXHRcXHRsb2NhbF9iaF9kaXNhYmxlKCk7XFxuNzkwMTpcXHRcXHRcXHRicGZfbmV0X2N0eCA9IGJwZl9uZXRfY3R4X3NldChcXHUwMDI2X19icGZfbmV0X2N0eCk7XFxuNzkwMjpcXHRcXG43OTAzOlxcdFxcdFxcdHNkID0gdGhpc19jcHVfcHRyKFxcdTAwMjZzb2Z0bmV0X2RhdGEpO1xcbjc5MDQ6XFx0XFx0XFx0c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IHRydWU7XFxuNzkwNTpcXHRcXG43OTA2OlxcdFxcdFxcdGhhdmUgPSBuZXRwb2xsX3BvbGxfbG9jayhuYXBpKTtcXG43OTA3OlxcdFxcdFxcdF9fbmFwaV9wb2xsKG5hcGksIFxcdTAwMjZyZXBvbGwpO1xcbjc5MDg6XFx0XFx0XFx0bmV0cG9sbF9wb2xsX3VubG9jayhoYXZlKTtcXG43OTA5OlxcdFxcbjc5MTA6XFx0XFx0XFx0c2QtXFx1MDAzZWluX25hcGlfdGhyZWFkZWRfcG9sbCA9IGZhbHNlO1xcbjc5MTE6XFx0XFx0XFx0YmFycmllcigpO1xcbjc5MTI6XFx0XFxuNzkxMzpcXHRcXHRcXHRpZiAoc2RfaGFzX3Jwc19pcGlfd2FpdGluZyhzZCkpIHtcXG43OTE0OlxcdFxcdFxcdFxcdGxvY2FsX2lycV9kaXNhYmxlKCk7XFxuNzkxNTpcXHRcXHRcXHRcXHRuZXRfcnBzX2FjdGlvbl9hbmRfaXJxX2VuYWJsZShzZCk7XFxuNzkxNjpcXHRcXHRcXHR9XFxuNzkxNzpcXHRcXHRcXHRza2JfZGVmZXJfZnJlZV9mbHVzaCgpO1xcbjc5MTg6XFx0XFx0XFx0YnBmX25ldF9jdHhfY2xlYXIoYnBmX25ldF9jdHgpO1xcbjc5MTk6XFx0XFxuNzkyMDpcXHRcXHRcXHQvKiBXaGVuIGJ1c3kgcG9sbCBpcyBlbmFibGVkLCB0aGUgb2xkIHBhY2tldHMgYXJlIG5vdCBmbHVzaGVkIGluXFxuNzkyMTpcXHRcXHRcXHQgKiBuYXBpX2NvbXBsZXRlX2RvbmUuIFNvIGZsdXNoIHRoZW0gaGVyZS5cXG43OTIyOlxcdFxcdFxcdCAqL1xcbjc5MjM6XFx0XFx0XFx0aWYgKGJ1c3lfcG9sbF9sYXN0X3FzKVxcbjc5MjQ6XFx0XFx0XFx0XFx0Z3JvX2ZsdXNoX25vcm1hbChcXHUwMDI2bmFwaS1cXHUwMDNlZ3JvLCBIWiBcXHUwMDNlPSAxMDAwKTtcXG43OTI1OlxcdFxcdFxcdGxvY2FsX2JoX2VuYWJsZSgpO1xcbjc5MjY6XFx0XFxuNzkyNzpcXHRcXHRcXHRpZiAocmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzKVxcbjc5Mjg6XFx0XFx0XFx0XFx0cmN1X3NvZnRpcnFfcXNfcGVyaW9kaWMobGFzdF9xcyk7XFxuNzkyOTpcXHRcXG43OTMwOlxcdFxcdFxcdC8qIG5hcGlfdGhyZWFkX3dhaXQoKSBjYW4gcmV0dXJuIHdpdGhvdXQgc2NoZWR1bGluZywgc28geWllbGQgb25cXG43OTMxOlxcdFxcdFxcdCAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuXFxuNzkzMjpcXHRcXHRcXHQgKi9cXG43OTMzOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjc5MzQ6XFx0XFxuNzkzNTpcXHRcXHRcXHRpZiAoIXJlcG9sbClcXG43OTM2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjc5Mzc6XFx0XFx0fVxcbjc5Mzg6XFx0XFxuNzkzOTpcXHRcXHRpZiAoYnVzeV9wb2xsX2xhc3RfcXMpXFxuNzk0MDpcXHRcXHRcXHQqYnVzeV9wb2xsX2xhc3RfcXMgPSBsYXN0X3FzO1xcbjc5NDE6XFx0fVxcbjc5NDI6XFx0XFxuNzk0MzpcXHRzdGF0aWMgaW50IG5hcGlfdGhyZWFkZWRfcG9sbCh2b2lkICpkYXRhKVxcbjc5NDQ6XFx0e1xcbjc5NDU6XFx0XFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gZGF0YTtcXG43OTQ2OlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9xcyA9IGppZmZpZXM7XFxuNzk0NzpcXHRcXHRib29sIHdhbnRfYnVzeV9wb2xsO1xcbjc5NDg6XFx0XFx0Ym9vbCBpbl9idXN5X3BvbGw7XFxuNzk0OTpcXHRcXHR1bnNpZ25lZCBsb25nIHZhbDtcXG43OTUwOlxcdFxcbjc5NTE6XFx0XFx0d2hpbGUgKCFuYXBpX3RocmVhZF93YWl0KG5hcGkpKSB7XFxuNzk1MjpcXHRcXHRcXHR2YWwgPSBSRUFEX09OQ0UobmFwaS1cXHUwMDNlc3RhdGUpO1xcbjc5NTM6XFx0XFxuNzk1NDpcXHRcXHRcXHR3YW50X2J1c3lfcG9sbCA9IHZhbCBcXHUwMDI2IE5BUElGX1NUQVRFX1RIUkVBREVEX0JVU1lfUE9MTDtcXG43OTU1OlxcdFxcdFxcdGluX2J1c3lfcG9sbCA9IHZhbCBcXHUwMDI2IE5BUElGX1NUQVRFX0lOX0JVU1lfUE9MTDtcXG43OTU2OlxcdFxcbjc5NTc6XFx0XFx0XFx0aWYgKHVubGlrZWx5KHZhbCBcXHUwMDI2IE5BUElGX1NUQVRFX0RJU0FCTEUpKVxcbjc5NTg6XFx0XFx0XFx0XFx0d2FudF9idXN5X3BvbGwgPSBmYWxzZTtcXG43OTU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoxNi4zODUxMDkxMjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDE5MTY0OTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaHJlYWRlZCBOQVBJIFBvbGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIHJlc2lkZXMgd2l0aGluIGBuZXQvY29yZS9kZXYuY2AuIEdpdmVuIHRoYXQncyBhIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gZmlsZSwgaXQgc3VnZ2VzdHMgdGhpcyBmdW5jdGlvbiBpcyBjZW50cmFsIHRvIG5ldHdvcmsgZGV2aWNlIG9wZXJhdGlvbi4gSXMgaXQgYWN0dWFsbHkgdXNlZD8gWWVzLCBpdCBhcHBlYXJzIHRvIGJlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhyZWFkZWQgTkFQSSBwb2xsaW5nIGFuZCBiYWNrbG9nIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgcGF0aC4gSXQncyBkZXNpZ25lZCB0byBiZSB1c2VkIGJ5IG5ldHdvcmsgZGV2aWNlcywgb3Igd2hlbiBkZWFsaW5nIHdpdGggYmFja2xvZyBwcm9jZXNzaW5nLiBOb3csIEkgbmVlZCB0byB0cmFjZSBpdHMgdXNhZ2UgaW4gbW9yZSBkZXRhaWwuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSBgcnVuX2JhY2tsb2dfbmFwaWAgYW5kIHBpbnBvaW50IHdoZXJlIHRocmVhZGVkIE5BUEkgaXMgY29uZmlndXJlZCBvciBhY3RpdmVseSBlbmdhZ2VkLiBUaGlzIHNob3VsZCByZXZlYWwgdGhlIHNwZWNpZmljIGNvbnRleHRzIGluIHdoaWNoIHRoaXMgdGhyZWFkZWQgcG9sbGluZyBtZWNoYW5pc20gaXMgYmVpbmcgbGV2ZXJhZ2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoxOC40MDQyNzg2MDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5Mjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMzkwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzM5MDpcXHRcXG4xMzM5MTpcXHRzdGF0aWMgaW50IGJhY2tsb2dfbmFwaV9zaG91bGRfcnVuKHVuc2lnbmVkIGludCBjcHUpXFxuMTMzOTI6XFx0e1xcbjEzMzkzOlxcdFxcdHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkID0gcGVyX2NwdV9wdHIoXFx1MDAyNnNvZnRuZXRfZGF0YSwgY3B1KTtcXG4xMzM5NDpcXHRcXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSBcXHUwMDI2c2QtXFx1MDAzZWJhY2tsb2c7XFxuMTMzOTU6XFx0XFxuMTMzOTY6XFx0XFx0cmV0dXJuIHRlc3RfYml0KE5BUElfU1RBVEVfU0NIRURfVEhSRUFERUQsIFxcdTAwMjZuYXBpLVxcdTAwM2VzdGF0ZSk7XFxuMTMzOTc6XFx0fVxcbjEzMzk4OlxcdFxcbjEzMzk5OlxcdHN0YXRpYyB2b2lkIHJ1bl9iYWNrbG9nX25hcGkodW5zaWduZWQgaW50IGNwdSlcXG4xMzQwMDpcXHR7XFxuMTM0MDE6XFx0XFx0c3RydWN0IHNvZnRuZXRfZGF0YSAqc2QgPSBwZXJfY3B1X3B0cihcXHUwMDI2c29mdG5ldF9kYXRhLCBjcHUpO1xcbjEzNDAyOlxcdFxcbjEzNDAzOlxcdFxcdG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKFxcdTAwMjZzZC1cXHUwMDNlYmFja2xvZywgTlVMTCk7XFxuMTM0MDQ6XFx0fVxcbjEzNDA1OlxcdFxcbjEzNDA2OlxcdHN0YXRpYyB2b2lkIGJhY2tsb2dfbmFwaV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxcbjEzNDA3OlxcdHtcXG4xMzQwODpcXHRcXHRzdHJ1Y3Qgc29mdG5ldF9kYXRhICpzZCA9IHBlcl9jcHVfcHRyKFxcdTAwMjZzb2Z0bmV0X2RhdGEsIGNwdSk7XFxuMTM0MDk6XFx0XFx0c3RydWN0IG5hcGlfc3RydWN0ICpuYXBpID0gXFx1MDAyNnNkLVxcdTAwM2ViYWNrbG9nO1xcbjEzNDEwOlxcdFxcbjEzNDExOlxcdFxcdG5hcGktXFx1MDAzZXRocmVhZCA9IHRoaXNfY3B1X3JlYWQoYmFja2xvZ19uYXBpKTtcXG4xMzQxMjpcXHRcXHRzZXRfYml0KE5BUElfU1RBVEVfVEhSRUFERUQsIFxcdTAwMjZuYXBpLVxcdTAwM2VzdGF0ZSk7XFxuMTM0MTM6XFx0fVxcbjEzNDE0OlxcdFxcbjEzNDE1OlxcdHN0YXRpYyBzdHJ1Y3Qgc21wX2hvdHBsdWdfdGhyZWFkIGJhY2tsb2dfdGhyZWFkcyA9IHtcXG4xMzQxNjpcXHRcXHQuc3RvcmVcXHRcXHRcXHQ9IFxcdTAwMjZiYWNrbG9nX25hcGksXFxuMTM0MTc6XFx0XFx0LnRocmVhZF9zaG91bGRfcnVuXFx0PSBiYWNrbG9nX25hcGlfc2hvdWxkX3J1bixcXG4xMzQxODpcXHRcXHQudGhyZWFkX2ZuXFx0XFx0PSBydW5fYmFja2xvZ19uYXBpLFxcbjEzNDE5OlxcdFxcdC50aHJlYWRfY29tbVxcdFxcdD0gXFxcImJhY2tsb2dfbmFwaS8ldVxcXCIsXFxuMTM0MjA6XFx0XFx0LnNldHVwXFx0XFx0XFx0PSBiYWNrbG9nX25hcGlfc2V0dXAsXFxuMTM0MjE6XFx0fTtcXG4xMzQyMjpcXHRcXG4xMzQyMzpcXHQvKlxcbjEzNDI0OlxcdCAqICAgICAgIFRoaXMgaXMgY2FsbGVkIHNpbmdsZSB0aHJlYWRlZCBkdXJpbmcgYm9vdCwgc28gbm8gbmVlZFxcbjEzNDI1OlxcdCAqICAgICAgIHRvIHRha2UgdGhlIHJ0bmwgc2VtYXBob3JlLlxcbjEzNDI2OlxcdCAqL1xcbjEzNDI3OlxcdHN0YXRpYyBpbnQgX19pbml0IG5ldF9kZXZfaW5pdCh2b2lkKVxcbjEzNDI4OlxcdHtcXG4xMzQyOTpcXHRcXHRpbnQgaSwgcmMgPSAtRU5PTUVNO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoxOC40MDQ3MDE3MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzQzNjQyMTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFRocmVhZGVkIE5BUEkgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWNzIGZvciB0aHJlYWRlZCBOQVBJLCBmb2N1c2luZyBvbiBgbmV0L2NvcmUvZGV2LmNgIHNpbmNlIHRoYXQncyBhIGNlbnRyYWwgcGllY2UuIFRoZSBmYWN0IHRoYXQgYG5ldC9jb3JlL2Rldi5jYCBpcyBjb21waWxlZCB3aGVuZXZlciBgQ09ORklHX05FVGAgaXMgZW5hYmxlZCBpcywgb2YgY291cnNlLCBleHBlY3RlZDsgaXQncyBmdW5kYW1lbnRhbCB0byBMaW51eCBuZXR3b3JraW5nLiBOb3csIEkgd2FudCB0byBjbGFyaWZ5IGlmIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIHRoZSBzdGFuZGFyZCBjb25maWdzLiBJJ20gZ29pbmcgdG8gZG91YmxlLWNoZWNrIHdoZXRoZXIgYGJhY2tsb2dfdGhyZWFkc2Agb3IgdGhyZWFkZWQgTkFQSSBpcyByZWxpYW50IG9uIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gSSBrbm93IGBuZXRfZGV2X2luaXRgIHNldHMgdXAgYHNtcGJvb3RfcmVnaXN0ZXJfcGVyY3B1X3RocmVhZChcdTAwMjZiYWNrbG9nX3RocmVhZHMpYCwgYW5kIHRoYXQncyBwcmVzZW50IGluIHByZXR0eSBtdWNoIGV2ZXJ5IHN0YW5kYXJkIGtlcm5lbCBjb25maWd1cmF0aW9uIHdpdGggU01QIGFuZCB0aGUgbmV0d29ya2luZyBzdGFjay4gU2luY2UgYENPTkZJR19ORVRgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgdGhpcyBzZWVtcyBsaWtlbHksIGJ1dCBJIG5lZWQgdG8gY29uZmlybS4gQmV5b25kIHRob3NlLCBJJ2xsIG5lZWQgdG8gc2NydXRpbml6ZSBvdGhlciBjb25maWdzIHRvIGFzY2VydGFpbiBpZiB0aGVyZSBhcmUgYW55IG90aGVycy4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBgbmFwaV9rdGhyZWFkX2NyZWF0ZWAgYXMgd2VsbCBhcyBleHBsb3JlIHRoZSB0aHJlYWRlZCBuZXRkZXYgYXR0cmlidXRlcywgdG8gbWFrZSBzdXJlIEkgYW0gY292ZXJpbmcgYWxsIHRoZSBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ0OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjIxLjg0MTEyNjU3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxODQzNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkFQSV9TVEFURV9USFJFQURFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2Rldi5jPTUwMTM9c3RhdGljIGlubGluZSB2b2lkIF9fX19uYXBpX3NjaGVkdWxlKHN0cnVjdCBzb2Z0bmV0X2RhdGEgKnNkLFxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNTAxOS1cXG5uZXQvY29yZS9kZXYuYzo1MDIwOlxcdGlmICh0ZXN0X2JpdChOQVBJX1NUQVRFX1RIUkVBREVELCBcXHUwMDI2bmFwaS1cXHUwMDNlc3RhdGUpKSB7XFxubmV0L2NvcmUvZGV2LmMtNTAyMS1cXHRcXHQvKiBQYWlyZWQgd2l0aCBzbXBfbWJfX2JlZm9yZV9hdG9taWMoKSBpblxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzI0Nz1zdGF0aWMgdm9pZCBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03MjUyLVxcbm5ldC9jb3JlL2Rldi5jOjcyNTM6XFx0YXNzaWduX2JpdChOQVBJX1NUQVRFX1RIUkVBREVELCBcXHUwMDI2bmFwaS1cXHUwMDNlc3RhdGUsIHRocmVhZGVkKTtcXG5uZXQvY29yZS9kZXYuYzo3MjU0OlxcdGFzc2lnbl9iaXQoTkFQSV9TVEFURV9USFJFQURFRF9CVVNZX1BPTEwsIFxcdTAwMjZuYXBpLVxcdTAwM2VzdGF0ZSwgYnVzeV9wb2xsKTtcXG5uZXQvY29yZS9kZXYuYy03MjU1LX1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTEzNDA2PXN0YXRpYyB2b2lkIGJhY2tsb2dfbmFwaV9zZXR1cCh1bnNpZ25lZCBpbnQgY3B1KVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtMTM0MTEtXFx0bmFwaS1cXHUwMDNldGhyZWFkID0gdGhpc19jcHVfcmVhZChiYWNrbG9nX25hcGkpO1xcbm5ldC9jb3JlL2Rldi5jOjEzNDEyOlxcdHNldF9iaXQoTkFQSV9TVEFURV9USFJFQURFRCwgXFx1MDAyNm5hcGktXFx1MDAzZXN0YXRlKTtcXG5uZXQvY29yZS9kZXYuYy0xMzQxMy19XFxuLS1cXG5uZXQvY29yZS9kZXYuaD0zNTc9c3RhdGljIGlubGluZSBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIG5hcGlfZ2V0X3RocmVhZGVkKHN0cnVjdCBuYXBpX3N0cnVjdCAqbilcXG5uZXQvY29yZS9kZXYuaC0zNTgte1xcbm5ldC9jb3JlL2Rldi5oOjM1OTpcXHRpZiAodGVzdF9iaXQoTkFQSV9TVEFURV9USFJFQURFRF9CVVNZX1BPTEwsIFxcdTAwMjZuLVxcdTAwM2VzdGF0ZSkpXFxubmV0L2NvcmUvZGV2LmgtMzYwLVxcdFxcdHJldHVybiBORVRERVZfTkFQSV9USFJFQURFRF9CVVNZX1BPTEw7XFxubmV0L2NvcmUvZGV2LmgtMzYxLVxcbm5ldC9jb3JlL2Rldi5oOjM2MjpcXHRpZiAodGVzdF9iaXQoTkFQSV9TVEFURV9USFJFQURFRCwgXFx1MDAyNm4tXFx1MDAzZXN0YXRlKSlcXG5uZXQvY29yZS9kZXYuaC0zNjMtXFx0XFx0cmV0dXJuIE5FVERFVl9OQVBJX1RIUkVBREVEX0VOQUJMRUQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjIxLjkxNjMxNzQ2NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzIyOTk4Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gbXkgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gVGhyZWFkZWQgTkFQSSB3aXRoIGBuYXBpX3NldF90aHJlYWRlZF9zdGF0ZWAqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdGhyZWFkZWQgTkFQSSBzZXR1cCwgc3BlY2lmaWNhbGx5IGhvdyBgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGVgIGZhY3RvcnMgaW4uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSB1c2VyLXNwYWNlIGltcGxpY2F0aW9ucyBoZXJlLiBEb2VzIGEgdXNlci1zcGFjZSBhcHBsaWNhdGlvbiBhY3R1YWxseSAqZW5hYmxlKiB0aHJlYWRlZCBOQVBJIGV4cGxpY2l0bHkgdXNpbmcgdGhhdCBmdW5jdGlvbj8gT3IsIHBlcmhhcHMsIGlzIHRoZXJlIHNvbWUgY2xldmVyIGxvZ2ljIGJ1cmllZCBpbiB0aGUgYmFja2xvZyBOQVBJIGNvZGUgdGhhdCB1c2VzIGl0IGF1dG9tYXRpY2FsbHkgaW4gY2VydGFpbiBzY2VuYXJpb3M/IEkgbmVlZCB0byBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGVgIGFuZCBiYWNrbG9nIE5BUEkgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gYW5kIGRlYnVnZ2luZywgYW5kIEkgd2FudCB0byBmdWxseSBncmFzcCBob3cgdGhpcyBpbXBhY3RzIGV2ZXJ5dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoyNi42MzkzMTk0NTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNjMwNzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5hcGlfc2V0X3RocmVhZGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2NvcmUvZGV2LmM9NzIwOT1zdGF0aWMgdm9pZCBuYXBpX3N0b3Bfa3RocmVhZChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03MjQ2LVxcbm5ldC9jb3JlL2Rldi5jOjcyNDc6c3RhdGljIHZvaWQgbmFwaV9zZXRfdGhyZWFkZWRfc3RhdGUoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbm5ldC9jb3JlL2Rldi5jLTcyNDgtXFx0XFx0XFx0XFx0ICAgIGVudW0gbmV0ZGV2X25hcGlfdGhyZWFkZWQgdGhyZWFkZWRfbW9kZSlcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTcyNTYtXFxubmV0L2NvcmUvZGV2LmM6NzI1NzppbnQgbmFwaV9zZXRfdGhyZWFkZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLFxcbm5ldC9jb3JlL2Rldi5jLTcyNTgtXFx0XFx0ICAgICAgZW51bSBuZXRkZXZfbmFwaV90aHJlYWRlZCB0aHJlYWRlZClcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTcyODItXFx0XFx0c21wX21iX19iZWZvcmVfYXRvbWljKCk7XFxubmV0L2NvcmUvZGV2LmM6NzI4MzpcXHRcXHRuYXBpX3NldF90aHJlYWRlZF9zdGF0ZShuYXBpLCB0aHJlYWRlZCk7XFxubmV0L2NvcmUvZGV2LmMtNzI4NC1cXHR9XFxuLS1cXG5uZXQvY29yZS9kZXYuYz03Mjg5PWludCBuZXRpZl9zZXRfdGhyZWFkZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTczMTItXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShuYXBpLCBcXHUwMDI2ZGV2LVxcdTAwM2VuYXBpX2xpc3QsIGRldl9saXN0KVxcbm5ldC9jb3JlL2Rldi5jOjczMTM6XFx0XFx0V0FSTl9PTl9PTkNFKG5hcGlfc2V0X3RocmVhZGVkKG5hcGksIHRocmVhZGVkKSk7XFxubmV0L2NvcmUvZGV2LmMtNzMxNC1cXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTc1MzQ9c3RhdGljIHZvaWQgbmFwaV9yZXN0b3JlX2NvbmZpZyhzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm4pXFxuLS1cXG5uZXQvY29yZS9kZXYuYy03NTUzLVxcbm5ldC9jb3JlL2Rldi5jOjc1NTQ6XFx0V0FSTl9PTl9PTkNFKG5hcGlfc2V0X3RocmVhZGVkKG4sIG4tXFx1MDAzZWNvbmZpZy1cXHUwMDNldGhyZWFkZWQpKTtcXG5uZXQvY29yZS9kZXYuYy03NTU1LX1cXG4tLVxcbm5ldC9jb3JlL2Rldi5oPTM2OT1uYXBpX2dldF90aHJlYWRlZF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5hcGlfc3RydWN0ICpuKVxcbi0tXFxubmV0L2NvcmUvZGV2LmgtMzc1LVxcbm5ldC9jb3JlL2Rldi5oOjM3NjppbnQgbmFwaV9zZXRfdGhyZWFkZWQoc3RydWN0IG5hcGlfc3RydWN0ICpuLFxcbm5ldC9jb3JlL2Rldi5oLTM3Ny1cXHRcXHQgICAgICBlbnVtIG5ldGRldl9uYXBpX3RocmVhZGVkIHRocmVhZGVkKTtcXG4tLVxcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM9MzI3PW5ldGRldl9ubF9uYXBpX3NldF9jb25maWcoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2NvcmUvbmV0ZGV2LWdlbmwuYy0zMzctXFx0XFx0dGhyZWFkZWQgPSBubGFfZ2V0X3VpbnQoaW5mby1cXHUwMDNlYXR0cnNbTkVUREVWX0FfTkFQSV9USFJFQURFRF0pO1xcbm5ldC9jb3JlL25ldGRldi1nZW5sLmM6MzM4OlxcdFxcdHJldCA9IG5hcGlfc2V0X3RocmVhZGVkKG5hcGksIHRocmVhZGVkKTtcXG5uZXQvY29yZS9uZXRkZXYtZ2VubC5jLTMzOS1cXHRcXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODoyNi43MTA5NTc3NjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Nzg2ODUwOTIzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUaHJlYWRlZCBOQVBJIEZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhyZWFkZWQgTkFQSSBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggYG5ldGRldl9ubF9uYXBpX3NldF9jb25maWdgICh2aWEgbmV0bGluaykgb3IgdGhlIHN0YW5kYXJkIGJhY2tsb2cgcHJvY2Vzc2luZyBpbiB0aGUgU01QIG5ldHdvcmsgZGV2aWNlIHBhdGgsIHdoaWNoIG1lYW5zIGBydW5fYmFja2xvZ19uYXBpYCBpcyBhIGtleSBmdW5jdGlvbiwgYW5kIHRoZSBwb2xsaW5nIGxvb3AgaXRzZWxmLCBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgLCByZXNpZGVzIGluIGBuZXQvY29yZS9kZXYuY2AuXG5cblJpZ2h0IG9mZiB0aGUgYmF0LCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiBpdCdzIGZ1enphYmxlLiBUaGUgY29yZSBhcmVhIG9mIGNvbmNlcm4gaXMgaW4gYG5ldC9jb3JlL2Rldi5jYCwgcHJlY2lzZWx5IGhvdyB0aGUgc2NoZWR1bGluZy9yZXNjaGVkdWxpbmcgYmVoYXZpb3IgKGBjb25kX3Jlc2NoZWQoKWApIHdpdGhpbiBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGlzIG1vZGlmaWVkIGZvciB0aHJlYWRlZCBOQVBJIHBvbGxpbmcuICBUaGlzIGxvb2tzIHByb21pc2luZy5cblxuUmVhY2hhYmlsaXR5IGlzIHN0cmFpZ2h0Zm9yd2FyZDsgYW55IHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aCBhIExpbnV4IG5ldHdvcmtpbmcgc3RhY2sgaXMgZ29pbmcgdG8gaGl0IHRoaXMgY29kZS4gVGhlIHBvc2l0aXZlIGNyaXRlcmlhIGNoZWNrcyBhcmUgbWV0IGJlY2F1c2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBjb3JlIG5ldHdvcmtpbmcgbG9naWMsIHNwZWNpZmljYWxseSBzY2hlZHVsaW5nLiAgKldvcnRoRnV6emluZyA9IHRydWUqLCBpdCdzIGEgZ28uXG5cbk5vdywgbGV0J3MgbG9vayBhdCBmb2N1cyBzeW1ib2xzLiAgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wYCBpcyB0aGUgbW9kaWZpZWQgZnVuY3Rpb24sIGFuZCBpdCdzIGNhbGxlZCBieSBgbmFwaV90aHJlYWRlZF9wb2xsYCwgYHJ1bl9iYWNrbG9nX25hcGlgLCBgbmV0ZGV2X25sX25hcGlfc2V0X2NvbmZpZ2AsIGFuZCBgbmFwaV9zZXRfdGhyZWFkZWRgLiBJIG5lZWQgdG8gY29uZmlybSBpZiBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIGlzIHN0YXRpYyBvciBpbmxpbmVkLiBDaGVja2luZyBgbmV0L2NvcmUvZGV2LmNgIGNvbmZpcm1zIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24uIEV4Y2VsbGVudC5cblxuTm93LCBjaGVja2luZyB0aGUgY2FsbGVycyBpbiB0aGUgc2FtZSBmaWxlIGBuZXQvY29yZS9kZXYuY2A6IGBuYXBpX3RocmVhZGVkX3BvbGxgLCBgcnVuX2JhY2tsb2dfbmFwaWAsIGFuZCBgbmFwaV9zZXRfdGhyZWFkZWRgIGFyZSBhbGwgdGhlcmUuIFRoZXNlIHNob3VsZCBiZSBnb29kIHN5bWJvbHMgdG8gZm9jdXMgb24sIGFzIHRoZXkgYXJlIG5vbi11YmlxdWl0b3VzIGVudHJ5cG9pbnRzIGFuZCBmdW5jdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aHJlYWRlZCBOQVBJIGFuZCBiYWNrbG9nIHByb2Nlc3NpbmcuXG5cbkZpbmFsbHksIHRoZSBlbmFibGUgY29uZmlncy4gYENPTkZJR19ORVRgIChiYXNpYyBuZXR3b3JraW5nKSBhbmQgYENPTkZJR19TTVBgIChuZWVkZWQgZm9yIHNtcF9ob3RwbHVnX3RocmVhZCB1c2VkIGluIGJhY2tsb2cgdGhyZWFkcykg4oCTIHN0YW5kYXJkIHN0dWZmLiAgV2UncmUgZ29vZCB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTc6NTg6MzQuNTc5NDcwNDc1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTExMDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2NvcmUvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfY29yZS5vXFxubmV0L2NvcmUvTWFrZWZpbGUtMTEtXFxubmV0L2NvcmUvTWFrZWZpbGU6MTI6b2JqLXlcXHRcXHQgICAgICs9IGRldi5vIGRldl9hcGkubyBkZXZfYWRkcl9saXN0cy5vIGRzdC5vIG5ldGV2ZW50Lm8gXFxcXFxcbm5ldC9jb3JlL01ha2VmaWxlLTEzLVxcdFxcdFxcdG5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTc6NTg6MzQuNjMwNTg2MDUxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ1MDMyNTI2MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUHJvcG9zZWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgZGV2Lm9gIGlzIGluZGVlZCBidWlsdCBhcyBgb2JqLXlgIHdpdGhpbiBgbmV0L2NvcmUvTWFrZWZpbGVgLCBhbmQgdGhlIGBuZXQvTWFrZWZpbGVgIGl0c2VsZiBpbmNsdWRlcyBgb2JqLSQoQ09ORklHX05FVCkgKz0gY29yZS9gLiBUaGVyZWZvcmUsIGBDT05GSUdfTkVUYCBpcyB0aGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gRnVydGhlcm1vcmUsIGBTTVBgIGlzIGFsc28gcmVsZXZhbnQsIHBhcnRpY3VsYXJseSBiZWNhdXNlIG9mIHRoZSB0aHJlYWRlZCBiYWNrbG9nIE5BUEkgcHJvY2Vzc2luZy4gTWFrZXMgcGVyZmVjdCBzZW5zZS5cblxuTm93LCBsZXQncyBqdXN0IGNvbmZpcm0gYWxsIHRoZSBuZWNlc3NhcnkgcGFyYW1ldGVycyBmb3IgYHNldC1yZXN1bHRzYCBhcmUgaW4gb3JkZXI6XG5cbiogICBgV29ydGhGdXp6aW5nYDogRGVmaW5pdGVseSB0cnVlLlxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHJlc2NoZWR1bGluZyBpbiBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKWAgd2l0aGluIHRoZSBuZXR3b3JraW5nIGNvcmUgKGBuZXQvY29yZS9kZXYuY2ApLiBJdCBlbnN1cmVzIGBjb25kX3Jlc2NoZWQoKWAgaXMgY2FsbGVkIG9uIGV2ZXJ5IGV4aXQsIG5vdCBqdXN0IGR1cmluZyByZXBvbGwgaXRlcmF0aW9ucy4gVGhpcyBpcyBjcnVjaWFsIGFzIGl0IHJ1bnMgd2l0aGluIHRocmVhZGVkIE5BUEkgd29ya2VyIHRocmVhZHMgYW5kIGJhY2tsb2cgTkFQSSwgYW5kIGlzIGFjY2Vzc2libGUgaW4gYW55IHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBTb3VuZHMgc29saWQuXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXCJuYXBpX3RocmVhZGVkX3BvbGxfbG9vcFwiLCBcIm5hcGlfdGhyZWFkZWRfcG9sbFwiLCBcInJ1bl9iYWNrbG9nX25hcGlcIiwgXCJuYXBpX3NldF90aHJlYWRlZFwiXWAgLSBZdXAsIHRoYXQncyBzcG90IG9uLCB0aGVzZSBzeW1ib2xzIGVuY29tcGFzcyB0aGUga2V5IGZ1bmN0aW9ucyBpbXBhY3RlZCBieSB0aGUgcGF0Y2guXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiTkVUXCIsIFwiU01QXCJdYCAtIFllcywgYE5FVGAgYW5kIGBTTVBgIGFyZSB0aGUga2V5IGVuYWJsaW5nIGNvbmZpZ3MgdGhhdCB3ZSBhbHJlYWR5IGlkZW50aWZpZWQuXG5cbkFscmlnaHQsIGEgZmluYWwgc2FuaXR5IGNoZWNrLi4uIEV2ZXJ5dGhpbmcgaXMgcHJlY2lzZSwgY29tcGxldGUsIGFuZCBleGFjdGx5IHdoYXQncyByZXF1aXJlZC4gTm8gaXNzdWVzIGRldGVjdGVkLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1NjgsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjM5LjEzMzg0NjQ3NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxODM4MzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5hcGlfdGhyZWFkZWRfcG9sbF9sb29wXCIsXG4gICAgXCJuYXBpX3RocmVhZGVkX3BvbGxcIixcbiAgICBcInJ1bl9iYWNrbG9nX25hcGlcIixcbiAgICBcIm5hcGlfc2V0X3RocmVhZGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2NoZWR1bGluZyBhbmQgY29vcGVyYXRpdmUgeWllbGQgYmVoYXZpb3IgKGNvbmRfcmVzY2hlZCkgaW4gbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gKG5ldC9jb3JlL2Rldi5jKS4gVGhpcyBjb2RlIGV4ZWN1dGVzIGluIHRocmVhZGVkIE5BUEkgYW5kIGJhY2tsb2cgcG9sbGluZyBrdGhyZWFkcyBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIlNNUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5hcGlfdGhyZWFkZWRfcG9sbF9sb29wXCIsXG4gICAgXCJuYXBpX3RocmVhZGVkX3BvbGxcIixcbiAgICBcInJ1bl9iYWNrbG9nX25hcGlcIixcbiAgICBcIm5hcGlfc2V0X3RocmVhZGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2NoZWR1bGluZyBhbmQgY29vcGVyYXRpdmUgeWllbGQgYmVoYXZpb3IgKGNvbmRfcmVzY2hlZCkgaW4gbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0gKG5ldC9jb3JlL2Rldi5jKS4gVGhpcyBjb2RlIGV4ZWN1dGVzIGluIHRocmVhZGVkIE5BUEkgYW5kIGJhY2tsb2cgcG9sbGluZyBrdGhyZWFkcyBhbmQgaXMgZnVsbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTc6NTg6MzkuMjI1Njk0MzY3WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ5MDY5NzQ4NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjM5LjIyNjMyOTczN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjExNDkwMDU3MTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3AoKWAgaW4gYG5ldC9jb3JlL2Rldi5jYCB0byBjYWxsIGBjb25kX3Jlc2NoZWQoKWAgdW5jb25kaXRpb25hbGx5IG9uIGV2ZXJ5IHBhc3MgdGhyb3VnaCB0aGUgbG9vcCwgcmF0aGVyIHRoYW4gb25seSB3aGVuIGByZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXNgIGlzIHRydWUuIFRoaXMgaXMgYSB0YXNrIHNjaGVkdWxpbmcgLyBDUFUgeWllbGRpbmcgY2hhbmdlIHRvIGF2b2lkIHdhdGNoZG9nIHdhcm5pbmdzIHdoZW4gYG5hcGlfdGhyZWFkX3dhaXQoKWAgcmV0dXJucyB3aXRob3V0IHNjaGVkdWxpbmcuXFxuXFxuVGhlIGNoYW5nZSBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnksIGluaXRpYWxpemUgb3IgcmVhZCBkYXRhIGJ1ZmZlcnMsIGFsdGVyIHBhY2tldC9kYXRhIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcyBvciBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTc0ZDM2NmE0ZGM2YzIxY2IwMWFkYWY2MmZiODhhNTg5YWY2NjJiNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTc6NTc6NTggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCAzODMzNjg1OGMxNjhmLi41YzdmOGNkZjg0NDM1IDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvZGV2LmNcbisrKyBiL25ldC9jb3JlL2Rldi5jXG5AQCAtNzkyNCwxMSArNzkyNCwxMyBAQCBzdGF0aWMgdm9pZCBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksXG4gXHRcdFx0Z3JvX2ZsdXNoX25vcm1hbChcdTAwMjZuYXBpLVx1MDAzZWdybywgSFogXHUwMDNlPSAxMDAwKTtcbiBcdFx0bG9jYWxfYmhfZW5hYmxlKCk7XG4gXG4tXHRcdC8qIENhbGwgY29uZF9yZXNjaGVkIGhlcmUgdG8gYXZvaWQgd2F0Y2hkb2cgd2FybmluZ3MuICovXG4tXHRcdGlmIChyZXBvbGwgfHwgYnVzeV9wb2xsX2xhc3RfcXMpIHtcbitcdFx0aWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcylcbiBcdFx0XHRyY3Vfc29mdGlycV9xc19wZXJpb2RpYyhsYXN0X3FzKTtcbi1cdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdFx0fVxuK1xuK1x0XHQvKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIHlpZWxkIG9uXG4rXHRcdCAqIGV2ZXJ5IGV4aXQsIG5vdCBvbmx5IHdoZW4gdGhlIGxvb3AgaXRlcmF0ZXMuXG4rXHRcdCAqL1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbiBcbiBcdFx0aWYgKCFyZXBvbGwpXG4gXHRcdFx0YnJlYWs7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODozOS4yMjYzMzA2NjdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk2ODUzODM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKipcblxuT2theSwgdGhlIHRhc2sgaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB3ZSdyZSBsb29raW5nIGF0IGEgY29kZSBjaGFuZ2UgdGhhdCBjb3VsZCBpbnRyb2R1Y2Uga2VybmVsIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBMZXQncyBkaXZlIGluLlxuXG5GaXJzdCwgSSBzZWUgdGhlIGBkaWZmYCBpdHNlbGYuIEl0IHNlZW1zIHRvIGJlIGluIGBuZXQvY29yZS9kZXYuY2AuIEFscmlnaHQsIG5ldHdvcmsgZGV2aWNlIGNvcmUsIG5vdCBhIGJhZCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBtZW1vcnkgYnVncy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNoYW5nZSBhY3R1YWxseSAqaXMqLiBJIHNlZSBzb21lIGFkZGl0aW9ucyBhcm91bmQgbGluZSA3OTI0LiBJdCBsb29rcyBsaWtlIHRoZSBjb2RlIGlzIHJlbGF0ZWQgdG8gdGhlIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcGAgZnVuY3Rpb24uIFRoZSBwYXRjaCBpbmNsdWRlcyBhIGBjb25kX3Jlc2NoZWQoKWAgY2FsbC4gSXQncyBiZWluZyBtb3ZlZCBvdXQgb2YgYSBjb25kaXRpb25hbCBibG9jay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGRvbmUsIHRvIGFzc2VzcyBpZiB0aGVyZSBtaWdodCBiZSBhIG1lbW9yeSBzYWZldHkgY29uY2Vybi4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhlIHBsYWNlbWVudCBpcyByZWxhdGVkIHRvIHdhdGNoZG9nIHdhcm5pbmdzIGFuZCBzY2hlZHVsaW5nLCBidXQgdGhlIGFkZGVkIGNvbW1lbnQgYWJvdXQgYG5hcGlfdGhyZWFkX3dhaXQoKWAgaXMgaW50cmlndWluZy4gU2VlbXMgbGlrZSB0aGVyZSdzIGEgcmVhc29uIGZvciBpdC4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZSBhcm91bmQgdGhpcyBjaGFuZ2UgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBhbmQgcG90ZW50aWFsIG1lbW9yeSBpbXBsaWNhdGlvbnMuIEkgd2lsbCBoYXZlIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjaGFuZ2UgYWZmZWN0cyBtZW1vcnkgYWxsb2NhdGlvbiBvciBkZWFsbG9jYXRpb24uIEl0J3MgdG9vIGVhcmx5IHRvIHNheSBpZiBLTVNBTiBpcyBuZWVkZWQsIGJ1dCBJJ20gbG9va2luZyBmb3IgY2x1ZXMgaW4gdGhlIGZ1bmN0aW9uJ3MgYmVoYXZpb3VyIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNzo1ODo0NC4xOTQ4NzI4NzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQzMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9jb3JlL2Rldi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5MDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc5MDA6XFx0XFx0XFx0bG9jYWxfYmhfZGlzYWJsZSgpO1xcbjc5MDE6XFx0XFx0XFx0YnBmX25ldF9jdHggPSBicGZfbmV0X2N0eF9zZXQoXFx1MDAyNl9fYnBmX25ldF9jdHgpO1xcbjc5MDI6XFx0XFxuNzkwMzpcXHRcXHRcXHRzZCA9IHRoaXNfY3B1X3B0cihcXHUwMDI2c29mdG5ldF9kYXRhKTtcXG43OTA0OlxcdFxcdFxcdHNkLVxcdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSB0cnVlO1xcbjc5MDU6XFx0XFxuNzkwNjpcXHRcXHRcXHRoYXZlID0gbmV0cG9sbF9wb2xsX2xvY2sobmFwaSk7XFxuNzkwNzpcXHRcXHRcXHRfX25hcGlfcG9sbChuYXBpLCBcXHUwMDI2cmVwb2xsKTtcXG43OTA4OlxcdFxcdFxcdG5ldHBvbGxfcG9sbF91bmxvY2soaGF2ZSk7XFxuNzkwOTpcXHRcXG43OTEwOlxcdFxcdFxcdHNkLVxcdTAwM2Vpbl9uYXBpX3RocmVhZGVkX3BvbGwgPSBmYWxzZTtcXG43OTExOlxcdFxcdFxcdGJhcnJpZXIoKTtcXG43OTEyOlxcdFxcbjc5MTM6XFx0XFx0XFx0aWYgKHNkX2hhc19ycHNfaXBpX3dhaXRpbmcoc2QpKSB7XFxuNzkxNDpcXHRcXHRcXHRcXHRsb2NhbF9pcnFfZGlzYWJsZSgpO1xcbjc5MTU6XFx0XFx0XFx0XFx0bmV0X3Jwc19hY3Rpb25fYW5kX2lycV9lbmFibGUoc2QpO1xcbjc5MTY6XFx0XFx0XFx0fVxcbjc5MTc6XFx0XFx0XFx0c2tiX2RlZmVyX2ZyZWVfZmx1c2goKTtcXG43OTE4OlxcdFxcdFxcdGJwZl9uZXRfY3R4X2NsZWFyKGJwZl9uZXRfY3R4KTtcXG43OTE5OlxcdFxcbjc5MjA6XFx0XFx0XFx0LyogV2hlbiBidXN5IHBvbGwgaXMgZW5hYmxlZCwgdGhlIG9sZCBwYWNrZXRzIGFyZSBub3QgZmx1c2hlZCBpblxcbjc5MjE6XFx0XFx0XFx0ICogbmFwaV9jb21wbGV0ZV9kb25lLiBTbyBmbHVzaCB0aGVtIGhlcmUuXFxuNzkyMjpcXHRcXHRcXHQgKi9cXG43OTIzOlxcdFxcdFxcdGlmIChidXN5X3BvbGxfbGFzdF9xcylcXG43OTI0OlxcdFxcdFxcdFxcdGdyb19mbHVzaF9ub3JtYWwoXFx1MDAyNm5hcGktXFx1MDAzZWdybywgSFogXFx1MDAzZT0gMTAwMCk7XFxuNzkyNTpcXHRcXHRcXHRsb2NhbF9iaF9lbmFibGUoKTtcXG43OTI2OlxcdFxcbjc5Mjc6XFx0XFx0XFx0aWYgKHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xcylcXG43OTI4OlxcdFxcdFxcdFxcdHJjdV9zb2Z0aXJxX3FzX3BlcmlvZGljKGxhc3RfcXMpO1xcbjc5Mjk6XFx0XFxuNzkzMDpcXHRcXHRcXHQvKiBuYXBpX3RocmVhZF93YWl0KCkgY2FuIHJldHVybiB3aXRob3V0IHNjaGVkdWxpbmcsIHNvIHlpZWxkIG9uXFxuNzkzMTpcXHRcXHRcXHQgKiBldmVyeSBleGl0LCBub3Qgb25seSB3aGVuIHRoZSBsb29wIGl0ZXJhdGVzLlxcbjc5MzI6XFx0XFx0XFx0ICovXFxuNzkzMzpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG43OTM0OlxcdFxcbjc5MzU6XFx0XFx0XFx0aWYgKCFyZXBvbGwpXFxuNzkzNjpcXHRcXHRcXHRcXHRicmVhaztcXG43OTM3OlxcdFxcdH1cXG43OTM4OlxcdFxcbjc5Mzk6XFx0XFx0aWYgKGJ1c3lfcG9sbF9sYXN0X3FzKVxcbjc5NDA6XFx0XFx0XFx0KmJ1c3lfcG9sbF9sYXN0X3FzID0gbGFzdF9xcztcXG43OTQxOlxcdH1cXG43OTQyOlxcdFxcbjc5NDM6XFx0c3RhdGljIGludCBuYXBpX3RocmVhZGVkX3BvbGwodm9pZCAqZGF0YSlcXG43OTQ0OlxcdHtcXG43OTQ1OlxcdFxcdHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9IGRhdGE7XFxuNzk0NjpcXHRcXHR1bnNpZ25lZCBsb25nIGxhc3RfcXMgPSBqaWZmaWVzO1xcbjc5NDc6XFx0XFx0Ym9vbCB3YW50X2J1c3lfcG9sbDtcXG43OTQ4OlxcdFxcdGJvb2wgaW5fYnVzeV9wb2xsO1xcbjc5NDk6XFx0XFx0dW5zaWduZWQgbG9uZyB2YWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjQ0LjE5NTQxODI0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1MjA5NDU3MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBJbXBhY3QqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBgbmFwaV90aHJlYWRlZF9wb2xsX2xvb3BgIHdpdGhpbiBgbmV0L2NvcmUvZGV2LmNgLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgdGhlIHJlc2NoZWR1bGluZyBsb2dpYzsgbW92aW5nIGBjb25kX3Jlc2NoZWQoKWAgb3V0c2lkZSBvZiBhIGNvbmRpdGlvbmFsIGJsb2NrLiBJJ20gc2VlaW5nIHRoYXQgdGhpcyBpcyBwdXJlbHkgYSBjaGFuZ2UgaW4gaG93IHRoZSBrZXJuZWwgdGhyZWFkIHlpZWxkcyB0aW1lLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gZm9yIG15IHB1cnBvc2VzIGhlcmUgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zLCBhbmQgSSB0aGluayBub3QuIEl0J3MganVzdCBhIHJlc2NoZWR1bGluZyBjaGFuZ2Ug4oCTIG5vIG1lbW9yeSBhbGxvY2F0aW9uLCBubyB1c2VyLXNwYWNlIGNvcGllcywgbm8gcG90ZW50aWFsIGZvciBpbmZvIGxlYWtzIHN0ZW1taW5nIGZyb20gdW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGFueXRoaW5nIG9mIHRoYXQgbmF0dXJlLiBJJ20gbm90IHNlZWluZyBhbnkgbW9kaWZpY2F0aW9ucyB0byBpbml0aWFsaXphdGlvbiwgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBib3VuZHMgY2hlY2tpbmcsIG9yIGJ1ZmZlciBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgbWlnaHQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cblNvLCB0aGlzIGNsZWFybHkgaGFzICpub3RoaW5nKiB0byBkbyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRldGVjdGlvbi4gU3RhbmRhcmQgc2FuaXRpemVycywgb3IgZXZlbiBLQVNBTiBhbmQgbG9ja2RlcCwgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IGdlbmVyYWwgcmVncmVzc2lvbnMgdGhhdCBjb3VsZCBiZSBpbnRyb2R1Y2VkLiBLTVNBTiBpcyBkZWZpbml0ZWx5IG92ZXJraWxsIGhlcmUuXG5cbkxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cbktNU0FOIHNheXMgYE5lZWRzS01TQU49dHJ1ZWAgKm9ubHkqIGlmIHRoZXJlJ3MgYW55IGludHJvZHVjdGlvbiBvciBtb2RpZmljYXRpb24gb2Y6XG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh0aHJvdWdoIHZhcmlvdXMgbWVhbnMpIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkLiBOb3BlLlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBOb3BlLlxuMy4gIENvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyLiBOb3BlLlxuNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIE5vcGUuXG5cbkFuZCBpdCBzYXlzIGBOZWVkc0tNU0FOPWZhbHNlYCBpZjpcbiogICBUaGUgcmlza3MgYXJlIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGRlYWRsb2NrcyBvciB1c2UtYWZ0ZXItZnJlZSDigJMgdGhpbmdzIEtBU0FOL0xPQ0tERVAvc3RhbmRhcmQgYnVnIGRldGVjdG9ycyBjYXRjaC4gRXhhY3RseSFcbiogICBBbGwgdG91Y2hlZCBzdHJ1Y3R1cmVzIGFyZSB6ZXJvZWQgb3IgaW5pdGlhbGl6ZWQuIEFuZCBhcyBmYXIgYXMgSSBjYW4gc2VlLCBhbGwgc3RydWN0dXJlIGFyZSB6ZXJvZWQuXG4qICAgVGhlIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBsZWFrcy4gUHJlY2lzZWx5LlxuXG5UaGVyZWZvcmUsIGl0J3MgY2xlYXI6IGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLlxuXG5BbHJpZ2h0LCBJJ20gcmVhZHkgdG8gcHJlcGFyZSB0aGUgY2FsbCB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjA3LCJPdXRwdXRUb2tlbnMiOjE2NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE3OjU4OjUwLjcxNjM2ODQyNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYG5hcGlfdGhyZWFkZWRfcG9sbF9sb29wKClgIGluIGBuZXQvY29yZS9kZXYuY2AgdG8gY2FsbCBgY29uZF9yZXNjaGVkKClgIHVuY29uZGl0aW9uYWxseSBvbiBldmVyeSBwYXNzIHRocm91Z2ggdGhlIGxvb3AsIHJhdGhlciB0aGFuIG9ubHkgd2hlbiBgcmVwb2xsIHx8IGJ1c3lfcG9sbF9sYXN0X3FzYCBpcyB0cnVlLiBUaGlzIGlzIGEgdGFzayBzY2hlZHVsaW5nIC8gQ1BVIHlpZWxkaW5nIGNoYW5nZSB0byBhdm9pZCB3YXRjaGRvZyB3YXJuaW5ncyB3aGVuIGBuYXBpX3RocmVhZF93YWl0KClgIHJldHVybnMgd2l0aG91dCBzY2hlZHVsaW5nLlxcblxcblRoZSBjaGFuZ2UgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5LCBpbml0aWFsaXplIG9yIHJlYWQgZGF0YSBidWZmZXJzLCBhbHRlciBwYWNrZXQvZGF0YSBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyByaXNrcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhY2Nlc3Mgb3Iga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBuYXBpX3RocmVhZGVkX3BvbGxfbG9vcCgpYCBpbiBgbmV0L2NvcmUvZGV2LmNgIHRvIGNhbGwgYGNvbmRfcmVzY2hlZCgpYCB1bmNvbmRpdGlvbmFsbHkgb24gZXZlcnkgcGFzcyB0aHJvdWdoIHRoZSBsb29wLCByYXRoZXIgdGhhbiBvbmx5IHdoZW4gYHJlcG9sbCB8fCBidXN5X3BvbGxfbGFzdF9xc2AgaXMgdHJ1ZS4gVGhpcyBpcyBhIHRhc2sgc2NoZWR1bGluZyAvIENQVSB5aWVsZGluZyBjaGFuZ2UgdG8gYXZvaWQgd2F0Y2hkb2cgd2FybmluZ3Mgd2hlbiBgbmFwaV90aHJlYWRfd2FpdCgpYCByZXR1cm5zIHdpdGhvdXQgc2NoZWR1bGluZy5cXG5cXG5UaGUgY2hhbmdlIGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSwgaW5pdGlhbGl6ZSBvciByZWFkIGRhdGEgYnVmZmVycywgYWx0ZXIgcGFja2V0L2RhdGEgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgbm8gcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzIG9yIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwk2sz[1] Phase: Succeeded StartedAt: 2026-09-03 17:59:02 +0000 UTC FinishedAt: 2026-09-03 17:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 17:59:02 +0000 UTC FinishedAt: 2026-09-03 17:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2] Phase: Succeeded StartedAt: 2026-09-03 17:59:02 +0000 UTC FinishedAt: 2026-09-03 21:39:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 17:59:02 +0000 UTC FinishedAt: 2026-09-03 21:39:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 17:59:02 +0000 UTC FinishedAt: 2026-09-03 17:59:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 17:59:02 +0000 UTC FinishedAt: 2026-09-03 17:59:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwk2sz/series-workflowwk2sz-convert-artifact-50448391/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 17:59:12 +0000 UTC FinishedAt: 2026-09-03 18:16:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 17:59:12 +0000 UTC FinishedAt: 2026-09-03 18:16:59 +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:*b1cd7034-a71c-4d01-8004-c26eec7da2be,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-workflowwk2sz/series-workflowwk2sz-convert-artifact-50448391/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": "f6483261-9bb3-4ded-b55e-6a7ead684dda", "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-workflowwk2sz/series-workflowwk2sz-build-action-3404928669/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 17:59:12 +0000 UTC FinishedAt: 2026-09-03 18:16:49 +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:*b1cd7034-a71c-4d01-8004-c26eec7da2be,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-workflowwk2sz/series-workflowwk2sz-convert-artifact-50448391/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": "f6483261-9bb3-4ded-b55e-6a7ead684dda", "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-workflowwk2sz/series-workflowwk2sz-build-action-3404928669/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 18:16:59 +0000 UTC FinishedAt: 2026-09-03 18:16:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 18:16:59 +0000 UTC FinishedAt: 2026-09-03 18:16:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 18:16:59 +0000 UTC FinishedAt: 2026-09-03 18:17:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 18:16:59 +0000 UTC FinishedAt: 2026-09-03 18:17:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwk2sz/series-workflowwk2sz-convert-artifact-2592501302/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 18:17:09 +0000 UTC FinishedAt: 2026-09-03 18:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 18:17:09 +0000 UTC FinishedAt: 2026-09-03 18:18:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f6483261-9bb3-4ded-b55e-6a7ead684dda,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-workflowwk2sz/series-workflowwk2sz-build-action-3404928669/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-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 18:19:01 +0000 UTC FinishedAt: 2026-09-03 18:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 18:19:01 +0000 UTC FinishedAt: 2026-09-03 18:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 18:19:01 +0000 UTC FinishedAt: 2026-09-03 18:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 18:19:01 +0000 UTC FinishedAt: 2026-09-03 18:36:45 +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:*b1cd7034-a71c-4d01-8004-c26eec7da2be,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-workflowwk2sz/series-workflowwk2sz-convert-artifact-2592501302/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": "5a654d5f-f805-47eb-9c15-6546186dccbc", "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-workflowwk2sz/series-workflowwk2sz-build-action-4236161850/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 18:19:01 +0000 UTC FinishedAt: 2026-09-03 18:36:35 +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:*b1cd7034-a71c-4d01-8004-c26eec7da2be,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-workflowwk2sz/series-workflowwk2sz-convert-artifact-2592501302/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": "5a654d5f-f805-47eb-9c15-6546186dccbc", "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-workflowwk2sz/series-workflowwk2sz-build-action-4236161850/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 18:36:45 +0000 UTC FinishedAt: 2026-09-03 18:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 18:36:45 +0000 UTC FinishedAt: 2026-09-03 18:36:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 18:36:45 +0000 UTC FinishedAt: 2026-09-03 18:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 18:36:45 +0000 UTC FinishedAt: 2026-09-03 18:38:28 +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:*5a654d5f-f805-47eb-9c15-6546186dccbc,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-workflowwk2sz/series-workflowwk2sz-build-action-4236161850/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-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 18:38:38 +0000 UTC FinishedAt: 2026-09-03 21:39:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 18:38:38 +0000 UTC FinishedAt: 2026-09-03 21:39:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"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:*f6483261-9bb3-4ded-b55e-6a7ead684dda,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a654d5f-f805-47eb-9c15-6546186dccbc,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-workflowwk2sz/series-workflowwk2sz-build-action-3404928669/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-workflowwk2sz/series-workflowwk2sz-build-action-4236161850/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 18:38:38 +0000 UTC FinishedAt: 2026-09-03 18:38:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 18:38:38 +0000 UTC FinishedAt: 2026-09-03 18:38:43 +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":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"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-workflowwk2sz/series-workflowwk2sz-convert-artifact-2186848859/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 18:38:38 +0000 UTC FinishedAt: 2026-09-03 18:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 18:38:38 +0000 UTC FinishedAt: 2026-09-03 18:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 18:38:38 +0000 UTC FinishedAt: 2026-09-03 18:38:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 18:38:48 +0000 UTC FinishedAt: 2026-09-03 21:39:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwk2sz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["napi_threaded_poll_loop","napi_threaded_poll","run_backlog_napi","napi_set_threaded"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"5a3f7a683aee56e1f15c9d53041f3236767eaae7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","SMP"],"series_id":"39d0a82a-0723-4f47-97a9-3abf72d9d8d4","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 18:38:48 +0000 UTC FinishedAt: 2026-09-03 21:39:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f6483261-9bb3-4ded-b55e-6a7ead684dda,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5a654d5f-f805-47eb-9c15-6546186dccbc,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-workflowwk2sz/series-workflowwk2sz-build-action-3404928669/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-workflowwk2sz/series-workflowwk2sz-build-action-4236161850/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-workflowwk2sz/series-workflowwk2sz-convert-artifact-2186848859/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,}