Name: series-workflowx92np Phase: Succeeded StartedAt: 2026-07-07 18:42:13 +0000 UTC FinishedAt: 2026-07-07 23:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[0] Phase: Succeeded StartedAt: 2026-07-07 18:42:13 +0000 UTC FinishedAt: 2026-07-07 19:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 18:42:13 +0000 UTC FinishedAt: 2026-07-07 19:16:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a1ea12a96ea9d1b33fdd7968c304a2cde4281896", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a1ea12a96ea9d1b33fdd7968c304a2cde4281896", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MIGRATION" ], "series_id": "3d500551-9451-4ae8-8416-e41583cb1118" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "move_hugetlb_state", "unmap_and_move_huge_page", "migrate_hugetlbs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttb3ZlX2h1Z2V0bGJfc3RhdGUmIzM0OywKICAgICYjMzQ7dW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfaHVnZXRsYnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG1vdmVfaHVnZXRsYl9zdGF0ZWAgd2hlcmUgaXQgd291bGQgcmV0dXJuIGVhcmx5IGlmIGBuZXdfbmlkID09IG9sZF9uaWRgLCBza2lwcGluZyB0aGUgbG9naWMgdG8gc2V0IHRoZSBuZXcgZm9saW8gYXMgbWlncmF0YWJsZSBhbmQgYWRkaW5nIGl0IHRvIHRoZSBhY3RpdmUgbGlzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGh1Z2UgcGFnZSBtaWdyYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMWFlMjZlOTcwMzkzYTVkYTE4OGJhMzA1YTJhOTFlNzYyYTkzNjlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxOToxMTozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5jYWZhZGZkYjYzYzBlNyAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtNzIxMSwxNCAmIzQzOzcyMTEsMTQgQEAgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVcbiBcdFx0ICogVGhlcmUgaXMgbm8gbmVlZCB0byB0cmFuc2ZlciB0aGUgcGVyLW5vZGUgc3VycGx1cyBzdGF0ZVxuIFx0XHQgKiB3aGVuIHdlIGRvIG5vdCBjcm9zcyB0aGUgbm9kZS5cbiBcdFx0ICovXG4tXHRcdGlmIChuZXdfbmlkID09IG9sZF9uaWQpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRcdGlmIChoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7XG4tXHRcdFx0aC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tO1xuLVx0XHRcdGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbbmV3X25pZF0mIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKG5ld19uaWQgIT0gb2xkX25pZCkge1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4mIzQzO1x0XHRcdGlmIChoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7XG4mIzQzO1x0XHRcdFx0aC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tO1xuJiM0MztcdFx0XHRcdGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbbmV3X25pZF0mIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHR9XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0fVxuIFxuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW92ZV9odWdldGxiX3N0YXRlJiMzNDssCiAgICAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2h1Z2V0bGJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSBpZiBgbmV3X25pZCA9PSBvbGRfbmlkYCwgc2tpcHBpbmcgdGhlIGxvZ2ljIHRvIHNldCB0aGUgbmV3IGZvbGlvIGFzIG1pZ3JhdGFibGUgYW5kIGFkZGluZyBpdCB0byB0aGUgYWN0aXZlIGxpc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBodWdlIHBhZ2UgbWlncmF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMWFlMjZlOTcwMzkzYTVkYTE4OGJhMzA1YTJhOTFlNzYyYTkzNjlkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAxOToxMTozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlYy4uY2FmYWRmZGI2M2MwZTcgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTcyMTEsMTQgJiM0Mzs3MjExLDE0IEBAIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlCiAJCSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHBlci1ub2RlIHN1cnBsdXMgc3RhdGUKIAkJICogd2hlbiB3ZSBkbyBub3QgY3Jvc3MgdGhlIG5vZGUuCiAJCSAqLwotCQlpZiAobmV3X25pZCA9PSBvbGRfbmlkKQotCQkJcmV0dXJuOwotCQlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKLQkJaWYgKGgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7Ci0JCQloLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tOwotCQkJaC0mZ3Q7c3VycGx1c19odWdlX3BhZ2VzX25vZGVbbmV3X25pZF0mIzQzOyYjNDM7OwomIzQzOwkJaWYgKG5ld19uaWQgIT0gb2xkX25pZCkgewomIzQzOwkJCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwomIzQzOwkJCWlmIChoLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXSkgewomIzQzOwkJCQloLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tOwomIzQzOwkJCQloLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXdfbmlkXSYjNDM7JiM0Mzs7CiYjNDM7CQkJfQomIzQzOwkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAl9CiAKIAkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1vdmVfaHVnZXRsYl9zdGF0ZWAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9odWdldGxiLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBpbiB0aGUgY29uZGl0aW9uYWwgY2hlY2sgaW52b2x2aW5nIGBuZXdfbmlkYCBhbmQgYG9sZF9uaWRgLiBCZWZvcmUsIHRoZSBjb2RlIHdvdWxkIGltbWVkaWF0ZWx5IHJldHVybiBpZiB0aGUgbmV3IG5vZGUgSUQgd2FzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOgoKYGBgYwoJCWlmIChuZXdfbmlkID09IG9sZF9uaWQpCgkJCXJldHVybjsKYGBgCgpOb3csIHRoYXQmIzM5O3MgYmVlbiBmbGlwcGVkOgoKYGBgYwoJCWlmIChuZXdfbmlkICE9IG9sZF9uaWQpCmBgYAoKVGhlIG9sZCBsb2dpYyBpbW1lZGlhdGVseSBleGl0ZWQgdGhlIGZ1bmN0aW9uIGlmIHRoZSBub2RlIElEcyB3ZXJlIHRoZSBzYW1lLiBUaGUgbmV3IGxvZ2ljIHByb2NlZWRzIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlIGJsb2NrIG9ubHkgaWYgdGhleSBhcmUgZGlmZmVyZW50LgoKVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgcGFydCBvZiB0aGlzIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGNoZWNrIHdhcyBkZXNpZ25lZCB0byBhdm9pZCBleGVjdXRpb24gb2YgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uIGlmIHRoZSBub2RlIElEcyB3ZXJlIHRoZSBzYW1lLiBUaGUgY2hhbmdlIG5vdyBhbGxvd3MgZXhlY3V0aW9uIG9mIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbiBldmVuIGlmIHRoZSBub2RlIElEcyBhcmUgdGhlIHNhbWUuCgpFc3NlbnRpYWxseSwgYnkgcmVtb3ZpbmcgdGhlIGByZXR1cm5gLCB0aGUgY29kZSBub3cgYWx3YXlzIHByb2NlZWRzIHRvIHVwZGF0ZSB0aGUgYHN1cnBsdXNfaHVnZV9wYWdlc19ub2RlYCBhcnJheSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIE5VTUEgbm9kZSBjaGFuZ2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBCZWZvcmUsIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbiB3YXMgc2tpcHBlZCB1bmRlciBhIHNwZWNpZmljIGNvbmRpdGlvbi4gTm93LCB0aGF0IHNraXAgaXMgcmVtb3ZlZC4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIHVzZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBidWcgZml4IG9yIGFuIGludGVudGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBzaXRlcyB0byBzZWUgd2hhdCB0aGUgaW1wYWN0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdmVfaHVnZXRsYl9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9NzE3Nj12b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYy03MTg0LVxubW0vaHVnZXRsYi5jOjcxODU6dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxubW0vaHVnZXRsYi5jLTcxODYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBgbW92ZV9odWdldGxiX3N0YXRlYCBpbiBgbW0vaHVnZXRsYi5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYG1vdmVfaHVnZXRsYl9zdGF0ZWAgaW4gdGhlIGh1Z2V0bGIgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgdHJhbnNmZXIgb2YgSHVnZVRMQiBzdGF0ZSB3aGVuLCBmb3IgZXhhbXBsZSwgYSBIdWdlVExCIHBhZ2UgbmVlZHMgdG8gYmUgbW92ZWQgYmV0d2VlbiBkaWZmZXJlbnQgTlVNQSBub2RlcyBvciBzb21lIG90aGVyIHNpbWlsYXIgb3BlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICp3aGF0KiBzdGF0ZSBpcyBiZWluZyBtb3ZlZCBhbmQgKmhvdyogaXQmIzM5O3MgaGFuZGxlZC4gSXMgaXQganVzdCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzLCBvciBhcmUgdGhlcmUgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgbGlrZSBtZXRhZGF0YSwgYWNjb3VudGluZyBpbmZvcm1hdGlvbiwgb3IgZXZlbiB0aGUgcGFnZSBpdHNlbGY/IEl04oCZcyBjcnVjaWFsIHRvIGtub3cgaWYgdGhpcyBvcGVyYXRpb24gaW52b2x2ZXMgYW55IHBvdGVudGlhbCBkYXRhIGxvc3Mgb3IgaW5jb25zaXN0ZW5jeSwgd2hpY2ggcmVxdWlyZXMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaW4gYSBtdWx0aS10aHJlYWRlZCwgTlVNQSBhd2FyZSBlbnZpcm9ubWVudC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY3JpdGljYWwgc2VjdGlvbnMsIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBvdmVyYWxsIGFsZ29yaXRobSBiZWluZyB1c2VkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgdGhlIG1vdmUuIFRoZSBmb2N1cyB3aWxsIGJlIHRvIHNlZSBpZiB0aGVyZSBhcmUgcmFjZSBjb25kaXRpb25zIHRoYXQgSSBtaWdodCBoYXZlIG1pc3NlZCBpbiBwcmV2aW91cyByZXZpZXdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzE4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzE4NTpcdHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbjcxODY6XHR7XG43MTg3Olx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gZm9saW9faHN0YXRlKG9sZF9mb2xpbyk7XG43MTg4Olx0XG43MTg5Olx0XHRodWdldGxiX2Nncm91cF9taWdyYXRlKG9sZF9mb2xpbywgbmV3X2ZvbGlvKTtcbjcxOTA6XHRcdGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihuZXdfZm9saW8sIHJlYXNvbik7XG43MTkxOlx0XG43MTkyOlx0XHQvKlxuNzE5MzpcdFx0ICogdHJhbnNmZXIgdGVtcG9yYXJ5IHN0YXRlIG9mIHRoZSBuZXcgaHVnZXRsYiBmb2xpby4gVGhpcyBpc1xuNzE5NDpcdFx0ICogcmV2ZXJzZSB0byBvdGhlciB0cmFuc2l0aW9ucyBiZWNhdXNlIHRoZSBuZXdwYWdlIGlzIGdvaW5nIHRvXG43MTk1Olx0XHQgKiBiZSBmaW5hbCB3aGlsZSB0aGUgb2xkIG9uZSB3aWxsIGJlIGZyZWVkIHNvIGl0IHRha2VzIG92ZXJcbjcxOTY6XHRcdCAqIHRoZSB0ZW1wb3Jhcnkgc3RhdHVzLlxuNzE5NzpcdFx0ICpcbjcxOTg6XHRcdCAqIEFsc28gbm90ZSB0aGF0IHdlIGhhdmUgdG8gdHJhbnNmZXIgdGhlIHBlci1ub2RlIHN1cnBsdXMgc3RhdGVcbjcxOTk6XHRcdCAqIGhlcmUgYXMgd2VsbCBvdGhlcndpc2UgdGhlIGdsb2JhbCBzdXJwbHVzIGNvdW50IHdpbGwgbm90IG1hdGNoXG43MjAwOlx0XHQgKiB0aGUgcGVyLW5vZGUmIzM5O3MuXG43MjAxOlx0XHQgKi9cbjcyMDI6XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdGVtcG9yYXJ5KG5ld19mb2xpbykpIHtcbjcyMDM6XHRcdFx0aW50IG9sZF9uaWQgPSBmb2xpb19uaWQob2xkX2ZvbGlvKTtcbjcyMDQ6XHRcdFx0aW50IG5ld19uaWQgPSBmb2xpb19uaWQobmV3X2ZvbGlvKTtcbjcyMDU6XHRcbjcyMDY6XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfdGVtcG9yYXJ5KG9sZF9mb2xpbyk7XG43MjA3Olx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdGVtcG9yYXJ5KG5ld19mb2xpbyk7XG43MjA4Olx0XG43MjA5Olx0XG43MjEwOlx0XHRcdC8qXG43MjExOlx0XHRcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHBlci1ub2RlIHN1cnBsdXMgc3RhdGVcbjcyMTI6XHRcdFx0ICogd2hlbiB3ZSBkbyBub3QgY3Jvc3MgdGhlIG5vZGUuXG43MjEzOlx0XHRcdCAqL1xuNzIxNDpcdFx0XHRpZiAobmV3X25pZCAhPSBvbGRfbmlkKSB7XG43MjE1Olx0XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuNzIxNjpcdFx0XHRcdGlmIChoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7XG43MjE3Olx0XHRcdFx0XHRoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdLS07XG43MjE4Olx0XHRcdFx0XHRoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25ld19uaWRdJiM0MzsmIzQzOztcbjcyMTk6XHRcdFx0XHR9XG43MjIwOlx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG43MjIxOlx0XHRcdH1cbjcyMjI6XHRcdH1cbjcyMjM6XHRcbjcyMjQ6XHRcdC8qXG43MjI1Olx0XHQgKiBPdXIgb2xkIGZvbGlvIGlzIGlzb2xhdGVkIGFuZCBoYXMgXCYjMzQ7bWlncmF0YWJsZVwmIzM0OyBjbGVhcmVkIHVudGlsIGl0XG43MjI2Olx0XHQgKiBpcyBwdXRiYWNrLiBBcyBtaWdyYXRpb24gc3VjY2VlZGVkLCBzZXQgdGhlIG5ldyBmb2xpbyBcJiMzNDttaWdyYXRhYmxlXCYjMzQ7XG43MjI3Olx0XHQgKiBhbmQgYWRkIGl0IHRvIHRoZSBhY3RpdmUgbGlzdC5cbjcyMjg6XHRcdCAqL1xuNzIyOTpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuNzIzMDpcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfbWlncmF0YWJsZShuZXdfZm9saW8pO1xuNzIzMTpcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2bmV3X2ZvbGlvLVx1MDAzZWxydSwgXHUwMDI2KGZvbGlvX2hzdGF0ZShuZXdfZm9saW8pKS1cdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcbjcyMzI6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuNzIzMzpcdH1cbjcyMzQ6XHRcbjcyMzU6XHQvKlxuNzIzNjpcdCAqIElmIEB0YWtlX2xvY2tzIGlzIGZhbHNlLCB0aGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgbm8gY29uY3VycmVudCBwYWdlIHRhYmxlXG43MjM3Olx0ICogYWNjZXNzIGNhbiBoYXBwZW4gKGV4Y2VwdCBmb3IgZ3VwX2Zhc3QoKSBhbmQgaGFyZHdhcmUgcGFnZSB3YWxrcykuXG43MjM4Olx0ICogSWYgQHRha2VfbG9ja3MgaXMgdHJ1ZSwgd2UgdGFrZSB0aGUgaHVnZXRsYiBWTUEgbG9jayAodG8gbG9jayBvdXQgdGhpbmdzIGxpa2VcbjcyMzk6XHQgKiBjb25jdXJyZW50IHBhZ2UgZmF1bHQgaGFuZGxpbmcpIGFuZCB0aGUgZmlsZSBybWFwIGxvY2suXG43MjQwOlx0ICovXG43MjQxOlx0c3RhdGljIHZvaWQgaHVnZXRsYl91bnNoYXJlX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG43MjQyOlx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuNzI0MzpcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBlbmQsXG43MjQ0Olx0XHRcdFx0XHQgICBib29sIHRha2VfbG9ja3MpXG43MjQ1Olx0e1xuNzI0NjpcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcbjcyNDc6XHRcdHVuc2lnbmVkIGxvbmcgc3ogPSBodWdlX3BhZ2Vfc2l6ZShoKTtcbjcyNDg6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuNzI0OTpcdFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbjcyNTA6XHRcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcbjcyNTE6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcbjcyNTI6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbjcyNTM6XHRcdHB0ZV90ICpwdGVwO1xuNzI1NDpcdFxuNzI1NTpcdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlTSEFSRSkpXG43MjU2Olx0XHRcdHJldHVybjtcbjcyNTc6XHRcbjcyNTg6XHRcdGlmIChzdGFydCBcdTAwM2U9IGVuZClcbjcyNTk6XHRcdFx0cmV0dXJuO1xuNzI2MDpcdFxuNzI2MTpcdFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKTtcbjcyNjI6XHRcdHRsYl9nYXRoZXJfbW11X3ZtYShcdTAwMjZ0bGIsIHZtYSk7XG43MjYzOlx0XG43MjY0Olx0XHQvKlxuNzI2NTpcdFx0ICogTm8gbmVlZCB0byBjYWxsIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSgpLCBiZWNhdXNlXG43MjY2Olx0XHQgKiB3ZSBoYXZlIGFscmVhZHkgZG9uZSB0aGUgUFVEX1NJWkUgYWxpZ25tZW50LlxuNzI2NzpcdFx0ICovXG43MjY4Olx0XHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgbW0sXG43MjY5Olx0XHRcdFx0XHRzdGFydCwgZW5kKTtcbjcyNzA6XHRcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbjcyNzE6XHRcdGlmICh0YWtlX2xvY2tzKSB7XG43MjcyOlx0XHRcdGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTtcbjcyNzM6XHRcdFx0aV9tbWFwX2xvY2tfd3JpdGUodm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbjcyNzQ6XHRcdH0gZWxzZSB7XG43Mjc1Olx0XHRcdGlfbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG43Mjc2Olx0XHR9XG43Mjc3Olx0XHRmb3IgKGFkZHJlc3MgPSBzdGFydDsgYWRkcmVzcyBcdTAwM2MgZW5kOyBhZGRyZXNzICYjNDM7PSBQVURfU0laRSkge1xuNzI3ODpcdFx0XHRwdGVwID0gaHVnZXRsYl93YWxrKHZtYSwgYWRkcmVzcywgc3opO1xuNzI3OTpcdFx0XHRpZiAoIXB0ZXApXG43MjgwOlx0XHRcdFx0Y29udGludWU7XG43MjgxOlx0XHRcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgbW0sIHB0ZXApO1xuNzI4MjpcdFx0XHRfX2h1Z2VfcG1kX3Vuc2hhcmUoXHUwMDI2dGxiLCB2bWEsIGFkZHJlc3MsIHB0ZXAsIHRha2VfbG9ja3MpO1xuNzI4MzpcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuNzI4NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MDQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgQ29kZSBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBvbGQgQyBjb2RlIHNuaXBwZXQ6CmBgYGMKCQlpZiAobmV3X25pZCA9PSBvbGRfbmlkKQoJCQlyZXR1cm47CgkJc3Bpbl9sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CgkJaWYgKGgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7CgkJCWgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdLS07CgkJCWgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25ld19uaWRdJiM0MzsmIzQzOzsKCQl9CgkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKYGBgCmltbWVkaWF0ZWx5IGZsYWdnZWQgc29tZXRoaW5nLiBUaGUgZWFybHkgcmV0dXJuIGlmIGBuZXdfbmlkYCBlcXVhbHMgYG9sZF9uaWRgIGlzIHRoZSBjdWxwcml0LiBUaGF0IGNvbmRpdGlvbmFsIHNob3J0LWNpcmN1aXRzIHRoZSBzdWJzZXF1ZW50IGNydWNpYWwgY29kZToKYGBgYwoJLyoKCSAqIE91ciBvbGQgZm9saW8gaXMgaXNvbGF0ZWQgYW5kIGhhcyAmIzM0O21pZ3JhdGFibGUmIzM0OyBjbGVhcmVkIHVudGlsIGl0CgkgKiBpcyBwdXRiYWNrLiBBcyBtaWdyYXRpb24gc3VjY2VlZGVkLCBzZXQgdGhlIG5ldyBmb2xpbyAmIzM0O21pZ3JhdGFibGUmIzM0OwoJICogYW5kIGFkZCBpdCB0byB0aGUgYWN0aXZlIGxpc3QuCgkgKi8KCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwoJZm9saW9fc2V0X2h1Z2V0bGJfbWlncmF0YWJsZShuZXdfZm9saW8pOwoJbGlzdF9tb3ZlX3RhaWwoJmFtcDtuZXdfZm9saW8tJmd0O2xydSwgJmFtcDsoZm9saW9faHN0YXRlKG5ld19mb2xpbykpLSZndDtodWdlcGFnZV9hY3RpdmVsaXN0KTsKCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CmBgYApUaGF0IG1lYW5zLCBvbiBhIG5vZGUgbWlncmF0aW9uLCBpZiB0aGUgbmV3IG5vZGUgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBub2RlLCB0aGUgY29kZSB3b3VsZCBza2lwIHNldHRpbmcgdGhlIGZvbGlvIHRvIGBtaWdyYXRhYmxlYCBhbmQgYWRkaW5nIGl0IHRvIHRoZSBhY3RpdmUgbGlzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgYnVnLiBNaWdyYXRpb24gc3VjY2VlZHMgYnV0IGlzIG5vdCBwcm9wZXJseSByZWNvcmRlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIGZ1enppbmcgdG8gYmUgY2F1Z2h0LiBJdCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGlzIHdvcnRoIGEgZGVkaWNhdGVkIHRlc3QgY2FzZS4KClRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgbW92ZV9odWdldGxiX3N0YXRlYCwgSSBiZXR0ZXIgY2hlY2sgd2hlcmUgaXQgaXMgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgYnVnIGNhbiBiZSByZXByb2R1Y2VkLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIG9yIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3YWl0IGl0JiMzOTtzIGEgZ2xvYmFsIGZ1bmN0aW9uIGluIGBtbS9odWdldGxiLmNgLiBUaGF0IG1lYW5zIHRoZSBzY29wZSBvZiB0aGlzIGJ1ZyBpcyBsYXJnZXIgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LiBOb3cgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCB0byBidWlsZCBhbiBhdHRhY2sgdmVjdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdmVfaHVnZXRsYl9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xNTY9dm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxNTc6dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTE1OC12b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTQyMj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDI1LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NDI2OnN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00MjctXHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxuLS1cbm1tL2h1Z2V0bGIuYz03MTc2PXZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTcxODQtXG5tbS9odWdldGxiLmM6NzE4NTp2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG5tbS9odWdldGxiLmMtNzE4Ni17XG4tLVxubW0vbWlncmF0ZS5jPTE0NzE9c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTU1Ni1cdGlmICghcmMpIHtcbm1tL21pZ3JhdGUuYzoxNTU3Olx0XHRtb3ZlX2h1Z2V0bGJfc3RhdGUoc3JjLCBkc3QsIHJlYXNvbik7XG5tbS9taWdyYXRlLmMtMTU1OC1cdFx0cHV0X25ld19mb2xpbyA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEyNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkh1Z2UgUGFnZSBNaWdyYXRpb24gRGl2aW5nIEluKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biB0aGlzIGZ1bmN0aW9uIGNhbGwsIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLCBhbmQgaXQmIzM5O3MgcG9wcGluZyB1cCB3aXRoaW4gdGhlIGBtbS9taWdyYXRlLmNgIGZpbGUuIFJpZ2h0IGF3YXksIHRoaXMgc2NyZWFtcyBodWdlIHBhZ2UgbWlncmF0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBiZWhhdmlvciwgYW55IHNwZWNpZmljcyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kPwoKUmlnaHQsIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0aGUgb2J2aW91cyBvbmUsIEkgaGF2ZSB0byBlbnN1cmUgdGhhdCBpcyBzZXQuCgpMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgaW5zaWRlIGBtbS9NYWtlZmlsZWAgb3IgYG1tL0tjb25maWdgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kIHJlZ2FyZGluZyBgaHVnZXRsYi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYlxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT04MD1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXHQmIzQzOz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXG5tbS9NYWtlZmlsZS04Mi1pZmRlZiBDT05GSUdfQ01BXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NzQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywgd2l0aCB0aGUgYm9sZGVkIGhlYWRlciBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIERlcGVuZGVuY3kgV2ViOiBIdWdlIFBhZ2VzIGFuZCBNaWdyYXRpb24qKgoKQWxyaWdodCwgdGhlIHB1enpsZSBiZWdpbnMuIEkgc2VlIHRoYXQgYENPTkZJR19IVUdFVExCRlNgIGlzIGVzc2VudGlhbCwgdGhhdCYjMzk7cyBhIGtleSBwaWVjZS4gTm93LCBJIHJlY2FsbCB0aGF0IGBtbS9taWdyYXRlLmNgIG1ha2VzIHVzZSBvZiBpdC4gVGhhdCBtYWtlcyBzZW5zZSwgbGFyZ2UgcGFnZSBzdXBwb3J0IGFuZCBtaWdyYXRpb24gb2Z0ZW4gZ28gaGFuZC1pbi1oYW5kLiBBaCwgYnV0IHRoYXQgbGVhZHMgbWUgdG8gYW5vdGhlciB0aG91Z2h0LCBhIGNydWNpYWwgZGVwZW5kZW5jeSBxdWVzdGlvbjogRG9lcyB0aGUgY29kZSB3aXRoaW4gYG1tL21pZ3JhdGUuY2AgYWN0dWFsbHkgcmVseSBvbiBgQ09ORklHX01JR1JBVElPTmA/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgSSBuZWVkIHRvIGNvbmZpcm0gYmVmb3JlIG1ha2luZyBhbnkgY29uZmlndXJhdGlvbiBkZWNpc2lvbnMsIGFzIGl0IGhlbHBzIGlkZW50aWZ5IGEgcG90ZW50aWFsIGNhc2NhZGluZyBlZmZlY3Qgb2YgYW55IGNoYW5nZXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBoZWxwIG1lIHNlZSB0aGUgZmxvdyBvZiB0aGUgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTk3PW9iai0kKENPTkZJR19NRU1URVNUKVx0XHQmIzQzOz0gbWVtdGVzdC5vXG5tbS9NYWtlZmlsZTo5ODpvYmotJChDT05GSUdfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZS5vXG5tbS9NYWtlZmlsZS05OS1vYmotJChDT05GSUdfTlVNQSkgJiM0Mzs9IG1lbW9yeS10aWVycy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIERlcGVuZGVuY2llcyBmb3IgTWlncmF0aW9uIFN1cHBvcnQqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX01JR1JBVElPTmAsIEkgc2VlIHRoYXQmIzM5O3MgZXNzZW50aWFsIGZvciB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIG9uLiBOb3csIGEga2V5IHF1ZXN0aW9uIGFyaXNlcyBpbiBteSBtaW5kOiBnaXZlbiB0aGUgY29udGV4dCBvZiBtaWdyYXRpb24sIGRvZXMgdGhpcyBhbHNvIG1hbmRhdGUgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfSFVHRVRMQl9QQUdFYD8gTWlncmF0aW9uIG9mdGVuIGludm9sdmVzIG1vdmluZyBtZW1vcnkgcmVnaW9ucywgYW5kIGh1Z2UgcGFnZXMgY291bGQgZGVmaW5pdGVseSBiZSBwYXJ0IG9mIHRoYXQgZWNvc3lzdGVtLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgb3IgaWYgdGhlcmUmIzM5O3MgYSBkZXBlbmRlbmN5IGxpbmsgSSYjMzk7bSBtaXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoYXQgcmVsYXRpb25zaGlwIGlzIGNyaXRpY2FsIGZvciBhIGNvbXBsZXRlIHBpY3R1cmUsIHNvIGEgcXVpY2sgY2hlY2sgb24gdGhlIHJlbGV2YW50IGNvZGUsIGRvY3VtZW50YXRpb24sIG9yIGhpc3RvcmljYWwgY29udGV4dCBpcyBpbiBvcmRlci4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIEkgbmVlZCB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gYmVmb3JlIEkgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTcwNj1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNzA4LVxubW0vS2NvbmZpZzo3MDk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTcxMC1cdGRlZl9ib29sIG5cbi0tXG5tbS9LY29uZmlnLTcxMi1cdCAgQWxsb3dzIHRoZSBwYWdlYmxvY2tfb3JkZXIgdmFsdWUgdG8gYmUgZHluYW1pYyBpbnN0ZWFkIG9mIGp1c3Qgc3RhbmRhcmRcbm1tL0tjb25maWc6NzEzOlx0ICBIVUdFVExCX1BBR0VfT1JERVIgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgSHVnZVRMQiBwYWdlIHNpemVzIGF2YWlsYWJsZVxubW0vS2NvbmZpZy03MTQtXHQgIG9uIGEgcGxhdGZvcm0uXG4tLVxubW0vS2NvbmZpZz0xMDE0PWNvbmZpZyBQR1RBQkxFX0hBU19IVUdFX0xFQVZFU1xubW0vS2NvbmZpZzoxMDE1Olx0ZGVmX2Jvb2wgVFJBTlNQQVJFTlRfSFVHRVBBR0UgfHwgSFVHRVRMQl9QQUdFXG5tbS9LY29uZmlnLTEwMTYtXG4tLVxubW0vS2NvbmZpZz0xMDIwPWNvbmZpZyBIQVZFX0dJR0FOVElDX0ZPTElPU1xubW0vS2NvbmZpZzoxMDIxOlx0ZGVmX2Jvb2wgKEhVR0VUTEJfUEFHRSBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgfHwgXFxcbm1tL0tjb25maWctMTAyMi1cdFx0IChaT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM1OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIHN1cHBvcnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgZnMvS2NvbmZpZ2AuIFRoYXQgbG9jYXRpb24gaXMgaGlnaGx5IHByb2JhYmxlLCBhcyBmaWxlIHN5c3RlbXMgb2Z0ZW4gaGF2ZSB0aGVpciBvd24gY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZmluZWQgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0b3JpZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgd2hlcmUgYENPTkZJR19IVUdFVExCRlNgIGlzIGxvY2F0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgSFVHRVRMQkZTKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgd291bGQgSSBzdGFydCBpZiBJIHdhbnRlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgc3RhdGUgb2YgYEhVR0VUTEJGU2Agc3VwcG9ydCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uPyYjMzQ7LiBXZWxsLCB0aGUgbG9naWNhbCBmaXJzdCBtb3ZlLCB0aGUgbW9zdCBlZmZpY2llbnQgbWV0aG9kLCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgYGZzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGNhbm9uaWNhbCBwbGFjZSB3aGVyZSBmaWxlc3lzdGVtIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgSFVHRVRMQkZTYCBpcywgdW5kZW5pYWJseSwgYSBmaWxlc3lzdGVtLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBpdC4gVGhlcmUmIzM5O3Mgbm8gbmVlZCB0byB3YW5kZXIgYXJvdW5kIGxvb2tpbmcgaW4gbXVsdGlwbGUgcGxhY2VzOyBgZnMvS2NvbmZpZ2AgaXMgdGhlIG9idmlvdXMgZmlyc3Qgc3RvcC4gSXQgaXMgdGhlIGxvZ2ljYWwgY2hvaWNlLCBkdWUgdG8gaXRzIG9yZ2FuaXphdGlvbiBhbmQgZXN0YWJsaXNoZWQgcG9zaXRpb24gd2l0aGluIHRoZSBzb3VyY2UgdHJlZS4gVGhpcyBhcHByb2FjaCBzYXZlcyB0aW1lIGFuZCBlbnN1cmVzIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYXV0aG9yaXRhdGl2ZSBzb3VyY2UgZm9yIHRoZSBkZWZpbml0aW9uIGFuZCwgdGhlcmVmb3JlLCB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhhdCBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ3Olx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gMjQ4Olx0XHRkZWZfYm9vbCBuXG4gMjQ5Olx0XG4gMjUwOlx0bWVudWNvbmZpZyBIVUdFVExCRlNcbiAyNTE6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gMjUyOlx0XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gMjUzOlx0XHRzZWxlY3QgTUVNRkRfQ1JFQVRFXG4gMjU0Olx0XHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxuIDI1NTpcdFx0aGVscFxuIDI1NjpcdFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXG4gMjU3Olx0XHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcbiAyNTg6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAyNTk6XHRcbiAyNjA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNjE6XHRcbiAyNjI6XHRpZiBIVUdFVExCRlNcbiAyNjM6XHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuIDI2NDpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4gMjY1Olx0XHRkZWZhdWx0IG5cbiAyNjY6XHRcdGRlcGVuZHMgb24gSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE3NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlIFBhZ2UgTWlncmF0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaHVnZSBwYWdlIG1pZ3JhdGlvbiwgYW5kIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgY2xlYXJseSBgSFVHRVRMQkZTYCBhbmQgYE1JR1JBVElPTmAuIFRoZSBjZW50cmFsIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZGlzc2VjdCBhcmUgYG1vdmVfaHVnZXRsYl9zdGF0ZWAgYW5kIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBIb2xkIG9uIGEgc2Vjb25kLCB0aGF0IGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYHN0YXRpY2Agd2l0aGluIGBtbS9taWdyYXRlLmNgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgaXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gYG1tL21pZ3JhdGUuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBpdCYjMzk7cyB1c2VkLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBzb3VyY2UgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jPTEzNTU9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi0tXG5tbS9taWdyYXRlLmMtMTQ3MC0gKi9cbm1tL21pZ3JhdGUuYzoxNDcxOnN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMTQ3Mi1cdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi0tXG5tbS9taWdyYXRlLmM9MTYyOT1zdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTY2Ny1cbm1tL21pZ3JhdGUuYzoxNjY4Olx0XHRcdHJjID0gdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKGdldF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMTY2OS1cdFx0XHRcdFx0XHQgICAgICBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njk4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBtaWdyYXRlX2h1Z2V0bGJzYCoqCgpPa2F5LCBzbyBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBhIHNwZWNpZmljIG1vZHVsZSBvciBmaWxlLCBhbmQgd2UgZG9uJiMzOTt0IGhhdmUgdG8gdHJhY2UgaXRzIGNhbGxzIGZyb20gYW55d2hlcmUgZWxzZS4gR29vZCwgdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duLiBOb3csIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmNhdXNpbmcqIHRoYXQgdW5tYXBwaW5nIGFuZCBtb3ZlbWVudCBvZiBodWdlIHBhZ2VzIHRvIG9jY3VyLiBUbyBkbyB0aGF0LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgKmNhbGxpbmcqIGBtaWdyYXRlX2h1Z2V0bGJzYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBvZiB0aGlzIHByb2Nlc3MgbGllcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3Mgd2hlcmUgYSBodWdlIHBhZ2UgaXMgYmVpbmcgc2hpZnRlZCBhcm91bmQuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIE5VTUEgYmFsYW5jaW5nLCBvciBwZXJoYXBzIGV2ZW4gaG90cGx1Z2dpbmcgb2YgbWVtb3J5LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGZyb20gYG1pZ3JhdGVfaHVnZXRsYnNgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoeSB0aGVzZSBwYWdlIG1pZ3JhdGlvbnMgYXJlIGhhcHBlbmluZy4gS25vd2luZyB0aGUgY2FsbGVycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9odWdldGxicyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MTYxMT1zdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyB7XG4tLVxubW0vbWlncmF0ZS5jLTE2MjgtICovXG5tbS9taWdyYXRlLmM6MTYyOTpzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0xNjMwLVx0XHRcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLS1cbm1tL21pZ3JhdGUuYz0yMDkxPWludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTIxMDYtXG5tbS9taWdyYXRlLmM6MjEwNzpcdHJjX2dhdGhlciA9IG1pZ3JhdGVfaHVnZXRsYnMoZnJvbSwgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbywgcHJpdmF0ZSxcbm1tL21pZ3JhdGUuYy0yMTA4LVx0XHRcdFx0ICAgICBtb2RlLCByZWFzb24sIFx1MDAyNnN0YXRzLCBcdTAwMjZyZXRfZm9saW9zKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIxNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBIdWdldGxiIFBhZ2UgTWlncmF0aW9uKioKCk9rYXksIHNvIGBtaWdyYXRlX3BhZ2VzYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgcGFnZSBtaWdyYXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlLiBCdXQgdG8gcmVhbGx5IGRpZyBpbnRvIHRoZSBodWdldGxiLXNwZWNpZmljIHN0dWZmLCBJIG5lZWQgdG8gem9vbSBpbi4gVGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBoZXJlIGFyZSBjbGVhcmx5IGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGFuZCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC4KCkhhbmcgb24sIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBpcyBpZGVhbCBiZWNhdXNlIEkgY2FuIGZvY3VzIG9uIGl0IGRpcmVjdGx5LiBBbmQgd2hpbGUgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgaXMgc3RhdGljLCBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gdGFyZ2V0IGl0IGp1c3QgZmluZSBhcyBsb25nIGFzIGl04oCZcyBpbiB0aGUga2VybmVsIGltYWdlLiBBaCwgcmlnaHQsIHN5emthbGxlciB1c2VzIGtjb3YsIHdoaWNoIHVzZXMgUEMgdHJhY2tpbmcuIFRoZSBmdW5jdGlvbiBuYW1lIGlzIHJlc29sdmVkIGZyb20gZGVidWcgaW5mbywgc28gaXQmIzM5O3MgYSBub24taXNzdWUuIFNvLCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBpcyBwZXJmZWN0bHkgZmluZSBhcyBhIHRhcmdldC4KCkFsc28sIHRoaW5raW5nIGFib3V0IGl0LCBgbWlncmF0ZV9wYWdlc2AgaXMgYSBiaXQgdG9vIGdlbmVyYWwgc2luY2UgaXQgaGFuZGxlcyAqYWxsKiBwYWdlIG1pZ3JhdGlvbnMuIEZvY3VzaW5nIG9uIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgLCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCwgYW5kIGBtaWdyYXRlX2h1Z2V0bGJzYCB3aWxsIGJlIG11Y2ggbW9yZSBlZmZpY2llbnQgZm9yIHRoaXMgcGFydGljdWxhciB0YXNrLgoKTm93LCBhIHF1aWNrIGNoZWNrOiBhcmUgdGhlcmUgYW55IG90aGVyIGNhbGxlcnMgb2YgYG1vdmVfaHVnZXRsYl9zdGF0ZWA/IE5vcGUsIHRoZSBncmVwIG91dHB1dCBjbGVhcmx5IHNob3dlZCBpdCYjMzk7cyBvbmx5IGNhbGxlZCB3aXRoaW4gYG1tL21pZ3JhdGUuY2AgaW5zaWRlIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBTbyB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgZm9yIHBlYWNlIG9mIG1pbmQsIGlmIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIHN0YXRpYyBvciBub3QuIE9rYXksIGluIGBtbS9odWdldGxiLmNgOiBgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKWAuIE5vcGUsIGl04oCZcyBub3Qgc3RhdGljLiBHcmVhdCwgc28gSSBoYXZlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkOiBgSFVHRVRMQkZTYCBhbmQgYE1JR1JBVElPTmAuCgpXYWl0LCBpc24mIzM5O3QgYE1JR1JBVElPTmAgYSBib29sZWFuIGNvbmZpZz8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGBtbS9LY29uZmlnYCBqdXN0IHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk1LVxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTM1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCBJIGNhbiBtYWtlIG9mIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgdGhlIGBNSUdSQVRJT05gIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBNSUdSQVRJT05gIGlzIGEgYm9vbGVhbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IHdoYXQmIzM5O3Mgc3RyYW5nZSBpcyB0aGF0IGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gaGF2ZSBhIHByb21wdCBhc3NvY2lhdGVkIHdpdGggaXQuIFRoYXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IGJlaW5nIHNlbGVjdGVkIG9yIGVuYWJsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBwcm9iYWJseSBhbiBpbXBvcnRhbnQga2V5IHBpZWNlIG9mIGxvZ2ljIHRoYXQmIzM5O3MgYmVlbiBmYWN0b3JlZCBvdXQgZm9yIG1vZHVsYXJpdHkuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hpY2gqIG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBgTUlHUkFUSU9OYCB0byB0cnVlIG9yIGZhbHNlLiBUaW1lIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaXRzIHRyaWdnZXJpbmcgY29uZGl0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHRoaXMgYm9vbGVhbiBpcyBnZXR0aW5nIGZsaXBwZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBNSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01OTE9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcbi0tXG5tbS9LY29uZmlnLTU5NC1cdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWc6NTk1Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy01OTYtXG4tLVxubW0vS2NvbmZpZz02NTQ9Y29uZmlnIENPTVBBQ1RJT05cbi0tXG5tbS9LY29uZmlnLTY1Ni1cdGRlZmF1bHQgeVxubW0vS2NvbmZpZzo2NTc6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY1OC1cdGRlcGVuZHMgb24gTU1VXG4tLVxubW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02ODgtXHRkZXBlbmRzIG9uIE5VTUEgXHUwMDI2XHUwMDI2IE1NVVxubW0vS2NvbmZpZzo2ODk6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY5MC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTEwNjc9Y29uZmlnIENNQVxuLS1cbm1tL0tjb25maWctMTA2OS1cdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnOjEwNzA6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTEwNzEtXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYyMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEh1Z2UgUGFnZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBDT01QQUNUSU9OYCByZWxhdGVzIHRvIGBNSUdSQVRJT05gIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIHRleHQgaW5kaWNhdGVzIHRoYXQgYENPTVBBQ1RJT05gIHNlbGVjdHMgYE1JR1JBVElPTmAsIGFuZCBzaW5jZSBgQ09NUEFDVElPTmAgc2VlbXMgdG8gYmUgdGhlIGRlZmF1bHQgc2V0dGluZyAoaW1wbGllZCBieSAmIzM5O3kmIzM5OyksIEkmIzM5O20gaW5mZXJyaW5nIHRoYXQgYE1JR1JBVElPTmAgaXMgdmVyeSBsaWtlbHkgZW5hYmxlZCBieSBkZWZhdWx0IGFzIHdlbGwuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uCgpOb3csIG15IGZvY3VzIHNoaWZ0cyB0byBgSFVHRVRMQkZTYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGl0JiMzOTtzIGEgYG1lbnVjb25maWdgIG9wdGlvbi4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGF0IGl0cyBjb25maWd1cmF0aW9uIHN0YXRlIHNob3VsZCBiZSBkb2N1bWVudGVkIHdpdGhpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNlY3Rpb24uIEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhpcyBpcyBhY2N1cmF0ZSwgYW5kIGl0IHNlZW1zIHRvIG1ha2Ugc2Vuc2Ugd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlLgoKVG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcywgc3VjaCBhcyBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIEkgYWx3YXlzIGxpa2UgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuCgpGaW5hbGx5LCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIGBmcy9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBgSFVHRVRMQkZTYC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBhbmQgYW55IGRlcGVuZGVuY2llcy4gVGhhdCBzaG91bGQgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBpcyBhbGwgbGlua2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTcwNj1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNzA4LVxubW0vS2NvbmZpZzo3MDk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTcxMC1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwOTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBMb2NhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBzb21ldGhpbmcga2VybmVsLXJlbGF0ZWQsIGxpa2VseSBtZW1vcnkgbWFuYWdlbWVudCBiYXNlZCBvbiB0aGUgbmFtZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYEhVR0VUTEJfUEFHRWAgaXMgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBuYXR1cmUsIGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiBBbmQgYmluZ28sIHRoZSBkZWZpbml0aW9uIHNlZW1zIHRvIGJlIGluIGBmcy9LY29uZmlnYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgbG9jYXRpb247IG9mdGVuLCBzZXR0aW5ncyByZWxhdGVkIHRvIGZpbGUgc3lzdGVtcyBhbmQsIGJ5IGV4dGVuc2lvbiwgbWVtb3J5IHVzYWdlIHBhdHRlcm5zIHRoZXkgbWlnaHQgc3VwcG9ydCwgZW5kIHVwIHRoZXJlLiBUaGlzIGlzbiYjMzk7dCBzdXJwcmlzaW5nLCBidXQgaXQmIzM5O3MgZ29vZCB0byBjb25maXJtLiBJdCBoZWxwcyBtZSB0byBjb250ZXh0dWFsaXplIHRoZSBzZXR0aW5nIGFuZCB3aGVyZSB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb2RlLiBOb3cgSSBjYW4gbW92ZSBmb3J3YXJkLCBjb25maWRlbnQgdGhhdCBJIGtub3cgd2hlcmUgdGhlIHNldHRpbmcgb3JpZ2luYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUwNAoJCQkJCQkJb3V0cHV0OiAxMzQKCQkJCQkJCXRob3VnaHRzOiA3ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIE1pZ3JhdGlvbiBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBgSFVHRVRMQl9QQUdFYCBpcyBsaW5rZWQgdG8gYEhVR0VUTEJGU2AsIHRoYXQmIzM5O3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBgSFVHRVRMQkZTYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBMZXQgbWUgYnJlYWsgZG93biB0aGUgZnV6emluZyBzdHJhdGVneSBiYXNlZCBvbiB0aGlzIHBhdGNoLgoKVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IGl0IGZpeGVzIGEgYnVnIGluIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgLiBUaGUgb3JpZ2luYWwgY29kZSBwcmVtYXR1cmVseSBleGl0ZWQgaWYgYG5ld19uaWRgIGFuZCBgb2xkX25pZGAgd2VyZSB0aGUgc2FtZSwgbWlzc2luZyB0aGUgY3J1Y2lhbCBzdGVwcyBvZiBzZXR0aW5nIHRoZSBuZXcgZm9saW8gYXMgbWlncmF0YWJsZSBhbmQgYWRkaW5nIGl0IHRvIHRoZSBhY3RpdmUgbGlzdC4gVGhhdCYjMzk7cyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBodWdlIHBhZ2VzIGFyZSBtaWdyYXRlZC4KClRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZyBhcmUgYG1vdmVfaHVnZXRsYl9zdGF0ZWAsIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLCBhbmQgYG1pZ3JhdGVfaHVnZXRsYnNgLgoKTm93IGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBXZSBuZWVkIHRvIGVuYWJsZSBgSFVHRVRMQkZTYC4gYE1JR1JBVElPTmAgaXMgYWxzbyByZWxldmFudC4gSSByZWNhbGwgYE1JR1JBVElPTmAgYmVpbmcgc2VsZWN0ZWQgYnkgYENPTVBBQ1RJT05gLCB3aGljaCBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdC4gU2luY2UgdGhlIHByb21wdCBzYXlzICYjMzQ7ZXhwbGljaXRseSBlbmFibGVkJiMzNDssIGl0JiMzOTtzIHByb2JhYmx5IGJlc3QgdG8gaW5jbHVkZSBib3RoLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgdGhlIHRlc3QgY29uZmlndXJhdGlvbiBpcyBhbGlnbmVkIHdpdGggdGhlIGNvZGUgYmVpbmcgbW9kaWZpZWQuCgpIb3dldmVyLCBgTUlHUkFUSU9OYCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgYSBkaXJlY3QgcHJvbXB0IGluIHRoZSBgLmNvbmZpZ2AgZmlsZS4gSXQmIzM5O3Mgc2VsZWN0ZWQgaW1wbGljaXRseS4gVGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uIGdlbmVyYXRvciBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhpcyBzZWxlY3Rpb24gYXV0b21hdGljYWxseSwgb3IgaXQgbWlnaHQganVzdCBlbmFibGUgYENPTVBBQ1RJT05gLiBJJiMzOTtsbCBpbmNsdWRlIGBNSUdSQVRJT05gIGFueXdheSwgYW5kIHNlZSBob3cgdGhlIGNvbmZpZyBnZW5lcmF0b3IgaGFuZGxlcyBpdC4KCkkmIzM5O3ZlIHJlLXJlYWQgdGhlIHBhdGNoIHRvIGJlIHN1cmU6CgpgYGBjCi0JCWlmIChuZXdfbmlkID09IG9sZF9uaWQpCi0JCQlyZXR1cm47Ci0JCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwotCQlpZiAoaC0mZ3Q7c3VycGx1c19odWdlX3BhZ2VzX25vZGVbb2xkX25pZF0pIHsKLQkJCWgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdLS07Ci0JCQloLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXdfbmlkXSYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAobmV3X25pZCAhPSBvbGRfbmlkKSB7CiYjNDM7CQkJc3Bpbl9sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiYjNDM7CQkJaWYgKGgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7CiYjNDM7CQkJCWgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdLS07CiYjNDM7CQkJCWgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25ld19uaWRdJiM0MzsmIzQzOzsKJiM0MzsJCQl9CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAkJfQotCQlzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwpgYGAKClllcywgaXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93LiBUaGUgb2xkIGNvZGUgcmV0dXJuZWQgZWFybHkgaWYgYG5ld19uaWQgPT0gb2xkX25pZGAuIE5vdywgaXQgc2tpcHMgdGhlIGBpZmAgYmxvY2suIEFmdGVyIHRoZSBpZiBibG9jaywgaXQgZW5hYmxlcyBgbWlncmF0YWJsZWAgZm9yIHRoZSBuZXcgZm9saW8uCgpBbmQgdGhlIHN1YnNlcXVlbnQgY29kZToKCmBgYGMKCS8qCgkgKiBPdXIgb2xkIGZvbGlvIGlzIGlzb2xhdGVkIGFuZCBoYXMgJiMzNDttaWdyYXRhYmxlJiMzNDsgY2xlYXJlZCB1bnRpbCBpdAoJICogaXMgcHV0YmFjay4gQXMgbWlncmF0aW9uIHN1Y2NlZWRlZCwgc2V0IHRoZSBuZXcgZm9saW8gJiMzNDttaWdyYXRhYmxlJiMzNDsKCSAqIGFuZCBhZGQgaXQgdG8gdGhlIGFjdGl2ZSBsaXN0LgoJICovCglzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKCWZvbGlvX3NldF9odWdldGxiX21pZ3JhdGFibGUobmV3X2ZvbGlvKTsKCWxpc3RfbW92ZV90YWlsKCZhbXA7bmV3X2ZvbGlvLSZndDtscnUsICZhbXA7KGZvbGlvX2hzdGF0ZShuZXdfZm9saW8pKS0mZ3Q7aHVnZXBhZ2VfYWN0aXZlbGlzdCk7CglzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwpgYGAKClRoaXMgZW5zdXJlcyB0aGUgbmV3bHkgbWlncmF0ZWQgZm9saW8gaXMgcHJvcGVybHkgZmxhZ2dlZCBhcyBtaWdyYXRhYmxlIGFuZCBhZGRlZCB0byB0aGUgYWN0aXZlIGxpc3QsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBjaGFuZ2UuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW92ZV9odWdldGxiX3N0YXRlJiMzNDssCiAgICAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2h1Z2V0bGJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSBpZiBgbmV3X25pZCA9PSBvbGRfbmlkYCwgc2tpcHBpbmcgdGhlIGxvZ2ljIHRvIHNldCB0aGUgbmV3IGZvbGlvIGFzIG1pZ3JhdGFibGUgYW5kIGFkZGluZyBpdCB0byB0aGUgYWN0aXZlIGxpc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBodWdlIHBhZ2UgbWlncmF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW92ZV9odWdldGxiX3N0YXRlJiMzNDssCiAgICAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2h1Z2V0bGJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSBpZiBgbmV3X25pZCA9PSBvbGRfbmlkYCwgc2tpcHBpbmcgdGhlIGxvZ2ljIHRvIHNldCB0aGUgbmV3IGZvbGlvIGFzIG1pZ3JhdGFibGUgYW5kIGFkZGluZyBpdCB0byB0aGUgYWN0aXZlIGxpc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBodWdlIHBhZ2UgbWlncmF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTE6MzQuNzcwODUxNzkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2OTU5ODQwNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW92ZV9odWdldGxiX3N0YXRlXCIsXG4gICAgXCJ1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VcIixcbiAgICBcIm1pZ3JhdGVfaHVnZXRsYnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9odWdldGxiX3N0YXRlYCB3aGVyZSBpdCB3b3VsZCByZXR1cm4gZWFybHkgaWYgYG5ld19uaWQgPT0gb2xkX25pZGAsIHNraXBwaW5nIHRoZSBsb2dpYyB0byBzZXQgdGhlIG5ldyBmb2xpbyBhcyBtaWdyYXRhYmxlIGFuZCBhZGRpbmcgaXQgdG8gdGhlIGFjdGl2ZSBsaXN0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaHVnZSBwYWdlIG1pZ3JhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTE6MzQuNzcwODU5MDkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTE3MDcwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMWFlMjZlOTcwMzkzYTVkYTE4OGJhMzA1YTJhOTFlNzYyYTkzNjlkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMTk6MTE6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXFxuaW5kZXggNTcxMjEyYjgwODM1ZWMuLmNhZmFkZmRiNjNjMGU3IDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC03MjExLDE0ICs3MjExLDE0IEBAIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlXFxuIFxcdFxcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHBlci1ub2RlIHN1cnBsdXMgc3RhdGVcXG4gXFx0XFx0ICogd2hlbiB3ZSBkbyBub3QgY3Jvc3MgdGhlIG5vZGUuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAobmV3X25pZCA9PSBvbGRfbmlkKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdFxcdGlmIChoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXSkge1xcbi1cXHRcXHRcXHRoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tO1xcbi1cXHRcXHRcXHRoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXdfbmlkXSsrO1xcbitcXHRcXHRpZiAobmV3X25pZCAhPSBvbGRfbmlkKSB7XFxuK1xcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuK1xcdFxcdFxcdGlmIChoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXSkge1xcbitcXHRcXHRcXHRcXHRoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tO1xcbitcXHRcXHRcXHRcXHRoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXdfbmlkXSsrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjExOjM1LjM4MzUzMDczNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ2MzQ3MTUxMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW92ZV9odWdldGxiX3N0YXRlXCIsXG4gICAgXCJ1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VcIixcbiAgICBcIm1pZ3JhdGVfaHVnZXRsYnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9odWdldGxiX3N0YXRlYCB3aGVyZSBpdCB3b3VsZCByZXR1cm4gZWFybHkgaWYgYG5ld19uaWQgPT0gb2xkX25pZGAsIHNraXBwaW5nIHRoZSBsb2dpYyB0byBzZXQgdGhlIG5ldyBmb2xpbyBhcyBtaWdyYXRhYmxlIGFuZCBhZGRpbmcgaXQgdG8gdGhlIGFjdGl2ZSBsaXN0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaHVnZSBwYWdlIG1pZ3JhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMWFlMjZlOTcwMzkzYTVkYTE4OGJhMzA1YTJhOTFlNzYyYTkzNjlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxOToxMTozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNTcxMjEyYjgwODM1ZWMuLmNhZmFkZmRiNjNjMGU3IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC03MjExLDE0ICs3MjExLDE0IEBAIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlXG4gXHRcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHBlci1ub2RlIHN1cnBsdXMgc3RhdGVcbiBcdFx0ICogd2hlbiB3ZSBkbyBub3QgY3Jvc3MgdGhlIG5vZGUuXG4gXHRcdCAqL1xuLVx0XHRpZiAobmV3X25pZCA9PSBvbGRfbmlkKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0XHRpZiAoaC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXSkge1xuLVx0XHRcdGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbb2xkX25pZF0tLTtcbi1cdFx0XHRoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25ld19uaWRdKys7XG4rXHRcdGlmIChuZXdfbmlkICE9IG9sZF9uaWQpIHtcbitcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4rXHRcdFx0aWYgKGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbb2xkX25pZF0pIHtcbitcdFx0XHRcdGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbb2xkX25pZF0tLTtcbitcdFx0XHRcdGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbbmV3X25pZF0rKztcbitcdFx0XHR9XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdH1cbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHR9XG4gXG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTE6MzUuMzgzNTMzNjc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI0NDc5MTM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL2h1Z2V0bGIuY2AsIHNwZWNpZmljYWxseSB0aGUgYG1vdmVfaHVnZXRsYl9zdGF0ZWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBjb25kaXRpb25hbCBjaGVjayBpbnZvbHZpbmcgYG5ld19uaWRgIGFuZCBgb2xkX25pZGAuIEJlZm9yZSwgdGhlIGNvZGUgd291bGQgaW1tZWRpYXRlbHkgcmV0dXJuIGlmIHRoZSBuZXcgbm9kZSBJRCB3YXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6XG5cbmBgYGNcblx0XHRpZiAobmV3X25pZCA9PSBvbGRfbmlkKVxuXHRcdFx0cmV0dXJuO1xuYGBgXG5cbk5vdywgdGhhdCdzIGJlZW4gZmxpcHBlZDpcblxuYGBgY1xuXHRcdGlmIChuZXdfbmlkICE9IG9sZF9uaWQpXG5gYGBcblxuVGhlIG9sZCBsb2dpYyBpbW1lZGlhdGVseSBleGl0ZWQgdGhlIGZ1bmN0aW9uIGlmIHRoZSBub2RlIElEcyB3ZXJlIHRoZSBzYW1lLiBUaGUgbmV3IGxvZ2ljIHByb2NlZWRzIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlIGJsb2NrIG9ubHkgaWYgdGhleSBhcmUgZGlmZmVyZW50LlxuXG5UaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBwYXJ0IG9mIHRoaXMgaXMgdGhhdCB0aGUgb3JpZ2luYWwgY2hlY2sgd2FzIGRlc2lnbmVkIHRvIGF2b2lkIGV4ZWN1dGlvbiBvZiB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24gaWYgdGhlIG5vZGUgSURzIHdlcmUgdGhlIHNhbWUuIFRoZSBjaGFuZ2Ugbm93IGFsbG93cyBleGVjdXRpb24gb2YgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uIGV2ZW4gaWYgdGhlIG5vZGUgSURzIGFyZSB0aGUgc2FtZS5cblxuRXNzZW50aWFsbHksIGJ5IHJlbW92aW5nIHRoZSBgcmV0dXJuYCwgdGhlIGNvZGUgbm93IGFsd2F5cyBwcm9jZWVkcyB0byB1cGRhdGUgdGhlIGBzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZWAgYXJyYXkgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBOVU1BIG5vZGUgY2hhbmdlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gQmVmb3JlLCB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24gd2FzIHNraXBwZWQgdW5kZXIgYSBzcGVjaWZpYyBjb25kaXRpb24uIE5vdywgdGhhdCBza2lwIGlzIHJlbW92ZWQuIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIGhvdyBgbW92ZV9odWdldGxiX3N0YXRlYCBpcyB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgd2hldGhlciB0aGlzIGlzIGEgYnVnIGZpeCBvciBhbiBpbnRlbnRpb25hbCBjaGFuZ2UgaW4gYmVoYXZpb3IuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBzaXRlcyB0byBzZWUgd2hhdCB0aGUgaW1wYWN0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTE6NDMuNjI4MzI3NDkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MzMxODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX2h1Z2V0bGJfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz03MTc2PXZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtNzE4NC1cXG5tbS9odWdldGxiLmM6NzE4NTp2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXFxubW0vaHVnZXRsYi5jLTcxODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxMTo0NC4yMTE2NTE2ODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYyOTkyNzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGluIGBtbS9odWdldGxiLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGluIHRoZSBodWdldGxiIGltcGxlbWVudGF0aW9uLiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgdHJhbnNmZXIgb2YgSHVnZVRMQiBzdGF0ZSB3aGVuLCBmb3IgZXhhbXBsZSwgYSBIdWdlVExCIHBhZ2UgbmVlZHMgdG8gYmUgbW92ZWQgYmV0d2VlbiBkaWZmZXJlbnQgTlVNQSBub2RlcyBvciBzb21lIG90aGVyIHNpbWlsYXIgb3BlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICp3aGF0KiBzdGF0ZSBpcyBiZWluZyBtb3ZlZCBhbmQgKmhvdyogaXQncyBoYW5kbGVkLiBJcyBpdCBqdXN0IHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIG9yIGFyZSB0aGVyZSBtb3JlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBsaWtlIG1ldGFkYXRhLCBhY2NvdW50aW5nIGluZm9ybWF0aW9uLCBvciBldmVuIHRoZSBwYWdlIGl0c2VsZj8gSXTigJlzIGNydWNpYWwgdG8ga25vdyBpZiB0aGlzIG9wZXJhdGlvbiBpbnZvbHZlcyBhbnkgcG90ZW50aWFsIGRhdGEgbG9zcyBvciBpbmNvbnNpc3RlbmN5LCB3aGljaCByZXF1aXJlcyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiBtZW1vcnkgbWFuYWdlbWVudCBpbiBhIG11bHRpLXRocmVhZGVkLCBOVU1BIGF3YXJlIGVudmlyb25tZW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNyaXRpY2FsIHNlY3Rpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBhbGdvcml0aG0gYmVpbmcgdXNlZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRoZSBtb3ZlLiBUaGUgZm9jdXMgd2lsbCBiZSB0byBzZWUgaWYgdGhlcmUgYXJlIHJhY2UgY29uZGl0aW9ucyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gcHJldmlvdXMgcmV2aWV3cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjExOjQ3Ljc3NDY0ODkyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4Nzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzE4NSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcxODU6XFx0dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxcbjcxODY6XFx0e1xcbjcxODc6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pO1xcbjcxODg6XFx0XFxuNzE4OTpcXHRcXHRodWdldGxiX2Nncm91cF9taWdyYXRlKG9sZF9mb2xpbywgbmV3X2ZvbGlvKTtcXG43MTkwOlxcdFxcdGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihuZXdfZm9saW8sIHJlYXNvbik7XFxuNzE5MTpcXHRcXG43MTkyOlxcdFxcdC8qXFxuNzE5MzpcXHRcXHQgKiB0cmFuc2ZlciB0ZW1wb3Jhcnkgc3RhdGUgb2YgdGhlIG5ldyBodWdldGxiIGZvbGlvLiBUaGlzIGlzXFxuNzE5NDpcXHRcXHQgKiByZXZlcnNlIHRvIG90aGVyIHRyYW5zaXRpb25zIGJlY2F1c2UgdGhlIG5ld3BhZ2UgaXMgZ29pbmcgdG9cXG43MTk1OlxcdFxcdCAqIGJlIGZpbmFsIHdoaWxlIHRoZSBvbGQgb25lIHdpbGwgYmUgZnJlZWQgc28gaXQgdGFrZXMgb3ZlclxcbjcxOTY6XFx0XFx0ICogdGhlIHRlbXBvcmFyeSBzdGF0dXMuXFxuNzE5NzpcXHRcXHQgKlxcbjcxOTg6XFx0XFx0ICogQWxzbyBub3RlIHRoYXQgd2UgaGF2ZSB0byB0cmFuc2ZlciB0aGUgcGVyLW5vZGUgc3VycGx1cyBzdGF0ZVxcbjcxOTk6XFx0XFx0ICogaGVyZSBhcyB3ZWxsIG90aGVyd2lzZSB0aGUgZ2xvYmFsIHN1cnBsdXMgY291bnQgd2lsbCBub3QgbWF0Y2hcXG43MjAwOlxcdFxcdCAqIHRoZSBwZXItbm9kZSdzLlxcbjcyMDE6XFx0XFx0ICovXFxuNzIwMjpcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3RlbXBvcmFyeShuZXdfZm9saW8pKSB7XFxuNzIwMzpcXHRcXHRcXHRpbnQgb2xkX25pZCA9IGZvbGlvX25pZChvbGRfZm9saW8pO1xcbjcyMDQ6XFx0XFx0XFx0aW50IG5ld19uaWQgPSBmb2xpb19uaWQobmV3X2ZvbGlvKTtcXG43MjA1OlxcdFxcbjcyMDY6XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfdGVtcG9yYXJ5KG9sZF9mb2xpbyk7XFxuNzIwNzpcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX3RlbXBvcmFyeShuZXdfZm9saW8pO1xcbjcyMDg6XFx0XFxuNzIwOTpcXHRcXG43MjEwOlxcdFxcdFxcdC8qXFxuNzIxMTpcXHRcXHRcXHQgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHRyYW5zZmVyIHRoZSBwZXItbm9kZSBzdXJwbHVzIHN0YXRlXFxuNzIxMjpcXHRcXHRcXHQgKiB3aGVuIHdlIGRvIG5vdCBjcm9zcyB0aGUgbm9kZS5cXG43MjEzOlxcdFxcdFxcdCAqL1xcbjcyMTQ6XFx0XFx0XFx0aWYgKG5ld19uaWQgIT0gb2xkX25pZCkge1xcbjcyMTU6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG43MjE2OlxcdFxcdFxcdFxcdGlmIChoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXSkge1xcbjcyMTc6XFx0XFx0XFx0XFx0XFx0aC1cXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbb2xkX25pZF0tLTtcXG43MjE4OlxcdFxcdFxcdFxcdFxcdGgtXFx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25ld19uaWRdKys7XFxuNzIxOTpcXHRcXHRcXHRcXHR9XFxuNzIyMDpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuNzIyMTpcXHRcXHRcXHR9XFxuNzIyMjpcXHRcXHR9XFxuNzIyMzpcXHRcXG43MjI0OlxcdFxcdC8qXFxuNzIyNTpcXHRcXHQgKiBPdXIgb2xkIGZvbGlvIGlzIGlzb2xhdGVkIGFuZCBoYXMgXFxcIm1pZ3JhdGFibGVcXFwiIGNsZWFyZWQgdW50aWwgaXRcXG43MjI2OlxcdFxcdCAqIGlzIHB1dGJhY2suIEFzIG1pZ3JhdGlvbiBzdWNjZWVkZWQsIHNldCB0aGUgbmV3IGZvbGlvIFxcXCJtaWdyYXRhYmxlXFxcIlxcbjcyMjc6XFx0XFx0ICogYW5kIGFkZCBpdCB0byB0aGUgYWN0aXZlIGxpc3QuXFxuNzIyODpcXHRcXHQgKi9cXG43MjI5OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuNzIzMDpcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9taWdyYXRhYmxlKG5ld19mb2xpbyk7XFxuNzIzMTpcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2bmV3X2ZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjYoZm9saW9faHN0YXRlKG5ld19mb2xpbykpLVxcdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcXG43MjMyOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG43MjMzOlxcdH1cXG43MjM0OlxcdFxcbjcyMzU6XFx0LypcXG43MjM2OlxcdCAqIElmIEB0YWtlX2xvY2tzIGlzIGZhbHNlLCB0aGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgbm8gY29uY3VycmVudCBwYWdlIHRhYmxlXFxuNzIzNzpcXHQgKiBhY2Nlc3MgY2FuIGhhcHBlbiAoZXhjZXB0IGZvciBndXBfZmFzdCgpIGFuZCBoYXJkd2FyZSBwYWdlIHdhbGtzKS5cXG43MjM4OlxcdCAqIElmIEB0YWtlX2xvY2tzIGlzIHRydWUsIHdlIHRha2UgdGhlIGh1Z2V0bGIgVk1BIGxvY2sgKHRvIGxvY2sgb3V0IHRoaW5ncyBsaWtlXFxuNzIzOTpcXHQgKiBjb25jdXJyZW50IHBhZ2UgZmF1bHQgaGFuZGxpbmcpIGFuZCB0aGUgZmlsZSBybWFwIGxvY2suXFxuNzI0MDpcXHQgKi9cXG43MjQxOlxcdHN0YXRpYyB2b2lkIGh1Z2V0bGJfdW5zaGFyZV9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjcyNDI6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG43MjQzOlxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLFxcbjcyNDQ6XFx0XFx0XFx0XFx0XFx0ICAgYm9vbCB0YWtlX2xvY2tzKVxcbjcyNDU6XFx0e1xcbjcyNDY6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcXG43MjQ3OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3ogPSBodWdlX3BhZ2Vfc2l6ZShoKTtcXG43MjQ4OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVxcdTAwM2V2bV9tbTtcXG43MjQ5OlxcdFxcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuNzI1MDpcXHRcXHRzdHJ1Y3QgbW11X2dhdGhlciB0bGI7XFxuNzI1MTpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XFxuNzI1MjpcXHRcXHRzcGlubG9ja190ICpwdGw7XFxuNzI1MzpcXHRcXHRwdGVfdCAqcHRlcDtcXG43MjU0OlxcdFxcbjcyNTU6XFx0XFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKSlcXG43MjU2OlxcdFxcdFxcdHJldHVybjtcXG43MjU3OlxcdFxcbjcyNTg6XFx0XFx0aWYgKHN0YXJ0IFxcdTAwM2U9IGVuZClcXG43MjU5OlxcdFxcdFxcdHJldHVybjtcXG43MjYwOlxcdFxcbjcyNjE6XFx0XFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKTtcXG43MjYyOlxcdFxcdHRsYl9nYXRoZXJfbW11X3ZtYShcXHUwMDI2dGxiLCB2bWEpO1xcbjcyNjM6XFx0XFxuNzI2NDpcXHRcXHQvKlxcbjcyNjU6XFx0XFx0ICogTm8gbmVlZCB0byBjYWxsIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSgpLCBiZWNhdXNlXFxuNzI2NjpcXHRcXHQgKiB3ZSBoYXZlIGFscmVhZHkgZG9uZSB0aGUgUFVEX1NJWkUgYWxpZ25tZW50LlxcbjcyNjc6XFx0XFx0ICovXFxuNzI2ODpcXHRcXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIG1tLFxcbjcyNjk6XFx0XFx0XFx0XFx0XFx0c3RhcnQsIGVuZCk7XFxuNzI3MDpcXHRcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbjcyNzE6XFx0XFx0aWYgKHRha2VfbG9ja3MpIHtcXG43MjcyOlxcdFxcdFxcdGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTtcXG43MjczOlxcdFxcdFxcdGlfbW1hcF9sb2NrX3dyaXRlKHZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtcXG43Mjc0OlxcdFxcdH0gZWxzZSB7XFxuNzI3NTpcXHRcXHRcXHRpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuNzI3NjpcXHRcXHR9XFxuNzI3NzpcXHRcXHRmb3IgKGFkZHJlc3MgPSBzdGFydDsgYWRkcmVzcyBcXHUwMDNjIGVuZDsgYWRkcmVzcyArPSBQVURfU0laRSkge1xcbjcyNzg6XFx0XFx0XFx0cHRlcCA9IGh1Z2V0bGJfd2Fsayh2bWEsIGFkZHJlc3MsIHN6KTtcXG43Mjc5OlxcdFxcdFxcdGlmICghcHRlcClcXG43MjgwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjcyODE6XFx0XFx0XFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCBtbSwgcHRlcCk7XFxuNzI4MjpcXHRcXHRcXHRfX2h1Z2VfcG1kX3Vuc2hhcmUoXFx1MDAyNnRsYiwgdm1hLCBhZGRyZXNzLCBwdGVwLCB0YWtlX2xvY2tzKTtcXG43MjgzOlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuNzI4NDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjExOjQ3Ljc3NTAzOTIwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4ODE3OTg2NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyaXRpY2FsIENvZGUgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IG9sZCBDIGNvZGUgc25pcHBldDpcbmBgYGNcblx0XHRpZiAobmV3X25pZCA9PSBvbGRfbmlkKVxuXHRcdFx0cmV0dXJuO1xuXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcblx0XHRpZiAoaC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXSkge1xuXHRcdFx0aC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tO1xuXHRcdFx0aC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXdfbmlkXSsrO1xuXHRcdH1cblx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbmBgYFxuaW1tZWRpYXRlbHkgZmxhZ2dlZCBzb21ldGhpbmcuIFRoZSBlYXJseSByZXR1cm4gaWYgYG5ld19uaWRgIGVxdWFscyBgb2xkX25pZGAgaXMgdGhlIGN1bHByaXQuIFRoYXQgY29uZGl0aW9uYWwgc2hvcnQtY2lyY3VpdHMgdGhlIHN1YnNlcXVlbnQgY3J1Y2lhbCBjb2RlOlxuYGBgY1xuXHQvKlxuXHQgKiBPdXIgb2xkIGZvbGlvIGlzIGlzb2xhdGVkIGFuZCBoYXMgXCJtaWdyYXRhYmxlXCIgY2xlYXJlZCB1bnRpbCBpdFxuXHQgKiBpcyBwdXRiYWNrLiBBcyBtaWdyYXRpb24gc3VjY2VlZGVkLCBzZXQgdGhlIG5ldyBmb2xpbyBcIm1pZ3JhdGFibGVcIlxuXHQgKiBhbmQgYWRkIGl0IHRvIHRoZSBhY3RpdmUgbGlzdC5cblx0ICovXG5cdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcblx0Zm9saW9fc2V0X2h1Z2V0bGJfbWlncmF0YWJsZShuZXdfZm9saW8pO1xuXHRsaXN0X21vdmVfdGFpbChcdTAwMjZuZXdfZm9saW8tXHUwMDNlbHJ1LCBcdTAwMjYoZm9saW9faHN0YXRlKG5ld19mb2xpbykpLVx1MDAzZWh1Z2VwYWdlX2FjdGl2ZWxpc3QpO1xuXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbmBgYFxuVGhhdCBtZWFucywgb24gYSBub2RlIG1pZ3JhdGlvbiwgaWYgdGhlIG5ldyBub2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgbm9kZSwgdGhlIGNvZGUgd291bGQgc2tpcCBzZXR0aW5nIHRoZSBmb2xpbyB0byBgbWlncmF0YWJsZWAgYW5kIGFkZGluZyBpdCB0byB0aGUgYWN0aXZlIGxpc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1Zy4gTWlncmF0aW9uIHN1Y2NlZWRzIGJ1dCBpcyBub3QgcHJvcGVybHkgcmVjb3JkZWQuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyBmdXp6aW5nIHRvIGJlIGNhdWdodC4gSXQgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBpcyB3b3J0aCBhIGRlZGljYXRlZCB0ZXN0IGNhc2UuXG5cblRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgbW92ZV9odWdldGxiX3N0YXRlYCwgSSBiZXR0ZXIgY2hlY2sgd2hlcmUgaXQgaXMgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgYnVnIGNhbiBiZSByZXByb2R1Y2VkLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIG9yIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3YWl0IGl0J3MgYSBnbG9iYWwgZnVuY3Rpb24gaW4gYG1tL2h1Z2V0bGIuY2AuIFRoYXQgbWVhbnMgdGhlIHNjb3BlIG9mIHRoaXMgYnVnIGlzIGxhcmdlciB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQuIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgaXQncyBjYWxsZWQgdG8gYnVpbGQgYW4gYXR0YWNrIHZlY3Rvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjEyOjU2LjU5MzAzMTkyNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTM3MDI4MTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdmVfaHVnZXRsYl9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTU2PXZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjE1Nzp2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTE1OC12b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NDIyPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQyNS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo0MjY6c3RhdGljIGlubGluZSB2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00MjctXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXFxuLS1cXG5tbS9odWdldGxiLmM9NzE3Nj12b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTcxODQtXFxubW0vaHVnZXRsYi5jOjcxODU6dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxcbm1tL2h1Z2V0bGIuYy03MTg2LXtcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNDcxPXN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTU1Ni1cXHRpZiAoIXJjKSB7XFxubW0vbWlncmF0ZS5jOjE1NTc6XFx0XFx0bW92ZV9odWdldGxiX3N0YXRlKHNyYywgZHN0LCByZWFzb24pO1xcbm1tL21pZ3JhdGUuYy0xNTU4LVxcdFxcdHB1dF9uZXdfZm9saW8gPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxMjo1OS41MzAwNjU3OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTY4ODUwOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkh1Z2UgUGFnZSBNaWdyYXRpb24gRGl2aW5nIEluKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gdGhpcyBmdW5jdGlvbiBjYWxsLCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCwgYW5kIGl0J3MgcG9wcGluZyB1cCB3aXRoaW4gdGhlIGBtbS9taWdyYXRlLmNgIGZpbGUuIFJpZ2h0IGF3YXksIHRoaXMgc2NyZWFtcyBodWdlIHBhZ2UgbWlncmF0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBiZWhhdmlvciwgYW55IHNwZWNpZmljcyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kP1xuXG5SaWdodCwgYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIHRoZSBvYnZpb3VzIG9uZSwgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IGlzIHNldC5cblxuTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGluc2lkZSBgbW0vTWFrZWZpbGVgIG9yIGBtbS9LY29uZmlnYCBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZCByZWdhcmRpbmcgYGh1Z2V0bGIuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxMzoxNC40OTg5MjE4NzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjU5NzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXFxubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxMzoxNC42MTE1MjU1NzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1NzYwOTM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIHRoZSBib2xkZWQgaGVhZGVyIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IFdlYjogSHVnZSBQYWdlcyBhbmQgTWlncmF0aW9uKipcblxuQWxyaWdodCwgdGhlIHB1enpsZSBiZWdpbnMuIEkgc2VlIHRoYXQgYENPTkZJR19IVUdFVExCRlNgIGlzIGVzc2VudGlhbCwgdGhhdCdzIGEga2V5IHBpZWNlLiBOb3csIEkgcmVjYWxsIHRoYXQgYG1tL21pZ3JhdGUuY2AgbWFrZXMgdXNlIG9mIGl0LiBUaGF0IG1ha2VzIHNlbnNlLCBsYXJnZSBwYWdlIHN1cHBvcnQgYW5kIG1pZ3JhdGlvbiBvZnRlbiBnbyBoYW5kLWluLWhhbmQuIEFoLCBidXQgdGhhdCBsZWFkcyBtZSB0byBhbm90aGVyIHRob3VnaHQsIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IHF1ZXN0aW9uOiBEb2VzIHRoZSBjb2RlIHdpdGhpbiBgbW0vbWlncmF0ZS5jYCBhY3R1YWxseSByZWx5IG9uIGBDT05GSUdfTUlHUkFUSU9OYD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCByZWxhdGlvbnNoaXAuIEl0J3MgYSBjcml0aWNhbCBkZXBlbmRlbmN5IEkgbmVlZCB0byBjb25maXJtIGJlZm9yZSBtYWtpbmcgYW55IGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zLCBhcyBpdCBoZWxwcyBpZGVudGlmeSBhIHBvdGVudGlhbCBjYXNjYWRpbmcgZWZmZWN0IG9mIGFueSBjaGFuZ2VzLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCBtZSBzZWUgdGhlIGZsb3cgb2YgdGhlIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ3NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjEzOjE5LjA2OTEzODgxN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTczMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9OTc9b2JqLSQoQ09ORklHX01FTVRFU1QpXFx0XFx0Kz0gbWVtdGVzdC5vXFxubW0vTWFrZWZpbGU6OTg6b2JqLSQoQ09ORklHX01JR1JBVElPTikgKz0gbWlncmF0ZS5vXFxubW0vTWFrZWZpbGUtOTktb2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjEzOjE5LjIxMzExNzg2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzA2NjIzNzY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIE1pZ3JhdGlvbiBTdXBwb3J0KipcblxuQWxyaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBDT05GSUdfTUlHUkFUSU9OYCwgSSBzZWUgdGhhdCdzIGVzc2VudGlhbCBmb3Igd2hhdCB3ZSdyZSB3b3JraW5nIG9uLiBOb3csIGEga2V5IHF1ZXN0aW9uIGFyaXNlcyBpbiBteSBtaW5kOiBnaXZlbiB0aGUgY29udGV4dCBvZiBtaWdyYXRpb24sIGRvZXMgdGhpcyBhbHNvIG1hbmRhdGUgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfSFVHRVRMQl9QQUdFYD8gTWlncmF0aW9uIG9mdGVuIGludm9sdmVzIG1vdmluZyBtZW1vcnkgcmVnaW9ucywgYW5kIGh1Z2UgcGFnZXMgY291bGQgZGVmaW5pdGVseSBiZSBwYXJ0IG9mIHRoYXQgZWNvc3lzdGVtLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgb3IgaWYgdGhlcmUncyBhIGRlcGVuZGVuY3kgbGluayBJJ20gbWlzc2luZy4gVW5kZXJzdGFuZGluZyB0aGF0IHJlbGF0aW9uc2hpcCBpcyBjcml0aWNhbCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBhIHF1aWNrIGNoZWNrIG9uIHRoZSByZWxldmFudCBjb2RlLCBkb2N1bWVudGF0aW9uLCBvciBoaXN0b3JpY2FsIGNvbnRleHQgaXMgaW4gb3JkZXIuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIEkgbmVlZCB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gYmVmb3JlIEkgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgwNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjEzOjQyLjI3OTM1ODg2MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI1MzczMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhVR0VUTEJfUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTcwOC1cXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTcxMC1cXHRkZWZfYm9vbCBuXFxuLS1cXG5tbS9LY29uZmlnLTcxMi1cXHQgIEFsbG93cyB0aGUgcGFnZWJsb2NrX29yZGVyIHZhbHVlIHRvIGJlIGR5bmFtaWMgaW5zdGVhZCBvZiBqdXN0IHN0YW5kYXJkXFxubW0vS2NvbmZpZzo3MTM6XFx0ICBIVUdFVExCX1BBR0VfT1JERVIgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgSHVnZVRMQiBwYWdlIHNpemVzIGF2YWlsYWJsZVxcbm1tL0tjb25maWctNzE0LVxcdCAgb24gYSBwbGF0Zm9ybS5cXG4tLVxcbm1tL0tjb25maWc9MTAxND1jb25maWcgUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVNcXG5tbS9LY29uZmlnOjEwMTU6XFx0ZGVmX2Jvb2wgVFJBTlNQQVJFTlRfSFVHRVBBR0UgfHwgSFVHRVRMQl9QQUdFXFxubW0vS2NvbmZpZy0xMDE2LVxcbi0tXFxubW0vS2NvbmZpZz0xMDIwPWNvbmZpZyBIQVZFX0dJR0FOVElDX0ZPTElPU1xcbm1tL0tjb25maWc6MTAyMTpcXHRkZWZfYm9vbCAoSFVHRVRMQl9QQUdFIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIHx8IFxcXFxcXG5tbS9LY29uZmlnLTEwMjItXFx0XFx0IChaT05FX0RFVklDRSBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxMzo0Mi44MDQ3NDEyMTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ0NzU0ODMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIGh1Z2UgcGFnZSBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgZnMvS2NvbmZpZ2AuIFRoYXQgbG9jYXRpb24gaXMgaGlnaGx5IHByb2JhYmxlLCBhcyBmaWxlIHN5c3RlbXMgb2Z0ZW4gaGF2ZSB0aGVpciBvd24gY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZmluZWQgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0b3JpZXMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyB3aGVyZSBgQ09ORklHX0hVR0VUTEJGU2AgaXMgbG9jYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM1OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjEzOjUwLjI1MjI5MzMzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc4MDg3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjEzOjUwLjM1MDEwOTY0M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDAzMzEwMjIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBLY29uZmlnIGZvciBIVUdFVExCRlMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0aGlua2luZywgXCJXaGVyZSB3b3VsZCBJIHN0YXJ0IGlmIEkgd2FudGVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgSFVHRVRMQkZTYCBzdXBwb3J0IHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24/XCIuIFdlbGwsIHRoZSBsb2dpY2FsIGZpcnN0IG1vdmUsIHRoZSBtb3N0IGVmZmljaWVudCBtZXRob2QsIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBgZnMvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjYW5vbmljYWwgcGxhY2Ugd2hlcmUgZmlsZXN5c3RlbSBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgYEhVR0VUTEJGU2AgaXMsIHVuZGVuaWFibHksIGEgZmlsZXN5c3RlbS4gSXQncyB0aGUgY2VudHJhbCBodWIgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBpdC4gVGhlcmUncyBubyBuZWVkIHRvIHdhbmRlciBhcm91bmQgbG9va2luZyBpbiBtdWx0aXBsZSBwbGFjZXM7IGBmcy9LY29uZmlnYCBpcyB0aGUgb2J2aW91cyBmaXJzdCBzdG9wLiBJdCBpcyB0aGUgbG9naWNhbCBjaG9pY2UsIGR1ZSB0byBpdHMgb3JnYW5pemF0aW9uIGFuZCBlc3RhYmxpc2hlZCBwb3NpdGlvbiB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIGFwcHJvYWNoIHNhdmVzIHRpbWUgYW5kIGVuc3VyZXMgSSdtIGxvb2tpbmcgYXQgdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIGZvciB0aGUgZGVmaW5pdGlvbiBhbmQsIHRoZXJlZm9yZSwgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoYXQgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTg2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTQ6MDAuMzgzMjE2NzI4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NzpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjQ4OlxcdFxcdGRlZl9ib29sIG5cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0bWVudWNvbmZpZyBIVUdFVExCRlNcXG4gMjUxOlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gMjUyOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjUzOlxcdFxcdHNlbGVjdCBNRU1GRF9DUkVBVEVcXG4gMjU0OlxcdFxcdHNlbGVjdCBQQURBVEEgaWYgU01QXFxuIDI1NTpcXHRcXHRoZWxwXFxuIDI1NjpcXHRcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG4gMjU3OlxcdFxcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxcbiAyNTg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjYxOlxcdFxcbiAyNjI6XFx0aWYgSFVHRVRMQkZTXFxuIDI2MzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbiAyNjQ6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4gMjY1OlxcdFxcdGRlZmF1bHQgblxcbiAyNjY6XFx0XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxNDowMC4zODMzNDk3NTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NjE3NzAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBQYWdlIE1pZ3JhdGlvbiBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBodWdlIHBhZ2UgbWlncmF0aW9uLCBhbmQgdGhlIGtleSBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBjbGVhcmx5IGBIVUdFVExCRlNgIGFuZCBgTUlHUkFUSU9OYC4gVGhlIGNlbnRyYWwgZnVuY3Rpb25zIEkgbmVlZCB0byBkaXNzZWN0IGFyZSBgbW92ZV9odWdldGxiX3N0YXRlYCBhbmQgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuIEhvbGQgb24gYSBzZWNvbmQsIHRoYXQgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBgc3RhdGljYCB3aXRoaW4gYG1tL21pZ3JhdGUuY2AuIFRoYXQncyBpbXBvcnRhbnQ7IGl0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkLiBJJ2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gYG1tL21pZ3JhdGUuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBpdCdzIHVzZWQuIExldCdzIGRpZyBpbnRvIHRoYXQgc291cmNlIGZpbGUgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTc2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxNDowNC4wMzk1MzA2MThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMzc1MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZS5jPTEzNTU9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNDcwLSAqL1xcbm1tL21pZ3JhdGUuYzoxNDcxOnN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTE0NzItXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNjI5PXN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE2NjctXFxubW0vbWlncmF0ZS5jOjE2Njg6XFx0XFx0XFx0cmMgPSB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UoZ2V0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMTY2OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxNDowNC4xMjk5MTIzNzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5NjQ2MjMwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgbWlncmF0ZV9odWdldGxic2AqKlxuXG5Pa2F5LCBzbyBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCdzIGxpa2VseSB1c2VkIGludGVybmFsbHkgd2l0aGluIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGZpbGUsIGFuZCB3ZSBkb24ndCBoYXZlIHRvIHRyYWNlIGl0cyBjYWxscyBmcm9tIGFueXdoZXJlIGVsc2UuIEdvb2QsIHRoYXQgbmFycm93cyB0aGluZ3MgZG93bi4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgKmNhdXNpbmcqIHRoYXQgdW5tYXBwaW5nIGFuZCBtb3ZlbWVudCBvZiBodWdlIHBhZ2VzIHRvIG9jY3VyLiBUbyBkbyB0aGF0LCBJIG5lZWQgdG8gc2VlIHdoYXQncyAqY2FsbGluZyogYG1pZ3JhdGVfaHVnZXRsYnNgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgb2YgdGhpcyBwcm9jZXNzIGxpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkaWZmZXJlbnQgc2NlbmFyaW9zIHdoZXJlIGEgaHVnZSBwYWdlIGlzIGJlaW5nIHNoaWZ0ZWQgYXJvdW5kLiBUaGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBOVU1BIGJhbGFuY2luZywgb3IgcGVyaGFwcyBldmVuIGhvdHBsdWdnaW5nIG9mIG1lbW9yeS4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGZyb20gYG1pZ3JhdGVfaHVnZXRsYnNgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoeSB0aGVzZSBwYWdlIG1pZ3JhdGlvbnMgYXJlIGhhcHBlbmluZy4gS25vd2luZyB0aGUgY2FsbGVycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY5OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjE0OjE2LjA5NDUzODYzOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNjY4MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfaHVnZXRsYnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz0xNjExPXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNjI4LSAqL1xcbm1tL21pZ3JhdGUuYzoxNjI5OnN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0xNjMwLVxcdFxcdFxcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi0tXFxubW0vbWlncmF0ZS5jPTIwOTE9aW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTA2LVxcbm1tL21pZ3JhdGUuYzoyMTA3OlxcdHJjX2dhdGhlciA9IG1pZ3JhdGVfaHVnZXRsYnMoZnJvbSwgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbywgcHJpdmF0ZSxcXG5tbS9taWdyYXRlLmMtMjEwOC1cXHRcXHRcXHRcXHQgICAgIG1vZGUsIHJlYXNvbiwgXFx1MDAyNnN0YXRzLCBcXHUwMDI2cmV0X2ZvbGlvcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjE0OjE2LjIxNzIxMjIxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTkxNTgyNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEh1Z2V0bGIgUGFnZSBNaWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBgbWlncmF0ZV9wYWdlc2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHBhZ2UgbWlncmF0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gQnV0IHRvIHJlYWxseSBkaWcgaW50byB0aGUgaHVnZXRsYi1zcGVjaWZpYyBzdHVmZiwgSSBuZWVkIHRvIHpvb20gaW4uIFRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgaGVyZSBhcmUgY2xlYXJseSBgbW92ZV9odWdldGxiX3N0YXRlYCBhbmQgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuXG5cbkhhbmcgb24sIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBpcyBpZGVhbCBiZWNhdXNlIEkgY2FuIGZvY3VzIG9uIGl0IGRpcmVjdGx5LiBBbmQgd2hpbGUgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgaXMgc3RhdGljLCBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gdGFyZ2V0IGl0IGp1c3QgZmluZSBhcyBsb25nIGFzIGl04oCZcyBpbiB0aGUga2VybmVsIGltYWdlLiBBaCwgcmlnaHQsIHN5emthbGxlciB1c2VzIGtjb3YsIHdoaWNoIHVzZXMgUEMgdHJhY2tpbmcuIFRoZSBmdW5jdGlvbiBuYW1lIGlzIHJlc29sdmVkIGZyb20gZGVidWcgaW5mbywgc28gaXQncyBhIG5vbi1pc3N1ZS4gU28sIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIHBlcmZlY3RseSBmaW5lIGFzIGEgdGFyZ2V0LlxuXG5BbHNvLCB0aGlua2luZyBhYm91dCBpdCwgYG1pZ3JhdGVfcGFnZXNgIGlzIGEgYml0IHRvbyBnZW5lcmFsIHNpbmNlIGl0IGhhbmRsZXMgKmFsbCogcGFnZSBtaWdyYXRpb25zLiBGb2N1c2luZyBvbiBgbW92ZV9odWdldGxiX3N0YXRlYCwgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAsIGFuZCBgbWlncmF0ZV9odWdldGxic2Agd2lsbCBiZSBtdWNoIG1vcmUgZWZmaWNpZW50IGZvciB0aGlzIHBhcnRpY3VsYXIgdGFzay5cblxuTm93LCBhIHF1aWNrIGNoZWNrOiBhcmUgdGhlcmUgYW55IG90aGVyIGNhbGxlcnMgb2YgYG1vdmVfaHVnZXRsYl9zdGF0ZWA/IE5vcGUsIHRoZSBncmVwIG91dHB1dCBjbGVhcmx5IHNob3dlZCBpdCdzIG9ubHkgY2FsbGVkIHdpdGhpbiBgbW0vbWlncmF0ZS5jYCBpbnNpZGUgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuIFNvIHRoYXQncyBnb29kIHRvIGtub3cuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgZm9yIHBlYWNlIG9mIG1pbmQsIGlmIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIHN0YXRpYyBvciBub3QuIE9rYXksIGluIGBtbS9odWdldGxiLmNgOiBgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKWAuIE5vcGUsIGl04oCZcyBub3Qgc3RhdGljLiBHcmVhdCwgc28gSSBoYXZlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkOiBgSFVHRVRMQkZTYCBhbmQgYE1JR1JBVElPTmAuXG5cbldhaXQsIGlzbid0IGBNSUdSQVRJT05gIGEgYm9vbGVhbiBjb25maWc/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBgbW0vS2NvbmZpZ2AganVzdCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjE0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjE0OjIzLjIwODc5Njk5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMDEwNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjk1LVxcbm1tL0tjb25maWc6Njk2OmNvbmZpZyBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY5Ny1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjE0OjIzLjMyMTgzNzg3OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjUwNjkxNDM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgSSBjYW4gbWFrZSBvZiB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBNSUdSQVRJT05gIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYE1JR1JBVElPTmAgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBCdXQgd2hhdCdzIHN0cmFuZ2UgaXMgdGhhdCBpdCBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIHByb21wdCBhc3NvY2lhdGVkIHdpdGggaXQuIFRoYXQgbWVhbnMgaXQncyBsaWtlbHkgYmVpbmcgc2VsZWN0ZWQgb3IgZW5hYmxlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbnMuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHByb2JhYmx5IGFuIGltcG9ydGFudCBrZXkgcGllY2Ugb2YgbG9naWMgdGhhdCdzIGJlZW4gZmFjdG9yZWQgb3V0IGZvciBtb2R1bGFyaXR5LiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoaWNoKiBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYE1JR1JBVElPTmAgdG8gdHJ1ZSBvciBmYWxzZS4gVGltZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGl0cyB0cmlnZ2VyaW5nIGNvbmRpdGlvbnMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHRoaXMgYm9vbGVhbiBpcyBnZXR0aW5nIGZsaXBwZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTM1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTQ6MzkuODI4NzU1NjE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI2MzY0MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTkxPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxuLS1cXG5tbS9LY29uZmlnLTU5NC1cXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZzo1OTU6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNTk2LVxcbi0tXFxubW0vS2NvbmZpZz02NTQ9Y29uZmlnIENPTVBBQ1RJT05cXG4tLVxcbm1tL0tjb25maWctNjU2LVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWc6NjU3OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY1OC1cXHRkZXBlbmRzIG9uIE1NVVxcbi0tXFxubW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY4OC1cXHRkZXBlbmRzIG9uIE5VTUEgXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vS2NvbmZpZzo2ODk6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNjkwLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTA2Nz1jb25maWcgQ01BXFxuLS1cXG5tbS9LY29uZmlnLTEwNjktXFx0ZGVwZW5kcyBvbiBNTVVcXG5tbS9LY29uZmlnOjEwNzA6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctMTA3MS1cXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxNDo0Mi45NTUxMjcwNjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyMDkzODc5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBIdWdlIFBhZ2VzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYENPTVBBQ1RJT05gIHJlbGF0ZXMgdG8gYE1JR1JBVElPTmAgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgdGV4dCBpbmRpY2F0ZXMgdGhhdCBgQ09NUEFDVElPTmAgc2VsZWN0cyBgTUlHUkFUSU9OYCwgYW5kIHNpbmNlIGBDT01QQUNUSU9OYCBzZWVtcyB0byBiZSB0aGUgZGVmYXVsdCBzZXR0aW5nIChpbXBsaWVkIGJ5ICd5JyksIEknbSBpbmZlcnJpbmcgdGhhdCBgTUlHUkFUSU9OYCBpcyB2ZXJ5IGxpa2VseSBlbmFibGVkIGJ5IGRlZmF1bHQgYXMgd2VsbC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLlxuXG5Ob3csIG15IGZvY3VzIHNoaWZ0cyB0byBgSFVHRVRMQkZTYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGl0J3MgYSBgbWVudWNvbmZpZ2Agb3B0aW9uLiBUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoYXQgaXRzIGNvbmZpZ3VyYXRpb24gc3RhdGUgc2hvdWxkIGJlIGRvY3VtZW50ZWQgd2l0aGluIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2VjdGlvbi4gSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGlzIGlzIGFjY3VyYXRlLCBhbmQgaXQgc2VlbXMgdG8gbWFrZSBzZW5zZSB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuXG5cblRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcywgc3VjaCBhcyBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIEkgYWx3YXlzIGxpa2UgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cbkZpbmFsbHksIEknbGwgZG91YmxlLWNoZWNrIHRoZSBgZnMvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBzZWN0aW9uIHJlbGF0ZWQgdG8gYEhVR0VUTEJGU2AuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gYW5kIGFueSBkZXBlbmRlbmNpZXMuIFRoYXQgc2hvdWxkIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgaXMgYWxsIGxpbmtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MjAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTU6MjcuMTY0NTE4OTM0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY0MzQzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTcwOC1cXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTcxMC1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjE1OjI3LjMyMDk1ODc2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTcxOTAzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIExvY2F0aW9uIENoZWNrKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBzb21ldGhpbmcga2VybmVsLXJlbGF0ZWQsIGxpa2VseSBtZW1vcnkgbWFuYWdlbWVudCBiYXNlZCBvbiB0aGUgbmFtZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYEhVR0VUTEJfUEFHRWAgaXMgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBuYXR1cmUsIGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiBBbmQgYmluZ28sIHRoZSBkZWZpbml0aW9uIHNlZW1zIHRvIGJlIGluIGBmcy9LY29uZmlnYC4gVGhhdCdzIGEgcmVhc29uYWJsZSBsb2NhdGlvbjsgb2Z0ZW4sIHNldHRpbmdzIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW1zIGFuZCwgYnkgZXh0ZW5zaW9uLCBtZW1vcnkgdXNhZ2UgcGF0dGVybnMgdGhleSBtaWdodCBzdXBwb3J0LCBlbmQgdXAgdGhlcmUuIFRoaXMgaXNuJ3Qgc3VycHJpc2luZywgYnV0IGl0J3MgZ29vZCB0byBjb25maXJtLiBJdCBoZWxwcyBtZSB0byBjb250ZXh0dWFsaXplIHRoZSBzZXR0aW5nIGFuZCB3aGVyZSB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb2RlLiBOb3cgSSBjYW4gbW92ZSBmb3J3YXJkLCBjb25maWRlbnQgdGhhdCBJIGtub3cgd2hlcmUgdGhlIHNldHRpbmcgb3JpZ2luYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwOTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxNTozMC40MzgxNTI2MTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTc5MzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTU6MzAuNTY3OTU4MzE3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDcwODIwNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZVRMQiBNaWdyYXRpb24gUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgSFVHRVRMQl9QQUdFYCBpcyBsaW5rZWQgdG8gYEhVR0VUTEJGU2AsIHRoYXQncyBvdXIgc3RhcnRpbmcgcG9pbnQuIGBIVUdFVExCRlNgIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIExldCBtZSBicmVhayBkb3duIHRoZSBmdXp6aW5nIHN0cmF0ZWd5IGJhc2VkIG9uIHRoaXMgcGF0Y2guXG5cblRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyBpdCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9odWdldGxiX3N0YXRlYC4gVGhlIG9yaWdpbmFsIGNvZGUgcHJlbWF0dXJlbHkgZXhpdGVkIGlmIGBuZXdfbmlkYCBhbmQgYG9sZF9uaWRgIHdlcmUgdGhlIHNhbWUsIG1pc3NpbmcgdGhlIGNydWNpYWwgc3RlcHMgb2Ygc2V0dGluZyB0aGUgbmV3IGZvbGlvIGFzIG1pZ3JhdGFibGUgYW5kIGFkZGluZyBpdCB0byB0aGUgYWN0aXZlIGxpc3QuIFRoYXQncyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBodWdlIHBhZ2VzIGFyZSBtaWdyYXRlZC5cblxuVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nIGFyZSBgbW92ZV9odWdldGxiX3N0YXRlYCwgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAsIGFuZCBgbWlncmF0ZV9odWdldGxic2AuXG5cbk5vdyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gV2UgbmVlZCB0byBlbmFibGUgYEhVR0VUTEJGU2AuIGBNSUdSQVRJT05gIGlzIGFsc28gcmVsZXZhbnQuIEkgcmVjYWxsIGBNSUdSQVRJT05gIGJlaW5nIHNlbGVjdGVkIGJ5IGBDT01QQUNUSU9OYCwgd2hpY2ggaXMgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQuIFNpbmNlIHRoZSBwcm9tcHQgc2F5cyBcImV4cGxpY2l0bHkgZW5hYmxlZFwiLCBpdCdzIHByb2JhYmx5IGJlc3QgdG8gaW5jbHVkZSBib3RoLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgdGhlIHRlc3QgY29uZmlndXJhdGlvbiBpcyBhbGlnbmVkIHdpdGggdGhlIGNvZGUgYmVpbmcgbW9kaWZpZWQuXG5cbkhvd2V2ZXIsIGBNSUdSQVRJT05gIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgZGlyZWN0IHByb21wdCBpbiB0aGUgYC5jb25maWdgIGZpbGUuIEl0J3Mgc2VsZWN0ZWQgaW1wbGljaXRseS4gVGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uIGdlbmVyYXRvciBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhpcyBzZWxlY3Rpb24gYXV0b21hdGljYWxseSwgb3IgaXQgbWlnaHQganVzdCBlbmFibGUgYENPTVBBQ1RJT05gLiBJJ2xsIGluY2x1ZGUgYE1JR1JBVElPTmAgYW55d2F5LCBhbmQgc2VlIGhvdyB0aGUgY29uZmlnIGdlbmVyYXRvciBoYW5kbGVzIGl0LlxuXG5JJ3ZlIHJlLXJlYWQgdGhlIHBhdGNoIHRvIGJlIHN1cmU6XG5cbmBgYGNcbi1cdFx0aWYgKG5ld19uaWQgPT0gb2xkX25pZClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdFx0aWYgKGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbb2xkX25pZF0pIHtcbi1cdFx0XHRoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdLS07XG4tXHRcdFx0aC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXdfbmlkXSsrO1xuK1x0XHRpZiAobmV3X25pZCAhPSBvbGRfbmlkKSB7XG4rXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuK1x0XHRcdGlmIChoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7XG4rXHRcdFx0XHRoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdLS07XG4rXHRcdFx0XHRoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25ld19uaWRdKys7XG4rXHRcdFx0fVxuK1x0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHR9XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuYGBgXG5cblllcywgaXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93LiBUaGUgb2xkIGNvZGUgcmV0dXJuZWQgZWFybHkgaWYgYG5ld19uaWQgPT0gb2xkX25pZGAuIE5vdywgaXQgc2tpcHMgdGhlIGBpZmAgYmxvY2suIEFmdGVyIHRoZSBpZiBibG9jaywgaXQgZW5hYmxlcyBgbWlncmF0YWJsZWAgZm9yIHRoZSBuZXcgZm9saW8uXG5cbkFuZCB0aGUgc3Vic2VxdWVudCBjb2RlOlxuXG5gYGBjXG5cdC8qXG5cdCAqIE91ciBvbGQgZm9saW8gaXMgaXNvbGF0ZWQgYW5kIGhhcyBcIm1pZ3JhdGFibGVcIiBjbGVhcmVkIHVudGlsIGl0XG5cdCAqIGlzIHB1dGJhY2suIEFzIG1pZ3JhdGlvbiBzdWNjZWVkZWQsIHNldCB0aGUgbmV3IGZvbGlvIFwibWlncmF0YWJsZVwiXG5cdCAqIGFuZCBhZGQgaXQgdG8gdGhlIGFjdGl2ZSBsaXN0LlxuXHQgKi9cblx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuXHRmb2xpb19zZXRfaHVnZXRsYl9taWdyYXRhYmxlKG5ld19mb2xpbyk7XG5cdGxpc3RfbW92ZV90YWlsKFx1MDAyNm5ld19mb2xpby1cdTAwM2VscnUsIFx1MDAyNihmb2xpb19oc3RhdGUobmV3X2ZvbGlvKSktXHUwMDNlaHVnZXBhZ2VfYWN0aXZlbGlzdCk7XG5cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuYGBgXG5cblRoaXMgZW5zdXJlcyB0aGUgbmV3bHkgbWlncmF0ZWQgZm9saW8gaXMgcHJvcGVybHkgZmxhZ2dlZCBhcyBtaWdyYXRhYmxlIGFuZCBhZGRlZCB0byB0aGUgYWN0aXZlIGxpc3QsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudC4gVGhhdCdzIGEgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTA0LCJPdXRwdXRUb2tlbnMiOjEzNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxNTo0MS42Mzg3ODM4MjhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg5MTgxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtb3ZlX2h1Z2V0bGJfc3RhdGVcIixcbiAgICBcInVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZVwiLFxuICAgIFwibWlncmF0ZV9odWdldGxic1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSBpZiBgbmV3X25pZCA9PSBvbGRfbmlkYCwgc2tpcHBpbmcgdGhlIGxvZ2ljIHRvIHNldCB0aGUgbmV3IGZvbGlvIGFzIG1pZ3JhdGFibGUgYW5kIGFkZGluZyBpdCB0byB0aGUgYWN0aXZlIGxpc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBodWdlIHBhZ2UgbWlncmF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW92ZV9odWdldGxiX3N0YXRlXCIsXG4gICAgXCJ1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VcIixcbiAgICBcIm1pZ3JhdGVfaHVnZXRsYnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9odWdldGxiX3N0YXRlYCB3aGVyZSBpdCB3b3VsZCByZXR1cm4gZWFybHkgaWYgYG5ld19uaWQgPT0gb2xkX25pZGAsIHNraXBwaW5nIHRoZSBsb2dpYyB0byBzZXQgdGhlIG5ldyBmb2xpbyBhcyBtaWdyYXRhYmxlIGFuZCBhZGRpbmcgaXQgdG8gdGhlIGFjdGl2ZSBsaXN0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaHVnZSBwYWdlIG1pZ3JhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx92np[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 18:42:13 +0000 UTC FinishedAt: 2026-07-07 19:15:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a1ea12a96ea9d1b33fdd7968c304a2cde4281896", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MIGRATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a1ea12a96ea9d1b33fdd7968c304a2cde4281896", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "MIGRATION" ], "series_id": "3d500551-9451-4ae8-8416-e41583cb1118" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "move_hugetlb_state", "unmap_and_move_huge_page", "migrate_hugetlbs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttb3ZlX2h1Z2V0bGJfc3RhdGUmIzM0OywKICAgICYjMzQ7dW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlJiMzNDssCiAgICAmIzM0O21pZ3JhdGVfaHVnZXRsYnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYG1vdmVfaHVnZXRsYl9zdGF0ZWAgd2hlcmUgaXQgd291bGQgcmV0dXJuIGVhcmx5IGlmIGBuZXdfbmlkID09IG9sZF9uaWRgLCBza2lwcGluZyB0aGUgbG9naWMgdG8gc2V0IHRoZSBuZXcgZm9saW8gYXMgbWlncmF0YWJsZSBhbmQgYWRkaW5nIGl0IHRvIHRoZSBhY3RpdmUgbGlzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGh1Z2UgcGFnZSBtaWdyYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAxMWFlMjZlOTcwMzkzYTVkYTE4OGJhMzA1YTJhOTFlNzYyYTkzNjlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxOToxMTozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDU3MTIxMmI4MDgzNWVjLi5jYWZhZGZkYjYzYzBlNyAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jXG5AQCAtNzIxMSwxNCAmIzQzOzcyMTEsMTQgQEAgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVcbiBcdFx0ICogVGhlcmUgaXMgbm8gbmVlZCB0byB0cmFuc2ZlciB0aGUgcGVyLW5vZGUgc3VycGx1cyBzdGF0ZVxuIFx0XHQgKiB3aGVuIHdlIGRvIG5vdCBjcm9zcyB0aGUgbm9kZS5cbiBcdFx0ICovXG4tXHRcdGlmIChuZXdfbmlkID09IG9sZF9uaWQpXG4tXHRcdFx0cmV0dXJuO1xuLVx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4tXHRcdGlmIChoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7XG4tXHRcdFx0aC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tO1xuLVx0XHRcdGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbbmV3X25pZF0mIzQzOyYjNDM7O1xuJiM0MztcdFx0aWYgKG5ld19uaWQgIT0gb2xkX25pZCkge1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4mIzQzO1x0XHRcdGlmIChoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7XG4mIzQzO1x0XHRcdFx0aC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tO1xuJiM0MztcdFx0XHRcdGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbbmV3X25pZF0mIzQzOyYjNDM7O1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHR9XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0fVxuIFxuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT40bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW92ZV9odWdldGxiX3N0YXRlJiMzNDssCiAgICAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2h1Z2V0bGJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSBpZiBgbmV3X25pZCA9PSBvbGRfbmlkYCwgc2tpcHBpbmcgdGhlIGxvZ2ljIHRvIHNldCB0aGUgbmV3IGZvbGlvIGFzIG1pZ3JhdGFibGUgYW5kIGFkZGluZyBpdCB0byB0aGUgYWN0aXZlIGxpc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBodWdlIHBhZ2UgbWlncmF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxMWFlMjZlOTcwMzkzYTVkYTE4OGJhMzA1YTJhOTFlNzYyYTkzNjlkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAxOToxMTozMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA1NzEyMTJiODA4MzVlYy4uY2FmYWRmZGI2M2MwZTcgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiLmMKQEAgLTcyMTEsMTQgJiM0Mzs3MjExLDE0IEBAIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlCiAJCSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHBlci1ub2RlIHN1cnBsdXMgc3RhdGUKIAkJICogd2hlbiB3ZSBkbyBub3QgY3Jvc3MgdGhlIG5vZGUuCiAJCSAqLwotCQlpZiAobmV3X25pZCA9PSBvbGRfbmlkKQotCQkJcmV0dXJuOwotCQlzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKLQkJaWYgKGgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7Ci0JCQloLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tOwotCQkJaC0mZ3Q7c3VycGx1c19odWdlX3BhZ2VzX25vZGVbbmV3X25pZF0mIzQzOyYjNDM7OwomIzQzOwkJaWYgKG5ld19uaWQgIT0gb2xkX25pZCkgewomIzQzOwkJCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwomIzQzOwkJCWlmIChoLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXSkgewomIzQzOwkJCQloLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tOwomIzQzOwkJCQloLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXdfbmlkXSYjNDM7JiM0Mzs7CiYjNDM7CQkJfQomIzQzOwkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiAJCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAl9CiAKIAkvKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG1vdmVfaHVnZXRsYl9zdGF0ZWAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9odWdldGxiLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGZ1bmN0aW9uLiBUaGUga2V5IGNoYW5nZSBzZWVtcyB0byBiZSBpbiB0aGUgY29uZGl0aW9uYWwgY2hlY2sgaW52b2x2aW5nIGBuZXdfbmlkYCBhbmQgYG9sZF9uaWRgLiBCZWZvcmUsIHRoZSBjb2RlIHdvdWxkIGltbWVkaWF0ZWx5IHJldHVybiBpZiB0aGUgbmV3IG5vZGUgSUQgd2FzIHRoZSBzYW1lIGFzIHRoZSBvbGQgb25lOgoKYGBgYwoJCWlmIChuZXdfbmlkID09IG9sZF9uaWQpCgkJCXJldHVybjsKYGBgCgpOb3csIHRoYXQmIzM5O3MgYmVlbiBmbGlwcGVkOgoKYGBgYwoJCWlmIChuZXdfbmlkICE9IG9sZF9uaWQpCmBgYAoKVGhlIG9sZCBsb2dpYyBpbW1lZGlhdGVseSBleGl0ZWQgdGhlIGZ1bmN0aW9uIGlmIHRoZSBub2RlIElEcyB3ZXJlIHRoZSBzYW1lLiBUaGUgbmV3IGxvZ2ljIHByb2NlZWRzIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlIGJsb2NrIG9ubHkgaWYgdGhleSBhcmUgZGlmZmVyZW50LgoKVGhlcmVmb3JlLCB0aGUgY3JpdGljYWwgcGFydCBvZiB0aGlzIGlzIHRoYXQgdGhlIG9yaWdpbmFsIGNoZWNrIHdhcyBkZXNpZ25lZCB0byBhdm9pZCBleGVjdXRpb24gb2YgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uIGlmIHRoZSBub2RlIElEcyB3ZXJlIHRoZSBzYW1lLiBUaGUgY2hhbmdlIG5vdyBhbGxvd3MgZXhlY3V0aW9uIG9mIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbiBldmVuIGlmIHRoZSBub2RlIElEcyBhcmUgdGhlIHNhbWUuCgpFc3NlbnRpYWxseSwgYnkgcmVtb3ZpbmcgdGhlIGByZXR1cm5gLCB0aGUgY29kZSBub3cgYWx3YXlzIHByb2NlZWRzIHRvIHVwZGF0ZSB0aGUgYHN1cnBsdXNfaHVnZV9wYWdlc19ub2RlYCBhcnJheSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIE5VTUEgbm9kZSBjaGFuZ2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgY29zbWV0aWMgb25lLiBCZWZvcmUsIHRoZSByZXN0IG9mIHRoZSBmdW5jdGlvbiB3YXMgc2tpcHBlZCB1bmRlciBhIHNwZWNpZmljIGNvbmRpdGlvbi4gTm93LCB0aGF0IHNraXAgaXMgcmVtb3ZlZC4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gaG93IGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIHVzZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBidWcgZml4IG9yIGFuIGludGVudGlvbmFsIGNoYW5nZSBpbiBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBzaXRlcyB0byBzZWUgd2hhdCB0aGUgaW1wYWN0IGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdmVfaHVnZXRsYl9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9NzE3Nj12b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYy03MTg0LVxubW0vaHVnZXRsYi5jOjcxODU6dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxubW0vaHVnZXRsYi5jLTcxODYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyBgbW92ZV9odWdldGxiX3N0YXRlYCBpbiBgbW0vaHVnZXRsYi5jYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gYG1vdmVfaHVnZXRsYl9zdGF0ZWAgaW4gdGhlIGh1Z2V0bGIgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgdHJhbnNmZXIgb2YgSHVnZVRMQiBzdGF0ZSB3aGVuLCBmb3IgZXhhbXBsZSwgYSBIdWdlVExCIHBhZ2UgbmVlZHMgdG8gYmUgbW92ZWQgYmV0d2VlbiBkaWZmZXJlbnQgTlVNQSBub2RlcyBvciBzb21lIG90aGVyIHNpbWlsYXIgb3BlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICp3aGF0KiBzdGF0ZSBpcyBiZWluZyBtb3ZlZCBhbmQgKmhvdyogaXQmIzM5O3MgaGFuZGxlZC4gSXMgaXQganVzdCB0aGUgcGFnZSB0YWJsZSBlbnRyaWVzLCBvciBhcmUgdGhlcmUgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgbGlrZSBtZXRhZGF0YSwgYWNjb3VudGluZyBpbmZvcm1hdGlvbiwgb3IgZXZlbiB0aGUgcGFnZSBpdHNlbGY/IEl04oCZcyBjcnVjaWFsIHRvIGtub3cgaWYgdGhpcyBvcGVyYXRpb24gaW52b2x2ZXMgYW55IHBvdGVudGlhbCBkYXRhIGxvc3Mgb3IgaW5jb25zaXN0ZW5jeSwgd2hpY2ggcmVxdWlyZXMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgbWVtb3J5IG1hbmFnZW1lbnQgaW4gYSBtdWx0aS10aHJlYWRlZCwgTlVNQSBhd2FyZSBlbnZpcm9ubWVudC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY3JpdGljYWwgc2VjdGlvbnMsIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBvdmVyYWxsIGFsZ29yaXRobSBiZWluZyB1c2VkIHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgdGhlIG1vdmUuIFRoZSBmb2N1cyB3aWxsIGJlIHRvIHNlZSBpZiB0aGVyZSBhcmUgcmFjZSBjb25kaXRpb25zIHRoYXQgSSBtaWdodCBoYXZlIG1pc3NlZCBpbiBwcmV2aW91cyByZXZpZXdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzE4NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NzE4NTpcdHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlYXNvbilcbjcxODY6XHR7XG43MTg3Olx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gZm9saW9faHN0YXRlKG9sZF9mb2xpbyk7XG43MTg4Olx0XG43MTg5Olx0XHRodWdldGxiX2Nncm91cF9taWdyYXRlKG9sZF9mb2xpbywgbmV3X2ZvbGlvKTtcbjcxOTA6XHRcdGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihuZXdfZm9saW8sIHJlYXNvbik7XG43MTkxOlx0XG43MTkyOlx0XHQvKlxuNzE5MzpcdFx0ICogdHJhbnNmZXIgdGVtcG9yYXJ5IHN0YXRlIG9mIHRoZSBuZXcgaHVnZXRsYiBmb2xpby4gVGhpcyBpc1xuNzE5NDpcdFx0ICogcmV2ZXJzZSB0byBvdGhlciB0cmFuc2l0aW9ucyBiZWNhdXNlIHRoZSBuZXdwYWdlIGlzIGdvaW5nIHRvXG43MTk1Olx0XHQgKiBiZSBmaW5hbCB3aGlsZSB0aGUgb2xkIG9uZSB3aWxsIGJlIGZyZWVkIHNvIGl0IHRha2VzIG92ZXJcbjcxOTY6XHRcdCAqIHRoZSB0ZW1wb3Jhcnkgc3RhdHVzLlxuNzE5NzpcdFx0ICpcbjcxOTg6XHRcdCAqIEFsc28gbm90ZSB0aGF0IHdlIGhhdmUgdG8gdHJhbnNmZXIgdGhlIHBlci1ub2RlIHN1cnBsdXMgc3RhdGVcbjcxOTk6XHRcdCAqIGhlcmUgYXMgd2VsbCBvdGhlcndpc2UgdGhlIGdsb2JhbCBzdXJwbHVzIGNvdW50IHdpbGwgbm90IG1hdGNoXG43MjAwOlx0XHQgKiB0aGUgcGVyLW5vZGUmIzM5O3MuXG43MjAxOlx0XHQgKi9cbjcyMDI6XHRcdGlmIChmb2xpb190ZXN0X2h1Z2V0bGJfdGVtcG9yYXJ5KG5ld19mb2xpbykpIHtcbjcyMDM6XHRcdFx0aW50IG9sZF9uaWQgPSBmb2xpb19uaWQob2xkX2ZvbGlvKTtcbjcyMDQ6XHRcdFx0aW50IG5ld19uaWQgPSBmb2xpb19uaWQobmV3X2ZvbGlvKTtcbjcyMDU6XHRcbjcyMDY6XHRcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfdGVtcG9yYXJ5KG9sZF9mb2xpbyk7XG43MjA3Olx0XHRcdGZvbGlvX2NsZWFyX2h1Z2V0bGJfdGVtcG9yYXJ5KG5ld19mb2xpbyk7XG43MjA4Olx0XG43MjA5Olx0XG43MjEwOlx0XHRcdC8qXG43MjExOlx0XHRcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHBlci1ub2RlIHN1cnBsdXMgc3RhdGVcbjcyMTI6XHRcdFx0ICogd2hlbiB3ZSBkbyBub3QgY3Jvc3MgdGhlIG5vZGUuXG43MjEzOlx0XHRcdCAqL1xuNzIxNDpcdFx0XHRpZiAobmV3X25pZCAhPSBvbGRfbmlkKSB7XG43MjE1Olx0XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuNzIxNjpcdFx0XHRcdGlmIChoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7XG43MjE3Olx0XHRcdFx0XHRoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdLS07XG43MjE4Olx0XHRcdFx0XHRoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25ld19uaWRdJiM0MzsmIzQzOztcbjcyMTk6XHRcdFx0XHR9XG43MjIwOlx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG43MjIxOlx0XHRcdH1cbjcyMjI6XHRcdH1cbjcyMjM6XHRcbjcyMjQ6XHRcdC8qXG43MjI1Olx0XHQgKiBPdXIgb2xkIGZvbGlvIGlzIGlzb2xhdGVkIGFuZCBoYXMgXCYjMzQ7bWlncmF0YWJsZVwmIzM0OyBjbGVhcmVkIHVudGlsIGl0XG43MjI2Olx0XHQgKiBpcyBwdXRiYWNrLiBBcyBtaWdyYXRpb24gc3VjY2VlZGVkLCBzZXQgdGhlIG5ldyBmb2xpbyBcJiMzNDttaWdyYXRhYmxlXCYjMzQ7XG43MjI3Olx0XHQgKiBhbmQgYWRkIGl0IHRvIHRoZSBhY3RpdmUgbGlzdC5cbjcyMjg6XHRcdCAqL1xuNzIyOTpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuNzIzMDpcdFx0Zm9saW9fc2V0X2h1Z2V0bGJfbWlncmF0YWJsZShuZXdfZm9saW8pO1xuNzIzMTpcdFx0bGlzdF9tb3ZlX3RhaWwoXHUwMDI2bmV3X2ZvbGlvLVx1MDAzZWxydSwgXHUwMDI2KGZvbGlvX2hzdGF0ZShuZXdfZm9saW8pKS1cdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcbjcyMzI6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuNzIzMzpcdH1cbjcyMzQ6XHRcbjcyMzU6XHQvKlxuNzIzNjpcdCAqIElmIEB0YWtlX2xvY2tzIGlzIGZhbHNlLCB0aGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgbm8gY29uY3VycmVudCBwYWdlIHRhYmxlXG43MjM3Olx0ICogYWNjZXNzIGNhbiBoYXBwZW4gKGV4Y2VwdCBmb3IgZ3VwX2Zhc3QoKSBhbmQgaGFyZHdhcmUgcGFnZSB3YWxrcykuXG43MjM4Olx0ICogSWYgQHRha2VfbG9ja3MgaXMgdHJ1ZSwgd2UgdGFrZSB0aGUgaHVnZXRsYiBWTUEgbG9jayAodG8gbG9jayBvdXQgdGhpbmdzIGxpa2VcbjcyMzk6XHQgKiBjb25jdXJyZW50IHBhZ2UgZmF1bHQgaGFuZGxpbmcpIGFuZCB0aGUgZmlsZSBybWFwIGxvY2suXG43MjQwOlx0ICovXG43MjQxOlx0c3RhdGljIHZvaWQgaHVnZXRsYl91bnNoYXJlX3BtZHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG43MjQyOlx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuNzI0MzpcdFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBlbmQsXG43MjQ0Olx0XHRcdFx0XHQgICBib29sIHRha2VfbG9ja3MpXG43MjQ1Olx0e1xuNzI0NjpcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcbjcyNDc6XHRcdHVuc2lnbmVkIGxvbmcgc3ogPSBodWdlX3BhZ2Vfc2l6ZShoKTtcbjcyNDg6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVx1MDAzZXZtX21tO1xuNzI0OTpcdFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbjcyNTA6XHRcdHN0cnVjdCBtbXVfZ2F0aGVyIHRsYjtcbjcyNTE6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcztcbjcyNTI6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbjcyNTM6XHRcdHB0ZV90ICpwdGVwO1xuNzI1NDpcdFxuNzI1NTpcdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NQVlTSEFSRSkpXG43MjU2Olx0XHRcdHJldHVybjtcbjcyNTc6XHRcbjcyNTg6XHRcdGlmIChzdGFydCBcdTAwM2U9IGVuZClcbjcyNTk6XHRcdFx0cmV0dXJuO1xuNzI2MDpcdFxuNzI2MTpcdFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKTtcbjcyNjI6XHRcdHRsYl9nYXRoZXJfbW11X3ZtYShcdTAwMjZ0bGIsIHZtYSk7XG43MjYzOlx0XG43MjY0Olx0XHQvKlxuNzI2NTpcdFx0ICogTm8gbmVlZCB0byBjYWxsIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSgpLCBiZWNhdXNlXG43MjY2Olx0XHQgKiB3ZSBoYXZlIGFscmVhZHkgZG9uZSB0aGUgUFVEX1NJWkUgYWxpZ25tZW50LlxuNzI2NzpcdFx0ICovXG43MjY4Olx0XHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcdTAwMjZyYW5nZSwgTU1VX05PVElGWV9DTEVBUiwgMCwgbW0sXG43MjY5Olx0XHRcdFx0XHRzdGFydCwgZW5kKTtcbjcyNzA6XHRcdG1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KFx1MDAyNnJhbmdlKTtcbjcyNzE6XHRcdGlmICh0YWtlX2xvY2tzKSB7XG43MjcyOlx0XHRcdGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTtcbjcyNzM6XHRcdFx0aV9tbWFwX2xvY2tfd3JpdGUodm1hLVx1MDAzZXZtX2ZpbGUtXHUwMDNlZl9tYXBwaW5nKTtcbjcyNzQ6XHRcdH0gZWxzZSB7XG43Mjc1Olx0XHRcdGlfbW1hcF9hc3NlcnRfd3JpdGVfbG9ja2VkKHZtYS1cdTAwM2V2bV9maWxlLVx1MDAzZWZfbWFwcGluZyk7XG43Mjc2Olx0XHR9XG43Mjc3Olx0XHRmb3IgKGFkZHJlc3MgPSBzdGFydDsgYWRkcmVzcyBcdTAwM2MgZW5kOyBhZGRyZXNzICYjNDM7PSBQVURfU0laRSkge1xuNzI3ODpcdFx0XHRwdGVwID0gaHVnZXRsYl93YWxrKHZtYSwgYWRkcmVzcywgc3opO1xuNzI3OTpcdFx0XHRpZiAoIXB0ZXApXG43MjgwOlx0XHRcdFx0Y29udGludWU7XG43MjgxOlx0XHRcdHB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgbW0sIHB0ZXApO1xuNzI4MjpcdFx0XHRfX2h1Z2VfcG1kX3Vuc2hhcmUoXHUwMDI2dGxiLCB2bWEsIGFkZHJlc3MsIHB0ZXAsIHRha2VfbG9ja3MpO1xuNzI4MzpcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuNzI4NDpcdFx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MDQKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgQ29kZSBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhhdCBvbGQgQyBjb2RlIHNuaXBwZXQ6CmBgYGMKCQlpZiAobmV3X25pZCA9PSBvbGRfbmlkKQoJCQlyZXR1cm47CgkJc3Bpbl9sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CgkJaWYgKGgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7CgkJCWgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdLS07CgkJCWgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25ld19uaWRdJiM0MzsmIzQzOzsKCQl9CgkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKYGBgCmltbWVkaWF0ZWx5IGZsYWdnZWQgc29tZXRoaW5nLiBUaGUgZWFybHkgcmV0dXJuIGlmIGBuZXdfbmlkYCBlcXVhbHMgYG9sZF9uaWRgIGlzIHRoZSBjdWxwcml0LiBUaGF0IGNvbmRpdGlvbmFsIHNob3J0LWNpcmN1aXRzIHRoZSBzdWJzZXF1ZW50IGNydWNpYWwgY29kZToKYGBgYwoJLyoKCSAqIE91ciBvbGQgZm9saW8gaXMgaXNvbGF0ZWQgYW5kIGhhcyAmIzM0O21pZ3JhdGFibGUmIzM0OyBjbGVhcmVkIHVudGlsIGl0CgkgKiBpcyBwdXRiYWNrLiBBcyBtaWdyYXRpb24gc3VjY2VlZGVkLCBzZXQgdGhlIG5ldyBmb2xpbyAmIzM0O21pZ3JhdGFibGUmIzM0OwoJICogYW5kIGFkZCBpdCB0byB0aGUgYWN0aXZlIGxpc3QuCgkgKi8KCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwoJZm9saW9fc2V0X2h1Z2V0bGJfbWlncmF0YWJsZShuZXdfZm9saW8pOwoJbGlzdF9tb3ZlX3RhaWwoJmFtcDtuZXdfZm9saW8tJmd0O2xydSwgJmFtcDsoZm9saW9faHN0YXRlKG5ld19mb2xpbykpLSZndDtodWdlcGFnZV9hY3RpdmVsaXN0KTsKCXNwaW5fdW5sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CmBgYApUaGF0IG1lYW5zLCBvbiBhIG5vZGUgbWlncmF0aW9uLCBpZiB0aGUgbmV3IG5vZGUgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBub2RlLCB0aGUgY29kZSB3b3VsZCBza2lwIHNldHRpbmcgdGhlIGZvbGlvIHRvIGBtaWdyYXRhYmxlYCBhbmQgYWRkaW5nIGl0IHRvIHRoZSBhY3RpdmUgbGlzdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgYnVnLiBNaWdyYXRpb24gc3VjY2VlZHMgYnV0IGlzIG5vdCBwcm9wZXJseSByZWNvcmRlZC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IG5lZWRzIGZ1enppbmcgdG8gYmUgY2F1Z2h0LiBJdCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IGlzIHdvcnRoIGEgZGVkaWNhdGVkIHRlc3QgY2FzZS4KClRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgbW92ZV9odWdldGxiX3N0YXRlYCwgSSBiZXR0ZXIgY2hlY2sgd2hlcmUgaXQgaXMgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgYnVnIGNhbiBiZSByZXByb2R1Y2VkLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIG9yIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3YWl0IGl0JiMzOTtzIGEgZ2xvYmFsIGZ1bmN0aW9uIGluIGBtbS9odWdldGxiLmNgLiBUaGF0IG1lYW5zIHRoZSBzY29wZSBvZiB0aGlzIGJ1ZyBpcyBsYXJnZXIgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LiBOb3cgSSBuZWVkIHRvIGNoZWNrIHdoZXJlIGl0JiMzOTtzIGNhbGxlZCB0byBidWlsZCBhbiBhdHRhY2sgdmVjdG9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdmVfaHVnZXRsYl9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xNTY9dm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxNTc6dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTE1OC12b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTQyMj1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNDI1LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NDI2OnN0YXRpYyBpbmxpbmUgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00MjctXHRcdFx0XHRcdHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxuLS1cbm1tL2h1Z2V0bGIuYz03MTc2PXZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTcxODQtXG5tbS9odWdldGxiLmM6NzE4NTp2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXG5tbS9odWdldGxiLmMtNzE4Ni17XG4tLVxubW0vbWlncmF0ZS5jPTE0NzE9c3RhdGljIGludCB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UobmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTU1Ni1cdGlmICghcmMpIHtcbm1tL21pZ3JhdGUuYzoxNTU3Olx0XHRtb3ZlX2h1Z2V0bGJfc3RhdGUoc3JjLCBkc3QsIHJlYXNvbik7XG5tbS9taWdyYXRlLmMtMTU1OC1cdFx0cHV0X25ld19mb2xpbyA9IE5VTEw7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEyNwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkh1Z2UgUGFnZSBNaWdyYXRpb24gRGl2aW5nIEluKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biB0aGlzIGZ1bmN0aW9uIGNhbGwsIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLCBhbmQgaXQmIzM5O3MgcG9wcGluZyB1cCB3aXRoaW4gdGhlIGBtbS9taWdyYXRlLmNgIGZpbGUuIFJpZ2h0IGF3YXksIHRoaXMgc2NyZWFtcyBodWdlIHBhZ2UgbWlncmF0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBiZWhhdmlvciwgYW55IHNwZWNpZmljcyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kPwoKUmlnaHQsIGBDT05GSUdfSFVHRVRMQl9QQUdFYCBpcyB0aGUgb2J2aW91cyBvbmUsIEkgaGF2ZSB0byBlbnN1cmUgdGhhdCBpcyBzZXQuCgpMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgaW5zaWRlIGBtbS9NYWtlZmlsZWAgb3IgYG1tL0tjb25maWdgIGFuZCBzZWUgd2hhdCBJIGNhbiBmaW5kIHJlZ2FyZGluZyBgaHVnZXRsYi5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYlxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT04MD1vYmotJChDT05GSUdfSEFTX0RNQSlcdCYjNDM7PSBkbWFwb29sLm9cbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXHQmIzQzOz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXG5tbS9NYWtlZmlsZS04Mi1pZmRlZiBDT05GSUdfQ01BXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NzQKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzcywgd2l0aCB0aGUgYm9sZGVkIGhlYWRlciBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIERlcGVuZGVuY3kgV2ViOiBIdWdlIFBhZ2VzIGFuZCBNaWdyYXRpb24qKgoKQWxyaWdodCwgdGhlIHB1enpsZSBiZWdpbnMuIEkgc2VlIHRoYXQgYENPTkZJR19IVUdFVExCRlNgIGlzIGVzc2VudGlhbCwgdGhhdCYjMzk7cyBhIGtleSBwaWVjZS4gTm93LCBJIHJlY2FsbCB0aGF0IGBtbS9taWdyYXRlLmNgIG1ha2VzIHVzZSBvZiBpdC4gVGhhdCBtYWtlcyBzZW5zZSwgbGFyZ2UgcGFnZSBzdXBwb3J0IGFuZCBtaWdyYXRpb24gb2Z0ZW4gZ28gaGFuZC1pbi1oYW5kLiBBaCwgYnV0IHRoYXQgbGVhZHMgbWUgdG8gYW5vdGhlciB0aG91Z2h0LCBhIGNydWNpYWwgZGVwZW5kZW5jeSBxdWVzdGlvbjogRG9lcyB0aGUgY29kZSB3aXRoaW4gYG1tL21pZ3JhdGUuY2AgYWN0dWFsbHkgcmVseSBvbiBgQ09ORklHX01JR1JBVElPTmA/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgcmVsYXRpb25zaGlwLiBJdCYjMzk7cyBhIGNyaXRpY2FsIGRlcGVuZGVuY3kgSSBuZWVkIHRvIGNvbmZpcm0gYmVmb3JlIG1ha2luZyBhbnkgY29uZmlndXJhdGlvbiBkZWNpc2lvbnMsIGFzIGl0IGhlbHBzIGlkZW50aWZ5IGEgcG90ZW50aWFsIGNhc2NhZGluZyBlZmZlY3Qgb2YgYW55IGNoYW5nZXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBoZWxwIG1lIHNlZSB0aGUgZmxvdyBvZiB0aGUgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttaWdyYXRlXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTk3PW9iai0kKENPTkZJR19NRU1URVNUKVx0XHQmIzQzOz0gbWVtdGVzdC5vXG5tbS9NYWtlZmlsZTo5ODpvYmotJChDT05GSUdfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZS5vXG5tbS9NYWtlZmlsZS05OS1vYmotJChDT05GSUdfTlVNQSkgJiM0Mzs9IG1lbW9yeS10aWVycy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4MDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkNoZWNraW5nIERlcGVuZGVuY2llcyBmb3IgTWlncmF0aW9uIFN1cHBvcnQqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBgQ09ORklHX01JR1JBVElPTmAsIEkgc2VlIHRoYXQmIzM5O3MgZXNzZW50aWFsIGZvciB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIG9uLiBOb3csIGEga2V5IHF1ZXN0aW9uIGFyaXNlcyBpbiBteSBtaW5kOiBnaXZlbiB0aGUgY29udGV4dCBvZiBtaWdyYXRpb24sIGRvZXMgdGhpcyBhbHNvIG1hbmRhdGUgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfSFVHRVRMQl9QQUdFYD8gTWlncmF0aW9uIG9mdGVuIGludm9sdmVzIG1vdmluZyBtZW1vcnkgcmVnaW9ucywgYW5kIGh1Z2UgcGFnZXMgY291bGQgZGVmaW5pdGVseSBiZSBwYXJ0IG9mIHRoYXQgZWNvc3lzdGVtLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgb3IgaWYgdGhlcmUmIzM5O3MgYSBkZXBlbmRlbmN5IGxpbmsgSSYjMzk7bSBtaXNzaW5nLiBVbmRlcnN0YW5kaW5nIHRoYXQgcmVsYXRpb25zaGlwIGlzIGNyaXRpY2FsIGZvciBhIGNvbXBsZXRlIHBpY3R1cmUsIHNvIGEgcXVpY2sgY2hlY2sgb24gdGhlIHJlbGV2YW50IGNvZGUsIGRvY3VtZW50YXRpb24sIG9yIGhpc3RvcmljYWwgY29udGV4dCBpcyBpbiBvcmRlci4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIEkgbmVlZCB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gYmVmb3JlIEkgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SFVHRVRMQl9QQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTcwNj1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNzA4LVxubW0vS2NvbmZpZzo3MDk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTcxMC1cdGRlZl9ib29sIG5cbi0tXG5tbS9LY29uZmlnLTcxMi1cdCAgQWxsb3dzIHRoZSBwYWdlYmxvY2tfb3JkZXIgdmFsdWUgdG8gYmUgZHluYW1pYyBpbnN0ZWFkIG9mIGp1c3Qgc3RhbmRhcmRcbm1tL0tjb25maWc6NzEzOlx0ICBIVUdFVExCX1BBR0VfT1JERVIgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgSHVnZVRMQiBwYWdlIHNpemVzIGF2YWlsYWJsZVxubW0vS2NvbmZpZy03MTQtXHQgIG9uIGEgcGxhdGZvcm0uXG4tLVxubW0vS2NvbmZpZz0xMDE0PWNvbmZpZyBQR1RBQkxFX0hBU19IVUdFX0xFQVZFU1xubW0vS2NvbmZpZzoxMDE1Olx0ZGVmX2Jvb2wgVFJBTlNQQVJFTlRfSFVHRVBBR0UgfHwgSFVHRVRMQl9QQUdFXG5tbS9LY29uZmlnLTEwMTYtXG4tLVxubW0vS2NvbmZpZz0xMDIwPWNvbmZpZyBIQVZFX0dJR0FOVElDX0ZPTElPU1xubW0vS2NvbmZpZzoxMDIxOlx0ZGVmX2Jvb2wgKEhVR0VUTEJfUEFHRSBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfR0lHQU5USUNfUEFHRSkgfHwgXFxcbm1tL0tjb25maWctMTAyMi1cdFx0IChaT05FX0RFVklDRSBcdTAwMjZcdTAwMjYgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzM1OAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgSSBuZWVkIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIHN1cHBvcnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgZnMvS2NvbmZpZ2AuIFRoYXQgbG9jYXRpb24gaXMgaGlnaGx5IHByb2JhYmxlLCBhcyBmaWxlIHN5c3RlbXMgb2Z0ZW4gaGF2ZSB0aGVpciBvd24gY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZmluZWQgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0b3JpZXMuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgd2hlcmUgYENPTkZJR19IVUdFVExCRlNgIGlzIGxvY2F0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBIVUdFVExCRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjQ5LVxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcbmZzL0tjb25maWctMjUxLVx0Ym9vbCBcJiMzNDtIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU4NgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqQ2hlY2tpbmcgS2NvbmZpZyBmb3IgSFVHRVRMQkZTKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7V2hlcmUgd291bGQgSSBzdGFydCBpZiBJIHdhbnRlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgc3RhdGUgb2YgYEhVR0VUTEJGU2Agc3VwcG9ydCB3aXRoaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uPyYjMzQ7LiBXZWxsLCB0aGUgbG9naWNhbCBmaXJzdCBtb3ZlLCB0aGUgbW9zdCBlZmZpY2llbnQgbWV0aG9kLCBpcyB0byBpbW1lZGlhdGVseSBjaGVjayB0aGUgYGZzL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGNhbm9uaWNhbCBwbGFjZSB3aGVyZSBmaWxlc3lzdGVtIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBgSFVHRVRMQkZTYCBpcywgdW5kZW5pYWJseSwgYSBmaWxlc3lzdGVtLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBpdC4gVGhlcmUmIzM5O3Mgbm8gbmVlZCB0byB3YW5kZXIgYXJvdW5kIGxvb2tpbmcgaW4gbXVsdGlwbGUgcGxhY2VzOyBgZnMvS2NvbmZpZ2AgaXMgdGhlIG9idmlvdXMgZmlyc3Qgc3RvcC4gSXQgaXMgdGhlIGxvZ2ljYWwgY2hvaWNlLCBkdWUgdG8gaXRzIG9yZ2FuaXphdGlvbiBhbmQgZXN0YWJsaXNoZWQgcG9zaXRpb24gd2l0aGluIHRoZSBzb3VyY2UgdHJlZS4gVGhpcyBhcHByb2FjaCBzYXZlcyB0aW1lIGFuZCBlbnN1cmVzIEkmIzM5O20gbG9va2luZyBhdCB0aGUgYXV0aG9yaXRhdGl2ZSBzb3VyY2UgZm9yIHRoZSBkZWZpbml0aW9uIGFuZCwgdGhlcmVmb3JlLCB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhhdCBvcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI0NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjQ3Olx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gMjQ4Olx0XHRkZWZfYm9vbCBuXG4gMjQ5Olx0XG4gMjUwOlx0bWVudWNvbmZpZyBIVUdFVExCRlNcbiAyNTE6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4gMjUyOlx0XHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXG4gMjUzOlx0XHRzZWxlY3QgTUVNRkRfQ1JFQVRFXG4gMjU0Olx0XHRzZWxlY3QgUEFEQVRBIGlmIFNNUFxuIDI1NTpcdFx0aGVscFxuIDI1NjpcdFx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXG4gMjU3Olx0XHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcbiAyNTg6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAyNTk6XHRcbiAyNjA6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAyNjE6XHRcbiAyNjI6XHRpZiBIVUdFVExCRlNcbiAyNjM6XHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuIDI2NDpcdFx0Ym9vbCBcJiMzNDtIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXCYjMzQ7XG4gMjY1Olx0XHRkZWZhdWx0IG5cbiAyNjY6XHRcdGRlcGVuZHMgb24gSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE3NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIdWdlIFBhZ2UgTWlncmF0aW9uIENvZGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaHVnZSBwYWdlIG1pZ3JhdGlvbiwgYW5kIHRoZSBrZXkgY29uZmlndXJhdGlvbnMgaGVyZSBhcmUgY2xlYXJseSBgSFVHRVRMQkZTYCBhbmQgYE1JR1JBVElPTmAuIFRoZSBjZW50cmFsIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZGlzc2VjdCBhcmUgYG1vdmVfaHVnZXRsYl9zdGF0ZWAgYW5kIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBIb2xkIG9uIGEgc2Vjb25kLCB0aGF0IGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGZ1bmN0aW9uIGlzIGRlZmluZWQgYXMgYHN0YXRpY2Agd2l0aGluIGBtbS9taWdyYXRlLmNgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgaXQgbWVhbnMgaXRzIHNjb3BlIGlzIGxpbWl0ZWQuIEkmIzM5O2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gYG1tL21pZ3JhdGUuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBpdCYjMzk7cyB1c2VkLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBzb3VyY2UgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9taWdyYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWlncmF0ZS5jPTEzNTU9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi0tXG5tbS9taWdyYXRlLmMtMTQ3MC0gKi9cbm1tL21pZ3JhdGUuYzoxNDcxOnN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMTQ3Mi1cdFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcbi0tXG5tbS9taWdyYXRlLmM9MTYyOT1zdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbi0tXG5tbS9taWdyYXRlLmMtMTY2Ny1cbm1tL21pZ3JhdGUuYzoxNjY4Olx0XHRcdHJjID0gdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKGdldF9uZXdfZm9saW8sXG5tbS9taWdyYXRlLmMtMTY2OS1cdFx0XHRcdFx0XHQgICAgICBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njk4CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsZXJzIG9mIGBtaWdyYXRlX2h1Z2V0bGJzYCoqCgpPa2F5LCBzbyBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCYjMzk7cyBsaWtlbHkgdXNlZCBpbnRlcm5hbGx5IHdpdGhpbiBhIHNwZWNpZmljIG1vZHVsZSBvciBmaWxlLCBhbmQgd2UgZG9uJiMzOTt0IGhhdmUgdG8gdHJhY2UgaXRzIGNhbGxzIGZyb20gYW55d2hlcmUgZWxzZS4gR29vZCwgdGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duLiBOb3csIEkgd2FudCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYWN0dWFsbHkgKmNhdXNpbmcqIHRoYXQgdW5tYXBwaW5nIGFuZCBtb3ZlbWVudCBvZiBodWdlIHBhZ2VzIHRvIG9jY3VyLiBUbyBkbyB0aGF0LCBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgKmNhbGxpbmcqIGBtaWdyYXRlX2h1Z2V0bGJzYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVhbCBsb2dpYyBvZiB0aGlzIHByb2Nlc3MgbGllcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRpZmZlcmVudCBzY2VuYXJpb3Mgd2hlcmUgYSBodWdlIHBhZ2UgaXMgYmVpbmcgc2hpZnRlZCBhcm91bmQuIFRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIE5VTUEgYmFsYW5jaW5nLCBvciBwZXJoYXBzIGV2ZW4gaG90cGx1Z2dpbmcgb2YgbWVtb3J5LiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGZyb20gYG1pZ3JhdGVfaHVnZXRsYnNgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoeSB0aGVzZSBwYWdlIG1pZ3JhdGlvbnMgYXJlIGhhcHBlbmluZy4gS25vd2luZyB0aGUgY2FsbGVycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWlncmF0ZV9odWdldGxicyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21pZ3JhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9taWdyYXRlLmM9MTYxMT1zdHJ1Y3QgbWlncmF0ZV9wYWdlc19zdGF0cyB7XG4tLVxubW0vbWlncmF0ZS5jLTE2MjgtICovXG5tbS9taWdyYXRlLmM6MTYyOTpzdGF0aWMgaW50IG1pZ3JhdGVfaHVnZXRsYnMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcbm1tL21pZ3JhdGUuYy0xNjMwLVx0XHRcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxuLS1cbm1tL21pZ3JhdGUuYz0yMDkxPWludCBtaWdyYXRlX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZyb20sIG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXG4tLVxubW0vbWlncmF0ZS5jLTIxMDYtXG5tbS9taWdyYXRlLmM6MjEwNzpcdHJjX2dhdGhlciA9IG1pZ3JhdGVfaHVnZXRsYnMoZnJvbSwgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbywgcHJpdmF0ZSxcbm1tL21pZ3JhdGUuYy0yMTA4LVx0XHRcdFx0ICAgICBtb2RlLCByZWFzb24sIFx1MDAyNnN0YXRzLCBcdTAwMjZyZXRfZm9saW9zKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIxNAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBIdWdldGxiIFBhZ2UgTWlncmF0aW9uKioKCk9rYXksIHNvIGBtaWdyYXRlX3BhZ2VzYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgcGFnZSBtaWdyYXRpb24sIHdoaWNoIG1ha2VzIHNlbnNlLiBCdXQgdG8gcmVhbGx5IGRpZyBpbnRvIHRoZSBodWdldGxiLXNwZWNpZmljIHN0dWZmLCBJIG5lZWQgdG8gem9vbSBpbi4gVGhlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBoZXJlIGFyZSBjbGVhcmx5IGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGFuZCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYC4KCkhhbmcgb24sIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBpcyBpZGVhbCBiZWNhdXNlIEkgY2FuIGZvY3VzIG9uIGl0IGRpcmVjdGx5LiBBbmQgd2hpbGUgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgaXMgc3RhdGljLCBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gdGFyZ2V0IGl0IGp1c3QgZmluZSBhcyBsb25nIGFzIGl04oCZcyBpbiB0aGUga2VybmVsIGltYWdlLiBBaCwgcmlnaHQsIHN5emthbGxlciB1c2VzIGtjb3YsIHdoaWNoIHVzZXMgUEMgdHJhY2tpbmcuIFRoZSBmdW5jdGlvbiBuYW1lIGlzIHJlc29sdmVkIGZyb20gZGVidWcgaW5mbywgc28gaXQmIzM5O3MgYSBub24taXNzdWUuIFNvLCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBpcyBwZXJmZWN0bHkgZmluZSBhcyBhIHRhcmdldC4KCkFsc28sIHRoaW5raW5nIGFib3V0IGl0LCBgbWlncmF0ZV9wYWdlc2AgaXMgYSBiaXQgdG9vIGdlbmVyYWwgc2luY2UgaXQgaGFuZGxlcyAqYWxsKiBwYWdlIG1pZ3JhdGlvbnMuIEZvY3VzaW5nIG9uIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgLCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCwgYW5kIGBtaWdyYXRlX2h1Z2V0bGJzYCB3aWxsIGJlIG11Y2ggbW9yZSBlZmZpY2llbnQgZm9yIHRoaXMgcGFydGljdWxhciB0YXNrLgoKTm93LCBhIHF1aWNrIGNoZWNrOiBhcmUgdGhlcmUgYW55IG90aGVyIGNhbGxlcnMgb2YgYG1vdmVfaHVnZXRsYl9zdGF0ZWA/IE5vcGUsIHRoZSBncmVwIG91dHB1dCBjbGVhcmx5IHNob3dlZCBpdCYjMzk7cyBvbmx5IGNhbGxlZCB3aXRoaW4gYG1tL21pZ3JhdGUuY2AgaW5zaWRlIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLiBTbyB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgZm9yIHBlYWNlIG9mIG1pbmQsIGlmIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIHN0YXRpYyBvciBub3QuIE9rYXksIGluIGBtbS9odWdldGxiLmNgOiBgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKWAuIE5vcGUsIGl04oCZcyBub3Qgc3RhdGljLiBHcmVhdCwgc28gSSBoYXZlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkOiBgSFVHRVRMQkZTYCBhbmQgYE1JR1JBVElPTmAuCgpXYWl0LCBpc24mIzM5O3QgYE1JR1JBVElPTmAgYSBib29sZWFuIGNvbmZpZz8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGBtbS9LY29uZmlnYCBqdXN0IHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9Njg1PWNvbmZpZyBOVU1BX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNjk1LVxubW0vS2NvbmZpZzo2OTY6Y29uZmlnIE1JR1JBVElPTlxubW0vS2NvbmZpZy02OTctXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTM1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBzZWUgd2hhdCBJIGNhbiBtYWtlIG9mIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgdGhlIGBNSUdSQVRJT05gIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIGBNSUdSQVRJT05gIGlzIGEgYm9vbGVhbiBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0IHdoYXQmIzM5O3Mgc3RyYW5nZSBpcyB0aGF0IGl0IGRvZXNuJiMzOTt0IHNlZW0gdG8gaGF2ZSBhIHByb21wdCBhc3NvY2lhdGVkIHdpdGggaXQuIFRoYXQgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IGJlaW5nIHNlbGVjdGVkIG9yIGVuYWJsZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiBzb21lIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBNeSBndXQgdGVsbHMgbWUgdGhpcyBpcyBwcm9iYWJseSBhbiBpbXBvcnRhbnQga2V5IHBpZWNlIG9mIGxvZ2ljIHRoYXQmIzM5O3MgYmVlbiBmYWN0b3JlZCBvdXQgZm9yIG1vZHVsYXJpdHkuIE5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hpY2gqIG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBgTUlHUkFUSU9OYCB0byB0cnVlIG9yIGZhbHNlLiBUaW1lIHRvIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgaXRzIHRyaWdnZXJpbmcgY29uZGl0aW9ucy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHRoaXMgYm9vbGVhbiBpcyBnZXR0aW5nIGZsaXBwZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBNSUdSQVRJT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz01OTE9Y29uZmlnIE1FTU9SWV9IT1RSRU1PVkVcbi0tXG5tbS9LY29uZmlnLTU5NC1cdGRlcGVuZHMgb24gTUVNT1JZX0hPVFBMVUdcbm1tL0tjb25maWc6NTk1Olx0c2VsZWN0IE1JR1JBVElPTlxubW0vS2NvbmZpZy01OTYtXG4tLVxubW0vS2NvbmZpZz02NTQ9Y29uZmlnIENPTVBBQ1RJT05cbi0tXG5tbS9LY29uZmlnLTY1Ni1cdGRlZmF1bHQgeVxubW0vS2NvbmZpZzo2NTc6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY1OC1cdGRlcGVuZHMgb24gTU1VXG4tLVxubW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXG4tLVxubW0vS2NvbmZpZy02ODgtXHRkZXBlbmRzIG9uIE5VTUEgXHUwMDI2XHUwMDI2IE1NVVxubW0vS2NvbmZpZzo2ODk6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTY5MC1cdGhlbHBcbi0tXG5tbS9LY29uZmlnPTEwNjc9Y29uZmlnIENNQVxuLS1cbm1tL0tjb25maWctMTA2OS1cdGRlcGVuZHMgb24gTU1VXG5tbS9LY29uZmlnOjEwNzA6XHRzZWxlY3QgTUlHUkFUSU9OXG5tbS9LY29uZmlnLTEwNzEtXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYyMAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gZm9yIEh1Z2UgUGFnZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IGBDT01QQUNUSU9OYCByZWxhdGVzIHRvIGBNSUdSQVRJT05gIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhlIHRleHQgaW5kaWNhdGVzIHRoYXQgYENPTVBBQ1RJT05gIHNlbGVjdHMgYE1JR1JBVElPTmAsIGFuZCBzaW5jZSBgQ09NUEFDVElPTmAgc2VlbXMgdG8gYmUgdGhlIGRlZmF1bHQgc2V0dGluZyAoaW1wbGllZCBieSAmIzM5O3kmIzM5OyksIEkmIzM5O20gaW5mZXJyaW5nIHRoYXQgYE1JR1JBVElPTmAgaXMgdmVyeSBsaWtlbHkgZW5hYmxlZCBieSBkZWZhdWx0IGFzIHdlbGwuIFRoYXQmIzM5O3MgYSBrZXkgb2JzZXJ2YXRpb24uCgpOb3csIG15IGZvY3VzIHNoaWZ0cyB0byBgSFVHRVRMQkZTYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGl0JiMzOTtzIGEgYG1lbnVjb25maWdgIG9wdGlvbi4gVGhpcyBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGF0IGl0cyBjb25maWd1cmF0aW9uIHN0YXRlIHNob3VsZCBiZSBkb2N1bWVudGVkIHdpdGhpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgIHNlY3Rpb24uIEkgbmVlZCB0byB2ZXJpZnkgaWYgdGhpcyBpcyBhY2N1cmF0ZSwgYW5kIGl0IHNlZW1zIHRvIG1ha2Ugc2Vuc2Ugd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlLgoKVG8gYmUgdGhvcm91Z2gsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcywgc3VjaCBhcyBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIEkgYWx3YXlzIGxpa2UgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuCgpGaW5hbGx5LCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhlIGBmcy9LY29uZmlnYCBmaWxlLCBzcGVjaWZpY2FsbHkgdGhlIHNlY3Rpb24gcmVsYXRlZCB0byBgSFVHRVRMQkZTYC4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBhbmQgYW55IGRlcGVuZGVuY2llcy4gVGhhdCBzaG91bGQgc29saWRpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhpcyBpcyBhbGwgbGlua2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTcwNj1jb25maWcgQVJDSF9FTkFCTEVfVEhQX01JR1JBVElPTlxuLS1cbm1tL0tjb25maWctNzA4LVxubW0vS2NvbmZpZzo3MDk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXG5tbS9LY29uZmlnLTcxMC1cdGRlZl9ib29sIG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwOTIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS2NvbmZpZyBMb2NhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBzb21ldGhpbmcga2VybmVsLXJlbGF0ZWQsIGxpa2VseSBtZW1vcnkgbWFuYWdlbWVudCBiYXNlZCBvbiB0aGUgbmFtZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYEhVR0VUTEJfUEFHRWAgaXMgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBuYXR1cmUsIGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiBBbmQgYmluZ28sIHRoZSBkZWZpbml0aW9uIHNlZW1zIHRvIGJlIGluIGBmcy9LY29uZmlnYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgbG9jYXRpb247IG9mdGVuLCBzZXR0aW5ncyByZWxhdGVkIHRvIGZpbGUgc3lzdGVtcyBhbmQsIGJ5IGV4dGVuc2lvbiwgbWVtb3J5IHVzYWdlIHBhdHRlcm5zIHRoZXkgbWlnaHQgc3VwcG9ydCwgZW5kIHVwIHRoZXJlLiBUaGlzIGlzbiYjMzk7dCBzdXJwcmlzaW5nLCBidXQgaXQmIzM5O3MgZ29vZCB0byBjb25maXJtLiBJdCBoZWxwcyBtZSB0byBjb250ZXh0dWFsaXplIHRoZSBzZXR0aW5nIGFuZCB3aGVyZSB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb2RlLiBOb3cgSSBjYW4gbW92ZSBmb3J3YXJkLCBjb25maWRlbnQgdGhhdCBJIGtub3cgd2hlcmUgdGhlIHNldHRpbmcgb3JpZ2luYXRlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMTk6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJfUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXG5mcy9LY29uZmlnOjI2Mzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxuZnMvS2NvbmZpZy0yNjQtXHRib29sIFwmIzM0O0h1Z2VUTEIgVm1lbW1hcCBPcHRpbWl6YXRpb24gKEhWTykgZGVmYXVsdHMgdG8gb25cJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI3MT1lbmRpZiAjIEhVR0VUTEJGU1xuZnMvS2NvbmZpZy0yNzItXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXG5mcy9LY29uZmlnLTI3NC1cdGRlZl9ib29sIEhVR0VUTEJGU1xuLS1cbmZzL0tjb25maWctMjc2LVxuZnMvS2NvbmZpZzoyNzc6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG5mcy9LY29uZmlnLTI3OC1cdGRlZl9ib29sIEhVR0VUTEJfUEFHRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAxOToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTUwNAoJCQkJCQkJb3V0cHV0OiAxMzQKCQkJCQkJCXRob3VnaHRzOiA3ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIE1pZ3JhdGlvbiBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBgSFVHRVRMQl9QQUdFYCBpcyBsaW5rZWQgdG8gYEhVR0VUTEJGU2AsIHRoYXQmIzM5O3Mgb3VyIHN0YXJ0aW5nIHBvaW50LiBgSFVHRVRMQkZTYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbiBoZXJlLiBMZXQgbWUgYnJlYWsgZG93biB0aGUgZnV6emluZyBzdHJhdGVneSBiYXNlZCBvbiB0aGlzIHBhdGNoLgoKVGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmc7IGl0IGZpeGVzIGEgYnVnIGluIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgLiBUaGUgb3JpZ2luYWwgY29kZSBwcmVtYXR1cmVseSBleGl0ZWQgaWYgYG5ld19uaWRgIGFuZCBgb2xkX25pZGAgd2VyZSB0aGUgc2FtZSwgbWlzc2luZyB0aGUgY3J1Y2lhbCBzdGVwcyBvZiBzZXR0aW5nIHRoZSBuZXcgZm9saW8gYXMgbWlncmF0YWJsZSBhbmQgYWRkaW5nIGl0IHRvIHRoZSBhY3RpdmUgbGlzdC4gVGhhdCYjMzk7cyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBodWdlIHBhZ2VzIGFyZSBtaWdyYXRlZC4KClRoZSBrZXkgc3ltYm9scyB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZyBhcmUgYG1vdmVfaHVnZXRsYl9zdGF0ZWAsIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgLCBhbmQgYG1pZ3JhdGVfaHVnZXRsYnNgLgoKTm93IGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBXZSBuZWVkIHRvIGVuYWJsZSBgSFVHRVRMQkZTYC4gYE1JR1JBVElPTmAgaXMgYWxzbyByZWxldmFudC4gSSByZWNhbGwgYE1JR1JBVElPTmAgYmVpbmcgc2VsZWN0ZWQgYnkgYENPTVBBQ1RJT05gLCB3aGljaCBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdC4gU2luY2UgdGhlIHByb21wdCBzYXlzICYjMzQ7ZXhwbGljaXRseSBlbmFibGVkJiMzNDssIGl0JiMzOTtzIHByb2JhYmx5IGJlc3QgdG8gaW5jbHVkZSBib3RoLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgdGhlIHRlc3QgY29uZmlndXJhdGlvbiBpcyBhbGlnbmVkIHdpdGggdGhlIGNvZGUgYmVpbmcgbW9kaWZpZWQuCgpIb3dldmVyLCBgTUlHUkFUSU9OYCBkb2VzbiYjMzk7dCBzZWVtIHRvIGhhdmUgYSBkaXJlY3QgcHJvbXB0IGluIHRoZSBgLmNvbmZpZ2AgZmlsZS4gSXQmIzM5O3Mgc2VsZWN0ZWQgaW1wbGljaXRseS4gVGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uIGdlbmVyYXRvciBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhpcyBzZWxlY3Rpb24gYXV0b21hdGljYWxseSwgb3IgaXQgbWlnaHQganVzdCBlbmFibGUgYENPTVBBQ1RJT05gLiBJJiMzOTtsbCBpbmNsdWRlIGBNSUdSQVRJT05gIGFueXdheSwgYW5kIHNlZSBob3cgdGhlIGNvbmZpZyBnZW5lcmF0b3IgaGFuZGxlcyBpdC4KCkkmIzM5O3ZlIHJlLXJlYWQgdGhlIHBhdGNoIHRvIGJlIHN1cmU6CgpgYGBjCi0JCWlmIChuZXdfbmlkID09IG9sZF9uaWQpCi0JCQlyZXR1cm47Ci0JCXNwaW5fbG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwotCQlpZiAoaC0mZ3Q7c3VycGx1c19odWdlX3BhZ2VzX25vZGVbb2xkX25pZF0pIHsKLQkJCWgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdLS07Ci0JCQloLSZndDtzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXdfbmlkXSYjNDM7JiM0Mzs7CiYjNDM7CQlpZiAobmV3X25pZCAhPSBvbGRfbmlkKSB7CiYjNDM7CQkJc3Bpbl9sb2NrX2lycSgmYW1wO2h1Z2V0bGJfbG9jayk7CiYjNDM7CQkJaWYgKGgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7CiYjNDM7CQkJCWgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdLS07CiYjNDM7CQkJCWgtJmd0O3N1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25ld19uaWRdJiM0MzsmIzQzOzsKJiM0MzsJCQl9CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKIAkJfQotCQlzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwpgYGAKClllcywgaXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93LiBUaGUgb2xkIGNvZGUgcmV0dXJuZWQgZWFybHkgaWYgYG5ld19uaWQgPT0gb2xkX25pZGAuIE5vdywgaXQgc2tpcHMgdGhlIGBpZmAgYmxvY2suIEFmdGVyIHRoZSBpZiBibG9jaywgaXQgZW5hYmxlcyBgbWlncmF0YWJsZWAgZm9yIHRoZSBuZXcgZm9saW8uCgpBbmQgdGhlIHN1YnNlcXVlbnQgY29kZToKCmBgYGMKCS8qCgkgKiBPdXIgb2xkIGZvbGlvIGlzIGlzb2xhdGVkIGFuZCBoYXMgJiMzNDttaWdyYXRhYmxlJiMzNDsgY2xlYXJlZCB1bnRpbCBpdAoJICogaXMgcHV0YmFjay4gQXMgbWlncmF0aW9uIHN1Y2NlZWRlZCwgc2V0IHRoZSBuZXcgZm9saW8gJiMzNDttaWdyYXRhYmxlJiMzNDsKCSAqIGFuZCBhZGQgaXQgdG8gdGhlIGFjdGl2ZSBsaXN0LgoJICovCglzcGluX2xvY2tfaXJxKCZhbXA7aHVnZXRsYl9sb2NrKTsKCWZvbGlvX3NldF9odWdldGxiX21pZ3JhdGFibGUobmV3X2ZvbGlvKTsKCWxpc3RfbW92ZV90YWlsKCZhbXA7bmV3X2ZvbGlvLSZndDtscnUsICZhbXA7KGZvbGlvX2hzdGF0ZShuZXdfZm9saW8pKS0mZ3Q7aHVnZXBhZ2VfYWN0aXZlbGlzdCk7CglzcGluX3VubG9ja19pcnEoJmFtcDtodWdldGxiX2xvY2spOwpgYGAKClRoaXMgZW5zdXJlcyB0aGUgbmV3bHkgbWlncmF0ZWQgZm9saW8gaXMgcHJvcGVybHkgZmxhZ2dlZCBhcyBtaWdyYXRhYmxlIGFuZCBhZGRlZCB0byB0aGUgYWN0aXZlIGxpc3QsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlbHkgZnVuY3Rpb25hbCBjaGFuZ2UuCgpBbHJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDE5OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW92ZV9odWdldGxiX3N0YXRlJiMzNDssCiAgICAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2h1Z2V0bGJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSBpZiBgbmV3X25pZCA9PSBvbGRfbmlkYCwgc2tpcHBpbmcgdGhlIGxvZ2ljIHRvIHNldCB0aGUgbmV3IGZvbGlvIGFzIG1pZ3JhdGFibGUgYW5kIGFkZGluZyBpdCB0byB0aGUgYWN0aXZlIGxpc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBodWdlIHBhZ2UgbWlncmF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7TUlHUkFUSU9OJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bW92ZV9odWdldGxiX3N0YXRlJiMzNDssCiAgICAmIzM0O3VubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZSYjMzQ7LAogICAgJiMzNDttaWdyYXRlX2h1Z2V0bGJzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSBpZiBgbmV3X25pZCA9PSBvbGRfbmlkYCwgc2tpcHBpbmcgdGhlIGxvZ2ljIHRvIHNldCB0aGUgbmV3IGZvbGlvIGFzIG1pZ3JhdGFibGUgYW5kIGFkZGluZyBpdCB0byB0aGUgYWN0aXZlIGxpc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBodWdlIHBhZ2UgbWlncmF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTE6MzQuNzcwODUxNzkxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2OTU5ODQwNzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW92ZV9odWdldGxiX3N0YXRlXCIsXG4gICAgXCJ1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VcIixcbiAgICBcIm1pZ3JhdGVfaHVnZXRsYnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9odWdldGxiX3N0YXRlYCB3aGVyZSBpdCB3b3VsZCByZXR1cm4gZWFybHkgaWYgYG5ld19uaWQgPT0gb2xkX25pZGAsIHNraXBwaW5nIHRoZSBsb2dpYyB0byBzZXQgdGhlIG5ldyBmb2xpbyBhcyBtaWdyYXRhYmxlIGFuZCBhZGRpbmcgaXQgdG8gdGhlIGFjdGl2ZSBsaXN0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaHVnZSBwYWdlIG1pZ3JhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTE6MzQuNzcwODU5MDkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTE3MDcwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxMWFlMjZlOTcwMzkzYTVkYTE4OGJhMzA1YTJhOTFlNzYyYTkzNjlkXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMTk6MTE6MzMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXFxuaW5kZXggNTcxMjEyYjgwODM1ZWMuLmNhZmFkZmRiNjNjMGU3IDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC03MjExLDE0ICs3MjExLDE0IEBAIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlXFxuIFxcdFxcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHBlci1ub2RlIHN1cnBsdXMgc3RhdGVcXG4gXFx0XFx0ICogd2hlbiB3ZSBkbyBub3QgY3Jvc3MgdGhlIG5vZGUuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAobmV3X25pZCA9PSBvbGRfbmlkKVxcbi1cXHRcXHRcXHRyZXR1cm47XFxuLVxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuLVxcdFxcdGlmIChoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXSkge1xcbi1cXHRcXHRcXHRoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tO1xcbi1cXHRcXHRcXHRoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXdfbmlkXSsrO1xcbitcXHRcXHRpZiAobmV3X25pZCAhPSBvbGRfbmlkKSB7XFxuK1xcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuK1xcdFxcdFxcdGlmIChoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXSkge1xcbitcXHRcXHRcXHRcXHRoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tO1xcbitcXHRcXHRcXHRcXHRoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXdfbmlkXSsrO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjExOjM1LjM4MzUzMDczNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ2MzQ3MTUxMDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW92ZV9odWdldGxiX3N0YXRlXCIsXG4gICAgXCJ1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VcIixcbiAgICBcIm1pZ3JhdGVfaHVnZXRsYnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9odWdldGxiX3N0YXRlYCB3aGVyZSBpdCB3b3VsZCByZXR1cm4gZWFybHkgaWYgYG5ld19uaWQgPT0gb2xkX25pZGAsIHNraXBwaW5nIHRoZSBsb2dpYyB0byBzZXQgdGhlIG5ldyBmb2xpbyBhcyBtaWdyYXRhYmxlIGFuZCBhZGRpbmcgaXQgdG8gdGhlIGFjdGl2ZSBsaXN0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaHVnZSBwYWdlIG1pZ3JhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxMWFlMjZlOTcwMzkzYTVkYTE4OGJhMzA1YTJhOTFlNzYyYTkzNjlkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgNyAxOToxMTozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNTcxMjEyYjgwODM1ZWMuLmNhZmFkZmRiNjNjMGU3IDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC03MjExLDE0ICs3MjExLDE0IEBAIHZvaWQgbW92ZV9odWdldGxiX3N0YXRlKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLCBzdHJ1Y3QgZm9saW8gKm5ld19mb2xpbywgaW50IHJlXG4gXHRcdCAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHBlci1ub2RlIHN1cnBsdXMgc3RhdGVcbiBcdFx0ICogd2hlbiB3ZSBkbyBub3QgY3Jvc3MgdGhlIG5vZGUuXG4gXHRcdCAqL1xuLVx0XHRpZiAobmV3X25pZCA9PSBvbGRfbmlkKVxuLVx0XHRcdHJldHVybjtcbi1cdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuLVx0XHRpZiAoaC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXSkge1xuLVx0XHRcdGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbb2xkX25pZF0tLTtcbi1cdFx0XHRoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25ld19uaWRdKys7XG4rXHRcdGlmIChuZXdfbmlkICE9IG9sZF9uaWQpIHtcbitcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4rXHRcdFx0aWYgKGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbb2xkX25pZF0pIHtcbitcdFx0XHRcdGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbb2xkX25pZF0tLTtcbitcdFx0XHRcdGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbbmV3X25pZF0rKztcbitcdFx0XHR9XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHRcdH1cbi1cdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4gXHR9XG4gXG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTE6MzUuMzgzNTMzNjc2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI0NDc5MTM3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL2h1Z2V0bGIuY2AsIHNwZWNpZmljYWxseSB0aGUgYG1vdmVfaHVnZXRsYl9zdGF0ZWAgZnVuY3Rpb24uIFRoZSBrZXkgY2hhbmdlIHNlZW1zIHRvIGJlIGluIHRoZSBjb25kaXRpb25hbCBjaGVjayBpbnZvbHZpbmcgYG5ld19uaWRgIGFuZCBgb2xkX25pZGAuIEJlZm9yZSwgdGhlIGNvZGUgd291bGQgaW1tZWRpYXRlbHkgcmV0dXJuIGlmIHRoZSBuZXcgbm9kZSBJRCB3YXMgdGhlIHNhbWUgYXMgdGhlIG9sZCBvbmU6XG5cbmBgYGNcblx0XHRpZiAobmV3X25pZCA9PSBvbGRfbmlkKVxuXHRcdFx0cmV0dXJuO1xuYGBgXG5cbk5vdywgdGhhdCdzIGJlZW4gZmxpcHBlZDpcblxuYGBgY1xuXHRcdGlmIChuZXdfbmlkICE9IG9sZF9uaWQpXG5gYGBcblxuVGhlIG9sZCBsb2dpYyBpbW1lZGlhdGVseSBleGl0ZWQgdGhlIGZ1bmN0aW9uIGlmIHRoZSBub2RlIElEcyB3ZXJlIHRoZSBzYW1lLiBUaGUgbmV3IGxvZ2ljIHByb2NlZWRzIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlIGJsb2NrIG9ubHkgaWYgdGhleSBhcmUgZGlmZmVyZW50LlxuXG5UaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBwYXJ0IG9mIHRoaXMgaXMgdGhhdCB0aGUgb3JpZ2luYWwgY2hlY2sgd2FzIGRlc2lnbmVkIHRvIGF2b2lkIGV4ZWN1dGlvbiBvZiB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24gaWYgdGhlIG5vZGUgSURzIHdlcmUgdGhlIHNhbWUuIFRoZSBjaGFuZ2Ugbm93IGFsbG93cyBleGVjdXRpb24gb2YgdGhlIHJlc3Qgb2YgdGhlIGZ1bmN0aW9uIGV2ZW4gaWYgdGhlIG5vZGUgSURzIGFyZSB0aGUgc2FtZS5cblxuRXNzZW50aWFsbHksIGJ5IHJlbW92aW5nIHRoZSBgcmV0dXJuYCwgdGhlIGNvZGUgbm93IGFsd2F5cyBwcm9jZWVkcyB0byB1cGRhdGUgdGhlIGBzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZWAgYXJyYXkgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBOVU1BIG5vZGUgY2hhbmdlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIGNvc21ldGljIG9uZS4gQmVmb3JlLCB0aGUgcmVzdCBvZiB0aGUgZnVuY3Rpb24gd2FzIHNraXBwZWQgdW5kZXIgYSBzcGVjaWZpYyBjb25kaXRpb24uIE5vdywgdGhhdCBza2lwIGlzIHJlbW92ZWQuIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIGhvdyBgbW92ZV9odWdldGxiX3N0YXRlYCBpcyB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSBhbmQgd2hldGhlciB0aGlzIGlzIGEgYnVnIGZpeCBvciBhbiBpbnRlbnRpb25hbCBjaGFuZ2UgaW4gYmVoYXZpb3IuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBzaXRlcyB0byBzZWUgd2hhdCB0aGUgaW1wYWN0IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTE6NDMuNjI4MzI3NDkyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MzMxODY3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3ZlX2h1Z2V0bGJfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz03MTc2PXZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmMtNzE4NC1cXG5tbS9odWdldGxiLmM6NzE4NTp2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXFxubW0vaHVnZXRsYi5jLTcxODYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxMTo0NC4yMTE2NTE2ODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTYyOTkyNzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGNvZGU6XG5cbioqQW5hbHl6aW5nIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGluIGBtbS9odWdldGxiLmNgKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGluIHRoZSBodWdldGxiIGltcGxlbWVudGF0aW9uLiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aGUgdHJhbnNmZXIgb2YgSHVnZVRMQiBzdGF0ZSB3aGVuLCBmb3IgZXhhbXBsZSwgYSBIdWdlVExCIHBhZ2UgbmVlZHMgdG8gYmUgbW92ZWQgYmV0d2VlbiBkaWZmZXJlbnQgTlVNQSBub2RlcyBvciBzb21lIG90aGVyIHNpbWlsYXIgb3BlcmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5ICp3aGF0KiBzdGF0ZSBpcyBiZWluZyBtb3ZlZCBhbmQgKmhvdyogaXQncyBoYW5kbGVkLiBJcyBpdCBqdXN0IHRoZSBwYWdlIHRhYmxlIGVudHJpZXMsIG9yIGFyZSB0aGVyZSBtb3JlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBsaWtlIG1ldGFkYXRhLCBhY2NvdW50aW5nIGluZm9ybWF0aW9uLCBvciBldmVuIHRoZSBwYWdlIGl0c2VsZj8gSXTigJlzIGNydWNpYWwgdG8ga25vdyBpZiB0aGlzIG9wZXJhdGlvbiBpbnZvbHZlcyBhbnkgcG90ZW50aWFsIGRhdGEgbG9zcyBvciBpbmNvbnNpc3RlbmN5LCB3aGljaCByZXF1aXJlcyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiBtZW1vcnkgbWFuYWdlbWVudCBpbiBhIG11bHRpLXRocmVhZGVkLCBOVU1BIGF3YXJlIGVudmlyb25tZW50LiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNyaXRpY2FsIHNlY3Rpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBhbGdvcml0aG0gYmVpbmcgdXNlZCB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRoZSBtb3ZlLiBUaGUgZm9jdXMgd2lsbCBiZSB0byBzZWUgaWYgdGhlcmUgYXJlIHJhY2UgY29uZGl0aW9ucyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQgaW4gcHJldmlvdXMgcmV2aWV3cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1MywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjExOjQ3Ljc3NDY0ODkyN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4Nzc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzE4NSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjcxODU6XFx0dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxcbjcxODY6XFx0e1xcbjcxODc6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pO1xcbjcxODg6XFx0XFxuNzE4OTpcXHRcXHRodWdldGxiX2Nncm91cF9taWdyYXRlKG9sZF9mb2xpbywgbmV3X2ZvbGlvKTtcXG43MTkwOlxcdFxcdGZvbGlvX3NldF9vd25lcl9taWdyYXRlX3JlYXNvbihuZXdfZm9saW8sIHJlYXNvbik7XFxuNzE5MTpcXHRcXG43MTkyOlxcdFxcdC8qXFxuNzE5MzpcXHRcXHQgKiB0cmFuc2ZlciB0ZW1wb3Jhcnkgc3RhdGUgb2YgdGhlIG5ldyBodWdldGxiIGZvbGlvLiBUaGlzIGlzXFxuNzE5NDpcXHRcXHQgKiByZXZlcnNlIHRvIG90aGVyIHRyYW5zaXRpb25zIGJlY2F1c2UgdGhlIG5ld3BhZ2UgaXMgZ29pbmcgdG9cXG43MTk1OlxcdFxcdCAqIGJlIGZpbmFsIHdoaWxlIHRoZSBvbGQgb25lIHdpbGwgYmUgZnJlZWQgc28gaXQgdGFrZXMgb3ZlclxcbjcxOTY6XFx0XFx0ICogdGhlIHRlbXBvcmFyeSBzdGF0dXMuXFxuNzE5NzpcXHRcXHQgKlxcbjcxOTg6XFx0XFx0ICogQWxzbyBub3RlIHRoYXQgd2UgaGF2ZSB0byB0cmFuc2ZlciB0aGUgcGVyLW5vZGUgc3VycGx1cyBzdGF0ZVxcbjcxOTk6XFx0XFx0ICogaGVyZSBhcyB3ZWxsIG90aGVyd2lzZSB0aGUgZ2xvYmFsIHN1cnBsdXMgY291bnQgd2lsbCBub3QgbWF0Y2hcXG43MjAwOlxcdFxcdCAqIHRoZSBwZXItbm9kZSdzLlxcbjcyMDE6XFx0XFx0ICovXFxuNzIwMjpcXHRcXHRpZiAoZm9saW9fdGVzdF9odWdldGxiX3RlbXBvcmFyeShuZXdfZm9saW8pKSB7XFxuNzIwMzpcXHRcXHRcXHRpbnQgb2xkX25pZCA9IGZvbGlvX25pZChvbGRfZm9saW8pO1xcbjcyMDQ6XFx0XFx0XFx0aW50IG5ld19uaWQgPSBmb2xpb19uaWQobmV3X2ZvbGlvKTtcXG43MjA1OlxcdFxcbjcyMDY6XFx0XFx0XFx0Zm9saW9fc2V0X2h1Z2V0bGJfdGVtcG9yYXJ5KG9sZF9mb2xpbyk7XFxuNzIwNzpcXHRcXHRcXHRmb2xpb19jbGVhcl9odWdldGxiX3RlbXBvcmFyeShuZXdfZm9saW8pO1xcbjcyMDg6XFx0XFxuNzIwOTpcXHRcXG43MjEwOlxcdFxcdFxcdC8qXFxuNzIxMTpcXHRcXHRcXHQgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHRyYW5zZmVyIHRoZSBwZXItbm9kZSBzdXJwbHVzIHN0YXRlXFxuNzIxMjpcXHRcXHRcXHQgKiB3aGVuIHdlIGRvIG5vdCBjcm9zcyB0aGUgbm9kZS5cXG43MjEzOlxcdFxcdFxcdCAqL1xcbjcyMTQ6XFx0XFx0XFx0aWYgKG5ld19uaWQgIT0gb2xkX25pZCkge1xcbjcyMTU6XFx0XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG43MjE2OlxcdFxcdFxcdFxcdGlmIChoLVxcdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXSkge1xcbjcyMTc6XFx0XFx0XFx0XFx0XFx0aC1cXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbb2xkX25pZF0tLTtcXG43MjE4OlxcdFxcdFxcdFxcdFxcdGgtXFx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25ld19uaWRdKys7XFxuNzIxOTpcXHRcXHRcXHRcXHR9XFxuNzIyMDpcXHRcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuNzIyMTpcXHRcXHRcXHR9XFxuNzIyMjpcXHRcXHR9XFxuNzIyMzpcXHRcXG43MjI0OlxcdFxcdC8qXFxuNzIyNTpcXHRcXHQgKiBPdXIgb2xkIGZvbGlvIGlzIGlzb2xhdGVkIGFuZCBoYXMgXFxcIm1pZ3JhdGFibGVcXFwiIGNsZWFyZWQgdW50aWwgaXRcXG43MjI2OlxcdFxcdCAqIGlzIHB1dGJhY2suIEFzIG1pZ3JhdGlvbiBzdWNjZWVkZWQsIHNldCB0aGUgbmV3IGZvbGlvIFxcXCJtaWdyYXRhYmxlXFxcIlxcbjcyMjc6XFx0XFx0ICogYW5kIGFkZCBpdCB0byB0aGUgYWN0aXZlIGxpc3QuXFxuNzIyODpcXHRcXHQgKi9cXG43MjI5OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuNzIzMDpcXHRcXHRmb2xpb19zZXRfaHVnZXRsYl9taWdyYXRhYmxlKG5ld19mb2xpbyk7XFxuNzIzMTpcXHRcXHRsaXN0X21vdmVfdGFpbChcXHUwMDI2bmV3X2ZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjYoZm9saW9faHN0YXRlKG5ld19mb2xpbykpLVxcdTAwM2VodWdlcGFnZV9hY3RpdmVsaXN0KTtcXG43MjMyOlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG43MjMzOlxcdH1cXG43MjM0OlxcdFxcbjcyMzU6XFx0LypcXG43MjM2OlxcdCAqIElmIEB0YWtlX2xvY2tzIGlzIGZhbHNlLCB0aGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgbm8gY29uY3VycmVudCBwYWdlIHRhYmxlXFxuNzIzNzpcXHQgKiBhY2Nlc3MgY2FuIGhhcHBlbiAoZXhjZXB0IGZvciBndXBfZmFzdCgpIGFuZCBoYXJkd2FyZSBwYWdlIHdhbGtzKS5cXG43MjM4OlxcdCAqIElmIEB0YWtlX2xvY2tzIGlzIHRydWUsIHdlIHRha2UgdGhlIGh1Z2V0bGIgVk1BIGxvY2sgKHRvIGxvY2sgb3V0IHRoaW5ncyBsaWtlXFxuNzIzOTpcXHQgKiBjb25jdXJyZW50IHBhZ2UgZmF1bHQgaGFuZGxpbmcpIGFuZCB0aGUgZmlsZSBybWFwIGxvY2suXFxuNzI0MDpcXHQgKi9cXG43MjQxOlxcdHN0YXRpYyB2b2lkIGh1Z2V0bGJfdW5zaGFyZV9wbWRzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjcyNDI6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzdGFydCxcXG43MjQzOlxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgZW5kLFxcbjcyNDQ6XFx0XFx0XFx0XFx0XFx0ICAgYm9vbCB0YWtlX2xvY2tzKVxcbjcyNDU6XFx0e1xcbjcyNDY6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcXG43MjQ3OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3ogPSBodWdlX3BhZ2Vfc2l6ZShoKTtcXG43MjQ4OlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLVxcdTAwM2V2bV9tbTtcXG43MjQ5OlxcdFxcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxuNzI1MDpcXHRcXHRzdHJ1Y3QgbW11X2dhdGhlciB0bGI7XFxuNzI1MTpcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3M7XFxuNzI1MjpcXHRcXHRzcGlubG9ja190ICpwdGw7XFxuNzI1MzpcXHRcXHRwdGVfdCAqcHRlcDtcXG43MjU0OlxcdFxcbjcyNTU6XFx0XFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01BWVNIQVJFKSlcXG43MjU2OlxcdFxcdFxcdHJldHVybjtcXG43MjU3OlxcdFxcbjcyNTg6XFx0XFx0aWYgKHN0YXJ0IFxcdTAwM2U9IGVuZClcXG43MjU5OlxcdFxcdFxcdHJldHVybjtcXG43MjYwOlxcdFxcbjcyNjE6XFx0XFx0Zmx1c2hfY2FjaGVfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKTtcXG43MjYyOlxcdFxcdHRsYl9nYXRoZXJfbW11X3ZtYShcXHUwMDI2dGxiLCB2bWEpO1xcbjcyNjM6XFx0XFxuNzI2NDpcXHRcXHQvKlxcbjcyNjU6XFx0XFx0ICogTm8gbmVlZCB0byBjYWxsIGFkanVzdF9yYW5nZV9pZl9wbWRfc2hhcmluZ19wb3NzaWJsZSgpLCBiZWNhdXNlXFxuNzI2NjpcXHRcXHQgKiB3ZSBoYXZlIGFscmVhZHkgZG9uZSB0aGUgUFVEX1NJWkUgYWxpZ25tZW50LlxcbjcyNjc6XFx0XFx0ICovXFxuNzI2ODpcXHRcXHRtbXVfbm90aWZpZXJfcmFuZ2VfaW5pdChcXHUwMDI2cmFuZ2UsIE1NVV9OT1RJRllfQ0xFQVIsIDAsIG1tLFxcbjcyNjk6XFx0XFx0XFx0XFx0XFx0c3RhcnQsIGVuZCk7XFxuNzI3MDpcXHRcXHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChcXHUwMDI2cmFuZ2UpO1xcbjcyNzE6XFx0XFx0aWYgKHRha2VfbG9ja3MpIHtcXG43MjcyOlxcdFxcdFxcdGh1Z2V0bGJfdm1hX2xvY2tfd3JpdGUodm1hKTtcXG43MjczOlxcdFxcdFxcdGlfbW1hcF9sb2NrX3dyaXRlKHZtYS1cXHUwMDNldm1fZmlsZS1cXHUwMDNlZl9tYXBwaW5nKTtcXG43Mjc0OlxcdFxcdH0gZWxzZSB7XFxuNzI3NTpcXHRcXHRcXHRpX21tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZCh2bWEtXFx1MDAzZXZtX2ZpbGUtXFx1MDAzZWZfbWFwcGluZyk7XFxuNzI3NjpcXHRcXHR9XFxuNzI3NzpcXHRcXHRmb3IgKGFkZHJlc3MgPSBzdGFydDsgYWRkcmVzcyBcXHUwMDNjIGVuZDsgYWRkcmVzcyArPSBQVURfU0laRSkge1xcbjcyNzg6XFx0XFx0XFx0cHRlcCA9IGh1Z2V0bGJfd2Fsayh2bWEsIGFkZHJlc3MsIHN6KTtcXG43Mjc5OlxcdFxcdFxcdGlmICghcHRlcClcXG43MjgwOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjcyODE6XFx0XFx0XFx0cHRsID0gaHVnZV9wdGVfbG9jayhoLCBtbSwgcHRlcCk7XFxuNzI4MjpcXHRcXHRcXHRfX2h1Z2VfcG1kX3Vuc2hhcmUoXFx1MDAyNnRsYiwgdm1hLCBhZGRyZXNzLCBwdGVwLCB0YWtlX2xvY2tzKTtcXG43MjgzOlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuNzI4NDpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjExOjQ3Ljc3NTAzOTIwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY4ODE3OTg2NTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyaXRpY2FsIENvZGUgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGF0IG9sZCBDIGNvZGUgc25pcHBldDpcbmBgYGNcblx0XHRpZiAobmV3X25pZCA9PSBvbGRfbmlkKVxuXHRcdFx0cmV0dXJuO1xuXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcblx0XHRpZiAoaC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXSkge1xuXHRcdFx0aC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtvbGRfbmlkXS0tO1xuXHRcdFx0aC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXdfbmlkXSsrO1xuXHRcdH1cblx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbmBgYFxuaW1tZWRpYXRlbHkgZmxhZ2dlZCBzb21ldGhpbmcuIFRoZSBlYXJseSByZXR1cm4gaWYgYG5ld19uaWRgIGVxdWFscyBgb2xkX25pZGAgaXMgdGhlIGN1bHByaXQuIFRoYXQgY29uZGl0aW9uYWwgc2hvcnQtY2lyY3VpdHMgdGhlIHN1YnNlcXVlbnQgY3J1Y2lhbCBjb2RlOlxuYGBgY1xuXHQvKlxuXHQgKiBPdXIgb2xkIGZvbGlvIGlzIGlzb2xhdGVkIGFuZCBoYXMgXCJtaWdyYXRhYmxlXCIgY2xlYXJlZCB1bnRpbCBpdFxuXHQgKiBpcyBwdXRiYWNrLiBBcyBtaWdyYXRpb24gc3VjY2VlZGVkLCBzZXQgdGhlIG5ldyBmb2xpbyBcIm1pZ3JhdGFibGVcIlxuXHQgKiBhbmQgYWRkIGl0IHRvIHRoZSBhY3RpdmUgbGlzdC5cblx0ICovXG5cdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcblx0Zm9saW9fc2V0X2h1Z2V0bGJfbWlncmF0YWJsZShuZXdfZm9saW8pO1xuXHRsaXN0X21vdmVfdGFpbChcdTAwMjZuZXdfZm9saW8tXHUwMDNlbHJ1LCBcdTAwMjYoZm9saW9faHN0YXRlKG5ld19mb2xpbykpLVx1MDAzZWh1Z2VwYWdlX2FjdGl2ZWxpc3QpO1xuXHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbmBgYFxuVGhhdCBtZWFucywgb24gYSBub2RlIG1pZ3JhdGlvbiwgaWYgdGhlIG5ldyBub2RlIGlzIHRoZSBzYW1lIGFzIHRoZSBvbGQgbm9kZSwgdGhlIGNvZGUgd291bGQgc2tpcCBzZXR0aW5nIHRoZSBmb2xpbyB0byBgbWlncmF0YWJsZWAgYW5kIGFkZGluZyBpdCB0byB0aGUgYWN0aXZlIGxpc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGJ1Zy4gTWlncmF0aW9uIHN1Y2NlZWRzIGJ1dCBpcyBub3QgcHJvcGVybHkgcmVjb3JkZWQuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBuZWVkcyBmdXp6aW5nIHRvIGJlIGNhdWdodC4gSXQgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBpcyB3b3J0aCBhIGRlZGljYXRlZCB0ZXN0IGNhc2UuXG5cblRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgbW92ZV9odWdldGxiX3N0YXRlYCwgSSBiZXR0ZXIgY2hlY2sgd2hlcmUgaXQgaXMgY2FsbGVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgYnVnIGNhbiBiZSByZXByb2R1Y2VkLiBJIHNob3VsZCBhbHNvIGNoZWNrIGlmIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uIG9yIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3YWl0IGl0J3MgYSBnbG9iYWwgZnVuY3Rpb24gaW4gYG1tL2h1Z2V0bGIuY2AuIFRoYXQgbWVhbnMgdGhlIHNjb3BlIG9mIHRoaXMgYnVnIGlzIGxhcmdlciB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQuIE5vdyBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgaXQncyBjYWxsZWQgdG8gYnVpbGQgYW4gYXR0YWNrIHZlY3Rvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgwNCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjEyOjU2LjU5MzAzMTkyNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTM3MDI4MTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdmVfaHVnZXRsYl9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTU2PXZvaWQgZm9saW9fcHV0YmFja19odWdldGxiKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjE1Nzp2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbywgc3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTE1OC12b2lkIGh1Z2V0bGJfZml4X3Jlc2VydmVfY291bnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NDIyPXN0YXRpYyBpbmxpbmUgdm9pZCBmb2xpb19wdXRiYWNrX2h1Z2V0bGIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTQyNS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo0MjY6c3RhdGljIGlubGluZSB2b2lkIG1vdmVfaHVnZXRsYl9zdGF0ZShzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC00MjctXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpuZXdfZm9saW8sIGludCByZWFzb24pXFxuLS1cXG5tbS9odWdldGxiLmM9NzE3Nj12b2lkIGZvbGlvX3B1dGJhY2tfaHVnZXRsYihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTcxODQtXFxubW0vaHVnZXRsYi5jOjcxODU6dm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKVxcbm1tL2h1Z2V0bGIuYy03MTg2LXtcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNDcxPXN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMTU1Ni1cXHRpZiAoIXJjKSB7XFxubW0vbWlncmF0ZS5jOjE1NTc6XFx0XFx0bW92ZV9odWdldGxiX3N0YXRlKHNyYywgZHN0LCByZWFzb24pO1xcbm1tL21pZ3JhdGUuYy0xNTU4LVxcdFxcdHB1dF9uZXdfZm9saW8gPSBOVUxMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxMjo1OS41MzAwNjU3OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0OTY4ODUwOTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkh1Z2UgUGFnZSBNaWdyYXRpb24gRGl2aW5nIEluKipcblxuT2theSwgc28gSSdtIHRyYWNraW5nIGRvd24gdGhpcyBmdW5jdGlvbiBjYWxsLCBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCwgYW5kIGl0J3MgcG9wcGluZyB1cCB3aXRoaW4gdGhlIGBtbS9taWdyYXRlLmNgIGZpbGUuIFJpZ2h0IGF3YXksIHRoaXMgc2NyZWFtcyBodWdlIHBhZ2UgbWlncmF0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBoZXJlLiBBcmUgdGhlcmUgYW55IHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhpcyBiZWhhdmlvciwgYW55IHNwZWNpZmljcyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kP1xuXG5SaWdodCwgYENPTkZJR19IVUdFVExCX1BBR0VgIGlzIHRoZSBvYnZpb3VzIG9uZSwgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IGlzIHNldC5cblxuTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGluc2lkZSBgbW0vTWFrZWZpbGVgIG9yIGBtbS9LY29uZmlnYCBhbmQgc2VlIHdoYXQgSSBjYW4gZmluZCByZWdhcmRpbmcgYGh1Z2V0bGIuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMjcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxMzoxNC40OTg5MjE4NzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjU5NzQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTgwPW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbm1tL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19IVUdFVExCRlMpXFx0Kz0gaHVnZXRsYi5vIGh1Z2V0bGJfc3lzZnMubyBodWdldGxiX3N5c2N0bC5vXFxubW0vTWFrZWZpbGUtODItaWZkZWYgQ09ORklHX0NNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxMzoxNC42MTE1MjU1NzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ1NzYwOTM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIHRoZSBib2xkZWQgaGVhZGVyIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IFdlYjogSHVnZSBQYWdlcyBhbmQgTWlncmF0aW9uKipcblxuQWxyaWdodCwgdGhlIHB1enpsZSBiZWdpbnMuIEkgc2VlIHRoYXQgYENPTkZJR19IVUdFVExCRlNgIGlzIGVzc2VudGlhbCwgdGhhdCdzIGEga2V5IHBpZWNlLiBOb3csIEkgcmVjYWxsIHRoYXQgYG1tL21pZ3JhdGUuY2AgbWFrZXMgdXNlIG9mIGl0LiBUaGF0IG1ha2VzIHNlbnNlLCBsYXJnZSBwYWdlIHN1cHBvcnQgYW5kIG1pZ3JhdGlvbiBvZnRlbiBnbyBoYW5kLWluLWhhbmQuIEFoLCBidXQgdGhhdCBsZWFkcyBtZSB0byBhbm90aGVyIHRob3VnaHQsIGEgY3J1Y2lhbCBkZXBlbmRlbmN5IHF1ZXN0aW9uOiBEb2VzIHRoZSBjb2RlIHdpdGhpbiBgbW0vbWlncmF0ZS5jYCBhY3R1YWxseSByZWx5IG9uIGBDT05GSUdfTUlHUkFUSU9OYD8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCByZWxhdGlvbnNoaXAuIEl0J3MgYSBjcml0aWNhbCBkZXBlbmRlbmN5IEkgbmVlZCB0byBjb25maXJtIGJlZm9yZSBtYWtpbmcgYW55IGNvbmZpZ3VyYXRpb24gZGVjaXNpb25zLCBhcyBpdCBoZWxwcyBpZGVudGlmeSBhIHBvdGVudGlhbCBjYXNjYWRpbmcgZWZmZWN0IG9mIGFueSBjaGFuZ2VzLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCBtZSBzZWUgdGhlIGZsb3cgb2YgdGhlIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQ3NCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjEzOjE5LjA2OTEzODgxN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzOTczMjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9OTc9b2JqLSQoQ09ORklHX01FTVRFU1QpXFx0XFx0Kz0gbWVtdGVzdC5vXFxubW0vTWFrZWZpbGU6OTg6b2JqLSQoQ09ORklHX01JR1JBVElPTikgKz0gbWlncmF0ZS5vXFxubW0vTWFrZWZpbGUtOTktb2JqLSQoQ09ORklHX05VTUEpICs9IG1lbW9yeS10aWVycy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjEzOjE5LjIxMzExNzg2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzA2NjIzNzY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIE1pZ3JhdGlvbiBTdXBwb3J0KipcblxuQWxyaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIGBDT05GSUdfTUlHUkFUSU9OYCwgSSBzZWUgdGhhdCdzIGVzc2VudGlhbCBmb3Igd2hhdCB3ZSdyZSB3b3JraW5nIG9uLiBOb3csIGEga2V5IHF1ZXN0aW9uIGFyaXNlcyBpbiBteSBtaW5kOiBnaXZlbiB0aGUgY29udGV4dCBvZiBtaWdyYXRpb24sIGRvZXMgdGhpcyBhbHNvIG1hbmRhdGUgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfSFVHRVRMQl9QQUdFYD8gTWlncmF0aW9uIG9mdGVuIGludm9sdmVzIG1vdmluZyBtZW1vcnkgcmVnaW9ucywgYW5kIGh1Z2UgcGFnZXMgY291bGQgZGVmaW5pdGVseSBiZSBwYXJ0IG9mIHRoYXQgZWNvc3lzdGVtLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlc2UgYXJlIGRpcmVjdGx5IHJlbGF0ZWQgb3IgaWYgdGhlcmUncyBhIGRlcGVuZGVuY3kgbGluayBJJ20gbWlzc2luZy4gVW5kZXJzdGFuZGluZyB0aGF0IHJlbGF0aW9uc2hpcCBpcyBjcml0aWNhbCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLCBzbyBhIHF1aWNrIGNoZWNrIG9uIHRoZSByZWxldmFudCBjb2RlLCBkb2N1bWVudGF0aW9uLCBvciBoaXN0b3JpY2FsIGNvbnRleHQgaXMgaW4gb3JkZXIuIEl0J3MgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIEkgbmVlZCB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gYmVmb3JlIEkgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgwNiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjEzOjQyLjI3OTM1ODg2MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI1MzczMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkhVR0VUTEJfUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTcwOC1cXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTcxMC1cXHRkZWZfYm9vbCBuXFxuLS1cXG5tbS9LY29uZmlnLTcxMi1cXHQgIEFsbG93cyB0aGUgcGFnZWJsb2NrX29yZGVyIHZhbHVlIHRvIGJlIGR5bmFtaWMgaW5zdGVhZCBvZiBqdXN0IHN0YW5kYXJkXFxubW0vS2NvbmZpZzo3MTM6XFx0ICBIVUdFVExCX1BBR0VfT1JERVIgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgSHVnZVRMQiBwYWdlIHNpemVzIGF2YWlsYWJsZVxcbm1tL0tjb25maWctNzE0LVxcdCAgb24gYSBwbGF0Zm9ybS5cXG4tLVxcbm1tL0tjb25maWc9MTAxND1jb25maWcgUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVNcXG5tbS9LY29uZmlnOjEwMTU6XFx0ZGVmX2Jvb2wgVFJBTlNQQVJFTlRfSFVHRVBBR0UgfHwgSFVHRVRMQl9QQUdFXFxubW0vS2NvbmZpZy0xMDE2LVxcbi0tXFxubW0vS2NvbmZpZz0xMDIwPWNvbmZpZyBIQVZFX0dJR0FOVElDX0ZPTElPU1xcbm1tL0tjb25maWc6MTAyMTpcXHRkZWZfYm9vbCAoSFVHRVRMQl9QQUdFIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIHx8IFxcXFxcXG5tbS9LY29uZmlnLTEwMjItXFx0XFx0IChaT05FX0RFVklDRSBcXHUwMDI2XFx1MDAyNiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxMzo0Mi44MDQ3NDEyMTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzQ0NzU0ODMxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIEkgbmVlZCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIGh1Z2UgcGFnZSBzdXBwb3J0LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIGZpbGVzLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgZnMvS2NvbmZpZ2AuIFRoYXQgbG9jYXRpb24gaXMgaGlnaGx5IHByb2JhYmxlLCBhcyBmaWxlIHN5c3RlbXMgb2Z0ZW4gaGF2ZSB0aGVpciBvd24gY29uZmlndXJhdGlvbiBvcHRpb25zIGRlZmluZWQgd2l0aGluIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0b3JpZXMuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyB3aGVyZSBgQ09ORklHX0hVR0VUTEJGU2AgaXMgbG9jYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM1OCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjEzOjUwLjI1MjI5MzMzMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc4MDg3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjEzOjUwLjM1MDEwOTY0M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDAzMzEwMjIwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBLY29uZmlnIGZvciBIVUdFVExCRlMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSB0aGlua2luZywgXCJXaGVyZSB3b3VsZCBJIHN0YXJ0IGlmIEkgd2FudGVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBzdGF0ZSBvZiBgSFVHRVRMQkZTYCBzdXBwb3J0IHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24/XCIuIFdlbGwsIHRoZSBsb2dpY2FsIGZpcnN0IG1vdmUsIHRoZSBtb3N0IGVmZmljaWVudCBtZXRob2QsIGlzIHRvIGltbWVkaWF0ZWx5IGNoZWNrIHRoZSBgZnMvS2NvbmZpZ2AgZmlsZS4gVGhhdCdzIHRoZSBjYW5vbmljYWwgcGxhY2Ugd2hlcmUgZmlsZXN5c3RlbSBvcHRpb25zIGFyZSBkZWZpbmVkLCBhbmQgYEhVR0VUTEJGU2AgaXMsIHVuZGVuaWFibHksIGEgZmlsZXN5c3RlbS4gSXQncyB0aGUgY2VudHJhbCBodWIgZm9yIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBpdC4gVGhlcmUncyBubyBuZWVkIHRvIHdhbmRlciBhcm91bmQgbG9va2luZyBpbiBtdWx0aXBsZSBwbGFjZXM7IGBmcy9LY29uZmlnYCBpcyB0aGUgb2J2aW91cyBmaXJzdCBzdG9wLiBJdCBpcyB0aGUgbG9naWNhbCBjaG9pY2UsIGR1ZSB0byBpdHMgb3JnYW5pemF0aW9uIGFuZCBlc3RhYmxpc2hlZCBwb3NpdGlvbiB3aXRoaW4gdGhlIHNvdXJjZSB0cmVlLiBUaGlzIGFwcHJvYWNoIHNhdmVzIHRpbWUgYW5kIGVuc3VyZXMgSSdtIGxvb2tpbmcgYXQgdGhlIGF1dGhvcml0YXRpdmUgc291cmNlIGZvciB0aGUgZGVmaW5pdGlvbiBhbmQsIHRoZXJlZm9yZSwgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoYXQgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NTg2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTQ6MDAuMzgzMjE2NzI4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NzpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjQ4OlxcdFxcdGRlZl9ib29sIG5cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0bWVudWNvbmZpZyBIVUdFVExCRlNcXG4gMjUxOlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gMjUyOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjUzOlxcdFxcdHNlbGVjdCBNRU1GRF9DUkVBVEVcXG4gMjU0OlxcdFxcdHNlbGVjdCBQQURBVEEgaWYgU01QXFxuIDI1NTpcXHRcXHRoZWxwXFxuIDI1NjpcXHRcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG4gMjU3OlxcdFxcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxcbiAyNTg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjYxOlxcdFxcbiAyNjI6XFx0aWYgSFVHRVRMQkZTXFxuIDI2MzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbiAyNjQ6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4gMjY1OlxcdFxcdGRlZmF1bHQgblxcbiAyNjY6XFx0XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxNDowMC4zODMzNDk3NTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY1NjE3NzAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBQYWdlIE1pZ3JhdGlvbiBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBodWdlIHBhZ2UgbWlncmF0aW9uLCBhbmQgdGhlIGtleSBjb25maWd1cmF0aW9ucyBoZXJlIGFyZSBjbGVhcmx5IGBIVUdFVExCRlNgIGFuZCBgTUlHUkFUSU9OYC4gVGhlIGNlbnRyYWwgZnVuY3Rpb25zIEkgbmVlZCB0byBkaXNzZWN0IGFyZSBgbW92ZV9odWdldGxiX3N0YXRlYCBhbmQgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuIEhvbGQgb24gYSBzZWNvbmQsIHRoYXQgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgZnVuY3Rpb24gaXMgZGVmaW5lZCBhcyBgc3RhdGljYCB3aXRoaW4gYG1tL21pZ3JhdGUuY2AuIFRoYXQncyBpbXBvcnRhbnQ7IGl0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkLiBJJ2xsIG5lZWQgdG8gZ28gZGlyZWN0bHkgdG8gYG1tL21pZ3JhdGUuY2AgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgaW1wbGVtZW50YXRpb24gYW5kIGhvdyBpdCdzIHVzZWQuIExldCdzIGRpZyBpbnRvIHRoYXQgc291cmNlIGZpbGUgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTc2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxNDowNC4wMzk1MzA2MThaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMzc1MzcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9taWdyYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWlncmF0ZS5jPTEzNTU9c3RhdGljIGludCBtaWdyYXRlX2ZvbGlvX21vdmUoZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNDcwLSAqL1xcbm1tL21pZ3JhdGUuYzoxNDcxOnN0YXRpYyBpbnQgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlKG5ld19mb2xpb190IGdldF9uZXdfZm9saW8sXFxubW0vbWlncmF0ZS5jLTE0NzItXFx0XFx0ZnJlZV9mb2xpb190IHB1dF9uZXdfZm9saW8sIHVuc2lnbmVkIGxvbmcgcHJpdmF0ZSxcXG4tLVxcbm1tL21pZ3JhdGUuYz0xNjI5PXN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbi0tXFxubW0vbWlncmF0ZS5jLTE2NjctXFxubW0vbWlncmF0ZS5jOjE2Njg6XFx0XFx0XFx0cmMgPSB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2UoZ2V0X25ld19mb2xpbyxcXG5tbS9taWdyYXRlLmMtMTY2OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBwdXRfbmV3X2ZvbGlvLCBwcml2YXRlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxNDowNC4xMjk5MTIzNzlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE5NjQ2MjMwNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgbWlncmF0ZV9odWdldGxic2AqKlxuXG5Pa2F5LCBzbyBgdW5tYXBfYW5kX21vdmVfaHVnZV9wYWdlYCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCBtZWFucyBpdCdzIGxpa2VseSB1c2VkIGludGVybmFsbHkgd2l0aGluIGEgc3BlY2lmaWMgbW9kdWxlIG9yIGZpbGUsIGFuZCB3ZSBkb24ndCBoYXZlIHRvIHRyYWNlIGl0cyBjYWxscyBmcm9tIGFueXdoZXJlIGVsc2UuIEdvb2QsIHRoYXQgbmFycm93cyB0aGluZ3MgZG93bi4gTm93LCBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgKmNhdXNpbmcqIHRoYXQgdW5tYXBwaW5nIGFuZCBtb3ZlbWVudCBvZiBodWdlIHBhZ2VzIHRvIG9jY3VyLiBUbyBkbyB0aGF0LCBJIG5lZWQgdG8gc2VlIHdoYXQncyAqY2FsbGluZyogYG1pZ3JhdGVfaHVnZXRsYnNgLiBUaGF0J3Mgd2hlcmUgdGhlIHJlYWwgbG9naWMgb2YgdGhpcyBwcm9jZXNzIGxpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkaWZmZXJlbnQgc2NlbmFyaW9zIHdoZXJlIGEgaHVnZSBwYWdlIGlzIGJlaW5nIHNoaWZ0ZWQgYXJvdW5kLiBUaGlzIGlzIGxpa2VseSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBOVU1BIGJhbGFuY2luZywgb3IgcGVyaGFwcyBldmVuIGhvdHBsdWdnaW5nIG9mIG1lbW9yeS4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIGZyb20gYG1pZ3JhdGVfaHVnZXRsYnNgIHRvIHVuZGVyc3RhbmQgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHdoeSB0aGVzZSBwYWdlIG1pZ3JhdGlvbnMgYXJlIGhhcHBlbmluZy4gS25vd2luZyB0aGUgY2FsbGVycyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY5OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjE0OjE2LjA5NDUzODYzOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNjY4MDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1pZ3JhdGVfaHVnZXRsYnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWlncmF0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21pZ3JhdGUuYz0xNjExPXN0cnVjdCBtaWdyYXRlX3BhZ2VzX3N0YXRzIHtcXG4tLVxcbm1tL21pZ3JhdGUuYy0xNjI4LSAqL1xcbm1tL21pZ3JhdGUuYzoxNjI5OnN0YXRpYyBpbnQgbWlncmF0ZV9odWdldGxicyhzdHJ1Y3QgbGlzdF9oZWFkICpmcm9tLCBuZXdfZm9saW9fdCBnZXRfbmV3X2ZvbGlvLFxcbm1tL21pZ3JhdGUuYy0xNjMwLVxcdFxcdFxcdCAgICBmcmVlX2ZvbGlvX3QgcHV0X25ld19mb2xpbywgdW5zaWduZWQgbG9uZyBwcml2YXRlLFxcbi0tXFxubW0vbWlncmF0ZS5jPTIwOTE9aW50IG1pZ3JhdGVfcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZnJvbSwgbmV3X2ZvbGlvX3QgZ2V0X25ld19mb2xpbyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMTA2LVxcbm1tL21pZ3JhdGUuYzoyMTA3OlxcdHJjX2dhdGhlciA9IG1pZ3JhdGVfaHVnZXRsYnMoZnJvbSwgZ2V0X25ld19mb2xpbywgcHV0X25ld19mb2xpbywgcHJpdmF0ZSxcXG5tbS9taWdyYXRlLmMtMjEwOC1cXHRcXHRcXHRcXHQgICAgIG1vZGUsIHJlYXNvbiwgXFx1MDAyNnN0YXRzLCBcXHUwMDI2cmV0X2ZvbGlvcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjE0OjE2LjIxNzIxMjIxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTkxNTgyNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEh1Z2V0bGIgUGFnZSBNaWdyYXRpb24qKlxuXG5Pa2F5LCBzbyBgbWlncmF0ZV9wYWdlc2AgaXMgdGhlIHByaW1hcnkgZW50cnkgcG9pbnQgZm9yIHBhZ2UgbWlncmF0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gQnV0IHRvIHJlYWxseSBkaWcgaW50byB0aGUgaHVnZXRsYi1zcGVjaWZpYyBzdHVmZiwgSSBuZWVkIHRvIHpvb20gaW4uIFRoZSBmdW5jdGlvbnMgb2YgaW50ZXJlc3QgaGVyZSBhcmUgY2xlYXJseSBgbW92ZV9odWdldGxiX3N0YXRlYCBhbmQgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuXG5cbkhhbmcgb24sIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIGEgZ2xvYmFsIGZ1bmN0aW9uLCB3aGljaCBpcyBpZGVhbCBiZWNhdXNlIEkgY2FuIGZvY3VzIG9uIGl0IGRpcmVjdGx5LiBBbmQgd2hpbGUgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAgaXMgc3RhdGljLCBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gdGFyZ2V0IGl0IGp1c3QgZmluZSBhcyBsb25nIGFzIGl04oCZcyBpbiB0aGUga2VybmVsIGltYWdlLiBBaCwgcmlnaHQsIHN5emthbGxlciB1c2VzIGtjb3YsIHdoaWNoIHVzZXMgUEMgdHJhY2tpbmcuIFRoZSBmdW5jdGlvbiBuYW1lIGlzIHJlc29sdmVkIGZyb20gZGVidWcgaW5mbywgc28gaXQncyBhIG5vbi1pc3N1ZS4gU28sIGB1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VgIGlzIHBlcmZlY3RseSBmaW5lIGFzIGEgdGFyZ2V0LlxuXG5BbHNvLCB0aGlua2luZyBhYm91dCBpdCwgYG1pZ3JhdGVfcGFnZXNgIGlzIGEgYml0IHRvbyBnZW5lcmFsIHNpbmNlIGl0IGhhbmRsZXMgKmFsbCogcGFnZSBtaWdyYXRpb25zLiBGb2N1c2luZyBvbiBgbW92ZV9odWdldGxiX3N0YXRlYCwgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAsIGFuZCBgbWlncmF0ZV9odWdldGxic2Agd2lsbCBiZSBtdWNoIG1vcmUgZWZmaWNpZW50IGZvciB0aGlzIHBhcnRpY3VsYXIgdGFzay5cblxuTm93LCBhIHF1aWNrIGNoZWNrOiBhcmUgdGhlcmUgYW55IG90aGVyIGNhbGxlcnMgb2YgYG1vdmVfaHVnZXRsYl9zdGF0ZWA/IE5vcGUsIHRoZSBncmVwIG91dHB1dCBjbGVhcmx5IHNob3dlZCBpdCdzIG9ubHkgY2FsbGVkIHdpdGhpbiBgbW0vbWlncmF0ZS5jYCBpbnNpZGUgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAuIFNvIHRoYXQncyBnb29kIHRvIGtub3cuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjaywgZm9yIHBlYWNlIG9mIG1pbmQsIGlmIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIGlzIHN0YXRpYyBvciBub3QuIE9rYXksIGluIGBtbS9odWdldGxiLmNgOiBgdm9pZCBtb3ZlX2h1Z2V0bGJfc3RhdGUoc3RydWN0IGZvbGlvICpvbGRfZm9saW8sIHN0cnVjdCBmb2xpbyAqbmV3X2ZvbGlvLCBpbnQgcmVhc29uKWAuIE5vcGUsIGl04oCZcyBub3Qgc3RhdGljLiBHcmVhdCwgc28gSSBoYXZlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBuZWVkOiBgSFVHRVRMQkZTYCBhbmQgYE1JR1JBVElPTmAuXG5cbldhaXQsIGlzbid0IGBNSUdSQVRJT05gIGEgYm9vbGVhbiBjb25maWc/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBgbW0vS2NvbmZpZ2AganVzdCB0byBjb25maXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjE0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjE0OjIzLjIwODc5Njk5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzMDEwNjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTY4NT1jb25maWcgTlVNQV9NSUdSQVRJT05cXG4tLVxcbm1tL0tjb25maWctNjk1LVxcbm1tL0tjb25maWc6Njk2OmNvbmZpZyBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY5Ny1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjE0OjIzLjMyMTgzNzg3OFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjUwNjkxNDM0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3Mgc2VlIHdoYXQgSSBjYW4gbWFrZSBvZiB0aGlzLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBNSUdSQVRJT05gIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gYE1JR1JBVElPTmAgaXMgYSBib29sZWFuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBCdXQgd2hhdCdzIHN0cmFuZ2UgaXMgdGhhdCBpdCBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIHByb21wdCBhc3NvY2lhdGVkIHdpdGggaXQuIFRoYXQgbWVhbnMgaXQncyBsaWtlbHkgYmVpbmcgc2VsZWN0ZWQgb3IgZW5hYmxlZCBhcyBhIHNpZGUgZWZmZWN0IG9mIHNvbWUgb3RoZXIgY29uZmlndXJhdGlvbnMuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGlzIHByb2JhYmx5IGFuIGltcG9ydGFudCBrZXkgcGllY2Ugb2YgbG9naWMgdGhhdCdzIGJlZW4gZmFjdG9yZWQgb3V0IGZvciBtb2R1bGFyaXR5LiBOb3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoaWNoKiBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgYE1JR1JBVElPTmAgdG8gdHJ1ZSBvciBmYWxzZS4gVGltZSB0byB0cmFjZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGl0cyB0cmlnZ2VyaW5nIGNvbmRpdGlvbnMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoZXJlIHRoaXMgYm9vbGVhbiBpcyBnZXR0aW5nIGZsaXBwZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTM1LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTQ6MzkuODI4NzU1NjE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTI2MzY0MDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNlbGVjdCBNSUdSQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NTkxPWNvbmZpZyBNRU1PUllfSE9UUkVNT1ZFXFxuLS1cXG5tbS9LY29uZmlnLTU5NC1cXHRkZXBlbmRzIG9uIE1FTU9SWV9IT1RQTFVHXFxubW0vS2NvbmZpZzo1OTU6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNTk2LVxcbi0tXFxubW0vS2NvbmZpZz02NTQ9Y29uZmlnIENPTVBBQ1RJT05cXG4tLVxcbm1tL0tjb25maWctNjU2LVxcdGRlZmF1bHQgeVxcbm1tL0tjb25maWc6NjU3OlxcdHNlbGVjdCBNSUdSQVRJT05cXG5tbS9LY29uZmlnLTY1OC1cXHRkZXBlbmRzIG9uIE1NVVxcbi0tXFxubW0vS2NvbmZpZz02ODU9Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTY4OC1cXHRkZXBlbmRzIG9uIE5VTUEgXFx1MDAyNlxcdTAwMjYgTU1VXFxubW0vS2NvbmZpZzo2ODk6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctNjkwLVxcdGhlbHBcXG4tLVxcbm1tL0tjb25maWc9MTA2Nz1jb25maWcgQ01BXFxuLS1cXG5tbS9LY29uZmlnLTEwNjktXFx0ZGVwZW5kcyBvbiBNTVVcXG5tbS9LY29uZmlnOjEwNzA6XFx0c2VsZWN0IE1JR1JBVElPTlxcbm1tL0tjb25maWctMTA3MS1cXHRzZWxlY3QgTUVNT1JZX0lTT0xBVElPTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxNDo0Mi45NTUxMjcwNjVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyMDkzODc5NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIGZvciBIdWdlIFBhZ2VzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYENPTVBBQ1RJT05gIHJlbGF0ZXMgdG8gYE1JR1JBVElPTmAgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgdGV4dCBpbmRpY2F0ZXMgdGhhdCBgQ09NUEFDVElPTmAgc2VsZWN0cyBgTUlHUkFUSU9OYCwgYW5kIHNpbmNlIGBDT01QQUNUSU9OYCBzZWVtcyB0byBiZSB0aGUgZGVmYXVsdCBzZXR0aW5nIChpbXBsaWVkIGJ5ICd5JyksIEknbSBpbmZlcnJpbmcgdGhhdCBgTUlHUkFUSU9OYCBpcyB2ZXJ5IGxpa2VseSBlbmFibGVkIGJ5IGRlZmF1bHQgYXMgd2VsbC4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLlxuXG5Ob3csIG15IGZvY3VzIHNoaWZ0cyB0byBgSFVHRVRMQkZTYC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGl0J3MgYSBgbWVudWNvbmZpZ2Agb3B0aW9uLiBUaGlzIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoYXQgaXRzIGNvbmZpZ3VyYXRpb24gc3RhdGUgc2hvdWxkIGJlIGRvY3VtZW50ZWQgd2l0aGluIHRoZSBgRW5hYmxlQ29uZmlnc2Agc2VjdGlvbi4gSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGlzIGlzIGFjY3VyYXRlLCBhbmQgaXQgc2VlbXMgdG8gbWFrZSBzZW5zZSB3aXRoaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3BhY2UuXG5cblRvIGJlIHRob3JvdWdoLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcywgc3VjaCBhcyBgQ09ORklHX0hVR0VUTEJfUEFHRWAuIEkgYWx3YXlzIGxpa2UgdG8gaGF2ZSBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cbkZpbmFsbHksIEknbGwgZG91YmxlLWNoZWNrIHRoZSBgZnMvS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IHRoZSBzZWN0aW9uIHJlbGF0ZWQgdG8gYEhVR0VUTEJGU2AuIFRoaXMgd2lsbCBnaXZlIG1lIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gYW5kIGFueSBkZXBlbmRlbmNpZXMuIFRoYXQgc2hvdWxkIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoaXMgaXMgYWxsIGxpbmtlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MjAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTU6MjcuMTY0NTE4OTM0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY0MzQzOTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzA2PWNvbmZpZyBBUkNIX0VOQUJMRV9USFBfTUlHUkFUSU9OXFxuLS1cXG5tbS9LY29uZmlnLTcwOC1cXG5tbS9LY29uZmlnOjcwOTpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcXG5tbS9LY29uZmlnLTcxMC1cXHRkZWZfYm9vbCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDE5OjE1OjI3LjMyMDk1ODc2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTcxOTAzMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipLY29uZmlnIExvY2F0aW9uIENoZWNrKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBzb21ldGhpbmcga2VybmVsLXJlbGF0ZWQsIGxpa2VseSBtZW1vcnkgbWFuYWdlbWVudCBiYXNlZCBvbiB0aGUgbmFtZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYEhVR0VUTEJfUEFHRWAgaXMgZGVmaW5lZC4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIGl0cyBuYXR1cmUsIGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiBBbmQgYmluZ28sIHRoZSBkZWZpbml0aW9uIHNlZW1zIHRvIGJlIGluIGBmcy9LY29uZmlnYC4gVGhhdCdzIGEgcmVhc29uYWJsZSBsb2NhdGlvbjsgb2Z0ZW4sIHNldHRpbmdzIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW1zIGFuZCwgYnkgZXh0ZW5zaW9uLCBtZW1vcnkgdXNhZ2UgcGF0dGVybnMgdGhleSBtaWdodCBzdXBwb3J0LCBlbmQgdXAgdGhlcmUuIFRoaXMgaXNuJ3Qgc3VycHJpc2luZywgYnV0IGl0J3MgZ29vZCB0byBjb25maXJtLiBJdCBoZWxwcyBtZSB0byBjb250ZXh0dWFsaXplIHRoZSBzZXR0aW5nIGFuZCB3aGVyZSB0byBsb29rIGZvciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb2RlLiBOb3cgSSBjYW4gbW92ZSBmb3J3YXJkLCBjb25maWRlbnQgdGhhdCBJIGtub3cgd2hlcmUgdGhlIHNldHRpbmcgb3JpZ2luYXRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwOTIsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxNTozMC40MzgxNTI2MTlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTc5MzU3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQl9QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMTk6MTU6MzAuNTY3OTU4MzE3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDcwODIwNDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZVRMQiBNaWdyYXRpb24gUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBgSFVHRVRMQl9QQUdFYCBpcyBsaW5rZWQgdG8gYEhVR0VUTEJGU2AsIHRoYXQncyBvdXIgc3RhcnRpbmcgcG9pbnQuIGBIVUdFVExCRlNgIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGhlcmUuIExldCBtZSBicmVhayBkb3duIHRoZSBmdXp6aW5nIHN0cmF0ZWd5IGJhc2VkIG9uIHRoaXMgcGF0Y2guXG5cblRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyBpdCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9odWdldGxiX3N0YXRlYC4gVGhlIG9yaWdpbmFsIGNvZGUgcHJlbWF0dXJlbHkgZXhpdGVkIGlmIGBuZXdfbmlkYCBhbmQgYG9sZF9uaWRgIHdlcmUgdGhlIHNhbWUsIG1pc3NpbmcgdGhlIGNydWNpYWwgc3RlcHMgb2Ygc2V0dGluZyB0aGUgbmV3IGZvbGlvIGFzIG1pZ3JhdGFibGUgYW5kIGFkZGluZyBpdCB0byB0aGUgYWN0aXZlIGxpc3QuIFRoYXQncyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyBodWdlIHBhZ2VzIGFyZSBtaWdyYXRlZC5cblxuVGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nIGFyZSBgbW92ZV9odWdldGxiX3N0YXRlYCwgYHVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZWAsIGFuZCBgbWlncmF0ZV9odWdldGxic2AuXG5cbk5vdyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gV2UgbmVlZCB0byBlbmFibGUgYEhVR0VUTEJGU2AuIGBNSUdSQVRJT05gIGlzIGFsc28gcmVsZXZhbnQuIEkgcmVjYWxsIGBNSUdSQVRJT05gIGJlaW5nIHNlbGVjdGVkIGJ5IGBDT01QQUNUSU9OYCwgd2hpY2ggaXMgdXN1YWxseSBlbmFibGVkIGJ5IGRlZmF1bHQuIFNpbmNlIHRoZSBwcm9tcHQgc2F5cyBcImV4cGxpY2l0bHkgZW5hYmxlZFwiLCBpdCdzIHByb2JhYmx5IGJlc3QgdG8gaW5jbHVkZSBib3RoLCBqdXN0IHRvIGJlIHRob3JvdWdoIGFuZCBlbnN1cmUgdGhlIHRlc3QgY29uZmlndXJhdGlvbiBpcyBhbGlnbmVkIHdpdGggdGhlIGNvZGUgYmVpbmcgbW9kaWZpZWQuXG5cbkhvd2V2ZXIsIGBNSUdSQVRJT05gIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgZGlyZWN0IHByb21wdCBpbiB0aGUgYC5jb25maWdgIGZpbGUuIEl0J3Mgc2VsZWN0ZWQgaW1wbGljaXRseS4gVGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uIGdlbmVyYXRvciBzaG91bGQgYmUgYWJsZSB0byBoYW5kbGUgdGhpcyBzZWxlY3Rpb24gYXV0b21hdGljYWxseSwgb3IgaXQgbWlnaHQganVzdCBlbmFibGUgYENPTVBBQ1RJT05gLiBJJ2xsIGluY2x1ZGUgYE1JR1JBVElPTmAgYW55d2F5LCBhbmQgc2VlIGhvdyB0aGUgY29uZmlnIGdlbmVyYXRvciBoYW5kbGVzIGl0LlxuXG5JJ3ZlIHJlLXJlYWQgdGhlIHBhdGNoIHRvIGJlIHN1cmU6XG5cbmBgYGNcbi1cdFx0aWYgKG5ld19uaWQgPT0gb2xkX25pZClcbi1cdFx0XHRyZXR1cm47XG4tXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbi1cdFx0aWYgKGgtXHUwMDNlc3VycGx1c19odWdlX3BhZ2VzX25vZGVbb2xkX25pZF0pIHtcbi1cdFx0XHRoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdLS07XG4tXHRcdFx0aC1cdTAwM2VzdXJwbHVzX2h1Z2VfcGFnZXNfbm9kZVtuZXdfbmlkXSsrO1xuK1x0XHRpZiAobmV3X25pZCAhPSBvbGRfbmlkKSB7XG4rXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuK1x0XHRcdGlmIChoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdKSB7XG4rXHRcdFx0XHRoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW29sZF9uaWRdLS07XG4rXHRcdFx0XHRoLVx1MDAzZXN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW25ld19uaWRdKys7XG4rXHRcdFx0fVxuK1x0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuIFx0XHR9XG4tXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuYGBgXG5cblllcywgaXQgY2hhbmdlcyB0aGUgY29udHJvbCBmbG93LiBUaGUgb2xkIGNvZGUgcmV0dXJuZWQgZWFybHkgaWYgYG5ld19uaWQgPT0gb2xkX25pZGAuIE5vdywgaXQgc2tpcHMgdGhlIGBpZmAgYmxvY2suIEFmdGVyIHRoZSBpZiBibG9jaywgaXQgZW5hYmxlcyBgbWlncmF0YWJsZWAgZm9yIHRoZSBuZXcgZm9saW8uXG5cbkFuZCB0aGUgc3Vic2VxdWVudCBjb2RlOlxuXG5gYGBjXG5cdC8qXG5cdCAqIE91ciBvbGQgZm9saW8gaXMgaXNvbGF0ZWQgYW5kIGhhcyBcIm1pZ3JhdGFibGVcIiBjbGVhcmVkIHVudGlsIGl0XG5cdCAqIGlzIHB1dGJhY2suIEFzIG1pZ3JhdGlvbiBzdWNjZWVkZWQsIHNldCB0aGUgbmV3IGZvbGlvIFwibWlncmF0YWJsZVwiXG5cdCAqIGFuZCBhZGQgaXQgdG8gdGhlIGFjdGl2ZSBsaXN0LlxuXHQgKi9cblx0c3Bpbl9sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuXHRmb2xpb19zZXRfaHVnZXRsYl9taWdyYXRhYmxlKG5ld19mb2xpbyk7XG5cdGxpc3RfbW92ZV90YWlsKFx1MDAyNm5ld19mb2xpby1cdTAwM2VscnUsIFx1MDAyNihmb2xpb19oc3RhdGUobmV3X2ZvbGlvKSktXHUwMDNlaHVnZXBhZ2VfYWN0aXZlbGlzdCk7XG5cdHNwaW5fdW5sb2NrX2lycShcdTAwMjZodWdldGxiX2xvY2spO1xuYGBgXG5cblRoaXMgZW5zdXJlcyB0aGUgbmV3bHkgbWlncmF0ZWQgZm9saW8gaXMgcHJvcGVybHkgZmxhZ2dlZCBhcyBtaWdyYXRhYmxlIGFuZCBhZGRlZCB0byB0aGUgYWN0aXZlIGxpc3QsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgY29ycmVjdCBtZW1vcnkgbWFuYWdlbWVudC4gVGhhdCdzIGEgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuQWxyaWdodCwgSSdtIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTA0LCJPdXRwdXRUb2tlbnMiOjEzNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QxOToxNTo0MS42Mzg3ODM4MjhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTg5MTgxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJNSUdSQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtb3ZlX2h1Z2V0bGJfc3RhdGVcIixcbiAgICBcInVubWFwX2FuZF9tb3ZlX2h1Z2VfcGFnZVwiLFxuICAgIFwibWlncmF0ZV9odWdldGxic1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBtb3ZlX2h1Z2V0bGJfc3RhdGVgIHdoZXJlIGl0IHdvdWxkIHJldHVybiBlYXJseSBpZiBgbmV3X25pZCA9PSBvbGRfbmlkYCwgc2tpcHBpbmcgdGhlIGxvZ2ljIHRvIHNldCB0aGUgbmV3IGZvbGlvIGFzIG1pZ3JhdGFibGUgYW5kIGFkZGluZyBpdCB0byB0aGUgYWN0aXZlIGxpc3QuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBodWdlIHBhZ2UgbWlncmF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiTUlHUkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibW92ZV9odWdldGxiX3N0YXRlXCIsXG4gICAgXCJ1bm1hcF9hbmRfbW92ZV9odWdlX3BhZ2VcIixcbiAgICBcIm1pZ3JhdGVfaHVnZXRsYnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgbW92ZV9odWdldGxiX3N0YXRlYCB3aGVyZSBpdCB3b3VsZCByZXR1cm4gZWFybHkgaWYgYG5ld19uaWQgPT0gb2xkX25pZGAsIHNraXBwaW5nIHRoZSBsb2dpYyB0byBzZXQgdGhlIG5ldyBmb2xpbyBhcyBtaWdyYXRhYmxlIGFuZCBhZGRpbmcgaXQgdG8gdGhlIGFjdGl2ZSBsaXN0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaHVnZSBwYWdlIG1pZ3JhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx92np[1] Phase: Succeeded StartedAt: 2026-07-07 19:16:07 +0000 UTC FinishedAt: 2026-07-07 19:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 19:16:07 +0000 UTC FinishedAt: 2026-07-07 19:16:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2] Phase: Succeeded StartedAt: 2026-07-07 19:16:07 +0000 UTC FinishedAt: 2026-07-07 23:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 19:16:07 +0000 UTC FinishedAt: 2026-07-07 23:34:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 19:16:07 +0000 UTC FinishedAt: 2026-07-07 19:16:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 19:16:07 +0000 UTC FinishedAt: 2026-07-07 19:16:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowx92np/series-workflowx92np-convert-artifact-3841116647/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 19:16:17 +0000 UTC FinishedAt: 2026-07-07 19:57:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 19:16:17 +0000 UTC FinishedAt: 2026-07-07 19:57:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*bb2104d7-e19c-4ffa-8d6a-1c51a8d9c551,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-workflowx92np/series-workflowx92np-convert-artifact-3841116647/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": "555611d8-8c9b-4aea-986b-2d561dcc3f93", "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-workflowx92np/series-workflowx92np-build-action-3819815037/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 19:16:17 +0000 UTC FinishedAt: 2026-07-07 19:57:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*bb2104d7-e19c-4ffa-8d6a-1c51a8d9c551,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-workflowx92np/series-workflowx92np-convert-artifact-3841116647/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": "555611d8-8c9b-4aea-986b-2d561dcc3f93", "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-workflowx92np/series-workflowx92np-build-action-3819815037/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-07 19:57:40 +0000 UTC FinishedAt: 2026-07-07 19:57:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-07 19:57:40 +0000 UTC FinishedAt: 2026-07-07 19:57:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-07 19:57:40 +0000 UTC FinishedAt: 2026-07-07 19:58:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-07 19:57:40 +0000 UTC FinishedAt: 2026-07-07 19:58:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowx92np/series-workflowx92np-convert-artifact-1832598/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-07 19:58:18 +0000 UTC FinishedAt: 2026-07-07 20:00:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-07 19:58:18 +0000 UTC FinishedAt: 2026-07-07 20:00:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*555611d8-8c9b-4aea-986b-2d561dcc3f93,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-workflowx92np/series-workflowx92np-build-action-3819815037/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-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-07 20:00:20 +0000 UTC FinishedAt: 2026-07-07 20:00:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-07 20:00:20 +0000 UTC FinishedAt: 2026-07-07 20:00:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-07 20:00:20 +0000 UTC FinishedAt: 2026-07-07 20:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-07 20:00:20 +0000 UTC FinishedAt: 2026-07-07 20:30:40 +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:*bb2104d7-e19c-4ffa-8d6a-1c51a8d9c551,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-workflowx92np/series-workflowx92np-convert-artifact-1832598/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": "62b13f01-56ce-4bc8-bf5f-be105a7a357a", "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-workflowx92np/series-workflowx92np-build-action-1781184410/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-07 20:00:20 +0000 UTC FinishedAt: 2026-07-07 20:30:19 +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:*bb2104d7-e19c-4ffa-8d6a-1c51a8d9c551,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-workflowx92np/series-workflowx92np-convert-artifact-1832598/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": "62b13f01-56ce-4bc8-bf5f-be105a7a357a", "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-workflowx92np/series-workflowx92np-build-action-1781184410/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-07 20:30:40 +0000 UTC FinishedAt: 2026-07-07 20:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-07 20:30:40 +0000 UTC FinishedAt: 2026-07-07 20:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-07 20:30:40 +0000 UTC FinishedAt: 2026-07-07 20:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-07 20:30:40 +0000 UTC FinishedAt: 2026-07-07 20:32:35 +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:*62b13f01-56ce-4bc8-bf5f-be105a7a357a,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-workflowx92np/series-workflowx92np-build-action-1781184410/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-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-07 20:32:45 +0000 UTC FinishedAt: 2026-07-07 23:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-07 20:32:45 +0000 UTC FinishedAt: 2026-07-07 23:34:26 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},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:*555611d8-8c9b-4aea-986b-2d561dcc3f93,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*62b13f01-56ce-4bc8-bf5f-be105a7a357a,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-workflowx92np/series-workflowx92np-build-action-3819815037/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-workflowx92np/series-workflowx92np-build-action-1781184410/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-07 20:32:45 +0000 UTC FinishedAt: 2026-07-07 20:33:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-07 20:32:45 +0000 UTC FinishedAt: 2026-07-07 20:32:56 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},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-workflowx92np/series-workflowx92np-convert-artifact-1242033211/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-07 20:32:45 +0000 UTC FinishedAt: 2026-07-07 20:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-07 20:32:45 +0000 UTC FinishedAt: 2026-07-07 20:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-07 20:32:45 +0000 UTC FinishedAt: 2026-07-07 20:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-07 20:33:05 +0000 UTC FinishedAt: 2026-07-07 23:34:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx92np[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["move_hugetlb_state","unmap_and_move_huge_page","migrate_hugetlbs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a1ea12a96ea9d1b33fdd7968c304a2cde4281896","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","MIGRATION"],"series_id":"3d500551-9451-4ae8-8416-e41583cb1118","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-07 20:33:05 +0000 UTC FinishedAt: 2026-07-07 23:34:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*555611d8-8c9b-4aea-986b-2d561dcc3f93,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*62b13f01-56ce-4bc8-bf5f-be105a7a357a,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-workflowx92np/series-workflowx92np-build-action-3819815037/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-workflowx92np/series-workflowx92np-build-action-1781184410/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-workflowx92np/series-workflowx92np-convert-artifact-1242033211/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,}