Name: series-workflow6xm7k Phase: Succeeded StartedAt: 2026-06-29 17:02:45 +0000 UTC FinishedAt: 2026-06-29 21:20:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[0] Phase: Succeeded StartedAt: 2026-06-29 17:02:45 +0000 UTC FinishedAt: 2026-06-29 17:19:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 17:02:45 +0000 UTC FinishedAt: 2026-06-29 17:19:59 +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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA_BALANCING" ], "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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA_BALANCING" ], "series_id": "e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vma_policy_mof", "task_numa_work" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUFfQkFMQU5DSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hX3BvbGljeV9tb2YmIzM0OywKICAgICYjMzQ7dGFza19udW1hX3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHZtYV9wb2xpY3lfbW9mYCB0byBjb3JyZWN0bHkgZmFsbCBiYWNrIHRvIHRoZSB0YXNrJiMzOTtzIG1lbW9yeSBwb2xpY3kgd2hlbiBhIFZNQSYjMzk7cyBgZ2V0X3BvbGljeWAgb3BlcmF0aW9uIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBOVU1BIGJhbGFuY2luZyBiZWhhdmlvci4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AgdG8gYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVlYzdlODJkM2ZjMzVhNGFmMDk0OWYxOGMyOTJlOWRhYzI3OGY5OTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNzoxMzoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXG5pbmRleCAzNjY5OWZhYmQzYzIyMy4uYmJhNjU4OThhZWUxNzUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9saWN5LmNcbkBAIC0yMDU3LDI0ICYjNDM7MjA1NywxNSBAQCBzdHJ1Y3QgbWVtcG9saWN5ICpnZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBib29sIHZtYV9wb2xpY3lfbW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbDtcbiYjNDM7XHRwZ29mZl90IGlseDtcbiYjNDM7XHRib29sIG1vZjtcbiBcbi1cdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kpIHtcbi1cdFx0Ym9vbCByZXQgPSBmYWxzZTtcbi1cdFx0cGdvZmZfdCBpbHg7XHRcdC8qIGlnbm9yZWQgaGVyZSAqL1xuLVxuLVx0XHRwb2wgPSB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kodm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIFx1MDAyNmlseCk7XG4tXHRcdGlmIChwb2wgXHUwMDI2XHUwMDI2IChwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0YpKVxuLVx0XHRcdHJldCA9IHRydWU7XG4tXHRcdG1wb2xfY29uZF9wdXQocG9sKTtcbi1cbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdHBvbCA9IHZtYS1cdTAwM2V2bV9wb2xpY3k7XG4mIzQzO1x0cG9sID0gX19nZXRfdm1hX3BvbGljeSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgXHUwMDI2aWx4KTtcbiBcdGlmICghcG9sKVxuIFx0XHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4tXG4tXHRyZXR1cm4gcG9sLVx1MDAzZWZsYWdzIFx1MDAyNiBNUE9MX0ZfTU9GO1xuJiM0MztcdG1vZiA9IHBvbC1cdTAwM2VmbGFncyBcdTAwMjYgTVBPTF9GX01PRjtcbiYjNDM7XHRtcG9sX2NvbmRfcHV0KHBvbCk7XG4mIzQzO1x0cmV0dXJuIG1vZjtcbiB9XG4gXG4gYm9vbCBhcHBseV9wb2xpY3lfem9uZShzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3ksIGVudW0gem9uZV90eXBlIHpvbmUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQV9CQUxBTkNJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFfcG9saWN5X21vZiYjMzQ7LAogICAgJiMzNDt0YXNrX251bWFfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdm1hX3BvbGljeV9tb2ZgIHRvIGNvcnJlY3RseSBmYWxsIGJhY2sgdG8gdGhlIHRhc2smIzM5O3MgbWVtb3J5IHBvbGljeSB3aGVuIGEgVk1BJiMzOTtzIGBnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIE5VTUEgYmFsYW5jaW5nIGJlaGF2aW9yLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCB0byBiZSBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZWM3ZTgyZDNmYzM1YTRhZjA5NDlmMThjMjkyZTlkYWMyNzhmOTk0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjkgMTc6MTM6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDM2Njk5ZmFiZDNjMjIzLi5iYmE2NTg5OGFlZTE3NSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9saWN5LmMKQEAgLTIwNTcsMjQgJiM0MzsyMDU3LDE1IEBAIHN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogYm9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7CiYjNDM7CXBnb2ZmX3QgaWx4OwomIzQzOwlib29sIG1vZjsKIAotCWlmICh2bWEtJmd0O3ZtX29wcyAmYW1wOyZhbXA7IHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5KSB7Ci0JCWJvb2wgcmV0ID0gZmFsc2U7Ci0JCXBnb2ZmX3QgaWx4OwkJLyogaWdub3JlZCBoZXJlICovCi0KLQkJcG9sID0gdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3kodm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCAmYW1wO2lseCk7Ci0JCWlmIChwb2wgJmFtcDsmYW1wOyAocG9sLSZndDtmbGFncyAmYW1wOyBNUE9MX0ZfTU9GKSkKLQkJCXJldCA9IHRydWU7Ci0JCW1wb2xfY29uZF9wdXQocG9sKTsKLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCXBvbCA9IHZtYS0mZ3Q7dm1fcG9saWN5OwomIzQzOwlwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgdm1hLSZndDt2bV9zdGFydCwgJmFtcDtpbHgpOwogCWlmICghcG9sKQogCQlwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Ci0KLQlyZXR1cm4gcG9sLSZndDtmbGFncyAmYW1wOyBNUE9MX0ZfTU9GOwomIzQzOwltb2YgPSBwb2wtJmd0O2ZsYWdzICZhbXA7IE1QT0xfRl9NT0Y7CiYjNDM7CW1wb2xfY29uZF9wdXQocG9sKTsKJiM0MzsJcmV0dXJuIG1vZjsKIH0KIAogYm9vbCBhcHBseV9wb2xpY3lfem9uZShzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3ksIGVudW0gem9uZV90eXBlIHpvbmUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1wb2xpY3kgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9tZW1wb2xpY3kuY2AsIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyB0byB0aGUgYHZtYV9wb2xpY3lfbW9mYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgbW9kaWZpY2F0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHNpbXBsaWZpZWQgYHZtYV9wb2xpY3lfbW9mYCBieSBpbnRyb2R1Y2luZyBgX19nZXRfdm1hX3BvbGljeWAuIFRoZSBvbGQgY29kZSBoYWQgdGhhdCBjb25kaXRpb25hbCBvZiB1c2luZyBgdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3lgIG9yIGZhbGxpbmcgYmFjayB0byBgdm1hLSZndDt2bV9wb2xpY3lgLCBidXQgdGhpcyBwYXRjaCByZXBsYWNlZCBpdCB3aXRoIGEgZGlyZWN0IGNhbGwgdG8gYF9fZ2V0X3ZtYV9wb2xpY3lgLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGlzIGFuIGltcHJvdmVtZW50LiBUaGUgY29kZSBhcHBlYXJzIHRvIGJlIGNhbGxpbmcgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IGBfX2dldF92bWFfcG9saWN5YCBhYnN0cmFjdHMgYXdheSB0aGUgbG9naWMgb2YgaGFuZGxpbmcgYm90aCB0aGUgYHZtX29wcy0mZ3Q7Z2V0X3BvbGljeWAgYW5kIHRoZSBkaXJlY3QgYHZtX3BvbGljeWAgYWNjZXNzLiBTbywgaXQmIzM5O3MgZG9pbmcgcHJlY2lzZWx5IHdoYXQgdGhlIG9yaWdpbmFsIGNvZGUgZGlkLCBidXQgaW4gYSBjbGVhbmVyIGZhc2hpb24uIFRvIGJlIHN1cmUsIEkmIzM5O2xsIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fZ2V0X3ZtYV9wb2xpY3lgIGl0c2VsZiwgYWxzbyBpbiBgbW0vbWVtcG9saWN5LmNgLCB0byB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19nZXRfdm1hX3BvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTExNDc9c3RhdGljIGxvbmcgZG9fZ2V0X21lbXBvbGljeShpbnQgKnBvbGljeSwgbm9kZW1hc2tfdCAqbm1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtMTE4MS1cdFx0fVxubW0vbWVtcG9saWN5LmM6MTE4MjpcdFx0cG9sID0gX19nZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIFx1MDAyNmlseCk7XG5tbS9tZW1wb2xpY3kuYy0xMTgzLVx0fSBlbHNlIGlmIChhZGRyKVxuLS1cbm1tL21lbXBvbGljeS5jPTE5OTA9Ym9vbCB2bWFfbWlncmF0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDE3LVxubW0vbWVtcG9saWN5LmM6MjAxODpzdHJ1Y3QgbWVtcG9saWN5ICpfX2dldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vbWVtcG9saWN5LmMtMjAxOS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdvZmZfdCAqaWx4KVxuLS1cbm1tL21lbXBvbGljeS5jPTIwNDE9c3RydWN0IG1lbXBvbGljeSAqZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtcG9saWN5LmMtMjA0NS1cbm1tL21lbXBvbGljeS5jOjIwNDY6XHRwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgYWRkciwgaWx4KTtcbm1tL21lbXBvbGljeS5jLTIwNDctXHRpZiAoIXBvbClcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMDU3PWJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtcG9saWN5LmMtMjA2Mi1cbm1tL21lbXBvbGljeS5jOjIwNjM6XHRwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCBcdTAwMjZpbHgpO1xubW0vbWVtcG9saWN5LmMtMjA2NC1cdGlmICghcG9sKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBfX2dldF92bWFfcG9saWN5YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBgX19nZXRfdm1hX3BvbGljeWAgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgbWVtb3J5IHBvbGljaWVzIHdpdGhpbiB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBjb250ZXh0LiBJIHdhbnQgdG8gbG9vayBhdCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFZNQSBmbGFncywgdGhlIE5VTUEgcG9saWNpZXMsIGFuZCBwb3RlbnRpYWxseSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUCkgb3Igb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjcnVjaWFsIGRlY2lzaW9uIHBvaW50cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlbiBJJiMzOTtsbCBldmFsdWF0ZSB0aGUgY29kZSBmb3IgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgb3Igc3VidGxlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZWRnZSBjYXNlcyBhcm91bmQgcG9saWN5IGluaGVyaXRhbmNlLCBtaWdyYXRpb24sIGFuZCB0aGUgaW1wYWN0IG9mIHBvbGljeSBjaGFuZ2VzIGR1cmluZyBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIHNvbWUgaW50ZXJlc3RpbmcgbnVhbmNlcyBpbiB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDE4Olx0c3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjIwMTk6XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdvZmZfdCAqaWx4KVxuMjAyMDpcdHtcbjIwMjE6XHRcdCppbHggPSAwO1xuMjAyMjpcdFx0cmV0dXJuICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kpID9cbjIwMjM6XHRcdFx0dm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5KHZtYSwgYWRkciwgaWx4KSA6IHZtYS1cdTAwM2V2bV9wb2xpY3k7XG4yMDI0Olx0fVxuMjAyNTpcdFxuMjAyNjpcdC8qXG4yMDI3Olx0ICogZ2V0X3ZtYV9wb2xpY3koQHZtYSwgQGFkZHIsIEBvcmRlciwgQGlseClcbjIwMjg6XHQgKiBAdm1hOiB2aXJ0dWFsIG1lbW9yeSBhcmVhIHdob3NlIHBvbGljeSBpcyBzb3VnaHRcbjIwMjk6XHQgKiBAYWRkcjogYWRkcmVzcyBpbiBAdm1hIGZvciBzaGFyZWQgcG9saWN5IGxvb2t1cFxuMjAzMDpcdCAqIEBvcmRlcjogMCwgb3IgYXBwcm9wcmlhdGUgaHVnZV9wYWdlX29yZGVyIGZvciBpbnRlcmxlYXZpbmdcbjIwMzE6XHQgKiBAaWx4OiBpbnRlcmxlYXZlIGluZGV4IChvdXRwdXQpLCBmb3IgdXNlIG9ubHkgd2hlbiBNUE9MX0lOVEVSTEVBVkUgb3JcbjIwMzI6XHQgKiAgICAgICBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVcbjIwMzM6XHQgKlxuMjAzNDpcdCAqIFJldHVybnMgZWZmZWN0aXZlIHBvbGljeSBmb3IgYSBWTUEgYXQgc3BlY2lmaWVkIGFkZHJlc3MuXG4yMDM1Olx0ICogRmFsbHMgYmFjayB0byBjdXJyZW50LVx1MDAzZW1lbXBvbGljeSBvciBzeXN0ZW0gZGVmYXVsdCBwb2xpY3ksIGFzIG5lY2Vzc2FyeS5cbjIwMzY6XHQgKiBTaGFyZWQgcG9saWNpZXMgW3Rob3NlIG1hcmtlZCBhcyBNUE9MX0ZfU0hBUkVEXSByZXF1aXJlIGFuIGV4dHJhIHJlZmVyZW5jZVxuMjAzNzpcdCAqIGNvdW50LS1hZGRlZCBieSB0aGUgZ2V0X3BvbGljeSgpIHZtX29wLCBhcyBhcHByb3ByaWF0ZS0tdG8gcHJvdGVjdCBhZ2FpbnN0XG4yMDM4Olx0ICogZnJlZWluZyBieSBhbm90aGVyIHRhc2suICBJdCBpcyB0aGUgY2FsbGVyJiMzOTtzIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdGhlXG4yMDM5Olx0ICogZXh0cmEgcmVmZXJlbmNlIGZvciBzaGFyZWQgcG9saWNpZXMuXG4yMDQwOlx0ICovXG4yMDQxOlx0c3RydWN0IG1lbXBvbGljeSAqZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4yMDQyOlx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgb3JkZXIsIHBnb2ZmX3QgKmlseClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjk5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT3B0aW1pemF0aW9uIG9mIGB2bWFfcG9saWN5X21vZmAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1ha2luZyBhIHNlZW1pbmdseSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIGB2bWFfcG9saWN5X21vZmAuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyByZXBsYWNpbmcgc29tZSBkdXBsaWNhdGVkIGxvZ2ljIHdpdGggYSBjYWxsIHRvIGBfX2dldF92bWFfcG9saWN5YC4gVGhlIG9sZCBjb2RlIHdhcyBoYW5kbGluZyB0aGUgcmV0cmlldmFsIG9mIHRoZSBtZW1vcnkgcG9saWN5IGluIGEgbW9yZSB2ZXJib3NlIHdheS4gSXQgY2hlY2tlZCBpZiBgdm1hLSZndDt2bV9vcHNgIGFuZCBpdHMgYGdldF9wb2xpY3lgIGZ1bmN0aW9uIHdlcmUgdmFsaWQuIElmIHRoZXkgd2VyZSwgaXQgY2FsbGVkIHRoYXQgZnVuY3Rpb24gYW5kIGNoZWNrZWQgdGhlIGZsYWdzIGZvciB0aGUgYE1QT0xfRl9NT0ZgIGJpdC4gT3RoZXJ3aXNlLCBpdCBkZWZhdWx0ZWQgdG8gdGhlIGB2bWEtJmd0O3ZtX3BvbGljeWAgb3IgdGhlIHRhc2sgcG9saWN5LiBUaGUgbmV3IGNvZGUgaXMgY2xlYW5lcjogaXQgdXNlcyBgX19nZXRfdm1hX3BvbGljeWAgdG8gYWJzdHJhY3QgdGhhdCBhd2F5LgoKTm93LCBteSBpbml0aWFsIHRob3VnaHQgaXM6IHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50LCBidXQgdGhlcmUmIzM5O3MgYWx3YXlzIGEgaGlkZGVuIGNvcm5lciBjYXNlLiBMZXQgbWUgdGhpbmsuICpBaGEhKiBgX19nZXRfdm1hX3BvbGljeWAgbWlnaHQgcmV0dXJuIGB2bWEtJmd0O3ZtX3BvbGljeWAgaWYgYHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5YCBpcyBOVUxMLiBUaGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIG5vdyBgbXBvbF9jb25kX3B1dChwb2wpYCB3aWxsIGJlIGNhbGxlZCBvbiBgdm1hLSZndDt2bV9wb2xpY3lgLiBJIHdvbmRlciwgZG9lcyBgbXBvbF9jb25kX3B1dGAgYWN0dWFsbHkgKmRvKiBhbnl0aGluZyB3aGVuIGFwcGxpZWQgdG8gYHZtYS0mZ3Q7dm1fcG9saWN5YD8gSXQgZmVlbHMgYSBsaXR0bGUgcmVkdW5kYW50IHRvIG1lLiBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYG1wb2xfY29uZF9wdXRgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHdpdGggdGhpcyBzaW1wbGlmaWNhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBsb29rIGludG8gaXQgcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wb2xfY29uZF9wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz0xMTQ3PXN0YXRpYyBsb25nIGRvX2dldF9tZW1wb2xpY3koaW50ICpwb2xpY3ksIG5vZGVtYXNrX3QgKm5tYXNrLFxuLS1cbm1tL21lbXBvbGljeS5jLTEyMzktIG91dDpcbm1tL21lbXBvbGljeS5jOjEyNDA6XHRtcG9sX2NvbmRfcHV0KHBvbCk7XG5tbS9tZW1wb2xpY3kuYy0xMjQxLVx0aWYgKHZtYSlcbi0tXG5tbS9tZW1wb2xpY3kuYz0xNDg2PXN0YXRpYyBsb25nIGRvX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxuLS1cbm1tL21lbXBvbGljeS5jLTE2MDItXHRcdFx0XHQvKiBXZSBhbHJlYWR5IGtub3cgdGhlIHBvbCwgYnV0IG5vdCB0aGUgaWx4ICovXG5tbS9tZW1wb2xpY3kuYzoxNjAzOlx0XHRcdFx0bXBvbF9jb25kX3B1dChnZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIG9yZGVyLFxubW0vbWVtcG9saWN5LmMtMTYwNC1cdFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2bW1wb2wuaWx4KSk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjA1Nz1ib29sIHZtYV9wb2xpY3lfbW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21lbXBvbGljeS5jLTIwNjYtXHRtb2YgPSBwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0Y7XG5tbS9tZW1wb2xpY3kuYzoyMDY3Olx0bXBvbF9jb25kX3B1dChwb2wpO1xubW0vbWVtcG9saWN5LmMtMjA2OC1cdHJldHVybiBtb2Y7XG4tLVxubW0vbWVtcG9saWN5LmM9MjUyND1zdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbXBvbGljeS5jLTI1MzUtXHRmb2xpbyA9IGZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcCwgb3JkZXIsIHBvbCwgaWx4LCBudW1hX25vZGVfaWQoKSk7XG5tbS9tZW1wb2xpY3kuYzoyNTM2Olx0bXBvbF9jb25kX3B1dChwb2wpO1xubW0vbWVtcG9saWN5LmMtMjUzNy1cdHJldHVybiBmb2xpbztcbi0tXG5tbS9tZW1wb2xpY3kuYz0yOTc1PWludCBtcG9sX21pc3BsYWNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zMDY2LW91dDpcbm1tL21lbXBvbGljeS5jOjMwNjc6XHRtcG9sX2NvbmRfcHV0KHBvbCk7XG5tbS9tZW1wb2xpY3kuYy0zMDY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgdGhlIERlZmluaXRpb24gb2YgYG1wb2xfY29uZF9wdXRgKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBtcG9sX2NvbmRfcHV0YCBmdW5jdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQuIEtub3dpbmcgdGhlIGRlZmluaXRpb24gaXMgY3J1Y2lhbDsgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UsIHRoZSBkYXRhIGl0IG9wZXJhdGVzIG9uLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBoZWFkZXIgZmlsZSBvciBzb3VyY2UgZmlsZSB3aGVyZSB0aGlzIGlzIGRlY2xhcmVkIG9yIGltcGxlbWVudGVkLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcG9sX2NvbmRfcHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oPTc3PXN0YXRpYyBpbmxpbmUgaW50IG1wb2xfbmVlZHNfY29uZF9yZWYoc3RydWN0IG1lbXBvbGljeSAqcG9sKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcG9saWN5LmgtODEtXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjgyOnN0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX2NvbmRfcHV0KHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcbmluY2x1ZGUvbGludXgvbWVtcG9saWN5LmgtODMte1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcG9saWN5Lmg9MjAwPXN0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX3B1dChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0yMDMtXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjIwNDpzdGF0aWMgaW5saW5lIHZvaWQgbXBvbF9jb25kX3B1dChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTIwNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbXBvbF9jb25kX3B1dGAgaW4gYGxpbnV4L21lbXBvbGljeS5oYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBsaW51eC9tZW1wb2xpY3kuaGAgaGVhZGVyIGZpbGUgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBgbXBvbF9jb25kX3B1dGAgZnVuY3Rpb24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgcGllY2UgcmVsYXRlZCB0byBtZW1vcnkgcG9saWNpZXMsIHNvIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gSXQmIzM5O3MgbGlrZWx5IGEgY29uZGl0aW9uYWwgZGVjcmVtZW50IG9wZXJhdGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgb3Igc29tZSBvdGhlciBmb3JtIG9mIHJlc291cmNlIG1hbmFnZW1lbnQgYXNzb2NpYXRlZCB3aXRoIG1lbW9yeSBwb2xpY3kgc3RydWN0dXJlcy4gVGhlICYjMzQ7Y29uZCYjMzQ7IHN1Z2dlc3RzIHNvbWUgc29ydCBvZiBjaGVjayBvciBndWFyZCBpcyBpbnZvbHZlZCBiZWZvcmUgdGhlIGRlY3JlbWVudCBhY3R1YWxseSBoYXBwZW5zLCB3aGljaCBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGNvbmN1cnJlbmN5IGNvbnRyb2wgb3IgYXZvaWRpbmcgdW5kZXJmbG93LiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBjb25zaWRlciBhbnkgY29uZGl0aW9ucyBhdHRhY2hlZCwgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHJlbGF0ZWQgc3RydWN0dXJlcyBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgYXJlLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIGludm9sdmVkIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIHRpbWUgdG8gZ2V0IGEgcmVtaW5kZXIgYXMgdG8gdGhlIHB1cnBvc2Ugb2YgdGhlIHBvbGljeSBjYWNoZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NzpcdHN0YXRpYyBpbmxpbmUgaW50IG1wb2xfbmVlZHNfY29uZF9yZWYoc3RydWN0IG1lbXBvbGljeSAqcG9sKVxuICA3ODpcdHtcbiAgNzk6XHRcdHJldHVybiAocG9sIFx1MDAyNlx1MDAyNiAocG9sLVx1MDAzZWZsYWdzIFx1MDAyNiBNUE9MX0ZfU0hBUkVEKSk7XG4gIDgwOlx0fVxuICA4MTpcdFxuICA4MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX2NvbmRfcHV0KHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcbiAgODM6XHR7XG4gIDg0Olx0XHRpZiAobXBvbF9uZWVkc19jb25kX3JlZihwb2wpKVxuICA4NTpcdFx0XHRfX21wb2xfcHV0KHBvbCk7XG4gIDg2Olx0fVxuICA4NzpcdFxuICA4ODpcdGV4dGVybiBzdHJ1Y3QgbWVtcG9saWN5ICpfX21wb2xfZHVwKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCk7XG4gIDg5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sX2R1cChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXG4gIDkwOlx0e1xuICA5MTpcdFx0aWYgKHBvbClcbiAgOTI6XHRcdFx0cG9sID0gX19tcG9sX2R1cChwb2wpO1xuICA5MzpcdFx0cmV0dXJuIHBvbDtcbiAgOTQ6XHR9XG4gIDk1Olx0XG4gIDk2Olx0c3RhdGljIGlubGluZSB2b2lkIG1wb2xfZ2V0KHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgUG9saWN5IFJlZmFjdG9yaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRoZSBgbXBvbF9jb25kX3B1dGAgdXNhZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcywgYG1wb2xfY29uZF9wdXRgIG9ubHkgZGVjcmVtZW50cyBhIHJlZmVyZW5jZSBpZiBgTVBPTF9GX1NIQVJFRGAgaXMgc2V0LiBOb3csIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBsb2dpYy4gSWYgYHZtYS0mZ3Q7dm1fcG9saWN5YCAqaGFzKiBgTVBPTF9GX1NIQVJFRGAgc2V0LCB0aGVuIGBtcG9sX2NvbmRfcHV0YCB3aWxsIHJlbGVhc2UgdGhlIHBvbGljeSwgcmlnaHQ/IEJ1dCB3YWl0LCBJIGRvbiYjMzk7dCB0aGluayBgdm1hLSZndDt2bV9wb2xpY3lgICpldmVyKiBoYXMgYE1QT0xfRl9TSEFSRURgIHNldCBieSBkZWZhdWx0LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0LgoKSXQmIzM5O3MgdXN1YWxseSBvbmx5IHNldCBvbiBwb2xpY2llcyByZXR1cm5lZCBieSBgdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3lgLCBsaWtlIGluIHNoYXJlZCBtZW1vcnkuIElmIHdlJiMzOTtyZSBqdXN0IGRlYWxpbmcgd2l0aCB0aGUgZGVmYXVsdCBgdm1hLSZndDt2bV9wb2xpY3lgIHRoZW4gYG1wb2xfY29uZF9wdXRgIGRvZXMgbm90aGluZy4gQnV0LCB3aGF0IGlmIHRoZSB0YXNrJiMzOTtzIHBvbGljeSwgZnJvbSBgZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpYCwgaXMgYE1QT0xfRl9TSEFSRURgPyBObywgdGFzayBwb2xpY2llcyBzaG91bGRuJiMzOTt0IGhhdmUgdGhhdCBmbGFnLCBzbyB0aGlzIGlzIGFib3V0IGFuIGVxdWl2YWxlbnQgZnVuY3Rpb25hbCBjaGFuZ2UuCgpTbyBpdCBzZWVtcyB0byBiZSBsb2dpY2FsbHkgdGhlIHNhbWUsIGJ1dCB0aGlzIGNvdWxkIGJlIGEgcmVmYWN0b3JpbmcuIEkmIzM5O2QgbG92ZSB0byBrbm93IHdoYXQgdGhlIGNvbW1pdCBtZXNzYWdlIGlzLCBidXQgaXQmIzM5O3Mgbm90IGF2YWlsYWJsZSByaWdodCBub3cuIExldCYjMzk7cyBzZWUuLi4gdGhlIGNoYW5nZSBpcyB0aGlzOgoKYGBgYwotCWlmICh2bWEtJmd0O3ZtX29wcyAmYW1wOyZhbXA7IHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5KSB7Ci0JCWJvb2wgcmV0ID0gZmFsc2U7Ci0JCXBnb2ZmX3QgaWx4OwkJLyogaWdub3JlZCBoZXJlICovCi0KLQkJcG9sID0gdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3kodm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCAmYW1wO2lseCk7Ci0JCWlmIChwb2wgJmFtcDsmYW1wOyAocG9sLSZndDtmbGFncyAmYW1wOyBNUE9MX0ZfTU9GKSkKLQkJCXJldCA9IHRydWU7Ci0JCW1wb2xfY29uZF9wdXQocG9sKTsKLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCXBvbCA9IHZtYS0mZ3Q7dm1fcG9saWN5OwomIzQzOwlwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgdm1hLSZndDt2bV9zdGFydCwgJmFtcDtpbHgpOwogCWlmICghcG9sKQogCQlwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Ci0KLQlyZXR1cm4gcG9sLSZndDtmbGFncyAmYW1wOyBNUE9MX0ZfTU9GOwomIzQzOwltb2YgPSBwb2wtJmd0O2ZsYWdzICZhbXA7IE1QT0xfRl9NT0Y7CiYjNDM7CW1wb2xfY29uZF9wdXQocG9sKTsKJiM0MzsJcmV0dXJuIG1vZjsKYGBgCgpPa2F5LCBzbyBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBUaGUgb2xkIGNvZGUgaGFuZGxlZCB0aGUgY2FzZSB3aGVyZSBgdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3lgIHJldHVybmVkIE5VTEwsIGxpa2UgdGhpczoKCmBgYGMKCQlwb2wgPSB2bWEtJmd0O3ZtX29wcy0mZ3Q7Z2V0X3BvbGljeSh2bWEsIHZtYS0mZ3Q7dm1fc3RhcnQsICZhbXA7aWx4KTsKCQlpZiAocG9sICZhbXA7JmFtcDsgKHBvbC0mZ3Q7ZmxhZ3MgJmFtcDsgTVBPTF9GX01PRikpCgkJCXJldCA9IHRydWU7CgkJbXBvbF9jb25kX3B1dChwb2wpOwoKCQlyZXR1cm4gcmV0OwpgYGAKCkVzc2VudGlhbGx5LCBpZiBgdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3lgIHJldHVybnMgTlVMTCwgdGhlIG9sZCBjb2RlIHJldHVybnMgYGZhbHNlYCEgTm93LCBsb29raW5nIGF0IHRoZSBuZXcgY29kZToKCmBgYGMKCXBvbCA9IF9fZ2V0X3ZtYV9wb2xpY3kodm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCAmYW1wO2lseCk7CmBgYAoKSWYgYHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5YCByZXR1cm5zIE5VTEwsIGl0IHNlZW1zIGBfX2dldF92bWFfcG9saWN5YCByZXR1cm5zIGB2bWEtJmd0O3ZtX3BvbGljeWAuIE9rYXksIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgd2hhdCBgX19nZXRfdm1hX3BvbGljeWAgZG9lcy4uLiBUaGlzIGNvdWxkIGJlIGtleSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAxODpcdHN0cnVjdCBtZW1wb2xpY3kgKl9fZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4yMDE5Olx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIsIHBnb2ZmX3QgKmlseClcbjIwMjA6XHR7XG4yMDIxOlx0XHQqaWx4ID0gMDtcbjIwMjI6XHRcdHJldHVybiAodm1hLVx1MDAzZXZtX29wcyBcdTAwMjZcdTAwMjYgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5KSA/XG4yMDIzOlx0XHRcdHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeSh2bWEsIGFkZHIsIGlseCkgOiB2bWEtXHUwMDNldm1fcG9saWN5O1xuMjAyNDpcdH1cbjIwMjU6XHRcbjIwMjY6XHQvKlxuMjAyNzpcdCAqIGdldF92bWFfcG9saWN5KEB2bWEsIEBhZGRyLCBAb3JkZXIsIEBpbHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MzUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG9saWN5IENoYW5nZSBpbiB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgX19nZXRfdm1hX3BvbGljeWAsIHRoZSBjb2RlIG5vdyBleHBsaWNpdGx5IGNoZWNrcyBpZiBhIGB2bWEtJmd0O3ZtX29wcy0mZ3Q7Z2V0X3BvbGljeWAgZnVuY3Rpb24gZXhpc3RzIGFuZCBjYWxscyBpdCBpZiBpdCBkb2VzLiBDcnVjaWFsbHksIGlmIHRoYXQgZnVuY3Rpb24gKnJldHVybnMqIE5VTEwsIGBfX2dldF92bWFfcG9saWN5YCBpdHNlbGYgKnJldHVybnMqIE5VTEwuIFRoaXMgaXMgdGhlIGtleSBkaWZmZXJlbmNlLiBUaGVuLCBgdm1hX3BvbGljeV9tb2ZgIHVzZXMgdGhlIHJlc3VsdCBmcm9tIGBfX2dldF92bWFfcG9saWN5YC4gSXQgY2hlY2tzIGlmIHRoZSByZXR1cm5lZCB2YWx1ZSBmcm9tIGBfX2dldF92bWFfcG9saWN5YCBpcyBOVUxMLCBhbmQgKmlmKiBpdCYjMzk7cyBOVUxMLCBpdCBmYWxscyBiYWNrIHRvIHVzaW5nIGBnZXRfdGFza19wb2xpY3koY3VycmVudClgLgoKTm93LCB0aGUgb2xkIGNvZGUgd2FzIGRpZmZlcmVudC4gUHJldmlvdXNseSwgaWYgYHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5YCByZXR1cm5lZCBOVUxMLCB0aGUgKmVudGlyZSBmdW5jdGlvbiogaW1tZWRpYXRlbHkgcmV0dXJuZWQgYGZhbHNlYC4gSXQgZGlkbiYjMzk7dCBmYWxsIGJhY2sgdG8gYHZtYS0mZ3Q7dm1fcG9saWN5YCBvciBgZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpYC4gU28sIHRoZSByZXR1cm4gb2YgTlVMTCBmcm9tIHRoZSBgZ2V0X3BvbGljeWAgZnVuY3Rpb24gd2FzIGVmZmVjdGl2ZWx5IHRyZWF0ZWQgYXMgYSBmYWlsdXJlLgoKVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UhIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgYHZtYV9wb2xpY3lfbW9mYCB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYGZhbHNlYCBpZiB0aGUgYGdldF9wb2xpY3lgIGZ1bmN0aW9uIHJldHVybmVkIE5VTEwuIFRoZSBuZXcgYmVoYXZpb3IgY29ycmVjdGx5IGZhbGxzIGJhY2sgdG8gdGhlIHRhc2sgcG9saWN5IGluIHRoaXMgc2NlbmFyaW8uCgpMZXQmIzM5O3MgY29uZmlybSB0aGlzIGJlaGF2aW9yIGlzIGV4cGVjdGVkLiBDYW4gYHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5YCBhY3R1YWxseSByZXR1cm4gTlVMTD8gWWVzISBGb3IgaW5zdGFuY2UsIGBzaG1lbV9nZXRfcG9saWN5YCBtaWdodCByZXR1cm4gTlVMTCBpZiBubyBwb2xpY3kgaXMgc2V0IG9uIHRoZSBpbm9kZS4gVGhpcyBjaGFuZ2UgZW5zdXJlcyB0aGF0IHRoZSB0YXNrIHBvbGljeSBpcyB1c2VkIHdoZW4gaXQgc2hvdWxkIGJlLiBUaGUgYmVoYXZpb3IgY2hhbmdlIGlzIGNvcnJlY3QuCgpUaGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgZm9jdXMgZnVuY3Rpb24gaXMgYHZtYV9wb2xpY3lfbW9mYC4gTm93LCB3aG8gY2FsbHMgYHZtYV9wb2xpY3lfbW9mYD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hX3BvbGljeV9tb2YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9MjA0MT1zdHJ1Y3QgbWVtcG9saWN5ICpnZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDU2LVxubW0vbWVtcG9saWN5LmM6MjA1Nzpib29sIHZtYV9wb2xpY3lfbW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vbWVtcG9saWN5LmMtMjA1OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBmaWVsZCBvZiBleHBlcnRpc2UgKHdoaWNoIEkgYXNzdW1lIHlvdSYjMzk7bGwgaW5mZXIgZnJvbSB0aGUgcXVlcnkpOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgdm1hX3BvbGljeV9tb2ZgIENhbGxlcioqCgpBbHJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyIHdpdGggdGhpcyBsaW5lIG9mIGludmVzdGlnYXRpb24sIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBpZGVudGlmeSB0aGUgc291cmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8sIG9yIHdoYXQgc3BlY2lmaWMgcGFydCBvZiB0aGUga2VybmVsLCBpcyBjYWxsaW5nIGB2bWFfcG9saWN5X21vZmAuIFRoaXMgZnVuY3Rpb24mIzM5O3MgdmVyeSBuYW1lIHN1Z2dlc3RzIGEgY3JpdGljYWwgbGluayB0byBNZW1vcnktT3B0aW1pemVkIEZ1bmN0aW9ucyAoTU9GcyksIG9yIHBlcmhhcHMgYSB3aWRlciBwb2xpY3kgcmVsYXRlZCB0byBWaXJ0dWFsIE1lbW9yeSBBcmVhcyAoVk1BcyksIGFuZCBiZWZvcmUgSSBjYW4gZGlzc2VjdCAqd2hhdCogaXQmIzM5O3MgZG9pbmcsIEkgaGF2ZSB0byBrbm93ICp3aG8qIGlzIHRlbGxpbmcgaXQgdG8gZG8gaXQuIElzIGl0IGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnQ/IElzIGl0IHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIHN5c3RlbSBjYWxsPyBJcyBpdCByZWxhdGVkIHRvIGEgcGFydGljdWxhciBkcml2ZXIgb3Igc3Vic3lzdGVtPyBLbm93aW5nIHRoZSBjYWxsZXIgaXMgYWJzb2x1dGVseSBmb3VuZGF0aW9uYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgaW4gdGhlIGdyZWF0ZXIgc3lzdGVtIGRlc2lnbiBhbmQgdGhlIGxvZ2ljIGl0JiMzOTtzIHRyeWluZyB0byBpbXBsZW1lbnQsIGFuZCB0aHVzLCBJICpuZWVkKiB0byBzdGFydCB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzICpyaWdodCBub3cqLCBiZWZvcmUgZXZlbiBjb25zaWRlcmluZyB0aGUgbmV4dCBzdGVwIGluIG15IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYV9wb2xpY3lfbW9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtcG9saWN5Lmg9MTM0PXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xMzUtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG9yZGVyLCBwZ29mZl90ICppbHgpO1xuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaDoxMzY6Ym9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTEzNy1cbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTQwNzY9c3RhdGljIHZvaWQgdGFza19udW1hX3dvcmsoc3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmspXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy00MTY4LVx0Zm9yICg7IHZtYTsgdm1hID0gdm1hX25leHQoXHUwMDI2dm1pKSkge1xua2VybmVsL3NjaGVkL2ZhaXIuYzo0MTY5Olx0XHRpZiAoIXZtYV9taWdyYXRhYmxlKHZtYSkgfHwgIXZtYV9wb2xpY3lfbW9mKHZtYSkgfHxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDE3MC1cdFx0XHRpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fCAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NSVhFRE1BUCkpIHtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMDQxPXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbXBvbGljeS5jLTIwNTYtXG5tbS9tZW1wb2xpY3kuYzoyMDU3OmJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9tZW1wb2xpY3kuYy0yMDU4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQxMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBpbnRlcm5hbHM6CgoqKkRpdmluZyBpbnRvIE5VTUEgQmFsYW5jaW5nIExvZ2ljKioKCkFscmlnaHQsIHNvIGB2bWFfcG9saWN5X21vZmDigKYgdGhhdCByaW5ncyBhIGJlbGwuIEFoIHllcywgaXQmIzM5O3MgY2FsbGVkIGJ5IGB0YXNrX251bWFfd29ya2Ag4oCTIGFuZCB0aGF0JiMzOTtzIGluIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4gUmlnaHQsIHNvIHRoaXMgaXMgYWxsIHBhcnQgb2YgdGhlIE5VTUEgYmFsYW5jaW5nIGluZnJhc3RydWN0dXJlLCBvYnZpb3VzbHkuIEdvdHRhIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmbG93IGhlcmUuIExldCBtZSB0cmFjZSBiYWNrIGFuZCBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgaG93IGB0YXNrX251bWFfd29ya2AgaXMgdXRpbGl6ZWQsIHRoZSBnb2FsIG9mIHRoaXMgYmFsYW5jaW5nLiBXaGF0JiMzOTtzIHRyaWdnZXJpbmcgaXQsIHdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBgdm1hX3BvbGljeV9tb2ZgIGJlaW5nIGludm9rZWQ/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGRpZ2dpbmcgaW50byBob3cgdGhlIHNjaGVkdWxlciBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgcG9saWN5IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZmFpci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTY1Olx0XHRcdHZtYSA9IHZtYV9uZXh0KFx1MDAyNnZtaSk7XG40MTY2Olx0XHR9XG40MTY3Olx0XG40MTY4Olx0XHRmb3IgKDsgdm1hOyB2bWEgPSB2bWFfbmV4dChcdTAwMjZ2bWkpKSB7XG40MTY5Olx0XHRcdGlmICghdm1hX21pZ3JhdGFibGUodm1hKSB8fCAhdm1hX3BvbGljeV9tb2Yodm1hKSB8fFxuNDE3MDpcdFx0XHRcdGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIHx8ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01JWEVETUFQKSkge1xuNDE3MTpcdFx0XHRcdHRyYWNlX3NjaGVkX3NraXBfdm1hX251bWEobW0sIHZtYSwgTlVNQUJfU0tJUF9VTlNVSVRBQkxFKTtcbjQxNzI6XHRcdFx0XHRjb250aW51ZTtcbjQxNzM6XHRcdFx0fVxuNDE3NDpcdFxuNDE3NTpcdFx0XHQvKlxuNDE3NjpcdFx0XHQgKiBTaGFyZWQgbGlicmFyeSBwYWdlcyBtYXBwZWQgYnkgbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSBub3RcbjQxNzc6XHRcdFx0ICogbWlncmF0ZWQgYXMgaXQgaXMgZXhwZWN0ZWQgdGhleSBhcmUgY2FjaGUgcmVwbGljYXRlZC4gQXZvaWRcbjQxNzg6XHRcdFx0ICogaGludGluZyBmYXVsdHMgaW4gcmVhZC1vbmx5IGZpbGUtYmFja2VkIG1hcHBpbmdzIG9yIHRoZSB2RFNPXG40MTc5Olx0XHRcdCAqIGFzIG1pZ3JhdGluZyB0aGUgcGFnZXMgd2lsbCBiZSBvZiBtYXJnaW5hbCBiZW5lZml0LlxuNDE4MDpcdFx0XHQgKi9cbjQxODE6XHRcdFx0aWYgKCF2bWEtXHUwMDNldm1fbW0gfHxcbjQxODI6XHRcdFx0ICAgICh2bWEtXHUwMDNldm1fZmlsZSBcdTAwMjZcdTAwMjYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1JFQUR8Vk1fV1JJVEUpKSA9PSAoVk1fUkVBRCkpKSB7XG40MTgzOlx0XHRcdFx0dHJhY2Vfc2NoZWRfc2tpcF92bWFfbnVtYShtbSwgdm1hLCBOVU1BQl9TS0lQX1NIQVJFRF9STyk7XG40MTg0Olx0XHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDcyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBOVU1BIEJhbGFuY2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGB2bWFfcG9saWN5X21vZmAgZnVuY3Rpb24g4oCTIGl0IGxvb2tzIGxpa2UgdGhlIGtleSB0byBkZWNpZGluZyB3aGV0aGVyIGEgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3IgTlVNQSBiYWxhbmNpbmcuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBkcml2ZXMgdGhpcyBiZWhhdmlvci4gTGV0IG1lIHNlZSwgeWVzLCB0aGF0JiMzOTtzIGl0OiBgQ09ORklHX05VTUFfQkFMQU5DSU5HYC4gQWxyaWdodCwgbGV0JiMzOTtzIGdvIGNoZWNrIHRoZSBzcGVjaWZpY3Mgb2YgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgbG9naWMgYmVoaW5kIHRoZSBkZWNpc2lvbnMgbWFkZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlVNQV9CQUxBTkNJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwMDc9Y29uZmlnIEFSQ0hfV0FOVF9OVU1BX1ZBUklBQkxFX0xPQ0FMSVRZXG4tLVxuaW5pdC9LY29uZmlnLTEwMDktXG5pbml0L0tjb25maWc6MTAxMDpjb25maWcgTlVNQV9CQUxBTkNJTkdcbmluaXQvS2NvbmZpZy0xMDExLVx0Ym9vbCBcJiMzNDtNZW1vcnkgcGxhY2VtZW50IGF3YXJlIE5VTUEgc2NoZWR1bGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnPTEwMjI9Y29uZmlnIFNDSEVEX0NBQ0hFXG4tLVxuaW5pdC9LY29uZmlnLTEwMzItXG5pbml0L0tjb25maWc6MTAzMzpjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG5pbml0L0tjb25maWctMTAzNC1cdGJvb2wgXCYjMzQ7QXV0b21hdGljYWxseSBlbmFibGUgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipUZXN0aW5nIE5VTUEgQmFsYW5jaW5nOiBBIFF1aWNrIFJ1bi1Eb3duKioKClJpZ2h0LCBzbyB0byBwcm9wZXJseSB0ZXN0IHRoaXMgTlVNQSBiYWxhbmNpbmcgZnVuY3Rpb25hbGl0eSwgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGBOVU1BX0JBTEFOQ0lOR2AgYW5kIGBOVU1BYCBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIEkgY2FuJiMzOTt0IGV2ZW4gYmVnaW4gdG8gZXZhbHVhdGUgaXQgd2l0aG91dCB0aG9zZSBwaWVjZXMgaW4gcGxhY2UuCgpBbmQgdGhlbiwgSSBzaG91bGQga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGB2bWFfcG9saWN5X21vZmAgdmFyaWFibGUgaXMgaGFuZ2luZyBvdXQgaW4gYG1tL21lbXBvbGljeS5jYCwgYW5kLCBhcyBJIHJlY2FsbCwgdGhhdCB3aG9sZSBmaWxlIG9ubHkgZ2V0cyBjb21waWxlZCB3aGVuIGBDT05GSUdfTlVNQWAgaXMgc2V0IGluIHRoZSBrZXJuZWwuIFNvLCB0byBldmVuICpzZWUqIHRoYXQgY29kZSwgSSYjMzk7bSBzdGlsbCByZWxpYW50IG9uIHRoYXQgZnVuZGFtZW50YWwgTlVNQSBzdXBwb3J0IGJlaW5nIGVuYWJsZWQuIEl0JiMzOTtzIGFsbCBjb25uZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvbGljeS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODU9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVx0JiM0Mzs9IGh1Z2V0bGJfdm1lbW1hcC5vXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfTlVNQSkgXHQmIzQzOz0gbWVtcG9saWN5Lm9cbm1tL01ha2VmaWxlLTg3LW9iai0kKENPTkZJR19TUEFSU0VNRU0pXHQmIzQzOz0gc3BhcnNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTlVNQSBEZXBlbmRlbmNpZXMgYW5kIGB0YXNrX251bWFfd29ya2AqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNvZGUgYW5kIHRoZSBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBOVU1BLCBhbmQgaXQgc2VlbXMgbGlrZSBgTlVNQWAgaXMgYSBwcmVyZXF1aXNpdGUsIG9idmlvdXNseS4gVGhlbiwgdG8gZ2V0IGB0YXNrX251bWFfd29ya2AgY29tcGlsZWQsIHdlIGFic29sdXRlbHkgbmVlZCBgTlVNQV9CQUxBTkNJTkdgIGVuYWJsZWQuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdGFza19udW1hX3dvcmtgIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoYXQuIEkmIzM5O2xsIGdvIGNoZWNrIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQsIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXNrX251bWFfd29yayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9mYWlyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2ZhaXIuYz00MDMzPXN0YXRpYyBib29sIHZtYV9pc19hY2Nlc3NlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy00MDc1LSAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzo0MDc2OnN0YXRpYyB2b2lkIHRhc2tfbnVtYV93b3JrKHN0cnVjdCBjYWxsYmFja19oZWFkICp3b3JrKVxua2VybmVsL3NjaGVkL2ZhaXIuYy00MDc3LXtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTQzMzM9dm9pZCBpbml0X251bWFfYmFsYW5jaW5nKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDM0OC1cdHAtXHUwMDNlbnVtYV9taWdyYXRlX3JldHJ5XHRcdD0gMDtcbmtlcm5lbC9zY2hlZC9mYWlyLmM6NDM0OTpcdC8qIFByb3RlY3QgYWdhaW5zdCBkb3VibGUgYWRkLCBzZWUgdGFza190aWNrX251bWEgYW5kIHRhc2tfbnVtYV93b3JrICovXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQzNTAtXHRwLVx1MDAzZW51bWFfd29yay5uZXh0XHRcdD0gXHUwMDI2cC1cdTAwM2VudW1hX3dvcms7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy00MzU3LVxua2VybmVsL3NjaGVkL2ZhaXIuYzo0MzU4Olx0aW5pdF90YXNrX3dvcmsoXHUwMDI2cC1cdTAwM2VudW1hX3dvcmssIHRhc2tfbnVtYV93b3JrKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDM1OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczoKCioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gZm9yIGB0YXNrX251bWFfd29ya2AqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIHZlcmlmeSBhIGZ1bmRhbWVudGFsIGNvbmRpdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiwgYHRhc2tfbnVtYV93b3JrYCwgaW50ZXJhY3RzIHdpdGggdGhlIE5VTUEgYmFsYW5jaW5nIGNvbmZpZ3VyYXRpb24uIFNvLCBteSBpbml0aWFsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYCNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBldmVuICpwcmVzZW50KiBpbiB0aGUgYnVpbGQgSSYjMzk7bSBjdXJyZW50bHkgbG9va2luZyBhdCwgYW5kIEkgY2FuIGFkanVzdCBteSBleHBlY3RhdGlvbnMgYWNjb3JkaW5nbHkuIElmIGl0JiMzOTtzICpub3QqIHVuZGVyIHRoYXQgY29uZGl0aW9uYWwsIHRoZW4gaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaXQgZGlmZmVyZW50bHkuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgc3RhbmQgYmVmb3JlIEkgY2FuIG1ha2UgYSBqdWRnZW1lbnQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyBpbmNsdWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05VTUFfQkFMQU5DSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2ZhaXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZmFpci5jPTEyNT1zdGF0aWMgdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9jZnNfYmFuZHdpZHRoX3NsaWNlXHRcdD0gNTAwMFVMO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTI3LVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMjg6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjktLyogUmVzdHJpY3QgdGhlIE5VTUEgcHJvbW90aW9uIHRocm91Z2hwdXQgKE1CL3MpIGZvciBlYWNoIHRhcmdldCBub2RlLiAqL1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHNjaGVkX2ZhaXJfc3lzY3Rsc1tdID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQ0LSNlbmRpZlxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNDU6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDYtXHR7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTMtXHR9LFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTQ6I2VuZGlmIC8qIENPTkZJR19OVU1BX0JBTEFOQ0lORyAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTUtfTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE0MzQ9c3RhdGljIGJvb2wgZXhjZWVkX2xsY19jYXBhY2l0eShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IGNwdSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQzNS17XG5rZXJuZWwvc2NoZWQvZmFpci5jOjE0MzY6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDM3LVx0dW5zaWduZWQgbG9uZyBsbGMsIGZvb3RwcmludDtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2NTM9c3RhdGljIGludCBnZXRfcHJlZl9sbGMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE2NjMtXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE2NjQ6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNjY1LVx0XHQvKlxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTc2ND1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jcHVtYXNrcyhjcHVtYXNrX3Zhcl90IGNwdXMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTc2NS17XG5rZXJuZWwvc2NoZWQvZmFpci5jOjE3NjY6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzY3LVx0aW50IGNwdSwgY3Vycl9jcHUsIG5pZCwgcHJlZl9uaWQ7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0yMTc5PWFkanVzdF9udW1hX2ltYmFsYW5jZShpbnQgaW1iYWxhbmNlLCBpbnQgZHN0X3J1bm5pbmcsIGludCBpbWJfbnVtYV9ucilcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTIyMDEtXG5rZXJuZWwvc2NoZWQvZmFpci5jOjIyMDI6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0yMjAzLS8qXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz00NDEzPXN0YXRpYyB2b2lkIHVwZGF0ZV9zY2FuX3BlcmlvZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuZXdfY3B1KVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDQ0Ni1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6NDQ0NzojZWxzZSAvKiAhQ09ORklHX05VTUFfQkFMQU5DSU5HOiAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy00NDQ4LVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9NDQ2MT1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NjYW5fcGVyaW9kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5ld19jcHUpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy00NDY0LVxua2VybmVsL3NjaGVkL2ZhaXIuYzo0NDY1OiNlbmRpZiAvKiAhQ09ORklHX05VTUFfQkFMQU5DSU5HICovXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQ0NjYtXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMDI4OT1zdGF0aWMgaW50IHRhc2tfaG90KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGxiX2VudiAqZW52KVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzMjktXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwMzMwOiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzMzEtLypcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwMzM2PXN0YXRpYyBsb25nIG1pZ3JhdGVfZGVncmFkZXNfbG9jYWxpdHkoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbGJfZW52ICplbnYpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDM4MS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTAzODI6I2Vsc2UgLyogIUNPTkZJR19OVU1BX0JBTEFOQ0lORzogKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzODMtc3RhdGljIGlubGluZSBsb25nIG1pZ3JhdGVfZGVncmFkZXNfbG9jYWxpdHkoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzODctfVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDM4ODojZW5kaWYgLyogIUNPTkZJR19OVU1BX0JBTEFOQ0lORyAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDM4OS1cbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTExMjUzPXN0cnVjdCBzZ19sYl9zdGF0cyB7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTI2OC1cdHVuc2lnbmVkIGludCBncm91cF9vdmVydXRpbGl6ZWQ7XHQvKiBBdCBsZWFzdCBvbmUgQ1BVIGlzIG92ZXJ1dGlsaXplZCBpbiB0aGUgZ3JvdXAgKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTEyNjk6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTI3MC1cdHVuc2lnbmVkIGludCBucl9udW1hX3J1bm5pbmc7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTc5Nz1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NnX2xiX3N0YXRzKHN0cnVjdCBsYl9lbnYgKmVudixcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExODUxLVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMTg1MjojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExODUzLVx0XHQvKiBPbmx5IGZicV9jbGFzc2lmeV9ncm91cCgpIHVzZXMgdGhpcyB0byBjbGFzc2lmeSBOVU1BIGdyb3VwcyAqL1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTE5MTY9c3RhdGljIGJvb2wgdXBkYXRlX3NkX3BpY2tfYnVzaWVzdChzdHJ1Y3QgbGJfZW52ICplbnYsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA2NC1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTIwNjU6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA2Ni1zdGF0aWMgaW5saW5lIGVudW0gZmJxX3R5cGUgZmJxX2NsYXNzaWZ5X2dyb3VwKHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTIwNzU9c3RhdGljIGlubGluZSBlbnVtIGZicV90eXBlIGZicV9jbGFzc2lmeV9ycShzdHJ1Y3QgcnEgKnJxKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIwODItfVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMjA4MzojZWxzZSAvKiAhQ09ORklHX05VTUFfQkFMQU5DSU5HOiAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA4NC1zdGF0aWMgaW5saW5lIGVudW0gZmJxX3R5cGUgZmJxX2NsYXNzaWZ5X2dyb3VwKHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTIwODk9c3RhdGljIGlubGluZSBlbnVtIGZicV90eXBlIGZicV9jbGFzc2lmeV9ycShzdHJ1Y3QgcnEgKnJxKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIwOTItfVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMjA5MzojZW5kaWYgLyogIUNPTkZJR19OVU1BX0JBTEFOQ0lORyAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA5NC1cbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEyMjYzPXNjaGVkX2JhbGFuY2VfZmluZF9kc3RfZ3JvdXAoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHRoaXNfY3B1KVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIzNzYtXHRcdFx0aW50IGltYl9udW1hX25yID0gc2QtXHUwMDNlaW1iX251bWFfbnI7XG5rZXJuZWwvc2NoZWQvZmFpci5jOjEyMzc3OiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIzNzgtXHRcdFx0aW50IGlkbGVzdF9jcHU7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjM4OC1cdFx0XHRcdHJldHVybiBpZGxlc3Q7XG5rZXJuZWwvc2NoZWQvZmFpci5jOjEyMzg5OiNlbmRpZiAvKiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIzOTAtXHRcdFx0Lypcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE1NDAyPXZvaWQgcHJpbnRfY2ZzX3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NDExLVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTQxMjojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NDEzLXZvaWQgc2hvd19udW1hX3N0YXRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHNlcV9maWxlICptKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTU0MzMtfVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTQzNDojZW5kaWYgLyogQ09ORklHX05VTUFfQkFMQU5DSU5HICovXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NDM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5VTUEgQmFsYW5jaW5nIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHRhc2tfbnVtYV93b3JrYCBmdW5jdGlvbiBhbmQgaXQmIzM5O3MgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBzcGVjaWZpYyB0byBOVU1BIHN5c3RlbXMgYW5kIE5VTUEgYmFsYW5jaW5nIGZlYXR1cmVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGxhcmdlciBOVU1BIHBpY3R1cmUuIFJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgYXJvdW5kIGxpbmUgNDA3Ni4gVGhhdCBzaG91bGQgYmUgdGhlIGFyZWEgd2hlcmUgdGhpcyBgdGFza19udW1hX3dvcmtgIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZCwgd2hpY2ggaG9wZWZ1bGx5IGdpdmVzIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgSSBuZWVkLiBJJiMzOTttIGd1ZXNzaW5nIEkmIzM5O2xsIGZpbmQgaXRzIHB1cnBvc2UsIGFuZCBwb3NzaWJseSBzZWUgaG93IGl0JiMzOTtzIGludm9rZWQgd2l0aGluIHRoZSBzY2hlZHVsaW5nIGRvbWFpbi4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3byB3aWxsIGJlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZmFpci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MDcwOlx0I2RlZmluZSBWTUFfUElEX1JFU0VUX1BFUklPRCAoNCAqIHN5c2N0bF9udW1hX2JhbGFuY2luZ19zY2FuX2RlbGF5KVxuNDA3MTpcdFxuNDA3MjpcdC8qXG40MDczOlx0ICogVGhlIGV4cGVuc2l2ZSBwYXJ0IG9mIG51bWEgbWlncmF0aW9uIGlzIGRvbmUgZnJvbSB0YXNrX3dvcmsgY29udGV4dC5cbjQwNzQ6XHQgKiBUcmlnZ2VyZWQgZnJvbSB0YXNrX3RpY2tfbnVtYSgpLlxuNDA3NTpcdCAqL1xuNDA3NjpcdHN0YXRpYyB2b2lkIHRhc2tfbnVtYV93b3JrKHN0cnVjdCBjYWxsYmFja19oZWFkICp3b3JrKVxuNDA3NzpcdHtcbjQwNzg6XHRcdHVuc2lnbmVkIGxvbmcgbWlncmF0ZSwgbmV4dF9zY2FuLCBub3cgPSBqaWZmaWVzO1xuNDA3OTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpwID0gY3VycmVudDtcbjQwODA6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcC1cdTAwM2VtbTtcbjQwODE6XHRcdHU2NCBydW50aW1lID0gcC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lO1xuNDA4MjpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG40MDgzOlx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG40MDg0Olx0XHR1bnNpZ25lZCBsb25nIG5yX3B0ZV91cGRhdGVzID0gMDtcbjQwODU6XHRcdGxvbmcgcGFnZXMsIHZpcnRwYWdlcztcbjQwODY6XHRcdHN0cnVjdCB2bWFfaXRlcmF0b3Igdm1pO1xuNDA4NzpcdFx0Ym9vbCB2bWFfcGlkc19za2lwcGVkO1xuNDA4ODpcdFx0Ym9vbCB2bWFfcGlkc19mb3JjZWQgPSBmYWxzZTtcbjQwODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMTUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdGFza19udW1hX3dvcmtgIERlcGVuZGVuY3kqKgoKT2theSwgc28gYHRhc2tfbnVtYV93b3JrYCBpcyBkZWZpbml0ZWx5IHBhcnQgb2YgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AuICBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gVGh1cywgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AgaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoYXQgY29kZSB0byBiZSBjb21waWxlZC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgZWxzZSBtaWdodCBiZSBjYWxsaW5nIGB2bWFfcG9saWN5X21vZmA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIGl0cyB1c2UuCgpUaGUgYGdyZXBgIG91dHB1dCBnaXZlcyBtZSBzb21lIGNsdWVzOiBpdCYjMzk7cyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oYCwgYW5kIGNhbGxlZCBmcm9tIGBrZXJuZWwvc2NoZWQvZmFpci5jYCBhbmQgYG1tL21lbXBvbGljeS5jYC4gIEhhbmcgb24sIGl0IGxvb2tzIGxpa2UgYHRhc2tfbnVtYV93b3JrYCBpcyB0aGUgKm9ubHkqIGNhbGxlciBvZiBgdm1hX3BvbGljeV9tb2ZgIGJleW9uZCB0aG9zZSB0d28gbG9jYXRpb25zLgoKQWhhLCB3YWl0LCBgdm1hX3BvbGljeV9tb2ZgIGlzIGluIGBtbS9tZW1wb2xpY3kuY2AuIFRoYXQgbWVhbnMgYG1tL21lbXBvbGljeS5jYCBpcyBjb21waWxlZCB3aXRoIGBDT05GSUdfTlVNQWAuIFNvLCBgQ09ORklHX05VTUFgICphbmQqIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZS4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGB2bWFfcG9saWN5X21vZmAgaXRzZWxmLgoKYGBgYwpib29sIHZtYV9wb2xpY3lfbW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQp7CglzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7CglwZ29mZl90IGlseDsKCWJvb2wgbW9mOwoKCXBvbCA9IF9fZ2V0X3ZtYV9wb2xpY3kodm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCAmYW1wO2lseCk7CglpZiAoIXBvbCkKCQlwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Cgltb2YgPSBwb2wtJmd0O2ZsYWdzICZhbXA7IE1QT0xfRl9NT0Y7CgltcG9sX2NvbmRfcHV0KHBvbCk7CglyZXR1cm4gbW9mOwp9CmBgYAoKT2theSwgaXQgZ2V0cyB0aGUgbWVtcG9saWN5IGZvciB0aGUgVk1BLiBJZiBgdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3lgIGlzIGRlZmluZWQgaXQgd2lsbCBjYWxsIGl0LiBJZiB0aGlzIHJldHVybnMgTlVMTCwgaXQgY2FsbHMgYGdldF90YXNrX3BvbGljeShjdXJyZW50KWAuIFRoZW4gaXQgY2hlY2tzIHRoZSBgcG9sLSZndDtmbGFnc2AgdG8gc2VlIGlmIGBNUE9MX0ZfTU9GYCBpcyBzZXQuIFdoYXQgdHJpZ2dlcnMgdGhpcyBmbGFnPyBJIHN1c3BlY3QgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgbGF6eSBtaWdyYXRpb24gbWVtcG9saWN5IGZsYWcuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgTVBPTF9GX01PRmAgaXMgc2V0IHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01QT0xfRl9NT0YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oPTE5PWVudW0ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaC02Ny0jZGVmaW5lIE1QT0xfRl9TSEFSRUQgICgxIFx1MDAzY1x1MDAzYyAwKVx0LyogaWRlbnRpZnkgc2hhcmVkIHBvbGljaWVzICovXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5Lmg6Njg6I2RlZmluZSBNUE9MX0ZfTU9GXHQoMSBcdTAwM2NcdTAwM2MgMykgLyogdGhpcyBwb2xpY3kgd2FudHMgbWlncmF0ZSBvbiBmYXVsdCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oLTY5LSNkZWZpbmUgTVBPTF9GX01PUk9OXHQoMSBcdTAwM2NcdTAwM2MgNCkgLyogTWlncmF0ZSBPbiBwcm90bm9uZSBSZWZlcmVuY2UgT24gTm9kZSAqL1xuLS1cbm1tL21lbXBvbGljeS5jPTE3MjE9c3RhdGljIGlubGluZSBpbnQgc2FuaXRpemVfbXBvbF9mbGFncyhpbnQgKm1vZGUsIHVuc2lnbmVkIHNob3J0ICpmbGFncylcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNzMxLVx0XHRpZiAoKm1vZGUgPT0gTVBPTF9CSU5EIHx8ICptb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXG5tbS9tZW1wb2xpY3kuYzoxNzMyOlx0XHRcdCpmbGFncyB8PSAoTVBPTF9GX01PRiB8IE1QT0xfRl9NT1JPTik7XG5tbS9tZW1wb2xpY3kuYy0xNzMzLVx0XHRlbHNlXG4tLVxubW0vbWVtcG9saWN5LmM9MjA1Nz1ib29sIHZtYV9wb2xpY3lfbW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21lbXBvbGljeS5jLTIwNjUtXHRcdHBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbm1tL21lbXBvbGljeS5jOjIwNjY6XHRtb2YgPSBwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0Y7XG5tbS9tZW1wb2xpY3kuYy0yMDY3LVx0bXBvbF9jb25kX3B1dChwb2wpO1xuLS1cbm1tL21lbXBvbGljeS5jPTI5NzU9aW50IG1wb2xfbWlzcGxhY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL21lbXBvbGljeS5jLTI5OTMtXHRwb2wgPSBnZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIGZvbGlvX29yZGVyKGZvbGlvKSwgXHUwMDI2aWx4KTtcbm1tL21lbXBvbGljeS5jOjI5OTQ6XHRpZiAoIShwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0YpKVxubW0vbWVtcG9saWN5LmMtMjk5NS1cdFx0Z290byBvdXQ7XG4tLVxubW0vbWVtcG9saWN5LmM9MzMyNj12b2lkIF9faW5pdCBudW1hX3BvbGljeV9pbml0KHZvaWQpXG4tLVxubW0vbWVtcG9saWN5LmMtMzM0My1cdFx0XHQubW9kZSA9IE1QT0xfUFJFRkVSUkVELFxubW0vbWVtcG9saWN5LmM6MzM0NDpcdFx0XHQuZmxhZ3MgPSBNUE9MX0ZfTU9GIHwgTVBPTF9GX01PUk9OLFxubW0vbWVtcG9saWN5LmMtMzM0NS1cdFx0XHQubm9kZXMgPSBub2RlbWFza19vZl9ub2RlKG5pZCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKk1QT0wgRmxhZyBTYW5pdHkgQ2hlY2sqKgoKQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB3aHkgaXMgYE1QT0xfRl9NT0ZgIGdldHRpbmcgc2V0PyBJcyBpdCBiZWluZyBmb3JjZWQgYWxvbmcgd2l0aCBgTVBPTF9CSU5EYCBvciBgTVBPTF9QUkVGRVJSRURfTUFOWWAsIGFuZCBwZXJoYXBzIGFsc28gYE1QT0xfRl9OVU1BX0JBTEFOQ0lOR2A/IE1lbW9yeSBwb2xpY3kgZmxhZ3MgYXJlIGFsd2F5cyBhIGRlbGljYXRlIGRhbmNlLiBUaGVuLCBhIHF1aWNrIGZsYXNoIG9mIG1lbW9yeeKAlGFoLCByaWdodCwgdGhlIGBzYW5pdGl6ZV9tcG9sX2ZsYWdzYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgbGlrZWx5IGN1bHByaXQuIE5vdyBJIG5lZWQgdG8gZHJpbGwgaW50byB3aGF0IGBzYW5pdGl6ZV9tcG9sX2ZsYWdzYCBkb2VzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYE1QT0xfRl9NT0ZgIGdldHMgYWN0aXZhdGVkLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MjE6XHRzdGF0aWMgaW5saW5lIGludCBzYW5pdGl6ZV9tcG9sX2ZsYWdzKGludCAqbW9kZSwgdW5zaWduZWQgc2hvcnQgKmZsYWdzKVxuMTcyMjpcdHtcbjE3MjM6XHRcdCpmbGFncyA9ICptb2RlIFx1MDAyNiBNUE9MX01PREVfRkxBR1M7XG4xNzI0Olx0XHQqbW9kZSBcdTAwMjY9IH5NUE9MX01PREVfRkxBR1M7XG4xNzI1Olx0XG4xNzI2Olx0XHRpZiAoKHVuc2lnbmVkIGludCkoKm1vZGUpIFx1MDAzZT0gIE1QT0xfTUFYKVxuMTcyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE3Mjg6XHRcdGlmICgoKmZsYWdzIFx1MDAyNiBNUE9MX0ZfU1RBVElDX05PREVTKSBcdTAwMjZcdTAwMjYgKCpmbGFncyBcdTAwMjYgTVBPTF9GX1JFTEFUSVZFX05PREVTKSlcbjE3Mjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzMwOlx0XHRpZiAoKmZsYWdzIFx1MDAyNiBNUE9MX0ZfTlVNQV9CQUxBTkNJTkcpIHtcbjE3MzE6XHRcdFx0aWYgKCptb2RlID09IE1QT0xfQklORCB8fCAqbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxuMTczMjpcdFx0XHRcdCpmbGFncyB8PSAoTVBPTF9GX01PRiB8IE1QT0xfRl9NT1JPTik7XG4xNzMzOlx0XHRcdGVsc2VcbjE3MzQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE3MzU6XHRcdH1cbjE3MzY6XHRcdHJldHVybiAwO1xuMTczNzpcdH1cbjE3Mzg6XHRcbjE3Mzk6XHRzdGF0aWMgbG9uZyBrZXJuZWxfbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXG4xNzQwOlx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbW9kZSwgY29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKm5tYXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUyMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDczMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5VTUEgQmFsYW5jaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWJvdXQgTlVNQSBiYWxhbmNpbmcsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBgTVBPTF9GX05VTUFfQkFMQU5DSU5HYCBmbGFnIHNldHMgdGhlIGBNUE9MX0ZfTU9GYCBmbGFnLCB3aGljaCBpcyBhbHNvIHNldCBmb3IgYHByZWZlcnJlZF9ub2RlX3BvbGljeWAgZHVyaW5nIGBudW1hX3BvbGljeV9pbml0YC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBoZXJlIGlzIGluIGB2bWFfcG9saWN5X21vZmAuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB3aGVuIGB2bWEtJmd0O3ZtX29wcy0mZ3Q7Z2V0X3BvbGljeWAgcmV0dXJucyBOVUxMLCBpdCBjb3JyZWN0bHkgZmFsbHMgYmFjayB0byB0aGUgdGFzayYjMzk7cyBwb2xpY3kuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyB0aGUgbWFpbiBtb2RpZmljYXRpb24uCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGB2bWFfcG9saWN5X21vZmAgc2luY2UgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gIFRoZW4gSSByZWFsaXplZCB0aGF0IGB2bWFfcG9saWN5X21vZmAgZ2V0cyBjYWxsZWQgZnJvbSBgdGFza19udW1hX3dvcmtgLCB3aGljaCBpcyBleGVjdXRlZCBhc3luY2hyb25vdXNseSB2aWEgYHRhc2tfd29ya2AuIEhtbSwgY291bGQgSSBmdXp6IGB2bWFfcG9saWN5X21vZmAgZGlyZWN0bHk/IEl0JiMzOTtzIGNhbGxlZCB3aGVuIGB0YXNrX251bWFfd29ya2AgcnVucywgdHJpZ2dlcmVkIGJ5IGB0YXNrX3RpY2tfbnVtYWAuICBQZXJoYXBzIGB0YXNrX251bWFfd29ya2AgaXRzZWxmIHNob3VsZCBiZSBhIGZvY3VzIHN5bWJvbCBhcyB3ZWxsLiBBbHRob3VnaCwgd2hpbGUgaXQmIzM5O3MgYSBzbWFsbGVyIGZ1bmN0aW9uLCBgdm1hX3BvbGljeV9tb2ZgIGlzIHRoZSBvbmUgbW9kaWZpZWQuCgpJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBhZGRpbmcgYm90aCBgdm1hX3BvbGljeV9tb2ZgIGFuZCBgdGFza19udW1hX3dvcmtgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCwgdGhvdWdoIGB0YXNrX251bWFfd29ya2AgaXMgYSBsYXJnZXIgZnVuY3Rpb24sIHNvIG1heWJlIGp1c3QgYHZtYV9wb2xpY3lfbW9mYCBpcyBzdWZmaWNpZW50LgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYHZtYV9wb2xpY3lfbW9mYCBpcyBhY3R1YWxseSByZWFjaGFibGUuICBSaWdodCwgaWYgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AgaXMgZW5hYmxlZCwgYHRhc2tfdGlja19udW1hYCBzY2hlZHVsZXMgYHRhc2tfbnVtYV93b3JrYCwgd2hpY2ggaXRlcmF0ZXMgb3ZlciBWTUFzIGFuZCB0aGVuIGNhbGxzIGB2bWFfcG9saWN5X21vZmAuICBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuCgpMb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgcGF0Y2ggc2VlbXMgdG8gZXhjbHVzaXZlbHkgbW9kaWZ5IGB2bWFfcG9saWN5X21vZmAuCgpgYGBjCmJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCnsKCXN0cnVjdCBtZW1wb2xpY3kgKnBvbDsKCXBnb2ZmX3QgaWx4OwoJYm9vbCBtb2Y7CgoJcG9sID0gX19nZXRfdm1hX3BvbGljeSh2bWEsIHZtYS0mZ3Q7dm1fc3RhcnQsICZhbXA7aWx4KTsKCWlmICghcG9sKQoJCXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKCW1vZiA9IHBvbC0mZ3Q7ZmxhZ3MgJmFtcDsgTVBPTF9GX01PRjsKCW1wb2xfY29uZF9wdXQocG9sKTsKCXJldHVybiBtb2Y7Cn0KYGBgCgpPa2F5LCB0aGUgbW9yZSBJIGxvb2sgYXQgdGhpcyBjb2RlLCB0aGUgY2xlYXJlciBpdCBiZWNvbWVzLiBJZiBgX19nZXRfdm1hX3BvbGljeWAgcmV0dXJucyBhIHBvbGljeSBmcm9tIGB2bWEtJmd0O3ZtX3BvbGljeWAsIGFuZCBpdCYjMzk7cyBub3QgTlVMTCwgaXQgZG9lc24mIzM5O3QgaGF2ZSBgTVBPTF9GX1NIQVJFRGAgc2V0LCBzbyBgbXBvbF9jb25kX3B1dGAgZG9lcyBub3RoaW5nLiBJZiBgX19nZXRfdm1hX3BvbGljeWAgcmV0dXJucyBhIHBvbGljeSBmcm9tIGB2bWEtJmd0O3ZtX29wcy0mZ3Q7Z2V0X3BvbGljeWAsIGl0IG1pZ2h0IGhhdmUgYE1QT0xfRl9TSEFSRURgIHNldCwgc28gYG1wb2xfY29uZF9wdXRgIHdpbGwgZHJvcCB0aGUgcmVmZXJlbmNlLiBJZiBgX19nZXRfdm1hX3BvbGljeWAgcmV0dXJucyBOVUxMLCBpdCBjb3JyZWN0bHkgZmFsbHMgYmFjayB0byBgZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpYC4gYGdldF90YXNrX3BvbGljeShjdXJyZW50KWAgcmV0dXJucyBlaXRoZXIgYGN1cnJlbnQtJmd0O21lbXBvbGljeWAgb3IgYGRlZmF1bHRfcG9saWN5YCwgbmVpdGhlciBvZiB3aGljaCBoYXZlIGBNUE9MX0ZfU0hBUkVEYCBzZXQsIHNvIGFnYWluLCBgbXBvbF9jb25kX3B1dGAgZG9lcyBub3RoaW5nLiBUaGlzIGlzIGFsbCBjb3JyZWN0LgpJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF90YXNrX3BvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTMzOD1FWFBPUlRfU1lNQk9MX0dQTChuZWFyZXN0X25vZGVfbm9kZW1hc2spO1xubW0vbWVtcG9saWN5LmMtMzM5LVxubW0vbWVtcG9saWN5LmM6MzQwOnN0cnVjdCBtZW1wb2xpY3kgKmdldF90YXNrX3BvbGljeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5tbS9tZW1wb2xpY3kuYy0zNDEte1xuLS1cbm1tL21lbXBvbGljeS5jLTM1Ny19XG5tbS9tZW1wb2xpY3kuYzozNTg6RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhnZXRfdGFza19wb2xpY3ksIFwmIzM0O2t2bVwmIzM0Oyk7XG5tbS9tZW1wb2xpY3kuYy0zNTktXG4tLVxubW0vbWVtcG9saWN5LmM9MTQ4Nj1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNTY4LVx0XHRpZiAoIW5ldykge1xubW0vbWVtcG9saWN5LmM6MTU2OTpcdFx0XHRuZXcgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG5tbS9tZW1wb2xpY3kuYy0xNTcwLVx0XHRcdG1wb2xfZ2V0KG5ldyk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjA0MT1zdHJ1Y3QgbWVtcG9saWN5ICpnZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDQ3LVx0aWYgKCFwb2wpXG5tbS9tZW1wb2xpY3kuYzoyMDQ4Olx0XHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG5tbS9tZW1wb2xpY3kuYy0yMDQ5LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxuLS1cbm1tL21lbXBvbGljeS5jPTIwNTc9Ym9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDY0LVx0aWYgKCFwb2wpXG5tbS9tZW1wb2xpY3kuYzoyMDY1Olx0XHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG5tbS9tZW1wb2xpY3kuYy0yMDY2LVx0bW9mID0gcG9sLVx1MDAzZWZsYWdzIFx1MDAyNiBNUE9MX0ZfTU9GO1xuLS1cbm1tL21lbXBvbGljeS5jPTI1NDE9c3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBvcmRlcilcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNTQ5LVx0aWYgKCFpbl9pbnRlcnJ1cHQoKSBcdTAwMjZcdTAwMjYgIShnZnAgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSlcbm1tL21lbXBvbGljeS5jOjI1NTA6XHRcdHBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbm1tL21lbXBvbGljeS5jLTI1NTEtXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc2NT11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc3Mi1cdGlmICghaW5faW50ZXJydXB0KCkgXHUwMDI2XHUwMDI2ICEoZ2ZwIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXG5tbS9tZW1wb2xpY3kuYzoyNzczOlx0XHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG5tbS9tZW1wb2xpY3kuYy0yNzc0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5VTUEgUG9saWN5IFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBgZ2V0X3Rhc2tfcG9saWN5YCBpcyBzdHJhaWdodGZvcndhcmQ7IGl0JiMzOTtzIGp1c3QgaGFuZGluZyBiYWNrIHRoZSB0YXNrIHBvbGljeSwgbm90aGluZyBjb21wbGljYXRlZCB0aGVyZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgYnVnIHdoZXJlIGB2bWFfcG9saWN5X21vZmAgd2FzIHByZW1hdHVyZWx5IHJldHVybmluZyBgZmFsc2VgLiBJdCB3YXMgYmFpbGluZyBvdXQgaWYgYHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5YCByZXR1cm5lZCBOVUxMLCBpbnN0ZWFkIG9mIGNvcnJlY3RseSBmYWxsaW5nIGJhY2sgdG8gdGhlIHRhc2sgcG9saWN5LCB3aGljaCBpcyBub3QgdGhlIGRlc2lyZWQgYmVoYXZpb3IuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lIGFjdHVhbGx5IQoKTm93LCBsZXQmIzM5O3Mgc2VlLCB3aGF0IGNvbmZpZ3MgYXJlIGF0IHBsYXkgaGVyZT8gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBOVU1BYCBhbmQgYE5VTUFfQkFMQU5DSU5HYC4gQnV0IHdhaXQsIGRvZXNuJiMzOTt0IGBOVU1BX0JBTEFOQ0lOR2AgZGVwZW5kIG9uIGBOVU1BYD8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgZGVwZW5kZW5jeSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSBnbyBwb2tlIGFyb3VuZCBgaW5pdC9LY29uZmlnYCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGRvdCBteSBpJiMzOTtzIGFuZCBjcm9zcyBteSB0JiMzOTtzIHdpdGggdGhlc2UgTlVNQSBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDA5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMDk6XHRcbjEwMTA6XHRjb25maWcgTlVNQV9CQUxBTkNJTkdcbjEwMTE6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IHBsYWNlbWVudCBhd2FyZSBOVU1BIHNjaGVkdWxlclwmIzM0O1xuMTAxMjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HXG4xMDEzOlx0XHRkZXBlbmRzIG9uICFBUkNIX1dBTlRfTlVNQV9WQVJJQUJMRV9MT0NBTElUWVxuMTAxNDpcdFx0ZGVwZW5kcyBvbiBTTVAgXHUwMDI2XHUwMDI2IE5VTUFfTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuMTAxNTpcdFx0aGVscFxuMTAxNjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGF1dG9tYXRpYyBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudC5cbjEwMTc6XHRcdCAgVGhlIG1lY2hhbmlzbSBpcyBxdWl0ZSBwcmltaXRpdmUgYW5kIGlzIGJhc2VkIG9uIG1pZ3JhdGluZyBtZW1vcnkgd2hlblxuMTAxODpcdFx0ICBpdCBoYXMgcmVmZXJlbmNlcyB0byB0aGUgbm9kZSB0aGUgdGFzayBpcyBydW5uaW5nIG9uLlxuMTAxOTpcdFxuMTAyMDpcdFx0ICBUaGlzIHN5c3RlbSB3aWxsIGJlIGluYWN0aXZlIG9uIFVNQSBzeXN0ZW1zLlxuMTAyMTpcdFxuMTAyMjpcdGNvbmZpZyBTQ0hFRF9DQUNIRVxuMTAyMzpcdFx0Ym9vbCBcJiMzNDtDYWNoZSBhd2FyZSBsb2FkIGJhbGFuY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIE5VTUEgQmFsYW5jaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGtlcm5lbCBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIE5VTUEgYmFsYW5jaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgTlVNQV9CQUxBTkNJTkdgIGRlcGVuZHMgb24gcXVpdGUgYSBmZXcgdGhpbmdzOiBgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR2AsIGBTTVBgLCBgTlVNQV9NSUdSQVRJT05gLCBhbmQgaW1wb3J0YW50bHksIGl0JiMzOTtzICpub3QqIGNvbXBhdGlibGUgd2l0aCBgUFJFRU1QVF9SVGAuIFJpZ2h0LCBzbyB0aGlzIGZlYXR1cmUgaXMgb25seSByZWxldmFudCBmb3Igc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcyBhbmQgd29ya2xvYWRzLgoKVGhlIGltbWVkaWF0ZSBhY3Rpb24gSSBuZWVkIHRvIHRha2UgaXMgdG8gZW5zdXJlIHRoYXQgYE5VTUFfQkFMQU5DSU5HYCBnZXRzIGFkZGVkIHRvIGBFbmFibGVDb25maWdzYCwgc2luY2UgSSYjMzk7bSB0cnlpbmcgdG8sIHdlbGwsIGVuYWJsZSBpdC4gTm8gbmVlZCB0byBhZGQgYE5VTUFgIHNlcGFyYXRlbHk7IGFzIGV4cGVjdGVkLCBgTlVNQV9NSUdSQVRJT05gIGFscmVhZHkgaW1wbGllcyB0aGF0IHRoZSBzeXN0ZW0gaXMgTlVNQS1hd2FyZSwgc28gYE5VTUFfQkFMQU5DSU5HYCBpcyB0aGUgc3BlY2lmaWMgdGhpbmcgSSYjMzk7bSBhZnRlci4KCkFoLCB5ZXMsIGBOVU1BX0JBTEFOQ0lOR2AgaXMgdGhlIHNwZWNpZmljIGNvbmZpZyB0aGF0IGVuYWJsZXMgYHRhc2tfbnVtYV93b3JrYCwgdGhhdCYjMzk7cyBob3cgaXQmIzM5O3MgbGlua2VkIHRvIHRoZSBhY3R1YWwgd29yay4gU28sIHllYWgsIGBOVU1BX0JBTEFOQ0lOR2AgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgY29uZmlnIHRvIGZvY3VzIG9uLgoKQnV0LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgZWxzZSBpbnZvbHZlZC4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUmIzM5O3MgYSBkZWZhdWx0IGVuYWJsZW1lbnQgb3B0aW9uLiBDb3VsZCBgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEYCBhbHNvIGJlIG5lY2Vzc2FyeT8gT3RoZXJ3aXNlLCBJIG1pZ2h0IGJlIHN0dWNrIHdpdGggc3lzY3RscyBqdXN0IHRvIGVuYWJsZSBpdC4gSSBzaG91bGQgZ28gYW5kIGNoZWNrIGBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURgIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDMyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMzI6XHRcbjEwMzM6XHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG4xMDM0Olx0XHRib29sIFwmIzM0O0F1dG9tYXRpY2FsbHkgZW5hYmxlIE5VTUEgYXdhcmUgbWVtb3J5L3Rhc2sgcGxhY2VtZW50XCYjMzQ7XG4xMDM1Olx0XHRkZWZhdWx0IHlcbjEwMzY6XHRcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcbjEwMzc6XHRcdGhlbHBcbjEwMzg6XHRcdCAgSWYgc2V0LCBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgd2lsbCBiZSBlbmFibGVkIGlmIHJ1bm5pbmcgb24gYSBOVU1BXG4xMDM5Olx0XHQgIG1hY2hpbmUuXG4xMDQwOlx0XG4xMDQxOlx0Y29uZmlnIFNMQUJfT0JKX0VYVFxuMTA0MjpcdFx0Ym9vbFxuMTA0MzpcdFxuMTA0NDpcdG1lbnVjb25maWcgQ0dST1VQU1xuMTA0NTpcdFx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbjEwNDY6XHRcdHNlbGVjdCBLRVJORlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMzAKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogNTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIE5VTUEgQmFsYW5jaW5nKioKCk9rYXksIHNvIHRoZSBkZWZhdWx0IGZvciBgTlVNQV9CQUxBTkNJTkdgIGlzIGB5YCwgc28ganVzdCBlbmFibGluZyB0aGF0IGNvbmZpZyBzaG91bGQgYmUgc3VmZmljaWVudC4gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdCBtb3JlLiBJJiMzOTt2ZSB0cmFja2VkIGRvd24gdGhhdCBgdm1hX3BvbGljeV9tb2ZgIGlzIG9ubHkgY2FsbGVkIHdpdGhpbiBga2VybmVsL3NjaGVkL2ZhaXIuY2AuIFRoYXQgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGdvb2QgJiMzNDtmb2N1cyBzeW1ib2wmIzM0OyBmb3IgZnV6emluZyB0aGlzIHBhdGNoLgoKSXMgYHZtYV9wb2xpY3lfbW9mYCBhIHBhcnRpY3VsYXJseSBob3QgcGF0aD8gSXQgaXMgY2FsbGVkIGR1cmluZyBgdGFza19udW1hX3dvcmtgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBwZXJpb2RpYyBWTUEgc2Nhbm5pbmcgcHJvY2Vzcy4gSXQgaXNuJiMzOTt0IGFzIGNyaXRpY2FsIGFzIHRoZSBgc2NoZWR1bGVgIG9yIGBwYWdlX2ZhdWx0YCBmdW5jdGlvbnMsIGJ1dCBpdCAqaXMqIGNhbGxlZCBmb3IgZXZlcnkgVk1BIGR1cmluZyBlYWNoIHNjYW4sIGFuZCBpdCYjMzk7cyAqcHJlY2lzZWx5KiB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4gVGhlcmVmb3JlLCBpdCBpcyBhIGdyZWF0IGNob2ljZS4gSSYjMzk7bGwgYWxzbyBpbmNsdWRlIGB0YXNrX251bWFfd29ya2AgdG8gaW5jcmVhc2UgdGhlIGNoYW5jZSBvZiB0cmlnZ2VyaW5nIHRoZSBOVU1BIGJhbGFuY2luZyBsb2dpYy4KClNvLCBoZXJlJiMzOTtzIHRoZSBwbGFuLgoKKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KKiAgIGBGb2N1c1N5bWJvbHNgOiBJJiMzOTtsbCB0YXJnZXQgYm90aCBgdm1hX3BvbGljeV9tb2ZgIGFuZCBgdGFza19udW1hX3dvcmtgLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBKdXN0IGVuYWJsZSBgTlVNQV9CQUxBTkNJTkdgIOKAkyB0aGUgZGVmYXVsdCBzaG91bGQgd29yay4KKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggYWx0ZXJzIGB2bWFfcG9saWN5X21vZmAmIzM5O3MgYmVoYXZpb3IsIHNwZWNpZmljYWxseSBoYW5kbGluZyBjYXNlcyB3aGVyZSBhIFZNQSYjMzk7cyBgZ2V0X3BvbGljeWAgb3BlcmF0aW9uIHJldHVybnMgTlVMTCBieSBmYWxsaW5nIGJhY2sgdG8gdGhlIHRhc2smIzM5O3MgbWVtb3J5IHBvbGljeS4gVGhpcyBpbXBhY3RzIE5VTUEgYmFsYW5jaW5nLiBUaGUgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLgoKSSBhbHNvIHdhbnRlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYF9fZ2V0X3ZtYV9wb2xpY3lgIHdvcmtzIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhpcyByaWdodC4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb2RlLCBhbmQgaXQgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZzoKCmBgYGMKc3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdvZmZfdCAqaWx4KQp7CgkqaWx4ID0gMDsKCXJldHVybiAodm1hLSZndDt2bV9vcHMgJmFtcDsmYW1wOyB2bWEtJmd0O3ZtX29wcy0mZ3Q7Z2V0X3BvbGljeSkgPwoJCXZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5KHZtYSwgYWRkciwgaWx4KSA6IHZtYS0mZ3Q7dm1fcG9saWN5Owp9CmBgYAoKSWYgdGhlIGB2bWEtJmd0O3ZtX29wcy0mZ3Q7Z2V0X3BvbGljeWAgZXhpc3RzLCBpdCBjYWxscyBpdC4gT3RoZXJ3aXNlLCBpdCB1c2VzIGB2bWEtJmd0O3ZtX3BvbGljeWAuICBJZiB0aGUgYHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMLCB0aGVuIGBfX2dldF92bWFfcG9saWN5YCByZXR1cm5zIE5VTEwsIHdoaWNoIGNhdXNlcyBgdm1hX3BvbGljeV9tb2ZgIHRvIGZhbGxiYWNrIHRvIHVzaW5nIGBnZXRfdGFza19wb2xpY3koY3VycmVudClgLiBUaGlzIGlzIHByZWNpc2VseSB0aGUgY2hhbmdlIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLiBJbiB0aGUgb2xkIGNvZGUsIGEgTlVMTCByZXR1cm4gZnJvbSBgdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3lgIHJlc3VsdGVkIGluIGB2bWFfcG9saWN5X21vZmAgcmV0dXJuaW5nIGBmYWxzZWAuIEl0ICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BX0JBTEFOQ0lORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYV9wb2xpY3lfbW9mJiMzNDssCiAgICAmIzM0O3Rhc2tfbnVtYV93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2bWFfcG9saWN5X21vZmAgdG8gY29ycmVjdGx5IGZhbGwgYmFjayB0byB0aGUgdGFzayYjMzk7cyBtZW1vcnkgcG9saWN5IHdoZW4gYSBWTUEmIzM5O3MgYGdldF9wb2xpY3lgIG9wZXJhdGlvbiByZXR1cm5zIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgTlVNQSBiYWxhbmNpbmcgYmVoYXZpb3IuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUFfQkFMQU5DSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hX3BvbGljeV9tb2YmIzM0OywKICAgICYjMzQ7dGFza19udW1hX3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHZtYV9wb2xpY3lfbW9mYCB0byBjb3JyZWN0bHkgZmFsbCBiYWNrIHRvIHRoZSB0YXNrJiMzOTtzIG1lbW9yeSBwb2xpY3kgd2hlbiBhIFZNQSYjMzk7cyBgZ2V0X3BvbGljeWAgb3BlcmF0aW9uIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBOVU1BIGJhbGFuY2luZyBiZWhhdmlvci4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AgdG8gYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjEzOjExLjYwMzAyODU0OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTE0MjI4NzE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BX0JBTEFOQ0lOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYV9wb2xpY3lfbW9mXCIsXG4gICAgXCJ0YXNrX251bWFfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB2bWFfcG9saWN5X21vZmAgdG8gY29ycmVjdGx5IGZhbGwgYmFjayB0byB0aGUgdGFzaydzIG1lbW9yeSBwb2xpY3kgd2hlbiBhIFZNQSdzIGBnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIE5VTUEgYmFsYW5jaW5nIGJlaGF2aW9yLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxMzoxMS42MDMwMzc1NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjI0ODE4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVlYzdlODJkM2ZjMzVhNGFmMDk0OWYxOGMyOTJlOWRhYzI3OGY5OTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTc6MTM6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xcbmluZGV4IDM2Njk5ZmFiZDNjMjIzLi5iYmE2NTg5OGFlZTE3NSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xcbisrKyBiL21tL21lbXBvbGljeS5jXFxuQEAgLTIwNTcsMjQgKzIwNTcsMTUgQEAgc3RydWN0IG1lbXBvbGljeSAqZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIGJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHtcXG4gXFx0c3RydWN0IG1lbXBvbGljeSAqcG9sO1xcbitcXHRwZ29mZl90IGlseDtcXG4rXFx0Ym9vbCBtb2Y7XFxuIFxcbi1cXHRpZiAodm1hLVxcdTAwM2V2bV9vcHMgXFx1MDAyNlxcdTAwMjYgdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWdldF9wb2xpY3kpIHtcXG4tXFx0XFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4tXFx0XFx0cGdvZmZfdCBpbHg7XFx0XFx0LyogaWdub3JlZCBoZXJlICovXFxuLVxcbi1cXHRcXHRwb2wgPSB2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlZ2V0X3BvbGljeSh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIFxcdTAwMjZpbHgpO1xcbi1cXHRcXHRpZiAocG9sIFxcdTAwMjZcXHUwMDI2IChwb2wtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTVBPTF9GX01PRikpXFxuLVxcdFxcdFxcdHJldCA9IHRydWU7XFxuLVxcdFxcdG1wb2xfY29uZF9wdXQocG9sKTtcXG4tXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH1cXG4tXFxuLVxcdHBvbCA9IHZtYS1cXHUwMDNldm1fcG9saWN5O1xcbitcXHRwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCwgXFx1MDAyNmlseCk7XFxuIFxcdGlmICghcG9sKVxcbiBcXHRcXHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XFxuLVxcbi1cXHRyZXR1cm4gcG9sLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1QT0xfRl9NT0Y7XFxuK1xcdG1vZiA9IHBvbC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNUE9MX0ZfTU9GO1xcbitcXHRtcG9sX2NvbmRfcHV0KHBvbCk7XFxuK1xcdHJldHVybiBtb2Y7XFxuIH1cXG4gXFxuIGJvb2wgYXBwbHlfcG9saWN5X3pvbmUoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5LCBlbnVtIHpvbmVfdHlwZSB6b25lKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxMzoxMi4wMjAxMDgxMTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODcyNTE5MTI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BX0JBTEFOQ0lOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYV9wb2xpY3lfbW9mXCIsXG4gICAgXCJ0YXNrX251bWFfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB2bWFfcG9saWN5X21vZmAgdG8gY29ycmVjdGx5IGZhbGwgYmFjayB0byB0aGUgdGFzaydzIG1lbW9yeSBwb2xpY3kgd2hlbiBhIFZNQSdzIGBnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIE5VTUEgYmFsYW5jaW5nIGJlaGF2aW9yLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVlYzdlODJkM2ZjMzVhNGFmMDk0OWYxOGMyOTJlOWRhYzI3OGY5OTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNzoxMzoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDM2Njk5ZmFiZDNjMjIzLi5iYmE2NTg5OGFlZTE3NSAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4rKysgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTIwNTcsMjQgKzIwNTcsMTUgQEAgc3RydWN0IG1lbXBvbGljeSAqZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gYm9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7XG4rXHRwZ29mZl90IGlseDtcbitcdGJvb2wgbW9mO1xuIFxuLVx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeSkge1xuLVx0XHRib29sIHJldCA9IGZhbHNlO1xuLVx0XHRwZ29mZl90IGlseDtcdFx0LyogaWdub3JlZCBoZXJlICovXG4tXG4tXHRcdHBvbCA9IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgXHUwMDI2aWx4KTtcbi1cdFx0aWYgKHBvbCBcdTAwMjZcdTAwMjYgKHBvbC1cdTAwM2VmbGFncyBcdTAwMjYgTVBPTF9GX01PRikpXG4tXHRcdFx0cmV0ID0gdHJ1ZTtcbi1cdFx0bXBvbF9jb25kX3B1dChwb2wpO1xuLVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cG9sID0gdm1hLVx1MDAzZXZtX3BvbGljeTtcbitcdHBvbCA9IF9fZ2V0X3ZtYV9wb2xpY3kodm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIFx1MDAyNmlseCk7XG4gXHRpZiAoIXBvbClcbiBcdFx0cG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuLVxuLVx0cmV0dXJuIHBvbC1cdTAwM2VmbGFncyBcdTAwMjYgTVBPTF9GX01PRjtcbitcdG1vZiA9IHBvbC1cdTAwM2VmbGFncyBcdTAwMjYgTVBPTF9GX01PRjtcbitcdG1wb2xfY29uZF9wdXQocG9sKTtcbitcdHJldHVybiBtb2Y7XG4gfVxuIFxuIGJvb2wgYXBwbHlfcG9saWN5X3pvbmUoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5LCBlbnVtIHpvbmVfdHlwZSB6b25lKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTM6MTIuMDIwMTEwNjM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ3MDkzODI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbXBvbGljeSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9tZW1wb2xpY3kuY2AsIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyB0byB0aGUgYHZtYV9wb2xpY3lfbW9mYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgbW9kaWZpY2F0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgc2ltcGxpZmllZCBgdm1hX3BvbGljeV9tb2ZgIGJ5IGludHJvZHVjaW5nIGBfX2dldF92bWFfcG9saWN5YC4gVGhlIG9sZCBjb2RlIGhhZCB0aGF0IGNvbmRpdGlvbmFsIG9mIHVzaW5nIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3lgIG9yIGZhbGxpbmcgYmFjayB0byBgdm1hLVx1MDAzZXZtX3BvbGljeWAsIGJ1dCB0aGlzIHBhdGNoIHJlcGxhY2VkIGl0IHdpdGggYSBkaXJlY3QgY2FsbCB0byBgX19nZXRfdm1hX3BvbGljeWAuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBpcyBhbiBpbXByb3ZlbWVudC4gVGhlIGNvZGUgYXBwZWFycyB0byBiZSBjYWxsaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBgX19nZXRfdm1hX3BvbGljeWAgYWJzdHJhY3RzIGF3YXkgdGhlIGxvZ2ljIG9mIGhhbmRsaW5nIGJvdGggdGhlIGB2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgYW5kIHRoZSBkaXJlY3QgYHZtX3BvbGljeWAgYWNjZXNzLiBTbywgaXQncyBkb2luZyBwcmVjaXNlbHkgd2hhdCB0aGUgb3JpZ2luYWwgY29kZSBkaWQsIGJ1dCBpbiBhIGNsZWFuZXIgZmFzaGlvbi4gVG8gYmUgc3VyZSwgSSdsbCBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX2dldF92bWFfcG9saWN5YCBpdHNlbGYsIGFsc28gaW4gYG1tL21lbXBvbGljeS5jYCwgdG8gdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTM6MTcuNDkxMDUxOTk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDg5MzI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2dldF92bWFfcG9saWN5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTExNDc9c3RhdGljIGxvbmcgZG9fZ2V0X21lbXBvbGljeShpbnQgKnBvbGljeSwgbm9kZW1hc2tfdCAqbm1hc2ssXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMTgxLVxcdFxcdH1cXG5tbS9tZW1wb2xpY3kuYzoxMTgyOlxcdFxcdHBvbCA9IF9fZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCBcXHUwMDI2aWx4KTtcXG5tbS9tZW1wb2xpY3kuYy0xMTgzLVxcdH0gZWxzZSBpZiAoYWRkcilcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE5OTA9Ym9vbCB2bWFfbWlncmF0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIwMTctXFxubW0vbWVtcG9saWN5LmM6MjAxODpzdHJ1Y3QgbWVtcG9saWN5ICpfX2dldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbXBvbGljeS5jLTIwMTktXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwZ29mZl90ICppbHgpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDQxPXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjA0NS1cXG5tbS9tZW1wb2xpY3kuYzoyMDQ2OlxcdHBvbCA9IF9fZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCBpbHgpO1xcbm1tL21lbXBvbGljeS5jLTIwNDctXFx0aWYgKCFwb2wpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDU3PWJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMDYyLVxcbm1tL21lbXBvbGljeS5jOjIwNjM6XFx0cG9sID0gX19nZXRfdm1hX3BvbGljeSh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIFxcdTAwMjZpbHgpO1xcbm1tL21lbXBvbGljeS5jLTIwNjQtXFx0aWYgKCFwb2wpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjEzOjE3Ljc0NTk1MzE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU3MDA2NDM4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYF9fZ2V0X3ZtYV9wb2xpY3lgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYF9fZ2V0X3ZtYV9wb2xpY3lgIGltcGxlbWVudGF0aW9uLiBJJ20gZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgbWVtb3J5IHBvbGljaWVzIHdpdGhpbiB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBjb250ZXh0LiBJIHdhbnQgdG8gbG9vayBhdCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFZNQSBmbGFncywgdGhlIE5VTUEgcG9saWNpZXMsIGFuZCBwb3RlbnRpYWxseSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUCkgb3Igb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjcnVjaWFsIGRlY2lzaW9uIHBvaW50cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlbiBJJ2xsIGV2YWx1YXRlIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBzdWJ0bGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGVkZ2UgY2FzZXMgYXJvdW5kIHBvbGljeSBpbmhlcml0YW5jZSwgbWlncmF0aW9uLCBhbmQgdGhlIGltcGFjdCBvZiBwb2xpY3kgY2hhbmdlcyBkdXJpbmcgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLiBJIGV4cGVjdCB0aGVyZSB0byBiZSBzb21lIGludGVyZXN0aW5nIG51YW5jZXMgaW4gdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxMzozMy40NDY2MDMyNzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzkzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAxOCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAxODpcXHRzdHJ1Y3QgbWVtcG9saWN5ICpfX2dldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjIwMTk6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwZ29mZl90ICppbHgpXFxuMjAyMDpcXHR7XFxuMjAyMTpcXHRcXHQqaWx4ID0gMDtcXG4yMDIyOlxcdFxcdHJldHVybiAodm1hLVxcdTAwM2V2bV9vcHMgXFx1MDAyNlxcdTAwMjYgdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWdldF9wb2xpY3kpID9cXG4yMDIzOlxcdFxcdFxcdHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VnZXRfcG9saWN5KHZtYSwgYWRkciwgaWx4KSA6IHZtYS1cXHUwMDNldm1fcG9saWN5O1xcbjIwMjQ6XFx0fVxcbjIwMjU6XFx0XFxuMjAyNjpcXHQvKlxcbjIwMjc6XFx0ICogZ2V0X3ZtYV9wb2xpY3koQHZtYSwgQGFkZHIsIEBvcmRlciwgQGlseClcXG4yMDI4OlxcdCAqIEB2bWE6IHZpcnR1YWwgbWVtb3J5IGFyZWEgd2hvc2UgcG9saWN5IGlzIHNvdWdodFxcbjIwMjk6XFx0ICogQGFkZHI6IGFkZHJlc3MgaW4gQHZtYSBmb3Igc2hhcmVkIHBvbGljeSBsb29rdXBcXG4yMDMwOlxcdCAqIEBvcmRlcjogMCwgb3IgYXBwcm9wcmlhdGUgaHVnZV9wYWdlX29yZGVyIGZvciBpbnRlcmxlYXZpbmdcXG4yMDMxOlxcdCAqIEBpbHg6IGludGVybGVhdmUgaW5kZXggKG91dHB1dCksIGZvciB1c2Ugb25seSB3aGVuIE1QT0xfSU5URVJMRUFWRSBvclxcbjIwMzI6XFx0ICogICAgICAgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXFxuMjAzMzpcXHQgKlxcbjIwMzQ6XFx0ICogUmV0dXJucyBlZmZlY3RpdmUgcG9saWN5IGZvciBhIFZNQSBhdCBzcGVjaWZpZWQgYWRkcmVzcy5cXG4yMDM1OlxcdCAqIEZhbGxzIGJhY2sgdG8gY3VycmVudC1cXHUwMDNlbWVtcG9saWN5IG9yIHN5c3RlbSBkZWZhdWx0IHBvbGljeSwgYXMgbmVjZXNzYXJ5LlxcbjIwMzY6XFx0ICogU2hhcmVkIHBvbGljaWVzIFt0aG9zZSBtYXJrZWQgYXMgTVBPTF9GX1NIQVJFRF0gcmVxdWlyZSBhbiBleHRyYSByZWZlcmVuY2VcXG4yMDM3OlxcdCAqIGNvdW50LS1hZGRlZCBieSB0aGUgZ2V0X3BvbGljeSgpIHZtX29wLCBhcyBhcHByb3ByaWF0ZS0tdG8gcHJvdGVjdCBhZ2FpbnN0XFxuMjAzODpcXHQgKiBmcmVlaW5nIGJ5IGFub3RoZXIgdGFzay4gIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIHRoZVxcbjIwMzk6XFx0ICogZXh0cmEgcmVmZXJlbmNlIGZvciBzaGFyZWQgcG9saWNpZXMuXFxuMjA0MDpcXHQgKi9cXG4yMDQxOlxcdHN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjIwNDI6XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG9yZGVyLCBwZ29mZl90ICppbHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjEzOjMzLjQ0NzA4NzQzNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4Njk3NDk2MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT3B0aW1pemF0aW9uIG9mIGB2bWFfcG9saWN5X21vZmAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBhIHNlZW1pbmdseSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIGB2bWFfcG9saWN5X21vZmAuIEVzc2VudGlhbGx5LCBpdCdzIHJlcGxhY2luZyBzb21lIGR1cGxpY2F0ZWQgbG9naWMgd2l0aCBhIGNhbGwgdG8gYF9fZ2V0X3ZtYV9wb2xpY3lgLiBUaGUgb2xkIGNvZGUgd2FzIGhhbmRsaW5nIHRoZSByZXRyaWV2YWwgb2YgdGhlIG1lbW9yeSBwb2xpY3kgaW4gYSBtb3JlIHZlcmJvc2Ugd2F5LiBJdCBjaGVja2VkIGlmIGB2bWEtXHUwMDNldm1fb3BzYCBhbmQgaXRzIGBnZXRfcG9saWN5YCBmdW5jdGlvbiB3ZXJlIHZhbGlkLiBJZiB0aGV5IHdlcmUsIGl0IGNhbGxlZCB0aGF0IGZ1bmN0aW9uIGFuZCBjaGVja2VkIHRoZSBmbGFncyBmb3IgdGhlIGBNUE9MX0ZfTU9GYCBiaXQuIE90aGVyd2lzZSwgaXQgZGVmYXVsdGVkIHRvIHRoZSBgdm1hLVx1MDAzZXZtX3BvbGljeWAgb3IgdGhlIHRhc2sgcG9saWN5LiBUaGUgbmV3IGNvZGUgaXMgY2xlYW5lcjogaXQgdXNlcyBgX19nZXRfdm1hX3BvbGljeWAgdG8gYWJzdHJhY3QgdGhhdCBhd2F5LlxuXG5Ob3csIG15IGluaXRpYWwgdGhvdWdodCBpczogdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgaW1wcm92ZW1lbnQsIGJ1dCB0aGVyZSdzIGFsd2F5cyBhIGhpZGRlbiBjb3JuZXIgY2FzZS4gTGV0IG1lIHRoaW5rLiAqQWhhISogYF9fZ2V0X3ZtYV9wb2xpY3lgIG1pZ2h0IHJldHVybiBgdm1hLVx1MDAzZXZtX3BvbGljeWAgaWYgYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgaXMgTlVMTC4gVGhpcyBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYmVjYXVzZSBub3cgYG1wb2xfY29uZF9wdXQocG9sKWAgd2lsbCBiZSBjYWxsZWQgb24gYHZtYS1cdTAwM2V2bV9wb2xpY3lgLiBJIHdvbmRlciwgZG9lcyBgbXBvbF9jb25kX3B1dGAgYWN0dWFsbHkgKmRvKiBhbnl0aGluZyB3aGVuIGFwcGxpZWQgdG8gYHZtYS1cdTAwM2V2bV9wb2xpY3lgPyBJdCBmZWVscyBhIGxpdHRsZSByZWR1bmRhbnQgdG8gbWUuIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBtcG9sX2NvbmRfcHV0YCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyB3aXRoIHRoaXMgc2ltcGxpZmljYXRpb24uIEknbSBnb2luZyB0byBsb29rIGludG8gaXQgcmlnaHQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTM6NTIuMTQ0NTg2MjkzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzk0Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wb2xfY29uZF9wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MTE0Nz1zdGF0aWMgbG9uZyBkb19nZXRfbWVtcG9saWN5KGludCAqcG9saWN5LCBub2RlbWFza190ICpubWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTEyMzktIG91dDpcXG5tbS9tZW1wb2xpY3kuYzoxMjQwOlxcdG1wb2xfY29uZF9wdXQocG9sKTtcXG5tbS9tZW1wb2xpY3kuYy0xMjQxLVxcdGlmICh2bWEpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNDg2PXN0YXRpYyBsb25nIGRvX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTYwMi1cXHRcXHRcXHRcXHQvKiBXZSBhbHJlYWR5IGtub3cgdGhlIHBvbCwgYnV0IG5vdCB0aGUgaWx4ICovXFxubW0vbWVtcG9saWN5LmM6MTYwMzpcXHRcXHRcXHRcXHRtcG9sX2NvbmRfcHV0KGdldF92bWFfcG9saWN5KHZtYSwgYWRkciwgb3JkZXIsXFxubW0vbWVtcG9saWN5LmMtMTYwNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZtbXBvbC5pbHgpKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIwNTc9Ym9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIwNjYtXFx0bW9mID0gcG9sLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1QT0xfRl9NT0Y7XFxubW0vbWVtcG9saWN5LmM6MjA2NzpcXHRtcG9sX2NvbmRfcHV0KHBvbCk7XFxubW0vbWVtcG9saWN5LmMtMjA2OC1cXHRyZXR1cm4gbW9mO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjUyND1zdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjUzNS1cXHRmb2xpbyA9IGZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcCwgb3JkZXIsIHBvbCwgaWx4LCBudW1hX25vZGVfaWQoKSk7XFxubW0vbWVtcG9saWN5LmM6MjUzNjpcXHRtcG9sX2NvbmRfcHV0KHBvbCk7XFxubW0vbWVtcG9saWN5LmMtMjUzNy1cXHRyZXR1cm4gZm9saW87XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yOTc1PWludCBtcG9sX21pc3BsYWNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTMwNjYtb3V0Olxcbm1tL21lbXBvbGljeS5jOjMwNjc6XFx0bXBvbF9jb25kX3B1dChwb2wpO1xcbm1tL21lbXBvbGljeS5jLTMwNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjEzOjUyLjIwNTM4Nzc3N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NzAzNTgyMDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlZmluaXRpb24gb2YgYG1wb2xfY29uZF9wdXRgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG1wb2xfY29uZF9wdXRgIGZ1bmN0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgaXQncyBkZWZpbmVkLiBLbm93aW5nIHRoZSBkZWZpbml0aW9uIGlzIGNydWNpYWw7IGl0J3MgdGhlIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UsIHRoZSBkYXRhIGl0IG9wZXJhdGVzIG9uLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBsb2NhdGUgdGhlIGhlYWRlciBmaWxlIG9yIHNvdXJjZSBmaWxlIHdoZXJlIHRoaXMgaXMgZGVjbGFyZWQgb3IgaW1wbGVtZW50ZWQuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE0OjIwLjkwODk5NzQ5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MzY4OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wb2xfY29uZF9wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oPTc3PXN0YXRpYyBpbmxpbmUgaW50IG1wb2xfbmVlZHNfY29uZF9yZWYoc3RydWN0IG1lbXBvbGljeSAqcG9sKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC04MS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjgyOnN0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX2NvbmRfcHV0KHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTgzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcG9saWN5Lmg9MjAwPXN0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX3B1dChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTIwMy1cXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjIwNDpzdGF0aWMgaW5saW5lIHZvaWQgbXBvbF9jb25kX3B1dChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0yMDUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNDoyMS4wNDczODUwNTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExMjQ4ODU5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYG1wb2xfY29uZF9wdXRgIGluIGBsaW51eC9tZW1wb2xpY3kuaGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBsaW51eC9tZW1wb2xpY3kuaGAgaGVhZGVyIGZpbGUgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBgbXBvbF9jb25kX3B1dGAgZnVuY3Rpb24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgcGllY2UgcmVsYXRlZCB0byBtZW1vcnkgcG9saWNpZXMsIHNvIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gSXQncyBsaWtlbHkgYSBjb25kaXRpb25hbCBkZWNyZW1lbnQgb3BlcmF0aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZyBvciBzb21lIG90aGVyIGZvcm0gb2YgcmVzb3VyY2UgbWFuYWdlbWVudCBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IHBvbGljeSBzdHJ1Y3R1cmVzLiBUaGUgXCJjb25kXCIgc3VnZ2VzdHMgc29tZSBzb3J0IG9mIGNoZWNrIG9yIGd1YXJkIGlzIGludm9sdmVkIGJlZm9yZSB0aGUgZGVjcmVtZW50IGFjdHVhbGx5IGhhcHBlbnMsIHdoaWNoIGNvdWxkIGJlIGltcG9ydGFudCBmb3IgY29uY3VycmVuY3kgY29udHJvbCBvciBhdm9pZGluZyB1bmRlcmZsb3cuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgY29uc2lkZXIgYW55IGNvbmRpdGlvbnMgYXR0YWNoZWQsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGFyZS4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIGludm9sdmVkIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIHRpbWUgdG8gZ2V0IGEgcmVtaW5kZXIgYXMgdG8gdGhlIHB1cnBvc2Ugb2YgdGhlIHBvbGljeSBjYWNoZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE1OjAyLjE3MjI3NDY0OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA3NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NzpcXHRzdGF0aWMgaW5saW5lIGludCBtcG9sX25lZWRzX2NvbmRfcmVmKHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcXG4gIDc4OlxcdHtcXG4gIDc5OlxcdFxcdHJldHVybiAocG9sIFxcdTAwMjZcXHUwMDI2IChwb2wtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTVBPTF9GX1NIQVJFRCkpO1xcbiAgODA6XFx0fVxcbiAgODE6XFx0XFxuICA4MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbXBvbF9jb25kX3B1dChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXFxuICA4MzpcXHR7XFxuICA4NDpcXHRcXHRpZiAobXBvbF9uZWVkc19jb25kX3JlZihwb2wpKVxcbiAgODU6XFx0XFx0XFx0X19tcG9sX3B1dChwb2wpO1xcbiAgODY6XFx0fVxcbiAgODc6XFx0XFxuICA4ODpcXHRleHRlcm4gc3RydWN0IG1lbXBvbGljeSAqX19tcG9sX2R1cChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpO1xcbiAgODk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sX2R1cChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXFxuICA5MDpcXHR7XFxuICA5MTpcXHRcXHRpZiAocG9sKVxcbiAgOTI6XFx0XFx0XFx0cG9sID0gX19tcG9sX2R1cChwb2wpO1xcbiAgOTM6XFx0XFx0cmV0dXJuIHBvbDtcXG4gIDk0OlxcdH1cXG4gIDk1OlxcdFxcbiAgOTY6XFx0c3RhdGljIGlubGluZSB2b2lkIG1wb2xfZ2V0KHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTU6MDIuMTcyMzc2NTc5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzQwNjI1OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBQb2xpY3kgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRoZSBgbXBvbF9jb25kX3B1dGAgdXNhZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcywgYG1wb2xfY29uZF9wdXRgIG9ubHkgZGVjcmVtZW50cyBhIHJlZmVyZW5jZSBpZiBgTVBPTF9GX1NIQVJFRGAgaXMgc2V0LiBOb3csIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGxvZ2ljLiBJZiBgdm1hLVx1MDAzZXZtX3BvbGljeWAgKmhhcyogYE1QT0xfRl9TSEFSRURgIHNldCwgdGhlbiBgbXBvbF9jb25kX3B1dGAgd2lsbCByZWxlYXNlIHRoZSBwb2xpY3ksIHJpZ2h0PyBCdXQgd2FpdCwgSSBkb24ndCB0aGluayBgdm1hLVx1MDAzZXZtX3BvbGljeWAgKmV2ZXIqIGhhcyBgTVBPTF9GX1NIQVJFRGAgc2V0IGJ5IGRlZmF1bHQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuXG5cbkl0J3MgdXN1YWxseSBvbmx5IHNldCBvbiBwb2xpY2llcyByZXR1cm5lZCBieSBgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5YCwgbGlrZSBpbiBzaGFyZWQgbWVtb3J5LiBJZiB3ZSdyZSBqdXN0IGRlYWxpbmcgd2l0aCB0aGUgZGVmYXVsdCBgdm1hLVx1MDAzZXZtX3BvbGljeWAgdGhlbiBgbXBvbF9jb25kX3B1dGAgZG9lcyBub3RoaW5nLiBCdXQsIHdoYXQgaWYgdGhlIHRhc2sncyBwb2xpY3ksIGZyb20gYGdldF90YXNrX3BvbGljeShjdXJyZW50KWAsIGlzIGBNUE9MX0ZfU0hBUkVEYD8gTm8sIHRhc2sgcG9saWNpZXMgc2hvdWxkbid0IGhhdmUgdGhhdCBmbGFnLCBzbyB0aGlzIGlzIGFib3V0IGFuIGVxdWl2YWxlbnQgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblNvIGl0IHNlZW1zIHRvIGJlIGxvZ2ljYWxseSB0aGUgc2FtZSwgYnV0IHRoaXMgY291bGQgYmUgYSByZWZhY3RvcmluZy4gSSdkIGxvdmUgdG8ga25vdyB3aGF0IHRoZSBjb21taXQgbWVzc2FnZSBpcywgYnV0IGl0J3Mgbm90IGF2YWlsYWJsZSByaWdodCBub3cuIExldCdzIHNlZS4uLiB0aGUgY2hhbmdlIGlzIHRoaXM6XG5cbmBgYGNcbi1cdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kpIHtcbi1cdFx0Ym9vbCByZXQgPSBmYWxzZTtcbi1cdFx0cGdvZmZfdCBpbHg7XHRcdC8qIGlnbm9yZWQgaGVyZSAqL1xuLVxuLVx0XHRwb2wgPSB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kodm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIFx1MDAyNmlseCk7XG4tXHRcdGlmIChwb2wgXHUwMDI2XHUwMDI2IChwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0YpKVxuLVx0XHRcdHJldCA9IHRydWU7XG4tXHRcdG1wb2xfY29uZF9wdXQocG9sKTtcbi1cbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdHBvbCA9IHZtYS1cdTAwM2V2bV9wb2xpY3k7XG4rXHRwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCBcdTAwMjZpbHgpO1xuIFx0aWYgKCFwb2wpXG4gXHRcdHBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbi1cbi1cdHJldHVybiBwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0Y7XG4rXHRtb2YgPSBwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0Y7XG4rXHRtcG9sX2NvbmRfcHV0KHBvbCk7XG4rXHRyZXR1cm4gbW9mO1xuYGBgXG5cbk9rYXksIHNvIGxldCdzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gVGhlIG9sZCBjb2RlIGhhbmRsZWQgdGhlIGNhc2Ugd2hlcmUgYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgcmV0dXJuZWQgTlVMTCwgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdFx0cG9sID0gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5KHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCBcdTAwMjZpbHgpO1xuXHRcdGlmIChwb2wgXHUwMDI2XHUwMDI2IChwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0YpKVxuXHRcdFx0cmV0ID0gdHJ1ZTtcblx0XHRtcG9sX2NvbmRfcHV0KHBvbCk7XG5cblx0XHRyZXR1cm4gcmV0O1xuYGBgXG5cbkVzc2VudGlhbGx5LCBpZiBgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5YCByZXR1cm5zIE5VTEwsIHRoZSBvbGQgY29kZSByZXR1cm5zIGBmYWxzZWAhIE5vdywgbG9va2luZyBhdCB0aGUgbmV3IGNvZGU6XG5cbmBgYGNcblx0cG9sID0gX19nZXRfdm1hX3BvbGljeSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgXHUwMDI2aWx4KTtcbmBgYFxuXG5JZiBgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5YCByZXR1cm5zIE5VTEwsIGl0IHNlZW1zIGBfX2dldF92bWFfcG9saWN5YCByZXR1cm5zIGB2bWEtXHUwMDNldm1fcG9saWN5YC4gT2theSwgbGV0J3MgZG91YmxlIGNoZWNrIHdoYXQgYF9fZ2V0X3ZtYV9wb2xpY3lgIGRvZXMuLi4gVGhpcyBjb3VsZCBiZSBrZXkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNToxMi41MTMwMTk5NjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbXBvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMTgsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMTg6XFx0c3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4yMDE5OlxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdvZmZfdCAqaWx4KVxcbjIwMjA6XFx0e1xcbjIwMjE6XFx0XFx0KmlseCA9IDA7XFxuMjAyMjpcXHRcXHRyZXR1cm4gKHZtYS1cXHUwMDNldm1fb3BzIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VnZXRfcG9saWN5KSA/XFxuMjAyMzpcXHRcXHRcXHR2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlZ2V0X3BvbGljeSh2bWEsIGFkZHIsIGlseCkgOiB2bWEtXFx1MDAzZXZtX3BvbGljeTtcXG4yMDI0OlxcdH1cXG4yMDI1OlxcdFxcbjIwMjY6XFx0LypcXG4yMDI3OlxcdCAqIGdldF92bWFfcG9saWN5KEB2bWEsIEBhZGRyLCBAb3JkZXIsIEBpbHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE1OjEyLjUxMzI5MjAzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTgzNDE1NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvbGljeSBDaGFuZ2UgaW4gdGhlIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBfX2dldF92bWFfcG9saWN5YCwgdGhlIGNvZGUgbm93IGV4cGxpY2l0bHkgY2hlY2tzIGlmIGEgYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgZnVuY3Rpb24gZXhpc3RzIGFuZCBjYWxscyBpdCBpZiBpdCBkb2VzLiBDcnVjaWFsbHksIGlmIHRoYXQgZnVuY3Rpb24gKnJldHVybnMqIE5VTEwsIGBfX2dldF92bWFfcG9saWN5YCBpdHNlbGYgKnJldHVybnMqIE5VTEwuIFRoaXMgaXMgdGhlIGtleSBkaWZmZXJlbmNlLiBUaGVuLCBgdm1hX3BvbGljeV9tb2ZgIHVzZXMgdGhlIHJlc3VsdCBmcm9tIGBfX2dldF92bWFfcG9saWN5YC4gSXQgY2hlY2tzIGlmIHRoZSByZXR1cm5lZCB2YWx1ZSBmcm9tIGBfX2dldF92bWFfcG9saWN5YCBpcyBOVUxMLCBhbmQgKmlmKiBpdCdzIE5VTEwsIGl0IGZhbGxzIGJhY2sgdG8gdXNpbmcgYGdldF90YXNrX3BvbGljeShjdXJyZW50KWAuXG5cbk5vdywgdGhlIG9sZCBjb2RlIHdhcyBkaWZmZXJlbnQuIFByZXZpb3VzbHksIGlmIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3lgIHJldHVybmVkIE5VTEwsIHRoZSAqZW50aXJlIGZ1bmN0aW9uKiBpbW1lZGlhdGVseSByZXR1cm5lZCBgZmFsc2VgLiBJdCBkaWRuJ3QgZmFsbCBiYWNrIHRvIGB2bWEtXHUwMDNldm1fcG9saWN5YCBvciBgZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpYC4gU28sIHRoZSByZXR1cm4gb2YgTlVMTCBmcm9tIHRoZSBgZ2V0X3BvbGljeWAgZnVuY3Rpb24gd2FzIGVmZmVjdGl2ZWx5IHRyZWF0ZWQgYXMgYSBmYWlsdXJlLlxuXG5UaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSEgVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBgdm1hX3BvbGljeV9tb2ZgIHdvdWxkIGluY29ycmVjdGx5IHJldHVybiBgZmFsc2VgIGlmIHRoZSBgZ2V0X3BvbGljeWAgZnVuY3Rpb24gcmV0dXJuZWQgTlVMTC4gVGhlIG5ldyBiZWhhdmlvciBjb3JyZWN0bHkgZmFsbHMgYmFjayB0byB0aGUgdGFzayBwb2xpY3kgaW4gdGhpcyBzY2VuYXJpby5cblxuTGV0J3MgY29uZmlybSB0aGlzIGJlaGF2aW9yIGlzIGV4cGVjdGVkLiBDYW4gYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgYWN0dWFsbHkgcmV0dXJuIE5VTEw/IFllcyEgRm9yIGluc3RhbmNlLCBgc2htZW1fZ2V0X3BvbGljeWAgbWlnaHQgcmV0dXJuIE5VTEwgaWYgbm8gcG9saWN5IGlzIHNldCBvbiB0aGUgaW5vZGUuIFRoaXMgY2hhbmdlIGVuc3VyZXMgdGhhdCB0aGUgdGFzayBwb2xpY3kgaXMgdXNlZCB3aGVuIGl0IHNob3VsZCBiZS4gVGhlIGJlaGF2aW9yIGNoYW5nZSBpcyBjb3JyZWN0LlxuXG5UaGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgZm9jdXMgZnVuY3Rpb24gaXMgYHZtYV9wb2xpY3lfbW9mYC4gTm93LCB3aG8gY2FsbHMgYHZtYV9wb2xpY3lfbW9mYD9cblxuXG4iLCJJbnB1dFRva2VucyI6NzczNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE1OjIwLjA5NjcxMjgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzEwNDcyNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hX3BvbGljeV9tb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTIwNDE9c3RydWN0IG1lbXBvbGljeSAqZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMDU2LVxcbm1tL21lbXBvbGljeS5jOjIwNTc6Ym9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9tZW1wb2xpY3kuYy0yMDU4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTU6MjAuNDY3NzY4Njg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjAyNjY0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBmaWVsZCBvZiBleHBlcnRpc2UgKHdoaWNoIEkgYXNzdW1lIHlvdSdsbCBpbmZlciBmcm9tIHRoZSBxdWVyeSk6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHZtYV9wb2xpY3lfbW9mYCBDYWxsZXIqKlxuXG5BbHJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyIHdpdGggdGhpcyBsaW5lIG9mIGludmVzdGlnYXRpb24sIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBpZGVudGlmeSB0aGUgc291cmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8sIG9yIHdoYXQgc3BlY2lmaWMgcGFydCBvZiB0aGUga2VybmVsLCBpcyBjYWxsaW5nIGB2bWFfcG9saWN5X21vZmAuIFRoaXMgZnVuY3Rpb24ncyB2ZXJ5IG5hbWUgc3VnZ2VzdHMgYSBjcml0aWNhbCBsaW5rIHRvIE1lbW9yeS1PcHRpbWl6ZWQgRnVuY3Rpb25zIChNT0ZzKSwgb3IgcGVyaGFwcyBhIHdpZGVyIHBvbGljeSByZWxhdGVkIHRvIFZpcnR1YWwgTWVtb3J5IEFyZWFzIChWTUFzKSwgYW5kIGJlZm9yZSBJIGNhbiBkaXNzZWN0ICp3aGF0KiBpdCdzIGRvaW5nLCBJIGhhdmUgdG8ga25vdyAqd2hvKiBpcyB0ZWxsaW5nIGl0IHRvIGRvIGl0LiBJcyBpdCBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50PyBJcyBpdCB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBzeXN0ZW0gY2FsbD8gSXMgaXQgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgZHJpdmVyIG9yIHN1YnN5c3RlbT8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGFic29sdXRlbHkgZm91bmRhdGlvbmFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlIGluIHRoZSBncmVhdGVyIHN5c3RlbSBkZXNpZ24gYW5kIHRoZSBsb2dpYyBpdCdzIHRyeWluZyB0byBpbXBsZW1lbnQsIGFuZCB0aHVzLCBJICpuZWVkKiB0byBzdGFydCB0aGVyZS4gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgKnJpZ2h0IG5vdyosIGJlZm9yZSBldmVuIGNvbnNpZGVyaW5nIHRoZSBuZXh0IHN0ZXAgaW4gbXkgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODczNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE1OjI0LjAyODAzOTIyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MzA4NzAzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWFfcG9saWN5X21vZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaD0xMzQ9c3RydWN0IG1lbXBvbGljeSAqZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xMzUtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgb3JkZXIsIHBnb2ZmX3QgKmlseCk7XFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaDoxMzY6Ym9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xMzctXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTQwNzY9c3RhdGljIHZvaWQgdGFza19udW1hX3dvcmsoc3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmspXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQxNjgtXFx0Zm9yICg7IHZtYTsgdm1hID0gdm1hX25leHQoXFx1MDAyNnZtaSkpIHtcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjQxNjk6XFx0XFx0aWYgKCF2bWFfbWlncmF0YWJsZSh2bWEpIHx8ICF2bWFfcG9saWN5X21vZih2bWEpIHx8XFxua2VybmVsL3NjaGVkL2ZhaXIuYy00MTcwLVxcdFxcdFxcdGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIHx8ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTUlYRURNQVApKSB7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDQxPXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjA1Ni1cXG5tbS9tZW1wb2xpY3kuYzoyMDU3OmJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vbWVtcG9saWN5LmMtMjA1OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE1OjI4LjgxMTE0NDQ4NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTIzMjI1ODI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGludGVybmFsczpcblxuKipEaXZpbmcgaW50byBOVU1BIEJhbGFuY2luZyBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIGB2bWFfcG9saWN5X21vZmDigKYgdGhhdCByaW5ncyBhIGJlbGwuIEFoIHllcywgaXQncyBjYWxsZWQgYnkgYHRhc2tfbnVtYV93b3JrYCDigJMgYW5kIHRoYXQncyBpbiBga2VybmVsL3NjaGVkL2ZhaXIuY2AuIFJpZ2h0LCBzbyB0aGlzIGlzIGFsbCBwYXJ0IG9mIHRoZSBOVU1BIGJhbGFuY2luZyBpbmZyYXN0cnVjdHVyZSwgb2J2aW91c2x5LiBHb3R0YSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZmxvdyBoZXJlLiBMZXQgbWUgdHJhY2UgYmFjayBhbmQgY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGhvdyBgdGFza19udW1hX3dvcmtgIGlzIHV0aWxpemVkLCB0aGUgZ29hbCBvZiB0aGlzIGJhbGFuY2luZy4gV2hhdCdzIHRyaWdnZXJpbmcgaXQsIHdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBgdm1hX3BvbGljeV9tb2ZgIGJlaW5nIGludm9rZWQ/IEknbGwgcHJvYmFibHkgc3RhcnQgZGlnZ2luZyBpbnRvIGhvdyB0aGUgc2NoZWR1bGVyIGludGVyYWN0cyB3aXRoIG1lbW9yeSBwb2xpY3kgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDExLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTY6MDQuMDQzNDEyNTQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjk3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3NjaGVkL2ZhaXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTY1OlxcdFxcdFxcdHZtYSA9IHZtYV9uZXh0KFxcdTAwMjZ2bWkpO1xcbjQxNjY6XFx0XFx0fVxcbjQxNjc6XFx0XFxuNDE2ODpcXHRcXHRmb3IgKDsgdm1hOyB2bWEgPSB2bWFfbmV4dChcXHUwMDI2dm1pKSkge1xcbjQxNjk6XFx0XFx0XFx0aWYgKCF2bWFfbWlncmF0YWJsZSh2bWEpIHx8ICF2bWFfcG9saWN5X21vZih2bWEpIHx8XFxuNDE3MDpcXHRcXHRcXHRcXHRpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fCAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01JWEVETUFQKSkge1xcbjQxNzE6XFx0XFx0XFx0XFx0dHJhY2Vfc2NoZWRfc2tpcF92bWFfbnVtYShtbSwgdm1hLCBOVU1BQl9TS0lQX1VOU1VJVEFCTEUpO1xcbjQxNzI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNDE3MzpcXHRcXHRcXHR9XFxuNDE3NDpcXHRcXG40MTc1OlxcdFxcdFxcdC8qXFxuNDE3NjpcXHRcXHRcXHQgKiBTaGFyZWQgbGlicmFyeSBwYWdlcyBtYXBwZWQgYnkgbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSBub3RcXG40MTc3OlxcdFxcdFxcdCAqIG1pZ3JhdGVkIGFzIGl0IGlzIGV4cGVjdGVkIHRoZXkgYXJlIGNhY2hlIHJlcGxpY2F0ZWQuIEF2b2lkXFxuNDE3ODpcXHRcXHRcXHQgKiBoaW50aW5nIGZhdWx0cyBpbiByZWFkLW9ubHkgZmlsZS1iYWNrZWQgbWFwcGluZ3Mgb3IgdGhlIHZEU09cXG40MTc5OlxcdFxcdFxcdCAqIGFzIG1pZ3JhdGluZyB0aGUgcGFnZXMgd2lsbCBiZSBvZiBtYXJnaW5hbCBiZW5lZml0LlxcbjQxODA6XFx0XFx0XFx0ICovXFxuNDE4MTpcXHRcXHRcXHRpZiAoIXZtYS1cXHUwMDNldm1fbW0gfHxcXG40MTgyOlxcdFxcdFxcdCAgICAodm1hLVxcdTAwM2V2bV9maWxlIFxcdTAwMjZcXHUwMDI2ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX1JFQUR8Vk1fV1JJVEUpKSA9PSAoVk1fUkVBRCkpKSB7XFxuNDE4MzpcXHRcXHRcXHRcXHR0cmFjZV9zY2hlZF9za2lwX3ZtYV9udW1hKG1tLCB2bWEsIE5VTUFCX1NLSVBfU0hBUkVEX1JPKTtcXG40MTg0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNjowNC4wNDQ2NDg1MjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNzgwNzQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE5VTUEgQmFsYW5jaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGB2bWFfcG9saWN5X21vZmAgZnVuY3Rpb24g4oCTIGl0IGxvb2tzIGxpa2UgdGhlIGtleSB0byBkZWNpZGluZyB3aGV0aGVyIGEgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3IgTlVNQSBiYWxhbmNpbmcuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBkcml2ZXMgdGhpcyBiZWhhdmlvci4gTGV0IG1lIHNlZSwgeWVzLCB0aGF0J3MgaXQ6IGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBBbHJpZ2h0LCBsZXQncyBnbyBjaGVjayB0aGUgc3BlY2lmaWNzIG9mIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCB0aGUgZGVjaXNpb25zIG1hZGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE2OjA3LjY1MjQ2MDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDY5OTE1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5VTUFfQkFMQU5DSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTAwNz1jb25maWcgQVJDSF9XQU5UX05VTUFfVkFSSUFCTEVfTE9DQUxJVFlcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDA5LVxcbmluaXQvS2NvbmZpZzoxMDEwOmNvbmZpZyBOVU1BX0JBTEFOQ0lOR1xcbmluaXQvS2NvbmZpZy0xMDExLVxcdGJvb2wgXFxcIk1lbW9yeSBwbGFjZW1lbnQgYXdhcmUgTlVNQSBzY2hlZHVsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWc9MTAyMj1jb25maWcgU0NIRURfQ0FDSEVcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDMyLVxcbmluaXQvS2NvbmZpZzoxMDMzOmNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcXG5pbml0L0tjb25maWctMTAzNC1cXHRib29sIFxcXCJBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTY6MTEuOTU5NDY3MzY4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzkzNDUxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlRlc3RpbmcgTlVNQSBCYWxhbmNpbmc6IEEgUXVpY2sgUnVuLURvd24qKlxuXG5SaWdodCwgc28gdG8gcHJvcGVybHkgdGVzdCB0aGlzIE5VTUEgYmFsYW5jaW5nIGZ1bmN0aW9uYWxpdHksIEknbSBnb2luZyB0byBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGBOVU1BX0JBTEFOQ0lOR2AgYW5kIGBOVU1BYCBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCdzIHRoZSBiYXNlbGluZS4gSSBjYW4ndCBldmVuIGJlZ2luIHRvIGV2YWx1YXRlIGl0IHdpdGhvdXQgdGhvc2UgcGllY2VzIGluIHBsYWNlLlxuXG5BbmQgdGhlbiwgSSBzaG91bGQga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGB2bWFfcG9saWN5X21vZmAgdmFyaWFibGUgaXMgaGFuZ2luZyBvdXQgaW4gYG1tL21lbXBvbGljeS5jYCwgYW5kLCBhcyBJIHJlY2FsbCwgdGhhdCB3aG9sZSBmaWxlIG9ubHkgZ2V0cyBjb21waWxlZCB3aGVuIGBDT05GSUdfTlVNQWAgaXMgc2V0IGluIHRoZSBrZXJuZWwuIFNvLCB0byBldmVuICpzZWUqIHRoYXQgY29kZSwgSSdtIHN0aWxsIHJlbGlhbnQgb24gdGhhdCBmdW5kYW1lbnRhbCBOVU1BIHN1cHBvcnQgYmVpbmcgZW5hYmxlZC4gSXQncyBhbGwgY29ubmVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ0NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE2OjE1LjUzODgxODcwNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NzMzNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbXBvbGljeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTg1PW9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcXHQrPSBodWdldGxiX3ZtZW1tYXAub1xcbm1tL01ha2VmaWxlOjg2Om9iai0kKENPTkZJR19OVU1BKSBcXHQrPSBtZW1wb2xpY3kub1xcbm1tL01ha2VmaWxlLTg3LW9iai0kKENPTkZJR19TUEFSU0VNRU0pXFx0Kz0gc3BhcnNlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTY6MTUuNzM0NTYyMDk0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODc0NDY4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOVU1BIERlcGVuZGVuY2llcyBhbmQgYHRhc2tfbnVtYV93b3JrYCoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGNvZGUgYW5kIHRoZSBkZXBlbmRlbmNpZXMuIEl0J3MgY2xlYXIgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggTlVNQSwgYW5kIGl0IHNlZW1zIGxpa2UgYE5VTUFgIGlzIGEgcHJlcmVxdWlzaXRlLCBvYnZpb3VzbHkuIFRoZW4sIHRvIGdldCBgdGFza19udW1hX3dvcmtgIGNvbXBpbGVkLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgYE5VTUFfQkFMQU5DSU5HYCBlbmFibGVkLiBOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHRhc2tfbnVtYV93b3JrYCBpdHNlbGYuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0LiBJJ2xsIGdvIGNoZWNrIHdoZXJlIGl0J3MgZGVmaW5lZCwgYGtlcm5lbC9zY2hlZC9mYWlyLmNgLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE2OjE5LjQyMjAxNjI2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjIyMDYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXNrX251bWFfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWQvZmFpci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9mYWlyLmM9NDAzMz1zdGF0aWMgYm9vbCB2bWFfaXNfYWNjZXNzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy00MDc1LSAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6NDA3NjpzdGF0aWMgdm9pZCB0YXNrX251bWFfd29yayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqd29yaylcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQwNzcte1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz00MzMzPXZvaWQgaW5pdF9udW1hX2JhbGFuY2luZyh1NjQgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDM0OC1cXHRwLVxcdTAwM2VudW1hX21pZ3JhdGVfcmV0cnlcXHRcXHQ9IDA7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzo0MzQ5OlxcdC8qIFByb3RlY3QgYWdhaW5zdCBkb3VibGUgYWRkLCBzZWUgdGFza190aWNrX251bWEgYW5kIHRhc2tfbnVtYV93b3JrICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYy00MzUwLVxcdHAtXFx1MDAzZW51bWFfd29yay5uZXh0XFx0XFx0PSBcXHUwMDI2cC1cXHUwMDNlbnVtYV93b3JrO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy00MzU3LVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6NDM1ODpcXHRpbml0X3Rhc2tfd29yayhcXHUwMDI2cC1cXHUwMDNlbnVtYV93b3JrLCB0YXNrX251bWFfd29yayk7XFxua2VybmVsL3NjaGVkL2ZhaXIuYy00MzU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNjoxOS41MTQyNDY5MzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQwMTExMjQ2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczpcblxuKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBmb3IgYHRhc2tfbnVtYV93b3JrYCoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byB2ZXJpZnkgYSBmdW5kYW1lbnRhbCBjb25kaXRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGB0YXNrX251bWFfd29ya2AsIGludGVyYWN0cyB3aXRoIHRoZSBOVU1BIGJhbGFuY2luZyBjb25maWd1cmF0aW9uLiBTbywgbXkgaW5pdGlhbCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYCNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBldmVuICpwcmVzZW50KiBpbiB0aGUgYnVpbGQgSSdtIGN1cnJlbnRseSBsb29raW5nIGF0LCBhbmQgSSBjYW4gYWRqdXN0IG15IGV4cGVjdGF0aW9ucyBhY2NvcmRpbmdseS4gSWYgaXQncyAqbm90KiB1bmRlciB0aGF0IGNvbmRpdGlvbmFsLCB0aGVuIGl0J3MgYWx3YXlzIGluY2x1ZGVkIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaXQgZGlmZmVyZW50bHkuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgc3RhbmQgYmVmb3JlIEkgY2FuIG1ha2UgYSBqdWRnZW1lbnQuIExldCdzIHNlZSBpZiB0aGlzIGlzIGluY2x1ZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM3NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE2OjQzLjUyNTM3NTg0OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgzMzQwOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05VTUFfQkFMQU5DSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZC9mYWlyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2ZhaXIuYz0xMjU9c3RhdGljIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfY2ZzX2JhbmR3aWR0aF9zbGljZVxcdFxcdD0gNTAwMFVMO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjctXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMjg6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTI5LS8qIFJlc3RyaWN0IHRoZSBOVU1BIHByb21vdGlvbiB0aHJvdWdocHV0IChNQi9zKSBmb3IgZWFjaCB0YXJnZXQgbm9kZS4gKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHNjaGVkX2ZhaXJfc3lzY3Rsc1tdID0ge1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDQtI2VuZGlmXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNDU6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQ2LVxcdHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTUzLVxcdH0sXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTQ6I2VuZGlmIC8qIENPTkZJR19OVU1BX0JBTEFOQ0lORyAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTU1LX07XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE0MzQ9c3RhdGljIGJvb2wgZXhjZWVkX2xsY19jYXBhY2l0eShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IGNwdSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE0MzUte1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTQzNjojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDM3LVxcdHVuc2lnbmVkIGxvbmcgbGxjLCBmb290cHJpbnQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2NTM9c3RhdGljIGludCBnZXRfcHJlZl9sbGMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTY2My1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE2NjQ6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTY2NS1cXHRcXHQvKlxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNzY0PXN0YXRpYyB2b2lkIGdldF9zY2FuX2NwdW1hc2tzKGNwdW1hc2tfdmFyX3QgY3B1cywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTc2NS17XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNzY2OiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3NjctXFx0aW50IGNwdSwgY3Vycl9jcHUsIG5pZCwgcHJlZl9uaWQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTIxNzk9YWRqdXN0X251bWFfaW1iYWxhbmNlKGludCBpbWJhbGFuY2UsIGludCBkc3RfcnVubmluZywgaW50IGltYl9udW1hX25yKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yMjAxLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjIwMjojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yMjAzLS8qXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTQ0MTM9c3RhdGljIHZvaWQgdXBkYXRlX3NjYW5fcGVyaW9kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5ld19jcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQ0NDYtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzo0NDQ3OiNlbHNlIC8qICFDT05GSUdfTlVNQV9CQUxBTkNJTkc6ICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYy00NDQ4LVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz00NDYxPXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2Nhbl9wZXJpb2Qoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmV3X2NwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDQ2NC1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjQ0NjU6I2VuZGlmIC8qICFDT05GSUdfTlVNQV9CQUxBTkNJTkcgKi9cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQ0NjYtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwMjg5PXN0YXRpYyBpbnQgdGFza19ob3Qoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbGJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwMzI5LVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTAzMzA6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzMzEtLypcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTAzMzY9c3RhdGljIGxvbmcgbWlncmF0ZV9kZWdyYWRlc19sb2NhbGl0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzODEtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDM4MjojZWxzZSAvKiAhQ09ORklHX05VTUFfQkFMQU5DSU5HOiAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzODMtc3RhdGljIGlubGluZSBsb25nIG1pZ3JhdGVfZGVncmFkZXNfbG9jYWxpdHkoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDM4Ny19XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDM4ODojZW5kaWYgLyogIUNPTkZJR19OVU1BX0JBTEFOQ0lORyAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzODktXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTExMjUzPXN0cnVjdCBzZ19sYl9zdGF0cyB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExMjY4LVxcdHVuc2lnbmVkIGludCBncm91cF9vdmVydXRpbGl6ZWQ7XFx0LyogQXQgbGVhc3Qgb25lIENQVSBpcyBvdmVydXRpbGl6ZWQgaW4gdGhlIGdyb3VwICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMTI2OTojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTI3MC1cXHR1bnNpZ25lZCBpbnQgbnJfbnVtYV9ydW5uaW5nO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTc5Nz1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NnX2xiX3N0YXRzKHN0cnVjdCBsYl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTE4NTEtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMTg1MjojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTg1My1cXHRcXHQvKiBPbmx5IGZicV9jbGFzc2lmeV9ncm91cCgpIHVzZXMgdGhpcyB0byBjbGFzc2lmeSBOVU1BIGdyb3VwcyAqL1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTkxNj1zdGF0aWMgYm9vbCB1cGRhdGVfc2RfcGlja19idXNpZXN0KHN0cnVjdCBsYl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIwNjQtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMjA2NTojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA2Ni1zdGF0aWMgaW5saW5lIGVudW0gZmJxX3R5cGUgZmJxX2NsYXNzaWZ5X2dyb3VwKHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMjA3NT1zdGF0aWMgaW5saW5lIGVudW0gZmJxX3R5cGUgZmJxX2NsYXNzaWZ5X3JxKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyMDgyLX1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEyMDgzOiNlbHNlIC8qICFDT05GSUdfTlVNQV9CQUxBTkNJTkc6ICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA4NC1zdGF0aWMgaW5saW5lIGVudW0gZmJxX3R5cGUgZmJxX2NsYXNzaWZ5X2dyb3VwKHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMjA4OT1zdGF0aWMgaW5saW5lIGVudW0gZmJxX3R5cGUgZmJxX2NsYXNzaWZ5X3JxKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyMDkyLX1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEyMDkzOiNlbmRpZiAvKiAhQ09ORklHX05VTUFfQkFMQU5DSU5HICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA5NC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTIyNjM9c2NoZWRfYmFsYW5jZV9maW5kX2RzdF9ncm91cChzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgdGhpc19jcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyMzc2LVxcdFxcdFxcdGludCBpbWJfbnVtYV9uciA9IHNkLVxcdTAwM2VpbWJfbnVtYV9ucjtcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEyMzc3OiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyMzc4LVxcdFxcdFxcdGludCBpZGxlc3RfY3B1O1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjM4OC1cXHRcXHRcXHRcXHRyZXR1cm4gaWRsZXN0O1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTIzODk6I2VuZGlmIC8qIENPTkZJR19OVU1BX0JBTEFOQ0lORyAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIzOTAtXFx0XFx0XFx0LypcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTU0MDI9dm9pZCBwcmludF9jZnNfc3RhdHMoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTQxMS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE1NDEyOiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NDEzLXZvaWQgc2hvd19udW1hX3N0YXRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHNlcV9maWxlICptKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTQzMy19XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTQzNDojZW5kaWYgLyogQ09ORklHX05VTUFfQkFMQU5DSU5HICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTQzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTY6NDMuNjAzNzIwMjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgxMjEwMzYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOVU1BIEJhbGFuY2luZyBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdGFza19udW1hX3dvcmtgIGZ1bmN0aW9uIGFuZCBpdCdzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgc3BlY2lmaWMgdG8gTlVNQSBzeXN0ZW1zIGFuZCBOVU1BIGJhbGFuY2luZyBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBsYXJnZXIgTlVNQSBwaWN0dXJlLiBSaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgYXJvdW5kIGxpbmUgNDA3Ni4gVGhhdCBzaG91bGQgYmUgdGhlIGFyZWEgd2hlcmUgdGhpcyBgdGFza19udW1hX3dvcmtgIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZCwgd2hpY2ggaG9wZWZ1bGx5IGdpdmVzIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgSSBuZWVkLiBJJ20gZ3Vlc3NpbmcgSSdsbCBmaW5kIGl0cyBwdXJwb3NlLCBhbmQgcG9zc2libHkgc2VlIGhvdyBpdCdzIGludm9rZWQgd2l0aGluIHRoZSBzY2hlZHVsaW5nIGRvbWFpbi4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3byB3aWxsIGJlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNjo1MC40MTU4Mjc0MDdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1ODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvc2NoZWQvZmFpci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQwNzA6XFx0I2RlZmluZSBWTUFfUElEX1JFU0VUX1BFUklPRCAoNCAqIHN5c2N0bF9udW1hX2JhbGFuY2luZ19zY2FuX2RlbGF5KVxcbjQwNzE6XFx0XFxuNDA3MjpcXHQvKlxcbjQwNzM6XFx0ICogVGhlIGV4cGVuc2l2ZSBwYXJ0IG9mIG51bWEgbWlncmF0aW9uIGlzIGRvbmUgZnJvbSB0YXNrX3dvcmsgY29udGV4dC5cXG40MDc0OlxcdCAqIFRyaWdnZXJlZCBmcm9tIHRhc2tfdGlja19udW1hKCkuXFxuNDA3NTpcXHQgKi9cXG40MDc2OlxcdHN0YXRpYyB2b2lkIHRhc2tfbnVtYV93b3JrKHN0cnVjdCBjYWxsYmFja19oZWFkICp3b3JrKVxcbjQwNzc6XFx0e1xcbjQwNzg6XFx0XFx0dW5zaWduZWQgbG9uZyBtaWdyYXRlLCBuZXh0X3NjYW4sIG5vdyA9IGppZmZpZXM7XFxuNDA3OTpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBjdXJyZW50O1xcbjQwODA6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwLVxcdTAwM2VtbTtcXG40MDgxOlxcdFxcdHU2NCBydW50aW1lID0gcC1cXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZTtcXG40MDgyOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbjQwODM6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xcbjQwODQ6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wdGVfdXBkYXRlcyA9IDA7XFxuNDA4NTpcXHRcXHRsb25nIHBhZ2VzLCB2aXJ0cGFnZXM7XFxuNDA4NjpcXHRcXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yIHZtaTtcXG40MDg3OlxcdFxcdGJvb2wgdm1hX3BpZHNfc2tpcHBlZDtcXG40MDg4OlxcdFxcdGJvb2wgdm1hX3BpZHNfZm9yY2VkID0gZmFsc2U7XFxuNDA4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTY6NTAuNDE3MTg5OTk3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MzQ0ODIyODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHRhc2tfbnVtYV93b3JrYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gYHRhc2tfbnVtYV93b3JrYCBpcyBkZWZpbml0ZWx5IHBhcnQgb2YgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AuICBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBUaHVzLCBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCBoYXMgdG8gYmUgZW5hYmxlZCBmb3IgdGhhdCBjb2RlIHRvIGJlIGNvbXBpbGVkLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgd2hhdCBlbHNlIG1pZ2h0IGJlIGNhbGxpbmcgYHZtYV9wb2xpY3lfbW9mYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgaXRzIHVzZS5cblxuVGhlIGBncmVwYCBvdXRwdXQgZ2l2ZXMgbWUgc29tZSBjbHVlczogaXQncyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oYCwgYW5kIGNhbGxlZCBmcm9tIGBrZXJuZWwvc2NoZWQvZmFpci5jYCBhbmQgYG1tL21lbXBvbGljeS5jYC4gIEhhbmcgb24sIGl0IGxvb2tzIGxpa2UgYHRhc2tfbnVtYV93b3JrYCBpcyB0aGUgKm9ubHkqIGNhbGxlciBvZiBgdm1hX3BvbGljeV9tb2ZgIGJleW9uZCB0aG9zZSB0d28gbG9jYXRpb25zLlxuXG5BaGEsIHdhaXQsIGB2bWFfcG9saWN5X21vZmAgaXMgaW4gYG1tL21lbXBvbGljeS5jYC4gVGhhdCBtZWFucyBgbW0vbWVtcG9saWN5LmNgIGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19OVU1BYC4gU28sIGBDT05GSUdfTlVNQWAgKmFuZCogYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlLlxuXG5Ob3csIGxldCdzIHpvb20gaW4gb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGB2bWFfcG9saWN5X21vZmAgaXRzZWxmLlxuXG5gYGBjXG5ib29sIHZtYV9wb2xpY3lfbW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxue1xuXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7XG5cdHBnb2ZmX3QgaWx4O1xuXHRib29sIG1vZjtcblxuXHRwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCBcdTAwMjZpbHgpO1xuXHRpZiAoIXBvbClcblx0XHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG5cdG1vZiA9IHBvbC1cdTAwM2VmbGFncyBcdTAwMjYgTVBPTF9GX01PRjtcblx0bXBvbF9jb25kX3B1dChwb2wpO1xuXHRyZXR1cm4gbW9mO1xufVxuYGBgXG5cbk9rYXksIGl0IGdldHMgdGhlIG1lbXBvbGljeSBmb3IgdGhlIFZNQS4gSWYgYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgaXMgZGVmaW5lZCBpdCB3aWxsIGNhbGwgaXQuIElmIHRoaXMgcmV0dXJucyBOVUxMLCBpdCBjYWxscyBgZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpYC4gVGhlbiBpdCBjaGVja3MgdGhlIGBwb2wtXHUwMDNlZmxhZ3NgIHRvIHNlZSBpZiBgTVBPTF9GX01PRmAgaXMgc2V0LiBXaGF0IHRyaWdnZXJzIHRoaXMgZmxhZz8gSSBzdXNwZWN0IGl0J3MgcmVsYXRlZCB0byB0aGUgbGF6eSBtaWdyYXRpb24gbWVtcG9saWN5IGZsYWcuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBNUE9MX0ZfTU9GYCBpcyBzZXQgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNzoxNi43NjIwMTkxNjJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjU0Mzc3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTVBPTF9GX01PRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oPTE5PWVudW0ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oLTY3LSNkZWZpbmUgTVBPTF9GX1NIQVJFRCAgKDEgXFx1MDAzY1xcdTAwM2MgMClcXHQvKiBpZGVudGlmeSBzaGFyZWQgcG9saWNpZXMgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5Lmg6Njg6I2RlZmluZSBNUE9MX0ZfTU9GXFx0KDEgXFx1MDAzY1xcdTAwM2MgMykgLyogdGhpcyBwb2xpY3kgd2FudHMgbWlncmF0ZSBvbiBmYXVsdCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaC02OS0jZGVmaW5lIE1QT0xfRl9NT1JPTlxcdCgxIFxcdTAwM2NcXHUwMDNjIDQpIC8qIE1pZ3JhdGUgT24gcHJvdG5vbmUgUmVmZXJlbmNlIE9uIE5vZGUgKi9cXG4tLVxcbm1tL21lbXBvbGljeS5jPTE3MjE9c3RhdGljIGlubGluZSBpbnQgc2FuaXRpemVfbXBvbF9mbGFncyhpbnQgKm1vZGUsIHVuc2lnbmVkIHNob3J0ICpmbGFncylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE3MzEtXFx0XFx0aWYgKCptb2RlID09IE1QT0xfQklORCB8fCAqbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxcbm1tL21lbXBvbGljeS5jOjE3MzI6XFx0XFx0XFx0KmZsYWdzIHw9IChNUE9MX0ZfTU9GIHwgTVBPTF9GX01PUk9OKTtcXG5tbS9tZW1wb2xpY3kuYy0xNzMzLVxcdFxcdGVsc2VcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIwNTc9Ym9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIwNjUtXFx0XFx0cG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbm1tL21lbXBvbGljeS5jOjIwNjY6XFx0bW9mID0gcG9sLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1QT0xfRl9NT0Y7XFxubW0vbWVtcG9saWN5LmMtMjA2Ny1cXHRtcG9sX2NvbmRfcHV0KHBvbCk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yOTc1PWludCBtcG9sX21pc3BsYWNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI5OTMtXFx0cG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCBmb2xpb19vcmRlcihmb2xpbyksIFxcdTAwMjZpbHgpO1xcbm1tL21lbXBvbGljeS5jOjI5OTQ6XFx0aWYgKCEocG9sLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1QT0xfRl9NT0YpKVxcbm1tL21lbXBvbGljeS5jLTI5OTUtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zMzI2PXZvaWQgX19pbml0IG51bWFfcG9saWN5X2luaXQodm9pZClcXG4tLVxcbm1tL21lbXBvbGljeS5jLTMzNDMtXFx0XFx0XFx0Lm1vZGUgPSBNUE9MX1BSRUZFUlJFRCxcXG5tbS9tZW1wb2xpY3kuYzozMzQ0OlxcdFxcdFxcdC5mbGFncyA9IE1QT0xfRl9NT0YgfCBNUE9MX0ZfTU9ST04sXFxubW0vbWVtcG9saWN5LmMtMzM0NS1cXHRcXHRcXHQubm9kZXMgPSBub2RlbWFza19vZl9ub2RlKG5pZCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE3OjE5LjU4NzQ2ODI2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NTcxNjgzNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTVBPTCBGbGFnIFNhbml0eSBDaGVjayoqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgdGhvdWdodCBpczogd2h5IGlzIGBNUE9MX0ZfTU9GYCBnZXR0aW5nIHNldD8gSXMgaXQgYmVpbmcgZm9yY2VkIGFsb25nIHdpdGggYE1QT0xfQklORGAgb3IgYE1QT0xfUFJFRkVSUkVEX01BTllgLCBhbmQgcGVyaGFwcyBhbHNvIGBNUE9MX0ZfTlVNQV9CQUxBTkNJTkdgPyBNZW1vcnkgcG9saWN5IGZsYWdzIGFyZSBhbHdheXMgYSBkZWxpY2F0ZSBkYW5jZS4gVGhlbiwgYSBxdWljayBmbGFzaCBvZiBtZW1vcnnigJRhaCwgcmlnaHQsIHRoZSBgc2FuaXRpemVfbXBvbF9mbGFnc2AgZnVuY3Rpb24uIFRoYXQncyB0aGUgbGlrZWx5IGN1bHByaXQuIE5vdyBJIG5lZWQgdG8gZHJpbGwgaW50byB3aGF0IGBzYW5pdGl6ZV9tcG9sX2ZsYWdzYCBkb2VzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYE1QT0xfRl9NT0ZgIGdldHMgYWN0aXZhdGVkLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTEzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTc6MzYuMTU5MTU1NDQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1wb2xpY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzIxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzIxOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNhbml0aXplX21wb2xfZmxhZ3MoaW50ICptb2RlLCB1bnNpZ25lZCBzaG9ydCAqZmxhZ3MpXFxuMTcyMjpcXHR7XFxuMTcyMzpcXHRcXHQqZmxhZ3MgPSAqbW9kZSBcXHUwMDI2IE1QT0xfTU9ERV9GTEFHUztcXG4xNzI0OlxcdFxcdCptb2RlIFxcdTAwMjY9IH5NUE9MX01PREVfRkxBR1M7XFxuMTcyNTpcXHRcXG4xNzI2OlxcdFxcdGlmICgodW5zaWduZWQgaW50KSgqbW9kZSkgXFx1MDAzZT0gIE1QT0xfTUFYKVxcbjE3Mjc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTcyODpcXHRcXHRpZiAoKCpmbGFncyBcXHUwMDI2IE1QT0xfRl9TVEFUSUNfTk9ERVMpIFxcdTAwMjZcXHUwMDI2ICgqZmxhZ3MgXFx1MDAyNiBNUE9MX0ZfUkVMQVRJVkVfTk9ERVMpKVxcbjE3Mjk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTczMDpcXHRcXHRpZiAoKmZsYWdzIFxcdTAwMjYgTVBPTF9GX05VTUFfQkFMQU5DSU5HKSB7XFxuMTczMTpcXHRcXHRcXHRpZiAoKm1vZGUgPT0gTVBPTF9CSU5EIHx8ICptb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXFxuMTczMjpcXHRcXHRcXHRcXHQqZmxhZ3MgfD0gKE1QT0xfRl9NT0YgfCBNUE9MX0ZfTU9ST04pO1xcbjE3MzM6XFx0XFx0XFx0ZWxzZVxcbjE3MzQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTczNTpcXHRcXHR9XFxuMTczNjpcXHRcXHRyZXR1cm4gMDtcXG4xNzM3OlxcdH1cXG4xNzM4OlxcdFxcbjE3Mzk6XFx0c3RhdGljIGxvbmcga2VybmVsX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbjE3NDA6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgbW9kZSwgY29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKm5tYXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNzozNi4xNTkzNjI0NzJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1OTcxMTAwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVU1BIEJhbGFuY2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWJvdXQgTlVNQSBiYWxhbmNpbmcsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBgTVBPTF9GX05VTUFfQkFMQU5DSU5HYCBmbGFnIHNldHMgdGhlIGBNUE9MX0ZfTU9GYCBmbGFnLCB3aGljaCBpcyBhbHNvIHNldCBmb3IgYHByZWZlcnJlZF9ub2RlX3BvbGljeWAgZHVyaW5nIGBudW1hX3BvbGljeV9pbml0YC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBoZXJlIGlzIGluIGB2bWFfcG9saWN5X21vZmAuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB3aGVuIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3lgIHJldHVybnMgTlVMTCwgaXQgY29ycmVjdGx5IGZhbGxzIGJhY2sgdG8gdGhlIHRhc2sncyBwb2xpY3kuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyB0aGUgbWFpbiBtb2RpZmljYXRpb24uXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYHZtYV9wb2xpY3lfbW9mYCBzaW5jZSBpdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuICBUaGVuIEkgcmVhbGl6ZWQgdGhhdCBgdm1hX3BvbGljeV9tb2ZgIGdldHMgY2FsbGVkIGZyb20gYHRhc2tfbnVtYV93b3JrYCwgd2hpY2ggaXMgZXhlY3V0ZWQgYXN5bmNocm9ub3VzbHkgdmlhIGB0YXNrX3dvcmtgLiBIbW0sIGNvdWxkIEkgZnV6eiBgdm1hX3BvbGljeV9tb2ZgIGRpcmVjdGx5PyBJdCdzIGNhbGxlZCB3aGVuIGB0YXNrX251bWFfd29ya2AgcnVucywgdHJpZ2dlcmVkIGJ5IGB0YXNrX3RpY2tfbnVtYWAuICBQZXJoYXBzIGB0YXNrX251bWFfd29ya2AgaXRzZWxmIHNob3VsZCBiZSBhIGZvY3VzIHN5bWJvbCBhcyB3ZWxsLiBBbHRob3VnaCwgd2hpbGUgaXQncyBhIHNtYWxsZXIgZnVuY3Rpb24sIGB2bWFfcG9saWN5X21vZmAgaXMgdGhlIG9uZSBtb2RpZmllZC5cblxuSSdtIGxlYW5pbmcgdG93YXJkcyBhZGRpbmcgYm90aCBgdm1hX3BvbGljeV9tb2ZgIGFuZCBgdGFza19udW1hX3dvcmtgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCwgdGhvdWdoIGB0YXNrX251bWFfd29ya2AgaXMgYSBsYXJnZXIgZnVuY3Rpb24sIHNvIG1heWJlIGp1c3QgYHZtYV9wb2xpY3lfbW9mYCBpcyBzdWZmaWNpZW50LlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGB2bWFfcG9saWN5X21vZmAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiAgUmlnaHQsIGlmIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgIGlzIGVuYWJsZWQsIGB0YXNrX3RpY2tfbnVtYWAgc2NoZWR1bGVzIGB0YXNrX251bWFfd29ya2AsIHdoaWNoIGl0ZXJhdGVzIG92ZXIgVk1BcyBhbmQgdGhlbiBjYWxscyBgdm1hX3BvbGljeV9tb2ZgLiAgU28sIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZSBwYXRjaCBzZWVtcyB0byBleGNsdXNpdmVseSBtb2RpZnkgYHZtYV9wb2xpY3lfbW9mYC5cblxuYGBgY1xuYm9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbntcblx0c3RydWN0IG1lbXBvbGljeSAqcG9sO1xuXHRwZ29mZl90IGlseDtcblx0Ym9vbCBtb2Y7XG5cblx0cG9sID0gX19nZXRfdm1hX3BvbGljeSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgXHUwMDI2aWx4KTtcblx0aWYgKCFwb2wpXG5cdFx0cG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuXHRtb2YgPSBwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0Y7XG5cdG1wb2xfY29uZF9wdXQocG9sKTtcblx0cmV0dXJuIG1vZjtcbn1cbmBgYFxuXG5Pa2F5LCB0aGUgbW9yZSBJIGxvb2sgYXQgdGhpcyBjb2RlLCB0aGUgY2xlYXJlciBpdCBiZWNvbWVzLiBJZiBgX19nZXRfdm1hX3BvbGljeWAgcmV0dXJucyBhIHBvbGljeSBmcm9tIGB2bWEtXHUwMDNldm1fcG9saWN5YCwgYW5kIGl0J3Mgbm90IE5VTEwsIGl0IGRvZXNuJ3QgaGF2ZSBgTVBPTF9GX1NIQVJFRGAgc2V0LCBzbyBgbXBvbF9jb25kX3B1dGAgZG9lcyBub3RoaW5nLiBJZiBgX19nZXRfdm1hX3BvbGljeWAgcmV0dXJucyBhIHBvbGljeSBmcm9tIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3lgLCBpdCBtaWdodCBoYXZlIGBNUE9MX0ZfU0hBUkVEYCBzZXQsIHNvIGBtcG9sX2NvbmRfcHV0YCB3aWxsIGRyb3AgdGhlIHJlZmVyZW5jZS4gSWYgYF9fZ2V0X3ZtYV9wb2xpY3lgIHJldHVybnMgTlVMTCwgaXQgY29ycmVjdGx5IGZhbGxzIGJhY2sgdG8gYGdldF90YXNrX3BvbGljeShjdXJyZW50KWAuIGBnZXRfdGFza19wb2xpY3koY3VycmVudClgIHJldHVybnMgZWl0aGVyIGBjdXJyZW50LVx1MDAzZW1lbXBvbGljeWAgb3IgYGRlZmF1bHRfcG9saWN5YCwgbmVpdGhlciBvZiB3aGljaCBoYXZlIGBNUE9MX0ZfU0hBUkVEYCBzZXQsIHNvIGFnYWluLCBgbXBvbF9jb25kX3B1dGAgZG9lcyBub3RoaW5nLiBUaGlzIGlzIGFsbCBjb3JyZWN0LlxuSSdtIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTIyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTc6NDkuNzU2NDc4ODk4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE5MzI0Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF90YXNrX3BvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0zMzg9RVhQT1JUX1NZTUJPTF9HUEwobmVhcmVzdF9ub2RlX25vZGVtYXNrKTtcXG5tbS9tZW1wb2xpY3kuYy0zMzktXFxubW0vbWVtcG9saWN5LmM6MzQwOnN0cnVjdCBtZW1wb2xpY3kgKmdldF90YXNrX3BvbGljeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxubW0vbWVtcG9saWN5LmMtMzQxLXtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM1Ny19XFxubW0vbWVtcG9saWN5LmM6MzU4OkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoZ2V0X3Rhc2tfcG9saWN5LCBcXFwia3ZtXFxcIik7XFxubW0vbWVtcG9saWN5LmMtMzU5LVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTQ4Nj1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE1NjgtXFx0XFx0aWYgKCFuZXcpIHtcXG5tbS9tZW1wb2xpY3kuYzoxNTY5OlxcdFxcdFxcdG5ldyA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG5tbS9tZW1wb2xpY3kuYy0xNTcwLVxcdFxcdFxcdG1wb2xfZ2V0KG5ldyk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDQxPXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjA0Ny1cXHRpZiAoIXBvbClcXG5tbS9tZW1wb2xpY3kuYzoyMDQ4OlxcdFxcdHBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG5tbS9tZW1wb2xpY3kuYy0yMDQ5LVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFIHx8XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDU3PWJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMDY0LVxcdGlmICghcG9sKVxcbm1tL21lbXBvbGljeS5jOjIwNjU6XFx0XFx0cG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbm1tL21lbXBvbGljeS5jLTIwNjYtXFx0bW9mID0gcG9sLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1QT0xfRl9NT0Y7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNTQxPXN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgb3JkZXIpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNTQ5LVxcdGlmICghaW5faW50ZXJydXB0KCkgXFx1MDAyNlxcdTAwMjYgIShnZnAgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXFxubW0vbWVtcG9saWN5LmM6MjU1MDpcXHRcXHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XFxubW0vbWVtcG9saWN5LmMtMjU1MS1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3NjU9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc3Mi1cXHRpZiAoIWluX2ludGVycnVwdCgpIFxcdTAwMjZcXHUwMDI2ICEoZ2ZwIFxcdTAwMjYgX19HRlBfVEhJU05PREUpKVxcbm1tL21lbXBvbGljeS5jOjI3NzM6XFx0XFx0cG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbm1tL21lbXBvbGljeS5jLTI3NzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE3OjUxLjQ3NTgxOTQ4M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU5Njk2ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlVNQSBQb2xpY3kgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYGdldF90YXNrX3BvbGljeWAgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIGp1c3QgaGFuZGluZyBiYWNrIHRoZSB0YXNrIHBvbGljeSwgbm90aGluZyBjb21wbGljYXRlZCB0aGVyZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgYnVnIHdoZXJlIGB2bWFfcG9saWN5X21vZmAgd2FzIHByZW1hdHVyZWx5IHJldHVybmluZyBgZmFsc2VgLiBJdCB3YXMgYmFpbGluZyBvdXQgaWYgYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgcmV0dXJuZWQgTlVMTCwgaW5zdGVhZCBvZiBjb3JyZWN0bHkgZmFsbGluZyBiYWNrIHRvIHRoZSB0YXNrIHBvbGljeSwgd2hpY2ggaXMgbm90IHRoZSBkZXNpcmVkIGJlaGF2aW9yLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZSBhY3R1YWxseSFcblxuTm93LCBsZXQncyBzZWUsIHdoYXQgY29uZmlncyBhcmUgYXQgcGxheSBoZXJlPyBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYE5VTUFgIGFuZCBgTlVNQV9CQUxBTkNJTkdgLiBCdXQgd2FpdCwgZG9lc24ndCBgTlVNQV9CQUxBTkNJTkdgIGRlcGVuZCBvbiBgTlVNQWA/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGRlcGVuZGVuY3kgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQgbWUgZ28gcG9rZSBhcm91bmQgYGluaXQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0LiBHb3R0YSBkb3QgbXkgaSdzIGFuZCBjcm9zcyBteSB0J3Mgd2l0aCB0aGVzZSBOVU1BIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNzo1NS45MzU1MjEyNTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDA5LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDA5OlxcdFxcbjEwMTA6XFx0Y29uZmlnIE5VTUFfQkFMQU5DSU5HXFxuMTAxMTpcXHRcXHRib29sIFxcXCJNZW1vcnkgcGxhY2VtZW50IGF3YXJlIE5VTUEgc2NoZWR1bGVyXFxcIlxcbjEwMTI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HXFxuMTAxMzpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX1dBTlRfTlVNQV9WQVJJQUJMRV9MT0NBTElUWVxcbjEwMTQ6XFx0XFx0ZGVwZW5kcyBvbiBTTVAgXFx1MDAyNlxcdTAwMjYgTlVNQV9NSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4xMDE1OlxcdFxcdGhlbHBcXG4xMDE2OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBhdXRvbWF0aWMgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnQuXFxuMTAxNzpcXHRcXHQgIFRoZSBtZWNoYW5pc20gaXMgcXVpdGUgcHJpbWl0aXZlIGFuZCBpcyBiYXNlZCBvbiBtaWdyYXRpbmcgbWVtb3J5IHdoZW5cXG4xMDE4OlxcdFxcdCAgaXQgaGFzIHJlZmVyZW5jZXMgdG8gdGhlIG5vZGUgdGhlIHRhc2sgaXMgcnVubmluZyBvbi5cXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0ICBUaGlzIHN5c3RlbSB3aWxsIGJlIGluYWN0aXZlIG9uIFVNQSBzeXN0ZW1zLlxcbjEwMjE6XFx0XFxuMTAyMjpcXHRjb25maWcgU0NIRURfQ0FDSEVcXG4xMDIzOlxcdFxcdGJvb2wgXFxcIkNhY2hlIGF3YXJlIGxvYWQgYmFsYW5jZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTc6NTUuOTM1NzYwNDg2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjcwMTkzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIE5VTUEgQmFsYW5jaW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBOVU1BIGJhbGFuY2luZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYE5VTUFfQkFMQU5DSU5HYCBkZXBlbmRzIG9uIHF1aXRlIGEgZmV3IHRoaW5nczogYEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdgLCBgU01QYCwgYE5VTUFfTUlHUkFUSU9OYCwgYW5kIGltcG9ydGFudGx5LCBpdCdzICpub3QqIGNvbXBhdGlibGUgd2l0aCBgUFJFRU1QVF9SVGAuIFJpZ2h0LCBzbyB0aGlzIGZlYXR1cmUgaXMgb25seSByZWxldmFudCBmb3Igc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcyBhbmQgd29ya2xvYWRzLlxuXG5UaGUgaW1tZWRpYXRlIGFjdGlvbiBJIG5lZWQgdG8gdGFrZSBpcyB0byBlbnN1cmUgdGhhdCBgTlVNQV9CQUxBTkNJTkdgIGdldHMgYWRkZWQgdG8gYEVuYWJsZUNvbmZpZ3NgLCBzaW5jZSBJJ20gdHJ5aW5nIHRvLCB3ZWxsLCBlbmFibGUgaXQuIE5vIG5lZWQgdG8gYWRkIGBOVU1BYCBzZXBhcmF0ZWx5OyBhcyBleHBlY3RlZCwgYE5VTUFfTUlHUkFUSU9OYCBhbHJlYWR5IGltcGxpZXMgdGhhdCB0aGUgc3lzdGVtIGlzIE5VTUEtYXdhcmUsIHNvIGBOVU1BX0JBTEFOQ0lOR2AgaXMgdGhlIHNwZWNpZmljIHRoaW5nIEknbSBhZnRlci5cblxuQWgsIHllcywgYE5VTUFfQkFMQU5DSU5HYCBpcyB0aGUgc3BlY2lmaWMgY29uZmlnIHRoYXQgZW5hYmxlcyBgdGFza19udW1hX3dvcmtgLCB0aGF0J3MgaG93IGl0J3MgbGlua2VkIHRvIHRoZSBhY3R1YWwgd29yay4gU28sIHllYWgsIGBOVU1BX0JBTEFOQ0lOR2AgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgY29uZmlnIHRvIGZvY3VzIG9uLlxuXG5CdXQsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgaW52b2x2ZWQuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUncyBhIGRlZmF1bHQgZW5hYmxlbWVudCBvcHRpb24uIENvdWxkIGBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURgIGFsc28gYmUgbmVjZXNzYXJ5PyBPdGhlcndpc2UsIEkgbWlnaHQgYmUgc3R1Y2sgd2l0aCBzeXNjdGxzIGp1c3QgdG8gZW5hYmxlIGl0LiBJIHNob3VsZCBnbyBhbmQgY2hlY2sgYE5VTUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRGAgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM2OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE4OjAwLjk2Mjc4MzM5NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzIsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzI6XFx0XFxuMTAzMzpcXHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuMTAzNDpcXHRcXHRib29sIFxcXCJBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFxcXCJcXG4xMDM1OlxcdFxcdGRlZmF1bHQgeVxcbjEwMzY6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BX0JBTEFOQ0lOR1xcbjEwMzc6XFx0XFx0aGVscFxcbjEwMzg6XFx0XFx0ICBJZiBzZXQsIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyB3aWxsIGJlIGVuYWJsZWQgaWYgcnVubmluZyBvbiBhIE5VTUFcXG4xMDM5OlxcdFxcdCAgbWFjaGluZS5cXG4xMDQwOlxcdFxcbjEwNDE6XFx0Y29uZmlnIFNMQUJfT0JKX0VYVFxcbjEwNDI6XFx0XFx0Ym9vbFxcbjEwNDM6XFx0XFxuMTA0NDpcXHRtZW51Y29uZmlnIENHUk9VUFNcXG4xMDQ1OlxcdFxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG4xMDQ2OlxcdFxcdHNlbGVjdCBLRVJORlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTg6MDAuOTYyOTQzMDI0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2Mjk1ODI4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTlVNQSBCYWxhbmNpbmcqKlxuXG5Pa2F5LCBzbyB0aGUgZGVmYXVsdCBmb3IgYE5VTUFfQkFMQU5DSU5HYCBpcyBgeWAsIHNvIGp1c3QgZW5hYmxpbmcgdGhhdCBjb25maWcgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIExldCdzIGRpZyBpbiBhIGJpdCBtb3JlLiBJJ3ZlIHRyYWNrZWQgZG93biB0aGF0IGB2bWFfcG9saWN5X21vZmAgaXMgb25seSBjYWxsZWQgd2l0aGluIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4gVGhhdCBmdW5jdGlvbiBzZWVtcyBsaWtlIGEgZ29vZCBcImZvY3VzIHN5bWJvbFwiIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guXG5cbklzIGB2bWFfcG9saWN5X21vZmAgYSBwYXJ0aWN1bGFybHkgaG90IHBhdGg/IEl0IGlzIGNhbGxlZCBkdXJpbmcgYHRhc2tfbnVtYV93b3JrYCwgd2hpY2ggbWVhbnMgaXQncyBwYXJ0IG9mIHRoZSBwZXJpb2RpYyBWTUEgc2Nhbm5pbmcgcHJvY2Vzcy4gSXQgaXNuJ3QgYXMgY3JpdGljYWwgYXMgdGhlIGBzY2hlZHVsZWAgb3IgYHBhZ2VfZmF1bHRgIGZ1bmN0aW9ucywgYnV0IGl0ICppcyogY2FsbGVkIGZvciBldmVyeSBWTUEgZHVyaW5nIGVhY2ggc2NhbiwgYW5kIGl0J3MgKnByZWNpc2VseSogdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBtb2RpZmllZC4gVGhlcmVmb3JlLCBpdCBpcyBhIGdyZWF0IGNob2ljZS4gSSdsbCBhbHNvIGluY2x1ZGUgYHRhc2tfbnVtYV93b3JrYCB0byBpbmNyZWFzZSB0aGUgY2hhbmNlIG9mIHRyaWdnZXJpbmcgdGhlIE5VTUEgYmFsYW5jaW5nIGxvZ2ljLlxuXG5TbywgaGVyZSdzIHRoZSBwbGFuLlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IFRydWUuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBJJ2xsIHRhcmdldCBib3RoIGB2bWFfcG9saWN5X21vZmAgYW5kIGB0YXNrX251bWFfd29ya2AuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBKdXN0IGVuYWJsZSBgTlVNQV9CQUxBTkNJTkdgIOKAkyB0aGUgZGVmYXVsdCBzaG91bGQgd29yay5cbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIGFsdGVycyBgdm1hX3BvbGljeV9tb2ZgJ3MgYmVoYXZpb3IsIHNwZWNpZmljYWxseSBoYW5kbGluZyBjYXNlcyB3aGVyZSBhIFZNQSdzIGBnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMIGJ5IGZhbGxpbmcgYmFjayB0byB0aGUgdGFzaydzIG1lbW9yeSBwb2xpY3kuIFRoaXMgaW1wYWN0cyBOVU1BIGJhbGFuY2luZy4gVGhlIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBgQ09ORklHX05VTUFfQkFMQU5DSU5HYC5cblxuSSBhbHNvIHdhbnRlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYF9fZ2V0X3ZtYV9wb2xpY3lgIHdvcmtzIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGlzIHJpZ2h0LiBJJ20gbG9va2luZyBhdCB0aGUgY29kZSwgYW5kIGl0IGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmc6XG5cbmBgYGNcbnN0cnVjdCBtZW1wb2xpY3kgKl9fZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdvZmZfdCAqaWx4KVxue1xuXHQqaWx4ID0gMDtcblx0cmV0dXJuICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kpID9cblx0XHR2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kodm1hLCBhZGRyLCBpbHgpIDogdm1hLVx1MDAzZXZtX3BvbGljeTtcbn1cbmBgYFxuXG5JZiB0aGUgYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgZXhpc3RzLCBpdCBjYWxscyBpdC4gT3RoZXJ3aXNlLCBpdCB1c2VzIGB2bWEtXHUwMDNldm1fcG9saWN5YC4gIElmIHRoZSBgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMLCB0aGVuIGBfX2dldF92bWFfcG9saWN5YCByZXR1cm5zIE5VTEwsIHdoaWNoIGNhdXNlcyBgdm1hX3BvbGljeV9tb2ZgIHRvIGZhbGxiYWNrIHRvIHVzaW5nIGBnZXRfdGFza19wb2xpY3koY3VycmVudClgLiBUaGlzIGlzIHByZWNpc2VseSB0aGUgY2hhbmdlIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLiBJbiB0aGUgb2xkIGNvZGUsIGEgTlVMTCByZXR1cm4gZnJvbSBgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5YCByZXN1bHRlZCBpbiBgdm1hX3BvbGljeV9tb2ZgIHJldHVybmluZyBgZmFsc2VgLiBJdCAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkFscmlnaHQsIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMzAsIk91dHB1dFRva2VucyI6MTIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTg6MTAuNTkyNTI5MjgxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzYwMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BX0JBTEFOQ0lOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYV9wb2xpY3lfbW9mXCIsXG4gICAgXCJ0YXNrX251bWFfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB2bWFfcG9saWN5X21vZmAgdG8gY29ycmVjdGx5IGZhbGwgYmFjayB0byB0aGUgdGFzaydzIG1lbW9yeSBwb2xpY3kgd2hlbiBhIFZNQSdzIGBnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIE5VTUEgYmFsYW5jaW5nIGJlaGF2aW9yLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFfQkFMQU5DSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hX3BvbGljeV9tb2ZcIixcbiAgICBcInRhc2tfbnVtYV93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHZtYV9wb2xpY3lfbW9mYCB0byBjb3JyZWN0bHkgZmFsbCBiYWNrIHRvIHRoZSB0YXNrJ3MgbWVtb3J5IHBvbGljeSB3aGVuIGEgVk1BJ3MgYGdldF9wb2xpY3lgIG9wZXJhdGlvbiByZXR1cm5zIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgTlVNQSBiYWxhbmNpbmcgYmVoYXZpb3IuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgIHRvIGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xm7k[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 17:02:45 +0000 UTC FinishedAt: 2026-06-29 17:18:12 +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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA_BALANCING" ], "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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA_BALANCING" ], "series_id": "e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vma_policy_mof", "task_numa_work" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUFfQkFMQU5DSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hX3BvbGljeV9tb2YmIzM0OywKICAgICYjMzQ7dGFza19udW1hX3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHZtYV9wb2xpY3lfbW9mYCB0byBjb3JyZWN0bHkgZmFsbCBiYWNrIHRvIHRoZSB0YXNrJiMzOTtzIG1lbW9yeSBwb2xpY3kgd2hlbiBhIFZNQSYjMzk7cyBgZ2V0X3BvbGljeWAgb3BlcmF0aW9uIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBOVU1BIGJhbGFuY2luZyBiZWhhdmlvci4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AgdG8gYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDVlYzdlODJkM2ZjMzVhNGFmMDk0OWYxOGMyOTJlOWRhYzI3OGY5OTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNzoxMzoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jXG5pbmRleCAzNjY5OWZhYmQzYzIyMy4uYmJhNjU4OThhZWUxNzUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9saWN5LmNcbkBAIC0yMDU3LDI0ICYjNDM7MjA1NywxNSBAQCBzdHJ1Y3QgbWVtcG9saWN5ICpnZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBib29sIHZtYV9wb2xpY3lfbW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIHtcbiBcdHN0cnVjdCBtZW1wb2xpY3kgKnBvbDtcbiYjNDM7XHRwZ29mZl90IGlseDtcbiYjNDM7XHRib29sIG1vZjtcbiBcbi1cdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kpIHtcbi1cdFx0Ym9vbCByZXQgPSBmYWxzZTtcbi1cdFx0cGdvZmZfdCBpbHg7XHRcdC8qIGlnbm9yZWQgaGVyZSAqL1xuLVxuLVx0XHRwb2wgPSB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kodm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIFx1MDAyNmlseCk7XG4tXHRcdGlmIChwb2wgXHUwMDI2XHUwMDI2IChwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0YpKVxuLVx0XHRcdHJldCA9IHRydWU7XG4tXHRcdG1wb2xfY29uZF9wdXQocG9sKTtcbi1cbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdHBvbCA9IHZtYS1cdTAwM2V2bV9wb2xpY3k7XG4mIzQzO1x0cG9sID0gX19nZXRfdm1hX3BvbGljeSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgXHUwMDI2aWx4KTtcbiBcdGlmICghcG9sKVxuIFx0XHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG4tXG4tXHRyZXR1cm4gcG9sLVx1MDAzZWZsYWdzIFx1MDAyNiBNUE9MX0ZfTU9GO1xuJiM0MztcdG1vZiA9IHBvbC1cdTAwM2VmbGFncyBcdTAwMjYgTVBPTF9GX01PRjtcbiYjNDM7XHRtcG9sX2NvbmRfcHV0KHBvbCk7XG4mIzQzO1x0cmV0dXJuIG1vZjtcbiB9XG4gXG4gYm9vbCBhcHBseV9wb2xpY3lfem9uZShzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3ksIGVudW0gem9uZV90eXBlIHpvbmUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQV9CQUxBTkNJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bWFfcG9saWN5X21vZiYjMzQ7LAogICAgJiMzNDt0YXNrX251bWFfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdm1hX3BvbGljeV9tb2ZgIHRvIGNvcnJlY3RseSBmYWxsIGJhY2sgdG8gdGhlIHRhc2smIzM5O3MgbWVtb3J5IHBvbGljeSB3aGVuIGEgVk1BJiMzOTtzIGBnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIE5VTUEgYmFsYW5jaW5nIGJlaGF2aW9yLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCB0byBiZSBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1ZWM3ZTgyZDNmYzM1YTRhZjA5NDlmMThjMjkyZTlkYWMyNzhmOTk0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjkgMTc6MTM6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDM2Njk5ZmFiZDNjMjIzLi5iYmE2NTg5OGFlZTE3NSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWVtcG9saWN5LmMKQEAgLTIwNTcsMjQgJiM0MzsyMDU3LDE1IEBAIHN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogYm9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7CiYjNDM7CXBnb2ZmX3QgaWx4OwomIzQzOwlib29sIG1vZjsKIAotCWlmICh2bWEtJmd0O3ZtX29wcyAmYW1wOyZhbXA7IHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5KSB7Ci0JCWJvb2wgcmV0ID0gZmFsc2U7Ci0JCXBnb2ZmX3QgaWx4OwkJLyogaWdub3JlZCBoZXJlICovCi0KLQkJcG9sID0gdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3kodm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCAmYW1wO2lseCk7Ci0JCWlmIChwb2wgJmFtcDsmYW1wOyAocG9sLSZndDtmbGFncyAmYW1wOyBNUE9MX0ZfTU9GKSkKLQkJCXJldCA9IHRydWU7Ci0JCW1wb2xfY29uZF9wdXQocG9sKTsKLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCXBvbCA9IHZtYS0mZ3Q7dm1fcG9saWN5OwomIzQzOwlwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgdm1hLSZndDt2bV9zdGFydCwgJmFtcDtpbHgpOwogCWlmICghcG9sKQogCQlwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Ci0KLQlyZXR1cm4gcG9sLSZndDtmbGFncyAmYW1wOyBNUE9MX0ZfTU9GOwomIzQzOwltb2YgPSBwb2wtJmd0O2ZsYWdzICZhbXA7IE1QT0xfRl9NT0Y7CiYjNDM7CW1wb2xfY29uZF9wdXQocG9sKTsKJiM0MzsJcmV0dXJuIG1vZjsKIH0KIAogYm9vbCBhcHBseV9wb2xpY3lfem9uZShzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3ksIGVudW0gem9uZV90eXBlIHpvbmUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1wb2xpY3kgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9tZW1wb2xpY3kuY2AsIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyB0byB0aGUgYHZtYV9wb2xpY3lfbW9mYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgbW9kaWZpY2F0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIHNpbXBsaWZpZWQgYHZtYV9wb2xpY3lfbW9mYCBieSBpbnRyb2R1Y2luZyBgX19nZXRfdm1hX3BvbGljeWAuIFRoZSBvbGQgY29kZSBoYWQgdGhhdCBjb25kaXRpb25hbCBvZiB1c2luZyBgdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3lgIG9yIGZhbGxpbmcgYmFjayB0byBgdm1hLSZndDt2bV9wb2xpY3lgLCBidXQgdGhpcyBwYXRjaCByZXBsYWNlZCBpdCB3aXRoIGEgZGlyZWN0IGNhbGwgdG8gYF9fZ2V0X3ZtYV9wb2xpY3lgLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGlzIGFuIGltcHJvdmVtZW50LiBUaGUgY29kZSBhcHBlYXJzIHRvIGJlIGNhbGxpbmcgYSBuZXcgaGVscGVyIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IGBfX2dldF92bWFfcG9saWN5YCBhYnN0cmFjdHMgYXdheSB0aGUgbG9naWMgb2YgaGFuZGxpbmcgYm90aCB0aGUgYHZtX29wcy0mZ3Q7Z2V0X3BvbGljeWAgYW5kIHRoZSBkaXJlY3QgYHZtX3BvbGljeWAgYWNjZXNzLiBTbywgaXQmIzM5O3MgZG9pbmcgcHJlY2lzZWx5IHdoYXQgdGhlIG9yaWdpbmFsIGNvZGUgZGlkLCBidXQgaW4gYSBjbGVhbmVyIGZhc2hpb24uIFRvIGJlIHN1cmUsIEkmIzM5O2xsIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fZ2V0X3ZtYV9wb2xpY3lgIGl0c2VsZiwgYWxzbyBpbiBgbW0vbWVtcG9saWN5LmNgLCB0byB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgYmVoYXZpb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19nZXRfdm1hX3BvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTExNDc9c3RhdGljIGxvbmcgZG9fZ2V0X21lbXBvbGljeShpbnQgKnBvbGljeSwgbm9kZW1hc2tfdCAqbm1hc2ssXG4tLVxubW0vbWVtcG9saWN5LmMtMTE4MS1cdFx0fVxubW0vbWVtcG9saWN5LmM6MTE4MjpcdFx0cG9sID0gX19nZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIFx1MDAyNmlseCk7XG5tbS9tZW1wb2xpY3kuYy0xMTgzLVx0fSBlbHNlIGlmIChhZGRyKVxuLS1cbm1tL21lbXBvbGljeS5jPTE5OTA9Ym9vbCB2bWFfbWlncmF0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDE3LVxubW0vbWVtcG9saWN5LmM6MjAxODpzdHJ1Y3QgbWVtcG9saWN5ICpfX2dldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vbWVtcG9saWN5LmMtMjAxOS1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdvZmZfdCAqaWx4KVxuLS1cbm1tL21lbXBvbGljeS5jPTIwNDE9c3RydWN0IG1lbXBvbGljeSAqZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWVtcG9saWN5LmMtMjA0NS1cbm1tL21lbXBvbGljeS5jOjIwNDY6XHRwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgYWRkciwgaWx4KTtcbm1tL21lbXBvbGljeS5jLTIwNDctXHRpZiAoIXBvbClcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMDU3PWJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vbWVtcG9saWN5LmMtMjA2Mi1cbm1tL21lbXBvbGljeS5jOjIwNjM6XHRwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCBcdTAwMjZpbHgpO1xubW0vbWVtcG9saWN5LmMtMjA2NC1cdGlmICghcG9sKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDkKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBfX2dldF92bWFfcG9saWN5YCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBgX19nZXRfdm1hX3BvbGljeWAgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgbWVtb3J5IHBvbGljaWVzIHdpdGhpbiB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBjb250ZXh0LiBJIHdhbnQgdG8gbG9vayBhdCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFZNQSBmbGFncywgdGhlIE5VTUEgcG9saWNpZXMsIGFuZCBwb3RlbnRpYWxseSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUCkgb3Igb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjcnVjaWFsIGRlY2lzaW9uIHBvaW50cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlbiBJJiMzOTtsbCBldmFsdWF0ZSB0aGUgY29kZSBmb3IgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgb3Igc3VidGxlIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgZWRnZSBjYXNlcyBhcm91bmQgcG9saWN5IGluaGVyaXRhbmNlLCBtaWdyYXRpb24sIGFuZCB0aGUgaW1wYWN0IG9mIHBvbGljeSBjaGFuZ2VzIGR1cmluZyBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIHNvbWUgaW50ZXJlc3RpbmcgbnVhbmNlcyBpbiB0aGlzIHBhcnQgb2YgdGhlIGtlcm5lbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAxOCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDE4Olx0c3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbjIwMTk6XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdvZmZfdCAqaWx4KVxuMjAyMDpcdHtcbjIwMjE6XHRcdCppbHggPSAwO1xuMjAyMjpcdFx0cmV0dXJuICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kpID9cbjIwMjM6XHRcdFx0dm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5KHZtYSwgYWRkciwgaWx4KSA6IHZtYS1cdTAwM2V2bV9wb2xpY3k7XG4yMDI0Olx0fVxuMjAyNTpcdFxuMjAyNjpcdC8qXG4yMDI3Olx0ICogZ2V0X3ZtYV9wb2xpY3koQHZtYSwgQGFkZHIsIEBvcmRlciwgQGlseClcbjIwMjg6XHQgKiBAdm1hOiB2aXJ0dWFsIG1lbW9yeSBhcmVhIHdob3NlIHBvbGljeSBpcyBzb3VnaHRcbjIwMjk6XHQgKiBAYWRkcjogYWRkcmVzcyBpbiBAdm1hIGZvciBzaGFyZWQgcG9saWN5IGxvb2t1cFxuMjAzMDpcdCAqIEBvcmRlcjogMCwgb3IgYXBwcm9wcmlhdGUgaHVnZV9wYWdlX29yZGVyIGZvciBpbnRlcmxlYXZpbmdcbjIwMzE6XHQgKiBAaWx4OiBpbnRlcmxlYXZlIGluZGV4IChvdXRwdXQpLCBmb3IgdXNlIG9ubHkgd2hlbiBNUE9MX0lOVEVSTEVBVkUgb3JcbjIwMzI6XHQgKiAgICAgICBNUE9MX1dFSUdIVEVEX0lOVEVSTEVBVkVcbjIwMzM6XHQgKlxuMjAzNDpcdCAqIFJldHVybnMgZWZmZWN0aXZlIHBvbGljeSBmb3IgYSBWTUEgYXQgc3BlY2lmaWVkIGFkZHJlc3MuXG4yMDM1Olx0ICogRmFsbHMgYmFjayB0byBjdXJyZW50LVx1MDAzZW1lbXBvbGljeSBvciBzeXN0ZW0gZGVmYXVsdCBwb2xpY3ksIGFzIG5lY2Vzc2FyeS5cbjIwMzY6XHQgKiBTaGFyZWQgcG9saWNpZXMgW3Rob3NlIG1hcmtlZCBhcyBNUE9MX0ZfU0hBUkVEXSByZXF1aXJlIGFuIGV4dHJhIHJlZmVyZW5jZVxuMjAzNzpcdCAqIGNvdW50LS1hZGRlZCBieSB0aGUgZ2V0X3BvbGljeSgpIHZtX29wLCBhcyBhcHByb3ByaWF0ZS0tdG8gcHJvdGVjdCBhZ2FpbnN0XG4yMDM4Olx0ICogZnJlZWluZyBieSBhbm90aGVyIHRhc2suICBJdCBpcyB0aGUgY2FsbGVyJiMzOTtzIHJlc3BvbnNpYmlsaXR5IHRvIGZyZWUgdGhlXG4yMDM5Olx0ICogZXh0cmEgcmVmZXJlbmNlIGZvciBzaGFyZWQgcG9saWNpZXMuXG4yMDQwOlx0ICovXG4yMDQxOlx0c3RydWN0IG1lbXBvbGljeSAqZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4yMDQyOlx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgb3JkZXIsIHBnb2ZmX3QgKmlseClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjk5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT3B0aW1pemF0aW9uIG9mIGB2bWFfcG9saWN5X21vZmAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIG1ha2luZyBhIHNlZW1pbmdseSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIGB2bWFfcG9saWN5X21vZmAuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyByZXBsYWNpbmcgc29tZSBkdXBsaWNhdGVkIGxvZ2ljIHdpdGggYSBjYWxsIHRvIGBfX2dldF92bWFfcG9saWN5YC4gVGhlIG9sZCBjb2RlIHdhcyBoYW5kbGluZyB0aGUgcmV0cmlldmFsIG9mIHRoZSBtZW1vcnkgcG9saWN5IGluIGEgbW9yZSB2ZXJib3NlIHdheS4gSXQgY2hlY2tlZCBpZiBgdm1hLSZndDt2bV9vcHNgIGFuZCBpdHMgYGdldF9wb2xpY3lgIGZ1bmN0aW9uIHdlcmUgdmFsaWQuIElmIHRoZXkgd2VyZSwgaXQgY2FsbGVkIHRoYXQgZnVuY3Rpb24gYW5kIGNoZWNrZWQgdGhlIGZsYWdzIGZvciB0aGUgYE1QT0xfRl9NT0ZgIGJpdC4gT3RoZXJ3aXNlLCBpdCBkZWZhdWx0ZWQgdG8gdGhlIGB2bWEtJmd0O3ZtX3BvbGljeWAgb3IgdGhlIHRhc2sgcG9saWN5LiBUaGUgbmV3IGNvZGUgaXMgY2xlYW5lcjogaXQgdXNlcyBgX19nZXRfdm1hX3BvbGljeWAgdG8gYWJzdHJhY3QgdGhhdCBhd2F5LgoKTm93LCBteSBpbml0aWFsIHRob3VnaHQgaXM6IHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGltcHJvdmVtZW50LCBidXQgdGhlcmUmIzM5O3MgYWx3YXlzIGEgaGlkZGVuIGNvcm5lciBjYXNlLiBMZXQgbWUgdGhpbmsuICpBaGEhKiBgX19nZXRfdm1hX3BvbGljeWAgbWlnaHQgcmV0dXJuIGB2bWEtJmd0O3ZtX3BvbGljeWAgaWYgYHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5YCBpcyBOVUxMLiBUaGlzIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLCBiZWNhdXNlIG5vdyBgbXBvbF9jb25kX3B1dChwb2wpYCB3aWxsIGJlIGNhbGxlZCBvbiBgdm1hLSZndDt2bV9wb2xpY3lgLiBJIHdvbmRlciwgZG9lcyBgbXBvbF9jb25kX3B1dGAgYWN0dWFsbHkgKmRvKiBhbnl0aGluZyB3aGVuIGFwcGxpZWQgdG8gYHZtYS0mZ3Q7dm1fcG9saWN5YD8gSXQgZmVlbHMgYSBsaXR0bGUgcmVkdW5kYW50IHRvIG1lLiBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYG1wb2xfY29uZF9wdXRgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgb3IgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWVzIHdpdGggdGhpcyBzaW1wbGlmaWNhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBsb29rIGludG8gaXQgcmlnaHQgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21wb2xfY29uZF9wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYz0xMTQ3PXN0YXRpYyBsb25nIGRvX2dldF9tZW1wb2xpY3koaW50ICpwb2xpY3ksIG5vZGVtYXNrX3QgKm5tYXNrLFxuLS1cbm1tL21lbXBvbGljeS5jLTEyMzktIG91dDpcbm1tL21lbXBvbGljeS5jOjEyNDA6XHRtcG9sX2NvbmRfcHV0KHBvbCk7XG5tbS9tZW1wb2xpY3kuYy0xMjQxLVx0aWYgKHZtYSlcbi0tXG5tbS9tZW1wb2xpY3kuYz0xNDg2PXN0YXRpYyBsb25nIGRvX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxuLS1cbm1tL21lbXBvbGljeS5jLTE2MDItXHRcdFx0XHQvKiBXZSBhbHJlYWR5IGtub3cgdGhlIHBvbCwgYnV0IG5vdCB0aGUgaWx4ICovXG5tbS9tZW1wb2xpY3kuYzoxNjAzOlx0XHRcdFx0bXBvbF9jb25kX3B1dChnZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIG9yZGVyLFxubW0vbWVtcG9saWN5LmMtMTYwNC1cdFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2bW1wb2wuaWx4KSk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjA1Nz1ib29sIHZtYV9wb2xpY3lfbW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21lbXBvbGljeS5jLTIwNjYtXHRtb2YgPSBwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0Y7XG5tbS9tZW1wb2xpY3kuYzoyMDY3Olx0bXBvbF9jb25kX3B1dChwb2wpO1xubW0vbWVtcG9saWN5LmMtMjA2OC1cdHJldHVybiBtb2Y7XG4tLVxubW0vbWVtcG9saWN5LmM9MjUyND1zdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbXBvbGljeS5jLTI1MzUtXHRmb2xpbyA9IGZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcCwgb3JkZXIsIHBvbCwgaWx4LCBudW1hX25vZGVfaWQoKSk7XG5tbS9tZW1wb2xpY3kuYzoyNTM2Olx0bXBvbF9jb25kX3B1dChwb2wpO1xubW0vbWVtcG9saWN5LmMtMjUzNy1cdHJldHVybiBmb2xpbztcbi0tXG5tbS9tZW1wb2xpY3kuYz0yOTc1PWludCBtcG9sX21pc3BsYWNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9tZW1wb2xpY3kuYy0zMDY2LW91dDpcbm1tL21lbXBvbGljeS5jOjMwNjc6XHRtcG9sX2NvbmRfcHV0KHBvbCk7XG5tbS9tZW1wb2xpY3kuYy0zMDY4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwMzAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgdGhlIERlZmluaXRpb24gb2YgYG1wb2xfY29uZF9wdXRgKioKClJpZ2h0LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBtcG9sX2NvbmRfcHV0YCBmdW5jdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyBhbHdheXMgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoZXJlIGl0JiMzOTtzIGRlZmluZWQuIEtub3dpbmcgdGhlIGRlZmluaXRpb24gaXMgY3J1Y2lhbDsgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UsIHRoZSBkYXRhIGl0IG9wZXJhdGVzIG9uLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gbG9jYXRlIHRoZSBoZWFkZXIgZmlsZSBvciBzb3VyY2UgZmlsZSB3aGVyZSB0aGlzIGlzIGRlY2xhcmVkIG9yIGltcGxlbWVudGVkLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttcG9sX2NvbmRfcHV0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oPTc3PXN0YXRpYyBpbmxpbmUgaW50IG1wb2xfbmVlZHNfY29uZF9yZWYoc3RydWN0IG1lbXBvbGljeSAqcG9sKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtcG9saWN5LmgtODEtXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjgyOnN0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX2NvbmRfcHV0KHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcbmluY2x1ZGUvbGludXgvbWVtcG9saWN5LmgtODMte1xuLS1cbmluY2x1ZGUvbGludXgvbWVtcG9saWN5Lmg9MjAwPXN0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX3B1dChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0yMDMtXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjIwNDpzdGF0aWMgaW5saW5lIHZvaWQgbXBvbF9jb25kX3B1dChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTIwNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzOTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBgbXBvbF9jb25kX3B1dGAgaW4gYGxpbnV4L21lbXBvbGljeS5oYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBsaW51eC9tZW1wb2xpY3kuaGAgaGVhZGVyIGZpbGUgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBgbXBvbF9jb25kX3B1dGAgZnVuY3Rpb24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgcGllY2UgcmVsYXRlZCB0byBtZW1vcnkgcG9saWNpZXMsIHNvIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gSXQmIzM5O3MgbGlrZWx5IGEgY29uZGl0aW9uYWwgZGVjcmVtZW50IG9wZXJhdGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byByZWZlcmVuY2UgY291bnRpbmcgb3Igc29tZSBvdGhlciBmb3JtIG9mIHJlc291cmNlIG1hbmFnZW1lbnQgYXNzb2NpYXRlZCB3aXRoIG1lbW9yeSBwb2xpY3kgc3RydWN0dXJlcy4gVGhlICYjMzQ7Y29uZCYjMzQ7IHN1Z2dlc3RzIHNvbWUgc29ydCBvZiBjaGVjayBvciBndWFyZCBpcyBpbnZvbHZlZCBiZWZvcmUgdGhlIGRlY3JlbWVudCBhY3R1YWxseSBoYXBwZW5zLCB3aGljaCBjb3VsZCBiZSBpbXBvcnRhbnQgZm9yIGNvbmN1cnJlbmN5IGNvbnRyb2wgb3IgYXZvaWRpbmcgdW5kZXJmbG93LiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBjb25zaWRlciBhbnkgY29uZGl0aW9ucyBhdHRhY2hlZCwgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHJlbGF0ZWQgc3RydWN0dXJlcyBhbmQgd2hhdCB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXMgYXJlLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIGludm9sdmVkIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIHRpbWUgdG8gZ2V0IGEgcmVtaW5kZXIgYXMgdG8gdGhlIHB1cnBvc2Ugb2YgdGhlIHBvbGljeSBjYWNoZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA3NzpcdHN0YXRpYyBpbmxpbmUgaW50IG1wb2xfbmVlZHNfY29uZF9yZWYoc3RydWN0IG1lbXBvbGljeSAqcG9sKVxuICA3ODpcdHtcbiAgNzk6XHRcdHJldHVybiAocG9sIFx1MDAyNlx1MDAyNiAocG9sLVx1MDAzZWZsYWdzIFx1MDAyNiBNUE9MX0ZfU0hBUkVEKSk7XG4gIDgwOlx0fVxuICA4MTpcdFxuICA4MjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX2NvbmRfcHV0KHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcbiAgODM6XHR7XG4gIDg0Olx0XHRpZiAobXBvbF9uZWVkc19jb25kX3JlZihwb2wpKVxuICA4NTpcdFx0XHRfX21wb2xfcHV0KHBvbCk7XG4gIDg2Olx0fVxuICA4NzpcdFxuICA4ODpcdGV4dGVybiBzdHJ1Y3QgbWVtcG9saWN5ICpfX21wb2xfZHVwKHN0cnVjdCBtZW1wb2xpY3kgKnBvbCk7XG4gIDg5Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sX2R1cChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXG4gIDkwOlx0e1xuICA5MTpcdFx0aWYgKHBvbClcbiAgOTI6XHRcdFx0cG9sID0gX19tcG9sX2R1cChwb2wpO1xuICA5MzpcdFx0cmV0dXJuIHBvbDtcbiAgOTQ6XHR9XG4gIDk1Olx0XG4gIDk2Olx0c3RhdGljIGlubGluZSB2b2lkIG1wb2xfZ2V0KHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgUG9saWN5IFJlZmFjdG9yaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRoZSBgbXBvbF9jb25kX3B1dGAgdXNhZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcywgYG1wb2xfY29uZF9wdXRgIG9ubHkgZGVjcmVtZW50cyBhIHJlZmVyZW5jZSBpZiBgTVBPTF9GX1NIQVJFRGAgaXMgc2V0LiBOb3csIEkmIzM5O20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBsb2dpYy4gSWYgYHZtYS0mZ3Q7dm1fcG9saWN5YCAqaGFzKiBgTVBPTF9GX1NIQVJFRGAgc2V0LCB0aGVuIGBtcG9sX2NvbmRfcHV0YCB3aWxsIHJlbGVhc2UgdGhlIHBvbGljeSwgcmlnaHQ/IEJ1dCB3YWl0LCBJIGRvbiYjMzk7dCB0aGluayBgdm1hLSZndDt2bV9wb2xpY3lgICpldmVyKiBoYXMgYE1QT0xfRl9TSEFSRURgIHNldCBieSBkZWZhdWx0LiBJIG5lZWQgdG8gY29uZmlybSB0aGF0LgoKSXQmIzM5O3MgdXN1YWxseSBvbmx5IHNldCBvbiBwb2xpY2llcyByZXR1cm5lZCBieSBgdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3lgLCBsaWtlIGluIHNoYXJlZCBtZW1vcnkuIElmIHdlJiMzOTtyZSBqdXN0IGRlYWxpbmcgd2l0aCB0aGUgZGVmYXVsdCBgdm1hLSZndDt2bV9wb2xpY3lgIHRoZW4gYG1wb2xfY29uZF9wdXRgIGRvZXMgbm90aGluZy4gQnV0LCB3aGF0IGlmIHRoZSB0YXNrJiMzOTtzIHBvbGljeSwgZnJvbSBgZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpYCwgaXMgYE1QT0xfRl9TSEFSRURgPyBObywgdGFzayBwb2xpY2llcyBzaG91bGRuJiMzOTt0IGhhdmUgdGhhdCBmbGFnLCBzbyB0aGlzIGlzIGFib3V0IGFuIGVxdWl2YWxlbnQgZnVuY3Rpb25hbCBjaGFuZ2UuCgpTbyBpdCBzZWVtcyB0byBiZSBsb2dpY2FsbHkgdGhlIHNhbWUsIGJ1dCB0aGlzIGNvdWxkIGJlIGEgcmVmYWN0b3JpbmcuIEkmIzM5O2QgbG92ZSB0byBrbm93IHdoYXQgdGhlIGNvbW1pdCBtZXNzYWdlIGlzLCBidXQgaXQmIzM5O3Mgbm90IGF2YWlsYWJsZSByaWdodCBub3cuIExldCYjMzk7cyBzZWUuLi4gdGhlIGNoYW5nZSBpcyB0aGlzOgoKYGBgYwotCWlmICh2bWEtJmd0O3ZtX29wcyAmYW1wOyZhbXA7IHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5KSB7Ci0JCWJvb2wgcmV0ID0gZmFsc2U7Ci0JCXBnb2ZmX3QgaWx4OwkJLyogaWdub3JlZCBoZXJlICovCi0KLQkJcG9sID0gdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3kodm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCAmYW1wO2lseCk7Ci0JCWlmIChwb2wgJmFtcDsmYW1wOyAocG9sLSZndDtmbGFncyAmYW1wOyBNUE9MX0ZfTU9GKSkKLQkJCXJldCA9IHRydWU7Ci0JCW1wb2xfY29uZF9wdXQocG9sKTsKLQotCQlyZXR1cm4gcmV0OwotCX0KLQotCXBvbCA9IHZtYS0mZ3Q7dm1fcG9saWN5OwomIzQzOwlwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgdm1hLSZndDt2bV9zdGFydCwgJmFtcDtpbHgpOwogCWlmICghcG9sKQogCQlwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Ci0KLQlyZXR1cm4gcG9sLSZndDtmbGFncyAmYW1wOyBNUE9MX0ZfTU9GOwomIzQzOwltb2YgPSBwb2wtJmd0O2ZsYWdzICZhbXA7IE1QT0xfRl9NT0Y7CiYjNDM7CW1wb2xfY29uZF9wdXQocG9sKTsKJiM0MzsJcmV0dXJuIG1vZjsKYGBgCgpPa2F5LCBzbyBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBUaGUgb2xkIGNvZGUgaGFuZGxlZCB0aGUgY2FzZSB3aGVyZSBgdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3lgIHJldHVybmVkIE5VTEwsIGxpa2UgdGhpczoKCmBgYGMKCQlwb2wgPSB2bWEtJmd0O3ZtX29wcy0mZ3Q7Z2V0X3BvbGljeSh2bWEsIHZtYS0mZ3Q7dm1fc3RhcnQsICZhbXA7aWx4KTsKCQlpZiAocG9sICZhbXA7JmFtcDsgKHBvbC0mZ3Q7ZmxhZ3MgJmFtcDsgTVBPTF9GX01PRikpCgkJCXJldCA9IHRydWU7CgkJbXBvbF9jb25kX3B1dChwb2wpOwoKCQlyZXR1cm4gcmV0OwpgYGAKCkVzc2VudGlhbGx5LCBpZiBgdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3lgIHJldHVybnMgTlVMTCwgdGhlIG9sZCBjb2RlIHJldHVybnMgYGZhbHNlYCEgTm93LCBsb29raW5nIGF0IHRoZSBuZXcgY29kZToKCmBgYGMKCXBvbCA9IF9fZ2V0X3ZtYV9wb2xpY3kodm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCAmYW1wO2lseCk7CmBgYAoKSWYgYHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5YCByZXR1cm5zIE5VTEwsIGl0IHNlZW1zIGBfX2dldF92bWFfcG9saWN5YCByZXR1cm5zIGB2bWEtJmd0O3ZtX3BvbGljeWAuIE9rYXksIGxldCYjMzk7cyBkb3VibGUgY2hlY2sgd2hhdCBgX19nZXRfdm1hX3BvbGljeWAgZG9lcy4uLiBUaGlzIGNvdWxkIGJlIGtleSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1wb2xpY3kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjAxODpcdHN0cnVjdCBtZW1wb2xpY3kgKl9fZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4yMDE5Olx0XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIGFkZHIsIHBnb2ZmX3QgKmlseClcbjIwMjA6XHR7XG4yMDIxOlx0XHQqaWx4ID0gMDtcbjIwMjI6XHRcdHJldHVybiAodm1hLVx1MDAzZXZtX29wcyBcdTAwMjZcdTAwMjYgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5KSA/XG4yMDIzOlx0XHRcdHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeSh2bWEsIGFkZHIsIGlseCkgOiB2bWEtXHUwMDNldm1fcG9saWN5O1xuMjAyNDpcdH1cbjIwMjU6XHRcbjIwMjY6XHQvKlxuMjAyNzpcdCAqIGdldF92bWFfcG9saWN5KEB2bWEsIEBhZGRyLCBAb3JkZXIsIEBpbHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3MzUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG9saWN5IENoYW5nZSBpbiB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbiBgX19nZXRfdm1hX3BvbGljeWAsIHRoZSBjb2RlIG5vdyBleHBsaWNpdGx5IGNoZWNrcyBpZiBhIGB2bWEtJmd0O3ZtX29wcy0mZ3Q7Z2V0X3BvbGljeWAgZnVuY3Rpb24gZXhpc3RzIGFuZCBjYWxscyBpdCBpZiBpdCBkb2VzLiBDcnVjaWFsbHksIGlmIHRoYXQgZnVuY3Rpb24gKnJldHVybnMqIE5VTEwsIGBfX2dldF92bWFfcG9saWN5YCBpdHNlbGYgKnJldHVybnMqIE5VTEwuIFRoaXMgaXMgdGhlIGtleSBkaWZmZXJlbmNlLiBUaGVuLCBgdm1hX3BvbGljeV9tb2ZgIHVzZXMgdGhlIHJlc3VsdCBmcm9tIGBfX2dldF92bWFfcG9saWN5YC4gSXQgY2hlY2tzIGlmIHRoZSByZXR1cm5lZCB2YWx1ZSBmcm9tIGBfX2dldF92bWFfcG9saWN5YCBpcyBOVUxMLCBhbmQgKmlmKiBpdCYjMzk7cyBOVUxMLCBpdCBmYWxscyBiYWNrIHRvIHVzaW5nIGBnZXRfdGFza19wb2xpY3koY3VycmVudClgLgoKTm93LCB0aGUgb2xkIGNvZGUgd2FzIGRpZmZlcmVudC4gUHJldmlvdXNseSwgaWYgYHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5YCByZXR1cm5lZCBOVUxMLCB0aGUgKmVudGlyZSBmdW5jdGlvbiogaW1tZWRpYXRlbHkgcmV0dXJuZWQgYGZhbHNlYC4gSXQgZGlkbiYjMzk7dCBmYWxsIGJhY2sgdG8gYHZtYS0mZ3Q7dm1fcG9saWN5YCBvciBgZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpYC4gU28sIHRoZSByZXR1cm4gb2YgTlVMTCBmcm9tIHRoZSBgZ2V0X3BvbGljeWAgZnVuY3Rpb24gd2FzIGVmZmVjdGl2ZWx5IHRyZWF0ZWQgYXMgYSBmYWlsdXJlLgoKVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UhIFRoaXMgZml4ZXMgYSBidWcgd2hlcmUgYHZtYV9wb2xpY3lfbW9mYCB3b3VsZCBpbmNvcnJlY3RseSByZXR1cm4gYGZhbHNlYCBpZiB0aGUgYGdldF9wb2xpY3lgIGZ1bmN0aW9uIHJldHVybmVkIE5VTEwuIFRoZSBuZXcgYmVoYXZpb3IgY29ycmVjdGx5IGZhbGxzIGJhY2sgdG8gdGhlIHRhc2sgcG9saWN5IGluIHRoaXMgc2NlbmFyaW8uCgpMZXQmIzM5O3MgY29uZmlybSB0aGlzIGJlaGF2aW9yIGlzIGV4cGVjdGVkLiBDYW4gYHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5YCBhY3R1YWxseSByZXR1cm4gTlVMTD8gWWVzISBGb3IgaW5zdGFuY2UsIGBzaG1lbV9nZXRfcG9saWN5YCBtaWdodCByZXR1cm4gTlVMTCBpZiBubyBwb2xpY3kgaXMgc2V0IG9uIHRoZSBpbm9kZS4gVGhpcyBjaGFuZ2UgZW5zdXJlcyB0aGF0IHRoZSB0YXNrIHBvbGljeSBpcyB1c2VkIHdoZW4gaXQgc2hvdWxkIGJlLiBUaGUgYmVoYXZpb3IgY2hhbmdlIGlzIGNvcnJlY3QuCgpUaGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgZm9jdXMgZnVuY3Rpb24gaXMgYHZtYV9wb2xpY3lfbW9mYC4gTm93LCB3aG8gY2FsbHMgYHZtYV9wb2xpY3lfbW9mYD8KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hX3BvbGljeV9tb2YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmM9MjA0MT1zdHJ1Y3QgbWVtcG9saWN5ICpnZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDU2LVxubW0vbWVtcG9saWN5LmM6MjA1Nzpib29sIHZtYV9wb2xpY3lfbW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vbWVtcG9saWN5LmMtMjA1OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3MzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBmaWVsZCBvZiBleHBlcnRpc2UgKHdoaWNoIEkgYXNzdW1lIHlvdSYjMzk7bGwgaW5mZXIgZnJvbSB0aGUgcXVlcnkpOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgdm1hX3BvbGljeV9tb2ZgIENhbGxlcioqCgpBbHJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyIHdpdGggdGhpcyBsaW5lIG9mIGludmVzdGlnYXRpb24sIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBpZGVudGlmeSB0aGUgc291cmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8sIG9yIHdoYXQgc3BlY2lmaWMgcGFydCBvZiB0aGUga2VybmVsLCBpcyBjYWxsaW5nIGB2bWFfcG9saWN5X21vZmAuIFRoaXMgZnVuY3Rpb24mIzM5O3MgdmVyeSBuYW1lIHN1Z2dlc3RzIGEgY3JpdGljYWwgbGluayB0byBNZW1vcnktT3B0aW1pemVkIEZ1bmN0aW9ucyAoTU9GcyksIG9yIHBlcmhhcHMgYSB3aWRlciBwb2xpY3kgcmVsYXRlZCB0byBWaXJ0dWFsIE1lbW9yeSBBcmVhcyAoVk1BcyksIGFuZCBiZWZvcmUgSSBjYW4gZGlzc2VjdCAqd2hhdCogaXQmIzM5O3MgZG9pbmcsIEkgaGF2ZSB0byBrbm93ICp3aG8qIGlzIHRlbGxpbmcgaXQgdG8gZG8gaXQuIElzIGl0IGEgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnQ/IElzIGl0IHRyaWdnZXJlZCBieSBhIHNwZWNpZmljIHN5c3RlbSBjYWxsPyBJcyBpdCByZWxhdGVkIHRvIGEgcGFydGljdWxhciBkcml2ZXIgb3Igc3Vic3lzdGVtPyBLbm93aW5nIHRoZSBjYWxsZXIgaXMgYWJzb2x1dGVseSBmb3VuZGF0aW9uYWwgdG8gdW5kZXJzdGFuZGluZyBpdHMgcGxhY2UgaW4gdGhlIGdyZWF0ZXIgc3lzdGVtIGRlc2lnbiBhbmQgdGhlIGxvZ2ljIGl0JiMzOTtzIHRyeWluZyB0byBpbXBsZW1lbnQsIGFuZCB0aHVzLCBJICpuZWVkKiB0byBzdGFydCB0aGVyZS4gSSYjMzk7bSBnb2luZyB0byB0cmFjayBkb3duIHRoZSBjYWxsZXJzICpyaWdodCBub3cqLCBiZWZvcmUgZXZlbiBjb25zaWRlcmluZyB0aGUgbmV4dCBzdGVwIGluIG15IGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYV9wb2xpY3lfbW9mJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtcG9saWN5Lmg9MTM0PXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xMzUtXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG9yZGVyLCBwZ29mZl90ICppbHgpO1xuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaDoxMzY6Ym9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTEzNy1cbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTQwNzY9c3RhdGljIHZvaWQgdGFza19udW1hX3dvcmsoc3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmspXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy00MTY4LVx0Zm9yICg7IHZtYTsgdm1hID0gdm1hX25leHQoXHUwMDI2dm1pKSkge1xua2VybmVsL3NjaGVkL2ZhaXIuYzo0MTY5Olx0XHRpZiAoIXZtYV9taWdyYXRhYmxlKHZtYSkgfHwgIXZtYV9wb2xpY3lfbW9mKHZtYSkgfHxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDE3MC1cdFx0XHRpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fCAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NSVhFRE1BUCkpIHtcbi0tXG5tbS9tZW1wb2xpY3kuYz0yMDQxPXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbXBvbGljeS5jLTIwNTYtXG5tbS9tZW1wb2xpY3kuYzoyMDU3OmJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9tZW1wb2xpY3kuYy0yMDU4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQxMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBpbnRlcm5hbHM6CgoqKkRpdmluZyBpbnRvIE5VTUEgQmFsYW5jaW5nIExvZ2ljKioKCkFscmlnaHQsIHNvIGB2bWFfcG9saWN5X21vZmDigKYgdGhhdCByaW5ncyBhIGJlbGwuIEFoIHllcywgaXQmIzM5O3MgY2FsbGVkIGJ5IGB0YXNrX251bWFfd29ya2Ag4oCTIGFuZCB0aGF0JiMzOTtzIGluIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4gUmlnaHQsIHNvIHRoaXMgaXMgYWxsIHBhcnQgb2YgdGhlIE5VTUEgYmFsYW5jaW5nIGluZnJhc3RydWN0dXJlLCBvYnZpb3VzbHkuIEdvdHRhIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmbG93IGhlcmUuIExldCBtZSB0cmFjZSBiYWNrIGFuZCBjaGVjayB0aGUgY29udGV4dCBhcm91bmQgaG93IGB0YXNrX251bWFfd29ya2AgaXMgdXRpbGl6ZWQsIHRoZSBnb2FsIG9mIHRoaXMgYmFsYW5jaW5nLiBXaGF0JiMzOTtzIHRyaWdnZXJpbmcgaXQsIHdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBgdm1hX3BvbGljeV9tb2ZgIGJlaW5nIGludm9rZWQ/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IGRpZ2dpbmcgaW50byBob3cgdGhlIHNjaGVkdWxlciBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgcG9saWN5IHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZmFpci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDE2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MTY1Olx0XHRcdHZtYSA9IHZtYV9uZXh0KFx1MDAyNnZtaSk7XG40MTY2Olx0XHR9XG40MTY3Olx0XG40MTY4Olx0XHRmb3IgKDsgdm1hOyB2bWEgPSB2bWFfbmV4dChcdTAwMjZ2bWkpKSB7XG40MTY5Olx0XHRcdGlmICghdm1hX21pZ3JhdGFibGUodm1hKSB8fCAhdm1hX3BvbGljeV9tb2Yodm1hKSB8fFxuNDE3MDpcdFx0XHRcdGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIHx8ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01JWEVETUFQKSkge1xuNDE3MTpcdFx0XHRcdHRyYWNlX3NjaGVkX3NraXBfdm1hX251bWEobW0sIHZtYSwgTlVNQUJfU0tJUF9VTlNVSVRBQkxFKTtcbjQxNzI6XHRcdFx0XHRjb250aW51ZTtcbjQxNzM6XHRcdFx0fVxuNDE3NDpcdFxuNDE3NTpcdFx0XHQvKlxuNDE3NjpcdFx0XHQgKiBTaGFyZWQgbGlicmFyeSBwYWdlcyBtYXBwZWQgYnkgbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSBub3RcbjQxNzc6XHRcdFx0ICogbWlncmF0ZWQgYXMgaXQgaXMgZXhwZWN0ZWQgdGhleSBhcmUgY2FjaGUgcmVwbGljYXRlZC4gQXZvaWRcbjQxNzg6XHRcdFx0ICogaGludGluZyBmYXVsdHMgaW4gcmVhZC1vbmx5IGZpbGUtYmFja2VkIG1hcHBpbmdzIG9yIHRoZSB2RFNPXG40MTc5Olx0XHRcdCAqIGFzIG1pZ3JhdGluZyB0aGUgcGFnZXMgd2lsbCBiZSBvZiBtYXJnaW5hbCBiZW5lZml0LlxuNDE4MDpcdFx0XHQgKi9cbjQxODE6XHRcdFx0aWYgKCF2bWEtXHUwMDNldm1fbW0gfHxcbjQxODI6XHRcdFx0ICAgICh2bWEtXHUwMDNldm1fZmlsZSBcdTAwMjZcdTAwMjYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgKFZNX1JFQUR8Vk1fV1JJVEUpKSA9PSAoVk1fUkVBRCkpKSB7XG40MTgzOlx0XHRcdFx0dHJhY2Vfc2NoZWRfc2tpcF92bWFfbnVtYShtbSwgdm1hLCBOVU1BQl9TS0lQX1NIQVJFRF9STyk7XG40MTg0Olx0XHRcdFx0Y29udGludWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDcyCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBOVU1BIEJhbGFuY2luZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGB2bWFfcG9saWN5X21vZmAgZnVuY3Rpb24g4oCTIGl0IGxvb2tzIGxpa2UgdGhlIGtleSB0byBkZWNpZGluZyB3aGV0aGVyIGEgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3IgTlVNQSBiYWxhbmNpbmcuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBkcml2ZXMgdGhpcyBiZWhhdmlvci4gTGV0IG1lIHNlZSwgeWVzLCB0aGF0JiMzOTtzIGl0OiBgQ09ORklHX05VTUFfQkFMQU5DSU5HYC4gQWxyaWdodCwgbGV0JiMzOTtzIGdvIGNoZWNrIHRoZSBzcGVjaWZpY3Mgb2YgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGNvcmUgbG9naWMgYmVoaW5kIHRoZSBkZWNpc2lvbnMgbWFkZSBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlVNQV9CQUxBTkNJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwMDc9Y29uZmlnIEFSQ0hfV0FOVF9OVU1BX1ZBUklBQkxFX0xPQ0FMSVRZXG4tLVxuaW5pdC9LY29uZmlnLTEwMDktXG5pbml0L0tjb25maWc6MTAxMDpjb25maWcgTlVNQV9CQUxBTkNJTkdcbmluaXQvS2NvbmZpZy0xMDExLVx0Ym9vbCBcJiMzNDtNZW1vcnkgcGxhY2VtZW50IGF3YXJlIE5VTUEgc2NoZWR1bGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnPTEwMjI9Y29uZmlnIFNDSEVEX0NBQ0hFXG4tLVxuaW5pdC9LY29uZmlnLTEwMzItXG5pbml0L0tjb25maWc6MTAzMzpjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG5pbml0L0tjb25maWctMTAzNC1cdGJvb2wgXCYjMzQ7QXV0b21hdGljYWxseSBlbmFibGUgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipUZXN0aW5nIE5VTUEgQmFsYW5jaW5nOiBBIFF1aWNrIFJ1bi1Eb3duKioKClJpZ2h0LCBzbyB0byBwcm9wZXJseSB0ZXN0IHRoaXMgTlVNQSBiYWxhbmNpbmcgZnVuY3Rpb25hbGl0eSwgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGBOVU1BX0JBTEFOQ0lOR2AgYW5kIGBOVU1BYCBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUuIEkgY2FuJiMzOTt0IGV2ZW4gYmVnaW4gdG8gZXZhbHVhdGUgaXQgd2l0aG91dCB0aG9zZSBwaWVjZXMgaW4gcGxhY2UuCgpBbmQgdGhlbiwgSSBzaG91bGQga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGB2bWFfcG9saWN5X21vZmAgdmFyaWFibGUgaXMgaGFuZ2luZyBvdXQgaW4gYG1tL21lbXBvbGljeS5jYCwgYW5kLCBhcyBJIHJlY2FsbCwgdGhhdCB3aG9sZSBmaWxlIG9ubHkgZ2V0cyBjb21waWxlZCB3aGVuIGBDT05GSUdfTlVNQWAgaXMgc2V0IGluIHRoZSBrZXJuZWwuIFNvLCB0byBldmVuICpzZWUqIHRoYXQgY29kZSwgSSYjMzk7bSBzdGlsbCByZWxpYW50IG9uIHRoYXQgZnVuZGFtZW50YWwgTlVNQSBzdXBwb3J0IGJlaW5nIGVuYWJsZWQuIEl0JiMzOTtzIGFsbCBjb25uZWN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbXBvbGljeS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9ODU9b2JqLSQoQ09ORklHX0hVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQKVx0JiM0Mzs9IGh1Z2V0bGJfdm1lbW1hcC5vXG5tbS9NYWtlZmlsZTo4NjpvYmotJChDT05GSUdfTlVNQSkgXHQmIzQzOz0gbWVtcG9saWN5Lm9cbm1tL01ha2VmaWxlLTg3LW9iai0kKENPTkZJR19TUEFSU0VNRU0pXHQmIzQzOz0gc3BhcnNlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4MDMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTlVNQSBEZXBlbmRlbmNpZXMgYW5kIGB0YXNrX251bWFfd29ya2AqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNvZGUgYW5kIHRoZSBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBOVU1BLCBhbmQgaXQgc2VlbXMgbGlrZSBgTlVNQWAgaXMgYSBwcmVyZXF1aXNpdGUsIG9idmlvdXNseS4gVGhlbiwgdG8gZ2V0IGB0YXNrX251bWFfd29ya2AgY29tcGlsZWQsIHdlIGFic29sdXRlbHkgbmVlZCBgTlVNQV9CQUxBTkNJTkdgIGVuYWJsZWQuIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdGFza19udW1hX3dvcmtgIGl0c2VsZi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoYXQuIEkmIzM5O2xsIGdvIGNoZWNrIHdoZXJlIGl0JiMzOTtzIGRlZmluZWQsIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXNrX251bWFfd29yayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9zY2hlZC9mYWlyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2ZhaXIuYz00MDMzPXN0YXRpYyBib29sIHZtYV9pc19hY2Nlc3NlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy00MDc1LSAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzo0MDc2OnN0YXRpYyB2b2lkIHRhc2tfbnVtYV93b3JrKHN0cnVjdCBjYWxsYmFja19oZWFkICp3b3JrKVxua2VybmVsL3NjaGVkL2ZhaXIuYy00MDc3LXtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTQzMzM9dm9pZCBpbml0X251bWFfYmFsYW5jaW5nKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDM0OC1cdHAtXHUwMDNlbnVtYV9taWdyYXRlX3JldHJ5XHRcdD0gMDtcbmtlcm5lbC9zY2hlZC9mYWlyLmM6NDM0OTpcdC8qIFByb3RlY3QgYWdhaW5zdCBkb3VibGUgYWRkLCBzZWUgdGFza190aWNrX251bWEgYW5kIHRhc2tfbnVtYV93b3JrICovXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQzNTAtXHRwLVx1MDAzZW51bWFfd29yay5uZXh0XHRcdD0gXHUwMDI2cC1cdTAwM2VudW1hX3dvcms7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy00MzU3LVxua2VybmVsL3NjaGVkL2ZhaXIuYzo0MzU4Olx0aW5pdF90YXNrX3dvcmsoXHUwMDI2cC1cdTAwM2VudW1hX3dvcmssIHRhc2tfbnVtYV93b3JrKTtcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDM1OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczoKCioqQ2hlY2tpbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gZm9yIGB0YXNrX251bWFfd29ya2AqKgoKQWxyaWdodCwgYmVmb3JlIGRpdmluZyB0b28gZGVlcCwgSSBuZWVkIHRvIHZlcmlmeSBhIGZ1bmRhbWVudGFsIGNvbmRpdGlvbi4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgcGFydGljdWxhciBmdW5jdGlvbiwgYHRhc2tfbnVtYV93b3JrYCwgaW50ZXJhY3RzIHdpdGggdGhlIE5VTUEgYmFsYW5jaW5nIGNvbmZpZ3VyYXRpb24uIFNvLCBteSBpbml0aWFsIHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYCNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBldmVuICpwcmVzZW50KiBpbiB0aGUgYnVpbGQgSSYjMzk7bSBjdXJyZW50bHkgbG9va2luZyBhdCwgYW5kIEkgY2FuIGFkanVzdCBteSBleHBlY3RhdGlvbnMgYWNjb3JkaW5nbHkuIElmIGl0JiMzOTtzICpub3QqIHVuZGVyIHRoYXQgY29uZGl0aW9uYWwsIHRoZW4gaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaXQgZGlmZmVyZW50bHkuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgc3RhbmQgYmVmb3JlIEkgY2FuIG1ha2UgYSBqdWRnZW1lbnQuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyBpbmNsdWRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX05VTUFfQkFMQU5DSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3NjaGVkL2ZhaXIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZmFpci5jPTEyNT1zdGF0aWMgdW5zaWduZWQgaW50IHN5c2N0bF9zY2hlZF9jZnNfYmFuZHdpZHRoX3NsaWNlXHRcdD0gNTAwMFVMO1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTI3LVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMjg6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjktLyogUmVzdHJpY3QgdGhlIE5VTUEgcHJvbW90aW9uIHRocm91Z2hwdXQgKE1CL3MpIGZvciBlYWNoIHRhcmdldCBub2RlLiAqL1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHNjaGVkX2ZhaXJfc3lzY3Rsc1tdID0ge1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQ0LSNlbmRpZlxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNDU6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDYtXHR7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTMtXHR9LFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTQ6I2VuZGlmIC8qIENPTkZJR19OVU1BX0JBTEFOQ0lORyAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTUtfTtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE0MzQ9c3RhdGljIGJvb2wgZXhjZWVkX2xsY19jYXBhY2l0eShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IGNwdSlcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQzNS17XG5rZXJuZWwvc2NoZWQvZmFpci5jOjE0MzY6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDM3LVx0dW5zaWduZWQgbG9uZyBsbGMsIGZvb3RwcmludDtcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2NTM9c3RhdGljIGludCBnZXRfcHJlZl9sbGMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE2NjMtXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE2NjQ6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNjY1LVx0XHQvKlxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTc2ND1zdGF0aWMgdm9pZCBnZXRfc2Nhbl9jcHVtYXNrcyhjcHVtYXNrX3Zhcl90IGNwdXMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTc2NS17XG5rZXJuZWwvc2NoZWQvZmFpci5jOjE3NjY6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xNzY3LVx0aW50IGNwdSwgY3Vycl9jcHUsIG5pZCwgcHJlZl9uaWQ7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0yMTc5PWFkanVzdF9udW1hX2ltYmFsYW5jZShpbnQgaW1iYWxhbmNlLCBpbnQgZHN0X3J1bm5pbmcsIGludCBpbWJfbnVtYV9ucilcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTIyMDEtXG5rZXJuZWwvc2NoZWQvZmFpci5jOjIyMDI6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0yMjAzLS8qXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz00NDEzPXN0YXRpYyB2b2lkIHVwZGF0ZV9zY2FuX3BlcmlvZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuZXdfY3B1KVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDQ0Ni1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6NDQ0NzojZWxzZSAvKiAhQ09ORklHX05VTUFfQkFMQU5DSU5HOiAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy00NDQ4LVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9NDQ2MT1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NjYW5fcGVyaW9kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5ld19jcHUpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy00NDY0LVxua2VybmVsL3NjaGVkL2ZhaXIuYzo0NDY1OiNlbmRpZiAvKiAhQ09ORklHX05VTUFfQkFMQU5DSU5HICovXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQ0NjYtXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMDI4OT1zdGF0aWMgaW50IHRhc2tfaG90KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGxiX2VudiAqZW52KVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzMjktXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEwMzMwOiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzMzEtLypcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwMzM2PXN0YXRpYyBsb25nIG1pZ3JhdGVfZGVncmFkZXNfbG9jYWxpdHkoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbGJfZW52ICplbnYpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDM4MS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTAzODI6I2Vsc2UgLyogIUNPTkZJR19OVU1BX0JBTEFOQ0lORzogKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzODMtc3RhdGljIGlubGluZSBsb25nIG1pZ3JhdGVfZGVncmFkZXNfbG9jYWxpdHkoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzODctfVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDM4ODojZW5kaWYgLyogIUNPTkZJR19OVU1BX0JBTEFOQ0lORyAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDM4OS1cbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTExMjUzPXN0cnVjdCBzZ19sYl9zdGF0cyB7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTI2OC1cdHVuc2lnbmVkIGludCBncm91cF9vdmVydXRpbGl6ZWQ7XHQvKiBBdCBsZWFzdCBvbmUgQ1BVIGlzIG92ZXJ1dGlsaXplZCBpbiB0aGUgZ3JvdXAgKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTEyNjk6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTI3MC1cdHVuc2lnbmVkIGludCBucl9udW1hX3J1bm5pbmc7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTc5Nz1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NnX2xiX3N0YXRzKHN0cnVjdCBsYl9lbnYgKmVudixcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExODUxLVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMTg1MjojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExODUzLVx0XHQvKiBPbmx5IGZicV9jbGFzc2lmeV9ncm91cCgpIHVzZXMgdGhpcyB0byBjbGFzc2lmeSBOVU1BIGdyb3VwcyAqL1xuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTE5MTY9c3RhdGljIGJvb2wgdXBkYXRlX3NkX3BpY2tfYnVzaWVzdChzdHJ1Y3QgbGJfZW52ICplbnYsXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA2NC1cbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTIwNjU6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA2Ni1zdGF0aWMgaW5saW5lIGVudW0gZmJxX3R5cGUgZmJxX2NsYXNzaWZ5X2dyb3VwKHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTIwNzU9c3RhdGljIGlubGluZSBlbnVtIGZicV90eXBlIGZicV9jbGFzc2lmeV9ycShzdHJ1Y3QgcnEgKnJxKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIwODItfVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMjA4MzojZWxzZSAvKiAhQ09ORklHX05VTUFfQkFMQU5DSU5HOiAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA4NC1zdGF0aWMgaW5saW5lIGVudW0gZmJxX3R5cGUgZmJxX2NsYXNzaWZ5X2dyb3VwKHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTIwODk9c3RhdGljIGlubGluZSBlbnVtIGZicV90eXBlIGZicV9jbGFzc2lmeV9ycShzdHJ1Y3QgcnEgKnJxKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIwOTItfVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMjA5MzojZW5kaWYgLyogIUNPTkZJR19OVU1BX0JBTEFOQ0lORyAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA5NC1cbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEyMjYzPXNjaGVkX2JhbGFuY2VfZmluZF9kc3RfZ3JvdXAoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHRoaXNfY3B1KVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIzNzYtXHRcdFx0aW50IGltYl9udW1hX25yID0gc2QtXHUwMDNlaW1iX251bWFfbnI7XG5rZXJuZWwvc2NoZWQvZmFpci5jOjEyMzc3OiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIzNzgtXHRcdFx0aW50IGlkbGVzdF9jcHU7XG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjM4OC1cdFx0XHRcdHJldHVybiBpZGxlc3Q7XG5rZXJuZWwvc2NoZWQvZmFpci5jOjEyMzg5OiNlbmRpZiAvKiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgKi9cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIzOTAtXHRcdFx0Lypcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE1NDAyPXZvaWQgcHJpbnRfY2ZzX3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGNwdSlcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NDExLVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTQxMjojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NDEzLXZvaWQgc2hvd19udW1hX3N0YXRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHNlcV9maWxlICptKVxuLS1cbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTU0MzMtfVxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTQzNDojZW5kaWYgLyogQ09ORklHX05VTUFfQkFMQU5DSU5HICovXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NDM1LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzYyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5VTUEgQmFsYW5jaW5nIEludmVzdGlnYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHRhc2tfbnVtYV93b3JrYCBmdW5jdGlvbiBhbmQgaXQmIzM5O3MgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBzcGVjaWZpYyB0byBOVU1BIHN5c3RlbXMgYW5kIE5VTUEgYmFsYW5jaW5nIGZlYXR1cmVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgZnVuY3Rpb24gaXMgZG9pbmcgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGxhcmdlciBOVU1BIHBpY3R1cmUuIFJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgYXJvdW5kIGxpbmUgNDA3Ni4gVGhhdCBzaG91bGQgYmUgdGhlIGFyZWEgd2hlcmUgdGhpcyBgdGFza19udW1hX3dvcmtgIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZCwgd2hpY2ggaG9wZWZ1bGx5IGdpdmVzIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgSSBuZWVkLiBJJiMzOTttIGd1ZXNzaW5nIEkmIzM5O2xsIGZpbmQgaXRzIHB1cnBvc2UsIGFuZCBwb3NzaWJseSBzZWUgaG93IGl0JiMzOTtzIGludm9rZWQgd2l0aGluIHRoZSBzY2hlZHVsaW5nIGRvbWFpbi4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3byB3aWxsIGJlIGtleS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvc2NoZWQvZmFpci5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDA3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0MDcwOlx0I2RlZmluZSBWTUFfUElEX1JFU0VUX1BFUklPRCAoNCAqIHN5c2N0bF9udW1hX2JhbGFuY2luZ19zY2FuX2RlbGF5KVxuNDA3MTpcdFxuNDA3MjpcdC8qXG40MDczOlx0ICogVGhlIGV4cGVuc2l2ZSBwYXJ0IG9mIG51bWEgbWlncmF0aW9uIGlzIGRvbmUgZnJvbSB0YXNrX3dvcmsgY29udGV4dC5cbjQwNzQ6XHQgKiBUcmlnZ2VyZWQgZnJvbSB0YXNrX3RpY2tfbnVtYSgpLlxuNDA3NTpcdCAqL1xuNDA3NjpcdHN0YXRpYyB2b2lkIHRhc2tfbnVtYV93b3JrKHN0cnVjdCBjYWxsYmFja19oZWFkICp3b3JrKVxuNDA3NzpcdHtcbjQwNzg6XHRcdHVuc2lnbmVkIGxvbmcgbWlncmF0ZSwgbmV4dF9zY2FuLCBub3cgPSBqaWZmaWVzO1xuNDA3OTpcdFx0c3RydWN0IHRhc2tfc3RydWN0ICpwID0gY3VycmVudDtcbjQwODA6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcC1cdTAwM2VtbTtcbjQwODE6XHRcdHU2NCBydW50aW1lID0gcC1cdTAwM2VzZS5zdW1fZXhlY19ydW50aW1lO1xuNDA4MjpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG40MDgzOlx0XHR1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7XG40MDg0Olx0XHR1bnNpZ25lZCBsb25nIG5yX3B0ZV91cGRhdGVzID0gMDtcbjQwODU6XHRcdGxvbmcgcGFnZXMsIHZpcnRwYWdlcztcbjQwODY6XHRcdHN0cnVjdCB2bWFfaXRlcmF0b3Igdm1pO1xuNDA4NzpcdFx0Ym9vbCB2bWFfcGlkc19za2lwcGVkO1xuNDA4ODpcdFx0Ym9vbCB2bWFfcGlkc19mb3JjZWQgPSBmYWxzZTtcbjQwODk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyMTUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgdGFza19udW1hX3dvcmtgIERlcGVuZGVuY3kqKgoKT2theSwgc28gYHRhc2tfbnVtYV93b3JrYCBpcyBkZWZpbml0ZWx5IHBhcnQgb2YgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AuICBUaGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gVGh1cywgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AgaGFzIHRvIGJlIGVuYWJsZWQgZm9yIHRoYXQgY29kZSB0byBiZSBjb21waWxlZC4gTm93LCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgZWxzZSBtaWdodCBiZSBjYWxsaW5nIGB2bWFfcG9saWN5X21vZmA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIGl0cyB1c2UuCgpUaGUgYGdyZXBgIG91dHB1dCBnaXZlcyBtZSBzb21lIGNsdWVzOiBpdCYjMzk7cyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oYCwgYW5kIGNhbGxlZCBmcm9tIGBrZXJuZWwvc2NoZWQvZmFpci5jYCBhbmQgYG1tL21lbXBvbGljeS5jYC4gIEhhbmcgb24sIGl0IGxvb2tzIGxpa2UgYHRhc2tfbnVtYV93b3JrYCBpcyB0aGUgKm9ubHkqIGNhbGxlciBvZiBgdm1hX3BvbGljeV9tb2ZgIGJleW9uZCB0aG9zZSB0d28gbG9jYXRpb25zLgoKQWhhLCB3YWl0LCBgdm1hX3BvbGljeV9tb2ZgIGlzIGluIGBtbS9tZW1wb2xpY3kuY2AuIFRoYXQgbWVhbnMgYG1tL21lbXBvbGljeS5jYCBpcyBjb21waWxlZCB3aXRoIGBDT05GSUdfTlVNQWAuIFNvLCBgQ09ORklHX05VTUFgICphbmQqIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgIGFyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgaGVyZS4KCk5vdywgbGV0JiMzOTtzIHpvb20gaW4gb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGB2bWFfcG9saWN5X21vZmAgaXRzZWxmLgoKYGBgYwpib29sIHZtYV9wb2xpY3lfbW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQp7CglzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7CglwZ29mZl90IGlseDsKCWJvb2wgbW9mOwoKCXBvbCA9IF9fZ2V0X3ZtYV9wb2xpY3kodm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCAmYW1wO2lseCk7CglpZiAoIXBvbCkKCQlwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7Cgltb2YgPSBwb2wtJmd0O2ZsYWdzICZhbXA7IE1QT0xfRl9NT0Y7CgltcG9sX2NvbmRfcHV0KHBvbCk7CglyZXR1cm4gbW9mOwp9CmBgYAoKT2theSwgaXQgZ2V0cyB0aGUgbWVtcG9saWN5IGZvciB0aGUgVk1BLiBJZiBgdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3lgIGlzIGRlZmluZWQgaXQgd2lsbCBjYWxsIGl0LiBJZiB0aGlzIHJldHVybnMgTlVMTCwgaXQgY2FsbHMgYGdldF90YXNrX3BvbGljeShjdXJyZW50KWAuIFRoZW4gaXQgY2hlY2tzIHRoZSBgcG9sLSZndDtmbGFnc2AgdG8gc2VlIGlmIGBNUE9MX0ZfTU9GYCBpcyBzZXQuIFdoYXQgdHJpZ2dlcnMgdGhpcyBmbGFnPyBJIHN1c3BlY3QgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgbGF6eSBtaWdyYXRpb24gbWVtcG9saWN5IGZsYWcuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBgTVBPTF9GX01PRmAgaXMgc2V0IHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O01QT0xfRl9NT0YmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oPTE5PWVudW0ge1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaC02Ny0jZGVmaW5lIE1QT0xfRl9TSEFSRUQgICgxIFx1MDAzY1x1MDAzYyAwKVx0LyogaWRlbnRpZnkgc2hhcmVkIHBvbGljaWVzICovXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5Lmg6Njg6I2RlZmluZSBNUE9MX0ZfTU9GXHQoMSBcdTAwM2NcdTAwM2MgMykgLyogdGhpcyBwb2xpY3kgd2FudHMgbWlncmF0ZSBvbiBmYXVsdCAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oLTY5LSNkZWZpbmUgTVBPTF9GX01PUk9OXHQoMSBcdTAwM2NcdTAwM2MgNCkgLyogTWlncmF0ZSBPbiBwcm90bm9uZSBSZWZlcmVuY2UgT24gTm9kZSAqL1xuLS1cbm1tL21lbXBvbGljeS5jPTE3MjE9c3RhdGljIGlubGluZSBpbnQgc2FuaXRpemVfbXBvbF9mbGFncyhpbnQgKm1vZGUsIHVuc2lnbmVkIHNob3J0ICpmbGFncylcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNzMxLVx0XHRpZiAoKm1vZGUgPT0gTVBPTF9CSU5EIHx8ICptb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXG5tbS9tZW1wb2xpY3kuYzoxNzMyOlx0XHRcdCpmbGFncyB8PSAoTVBPTF9GX01PRiB8IE1QT0xfRl9NT1JPTik7XG5tbS9tZW1wb2xpY3kuYy0xNzMzLVx0XHRlbHNlXG4tLVxubW0vbWVtcG9saWN5LmM9MjA1Nz1ib29sIHZtYV9wb2xpY3lfbW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL21lbXBvbGljeS5jLTIwNjUtXHRcdHBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbm1tL21lbXBvbGljeS5jOjIwNjY6XHRtb2YgPSBwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0Y7XG5tbS9tZW1wb2xpY3kuYy0yMDY3LVx0bXBvbF9jb25kX3B1dChwb2wpO1xuLS1cbm1tL21lbXBvbGljeS5jPTI5NzU9aW50IG1wb2xfbWlzcGxhY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuLS1cbm1tL21lbXBvbGljeS5jLTI5OTMtXHRwb2wgPSBnZXRfdm1hX3BvbGljeSh2bWEsIGFkZHIsIGZvbGlvX29yZGVyKGZvbGlvKSwgXHUwMDI2aWx4KTtcbm1tL21lbXBvbGljeS5jOjI5OTQ6XHRpZiAoIShwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0YpKVxubW0vbWVtcG9saWN5LmMtMjk5NS1cdFx0Z290byBvdXQ7XG4tLVxubW0vbWVtcG9saWN5LmM9MzMyNj12b2lkIF9faW5pdCBudW1hX3BvbGljeV9pbml0KHZvaWQpXG4tLVxubW0vbWVtcG9saWN5LmMtMzM0My1cdFx0XHQubW9kZSA9IE1QT0xfUFJFRkVSUkVELFxubW0vbWVtcG9saWN5LmM6MzM0NDpcdFx0XHQuZmxhZ3MgPSBNUE9MX0ZfTU9GIHwgTVBPTF9GX01PUk9OLFxubW0vbWVtcG9saWN5LmMtMzM0NS1cdFx0XHQubm9kZXMgPSBub2RlbWFza19vZl9ub2RlKG5pZCksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1OTEzCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKk1QT0wgRmxhZyBTYW5pdHkgQ2hlY2sqKgoKQWxyaWdodCwgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiB3aHkgaXMgYE1QT0xfRl9NT0ZgIGdldHRpbmcgc2V0PyBJcyBpdCBiZWluZyBmb3JjZWQgYWxvbmcgd2l0aCBgTVBPTF9CSU5EYCBvciBgTVBPTF9QUkVGRVJSRURfTUFOWWAsIGFuZCBwZXJoYXBzIGFsc28gYE1QT0xfRl9OVU1BX0JBTEFOQ0lOR2A/IE1lbW9yeSBwb2xpY3kgZmxhZ3MgYXJlIGFsd2F5cyBhIGRlbGljYXRlIGRhbmNlLiBUaGVuLCBhIHF1aWNrIGZsYXNoIG9mIG1lbW9yeeKAlGFoLCByaWdodCwgdGhlIGBzYW5pdGl6ZV9tcG9sX2ZsYWdzYCBmdW5jdGlvbi4gVGhhdCYjMzk7cyB0aGUgbGlrZWx5IGN1bHByaXQuIE5vdyBJIG5lZWQgdG8gZHJpbGwgaW50byB3aGF0IGBzYW5pdGl6ZV9tcG9sX2ZsYWdzYCBkb2VzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYE1QT0xfRl9NT0ZgIGdldHMgYWN0aXZhdGVkLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtcG9saWN5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3MjE6XHRzdGF0aWMgaW5saW5lIGludCBzYW5pdGl6ZV9tcG9sX2ZsYWdzKGludCAqbW9kZSwgdW5zaWduZWQgc2hvcnQgKmZsYWdzKVxuMTcyMjpcdHtcbjE3MjM6XHRcdCpmbGFncyA9ICptb2RlIFx1MDAyNiBNUE9MX01PREVfRkxBR1M7XG4xNzI0Olx0XHQqbW9kZSBcdTAwMjY9IH5NUE9MX01PREVfRkxBR1M7XG4xNzI1Olx0XG4xNzI2Olx0XHRpZiAoKHVuc2lnbmVkIGludCkoKm1vZGUpIFx1MDAzZT0gIE1QT0xfTUFYKVxuMTcyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE3Mjg6XHRcdGlmICgoKmZsYWdzIFx1MDAyNiBNUE9MX0ZfU1RBVElDX05PREVTKSBcdTAwMjZcdTAwMjYgKCpmbGFncyBcdTAwMjYgTVBPTF9GX1JFTEFUSVZFX05PREVTKSlcbjE3Mjk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4xNzMwOlx0XHRpZiAoKmZsYWdzIFx1MDAyNiBNUE9MX0ZfTlVNQV9CQUxBTkNJTkcpIHtcbjE3MzE6XHRcdFx0aWYgKCptb2RlID09IE1QT0xfQklORCB8fCAqbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxuMTczMjpcdFx0XHRcdCpmbGFncyB8PSAoTVBPTF9GX01PRiB8IE1QT0xfRl9NT1JPTik7XG4xNzMzOlx0XHRcdGVsc2VcbjE3MzQ6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjE3MzU6XHRcdH1cbjE3MzY6XHRcdHJldHVybiAwO1xuMTczNzpcdH1cbjE3Mzg6XHRcbjE3Mzk6XHRzdGF0aWMgbG9uZyBrZXJuZWxfbWJpbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBsZW4sXG4xNzQwOlx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgbW9kZSwgY29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKm5tYXNrLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjUyMgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDczMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5VTUEgQmFsYW5jaW5nIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWJvdXQgTlVNQSBiYWxhbmNpbmcsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBgTVBPTF9GX05VTUFfQkFMQU5DSU5HYCBmbGFnIHNldHMgdGhlIGBNUE9MX0ZfTU9GYCBmbGFnLCB3aGljaCBpcyBhbHNvIHNldCBmb3IgYHByZWZlcnJlZF9ub2RlX3BvbGljeWAgZHVyaW5nIGBudW1hX3BvbGljeV9pbml0YC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBoZXJlIGlzIGluIGB2bWFfcG9saWN5X21vZmAuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB3aGVuIGB2bWEtJmd0O3ZtX29wcy0mZ3Q7Z2V0X3BvbGljeWAgcmV0dXJucyBOVUxMLCBpdCBjb3JyZWN0bHkgZmFsbHMgYmFjayB0byB0aGUgdGFzayYjMzk7cyBwb2xpY3kuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyB0aGUgbWFpbiBtb2RpZmljYXRpb24uCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGZvY3VzIG9uIGB2bWFfcG9saWN5X21vZmAgc2luY2UgaXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4gIFRoZW4gSSByZWFsaXplZCB0aGF0IGB2bWFfcG9saWN5X21vZmAgZ2V0cyBjYWxsZWQgZnJvbSBgdGFza19udW1hX3dvcmtgLCB3aGljaCBpcyBleGVjdXRlZCBhc3luY2hyb25vdXNseSB2aWEgYHRhc2tfd29ya2AuIEhtbSwgY291bGQgSSBmdXp6IGB2bWFfcG9saWN5X21vZmAgZGlyZWN0bHk/IEl0JiMzOTtzIGNhbGxlZCB3aGVuIGB0YXNrX251bWFfd29ya2AgcnVucywgdHJpZ2dlcmVkIGJ5IGB0YXNrX3RpY2tfbnVtYWAuICBQZXJoYXBzIGB0YXNrX251bWFfd29ya2AgaXRzZWxmIHNob3VsZCBiZSBhIGZvY3VzIHN5bWJvbCBhcyB3ZWxsLiBBbHRob3VnaCwgd2hpbGUgaXQmIzM5O3MgYSBzbWFsbGVyIGZ1bmN0aW9uLCBgdm1hX3BvbGljeV9tb2ZgIGlzIHRoZSBvbmUgbW9kaWZpZWQuCgpJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBhZGRpbmcgYm90aCBgdm1hX3BvbGljeV9tb2ZgIGFuZCBgdGFza19udW1hX3dvcmtgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCwgdGhvdWdoIGB0YXNrX251bWFfd29ya2AgaXMgYSBsYXJnZXIgZnVuY3Rpb24sIHNvIG1heWJlIGp1c3QgYHZtYV9wb2xpY3lfbW9mYCBpcyBzdWZmaWNpZW50LgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYHZtYV9wb2xpY3lfbW9mYCBpcyBhY3R1YWxseSByZWFjaGFibGUuICBSaWdodCwgaWYgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AgaXMgZW5hYmxlZCwgYHRhc2tfdGlja19udW1hYCBzY2hlZHVsZXMgYHRhc2tfbnVtYV93b3JrYCwgd2hpY2ggaXRlcmF0ZXMgb3ZlciBWTUFzIGFuZCB0aGVuIGNhbGxzIGB2bWFfcG9saWN5X21vZmAuICBTbywgaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuCgpMb29raW5nIGF0IHRoZSBjb2RlLCB0aGUgcGF0Y2ggc2VlbXMgdG8gZXhjbHVzaXZlbHkgbW9kaWZ5IGB2bWFfcG9saWN5X21vZmAuCgpgYGBjCmJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCnsKCXN0cnVjdCBtZW1wb2xpY3kgKnBvbDsKCXBnb2ZmX3QgaWx4OwoJYm9vbCBtb2Y7CgoJcG9sID0gX19nZXRfdm1hX3BvbGljeSh2bWEsIHZtYS0mZ3Q7dm1fc3RhcnQsICZhbXA7aWx4KTsKCWlmICghcG9sKQoJCXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKCW1vZiA9IHBvbC0mZ3Q7ZmxhZ3MgJmFtcDsgTVBPTF9GX01PRjsKCW1wb2xfY29uZF9wdXQocG9sKTsKCXJldHVybiBtb2Y7Cn0KYGBgCgpPa2F5LCB0aGUgbW9yZSBJIGxvb2sgYXQgdGhpcyBjb2RlLCB0aGUgY2xlYXJlciBpdCBiZWNvbWVzLiBJZiBgX19nZXRfdm1hX3BvbGljeWAgcmV0dXJucyBhIHBvbGljeSBmcm9tIGB2bWEtJmd0O3ZtX3BvbGljeWAsIGFuZCBpdCYjMzk7cyBub3QgTlVMTCwgaXQgZG9lc24mIzM5O3QgaGF2ZSBgTVBPTF9GX1NIQVJFRGAgc2V0LCBzbyBgbXBvbF9jb25kX3B1dGAgZG9lcyBub3RoaW5nLiBJZiBgX19nZXRfdm1hX3BvbGljeWAgcmV0dXJucyBhIHBvbGljeSBmcm9tIGB2bWEtJmd0O3ZtX29wcy0mZ3Q7Z2V0X3BvbGljeWAsIGl0IG1pZ2h0IGhhdmUgYE1QT0xfRl9TSEFSRURgIHNldCwgc28gYG1wb2xfY29uZF9wdXRgIHdpbGwgZHJvcCB0aGUgcmVmZXJlbmNlLiBJZiBgX19nZXRfdm1hX3BvbGljeWAgcmV0dXJucyBOVUxMLCBpdCBjb3JyZWN0bHkgZmFsbHMgYmFjayB0byBgZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpYC4gYGdldF90YXNrX3BvbGljeShjdXJyZW50KWAgcmV0dXJucyBlaXRoZXIgYGN1cnJlbnQtJmd0O21lbXBvbGljeWAgb3IgYGRlZmF1bHRfcG9saWN5YCwgbmVpdGhlciBvZiB3aGljaCBoYXZlIGBNUE9MX0ZfU0hBUkVEYCBzZXQsIHNvIGFnYWluLCBgbXBvbF9jb25kX3B1dGAgZG9lcyBub3RoaW5nLiBUaGlzIGlzIGFsbCBjb3JyZWN0LgpJJiMzOTttIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF90YXNrX3BvbGljeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbXBvbGljeS5jPTMzOD1FWFBPUlRfU1lNQk9MX0dQTChuZWFyZXN0X25vZGVfbm9kZW1hc2spO1xubW0vbWVtcG9saWN5LmMtMzM5LVxubW0vbWVtcG9saWN5LmM6MzQwOnN0cnVjdCBtZW1wb2xpY3kgKmdldF90YXNrX3BvbGljeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG5tbS9tZW1wb2xpY3kuYy0zNDEte1xuLS1cbm1tL21lbXBvbGljeS5jLTM1Ny19XG5tbS9tZW1wb2xpY3kuYzozNTg6RVhQT1JUX1NZTUJPTF9GT1JfTU9EVUxFUyhnZXRfdGFza19wb2xpY3ksIFwmIzM0O2t2bVwmIzM0Oyk7XG5tbS9tZW1wb2xpY3kuYy0zNTktXG4tLVxubW0vbWVtcG9saWN5LmM9MTQ4Nj1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNTY4LVx0XHRpZiAoIW5ldykge1xubW0vbWVtcG9saWN5LmM6MTU2OTpcdFx0XHRuZXcgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG5tbS9tZW1wb2xpY3kuYy0xNTcwLVx0XHRcdG1wb2xfZ2V0KG5ldyk7XG4tLVxubW0vbWVtcG9saWN5LmM9MjA0MT1zdHJ1Y3QgbWVtcG9saWN5ICpnZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDQ3LVx0aWYgKCFwb2wpXG5tbS9tZW1wb2xpY3kuYzoyMDQ4Olx0XHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG5tbS9tZW1wb2xpY3kuYy0yMDQ5LVx0aWYgKHBvbC1cdTAwM2Vtb2RlID09IE1QT0xfSU5URVJMRUFWRSB8fFxuLS1cbm1tL21lbXBvbGljeS5jPTIwNTc9Ym9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9tZW1wb2xpY3kuYy0yMDY0LVx0aWYgKCFwb2wpXG5tbS9tZW1wb2xpY3kuYzoyMDY1Olx0XHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG5tbS9tZW1wb2xpY3kuYy0yMDY2LVx0bW9mID0gcG9sLVx1MDAzZWZsYWdzIFx1MDAyNiBNUE9MX0ZfTU9GO1xuLS1cbm1tL21lbXBvbGljeS5jPTI1NDE9c3RydWN0IHBhZ2UgKmFsbG9jX2Zyb3plbl9wYWdlc19ub3Byb2YoZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBvcmRlcilcbi0tXG5tbS9tZW1wb2xpY3kuYy0yNTQ5LVx0aWYgKCFpbl9pbnRlcnJ1cHQoKSBcdTAwMjZcdTAwMjYgIShnZnAgXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSlcbm1tL21lbXBvbGljeS5jOjI1NTA6XHRcdHBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbm1tL21lbXBvbGljeS5jLTI1NTEtXG4tLVxubW0vbWVtcG9saWN5LmM9Mjc2NT11bnNpZ25lZCBsb25nIGFsbG9jX3BhZ2VzX2J1bGtfbWVtcG9saWN5X25vcHJvZihnZnBfdCBnZnAsXG4tLVxubW0vbWVtcG9saWN5LmMtMjc3Mi1cdGlmICghaW5faW50ZXJydXB0KCkgXHUwMDI2XHUwMDI2ICEoZ2ZwIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXG5tbS9tZW1wb2xpY3kuYzoyNzczOlx0XHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG5tbS9tZW1wb2xpY3kuYy0yNzc0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5VTUEgUG9saWN5IFBhdGNoKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBjb2RlLCBgZ2V0X3Rhc2tfcG9saWN5YCBpcyBzdHJhaWdodGZvcndhcmQ7IGl0JiMzOTtzIGp1c3QgaGFuZGluZyBiYWNrIHRoZSB0YXNrIHBvbGljeSwgbm90aGluZyBjb21wbGljYXRlZCB0aGVyZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgYnVnIHdoZXJlIGB2bWFfcG9saWN5X21vZmAgd2FzIHByZW1hdHVyZWx5IHJldHVybmluZyBgZmFsc2VgLiBJdCB3YXMgYmFpbGluZyBvdXQgaWYgYHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5YCByZXR1cm5lZCBOVUxMLCBpbnN0ZWFkIG9mIGNvcnJlY3RseSBmYWxsaW5nIGJhY2sgdG8gdGhlIHRhc2sgcG9saWN5LCB3aGljaCBpcyBub3QgdGhlIGRlc2lyZWQgYmVoYXZpb3IuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lIGFjdHVhbGx5IQoKTm93LCBsZXQmIzM5O3Mgc2VlLCB3aGF0IGNvbmZpZ3MgYXJlIGF0IHBsYXkgaGVyZT8gSXQgbG9va3MgbGlrZSB3ZSBuZWVkIGBOVU1BYCBhbmQgYE5VTUFfQkFMQU5DSU5HYC4gQnV0IHdhaXQsIGRvZXNuJiMzOTt0IGBOVU1BX0JBTEFOQ0lOR2AgZGVwZW5kIG9uIGBOVU1BYD8gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoYXQgZGVwZW5kZW5jeSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSBnbyBwb2tlIGFyb3VuZCBgaW5pdC9LY29uZmlnYCB0byBjb25maXJtIHRoYXQuIEdvdHRhIGRvdCBteSBpJiMzOTtzIGFuZCBjcm9zcyBteSB0JiMzOTtzIHdpdGggdGhlc2UgTlVNQSBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDA5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMDk6XHRcbjEwMTA6XHRjb25maWcgTlVNQV9CQUxBTkNJTkdcbjEwMTE6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IHBsYWNlbWVudCBhd2FyZSBOVU1BIHNjaGVkdWxlclwmIzM0O1xuMTAxMjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HXG4xMDEzOlx0XHRkZXBlbmRzIG9uICFBUkNIX1dBTlRfTlVNQV9WQVJJQUJMRV9MT0NBTElUWVxuMTAxNDpcdFx0ZGVwZW5kcyBvbiBTTVAgXHUwMDI2XHUwMDI2IE5VTUFfTUlHUkFUSU9OIFx1MDAyNlx1MDAyNiAhUFJFRU1QVF9SVFxuMTAxNTpcdFx0aGVscFxuMTAxNjpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGF1dG9tYXRpYyBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudC5cbjEwMTc6XHRcdCAgVGhlIG1lY2hhbmlzbSBpcyBxdWl0ZSBwcmltaXRpdmUgYW5kIGlzIGJhc2VkIG9uIG1pZ3JhdGluZyBtZW1vcnkgd2hlblxuMTAxODpcdFx0ICBpdCBoYXMgcmVmZXJlbmNlcyB0byB0aGUgbm9kZSB0aGUgdGFzayBpcyBydW5uaW5nIG9uLlxuMTAxOTpcdFxuMTAyMDpcdFx0ICBUaGlzIHN5c3RlbSB3aWxsIGJlIGluYWN0aXZlIG9uIFVNQSBzeXN0ZW1zLlxuMTAyMTpcdFxuMTAyMjpcdGNvbmZpZyBTQ0hFRF9DQUNIRVxuMTAyMzpcdFx0Ym9vbCBcJiMzNDtDYWNoZSBhd2FyZSBsb2FkIGJhbGFuY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkzNjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIE5VTUEgQmFsYW5jaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhlIGtlcm5lbCBjb25maWcgb3B0aW9ucyByZWxhdGVkIHRvIE5VTUEgYmFsYW5jaW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgTlVNQV9CQUxBTkNJTkdgIGRlcGVuZHMgb24gcXVpdGUgYSBmZXcgdGhpbmdzOiBgQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR2AsIGBTTVBgLCBgTlVNQV9NSUdSQVRJT05gLCBhbmQgaW1wb3J0YW50bHksIGl0JiMzOTtzICpub3QqIGNvbXBhdGlibGUgd2l0aCBgUFJFRU1QVF9SVGAuIFJpZ2h0LCBzbyB0aGlzIGZlYXR1cmUgaXMgb25seSByZWxldmFudCBmb3Igc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcyBhbmQgd29ya2xvYWRzLgoKVGhlIGltbWVkaWF0ZSBhY3Rpb24gSSBuZWVkIHRvIHRha2UgaXMgdG8gZW5zdXJlIHRoYXQgYE5VTUFfQkFMQU5DSU5HYCBnZXRzIGFkZGVkIHRvIGBFbmFibGVDb25maWdzYCwgc2luY2UgSSYjMzk7bSB0cnlpbmcgdG8sIHdlbGwsIGVuYWJsZSBpdC4gTm8gbmVlZCB0byBhZGQgYE5VTUFgIHNlcGFyYXRlbHk7IGFzIGV4cGVjdGVkLCBgTlVNQV9NSUdSQVRJT05gIGFscmVhZHkgaW1wbGllcyB0aGF0IHRoZSBzeXN0ZW0gaXMgTlVNQS1hd2FyZSwgc28gYE5VTUFfQkFMQU5DSU5HYCBpcyB0aGUgc3BlY2lmaWMgdGhpbmcgSSYjMzk7bSBhZnRlci4KCkFoLCB5ZXMsIGBOVU1BX0JBTEFOQ0lOR2AgaXMgdGhlIHNwZWNpZmljIGNvbmZpZyB0aGF0IGVuYWJsZXMgYHRhc2tfbnVtYV93b3JrYCwgdGhhdCYjMzk7cyBob3cgaXQmIzM5O3MgbGlua2VkIHRvIHRoZSBhY3R1YWwgd29yay4gU28sIHllYWgsIGBOVU1BX0JBTEFOQ0lOR2AgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgY29uZmlnIHRvIGZvY3VzIG9uLgoKQnV0LCBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgZWxzZSBpbnZvbHZlZC4gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhlcmUmIzM5O3MgYSBkZWZhdWx0IGVuYWJsZW1lbnQgb3B0aW9uLiBDb3VsZCBgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEYCBhbHNvIGJlIG5lY2Vzc2FyeT8gT3RoZXJ3aXNlLCBJIG1pZ2h0IGJlIHN0dWNrIHdpdGggc3lzY3RscyBqdXN0IHRvIGVuYWJsZSBpdC4gSSBzaG91bGQgZ28gYW5kIGNoZWNrIGBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURgIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDMyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMzI6XHRcbjEwMzM6XHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG4xMDM0Olx0XHRib29sIFwmIzM0O0F1dG9tYXRpY2FsbHkgZW5hYmxlIE5VTUEgYXdhcmUgbWVtb3J5L3Rhc2sgcGxhY2VtZW50XCYjMzQ7XG4xMDM1Olx0XHRkZWZhdWx0IHlcbjEwMzY6XHRcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcbjEwMzc6XHRcdGhlbHBcbjEwMzg6XHRcdCAgSWYgc2V0LCBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgd2lsbCBiZSBlbmFibGVkIGlmIHJ1bm5pbmcgb24gYSBOVU1BXG4xMDM5Olx0XHQgIG1hY2hpbmUuXG4xMDQwOlx0XG4xMDQxOlx0Y29uZmlnIFNMQUJfT0JKX0VYVFxuMTA0MjpcdFx0Ym9vbFxuMTA0MzpcdFxuMTA0NDpcdG1lbnVjb25maWcgQ0dST1VQU1xuMTA0NTpcdFx0Ym9vbCBcJiMzNDtDb250cm9sIEdyb3VwIHN1cHBvcnRcJiMzNDtcbjEwNDY6XHRcdHNlbGVjdCBLRVJORlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTc6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMzAKCQkJCQkJCW91dHB1dDogMTIzCgkJCQkJCQl0aG91Z2h0czogNTUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIE5VTUEgQmFsYW5jaW5nKioKCk9rYXksIHNvIHRoZSBkZWZhdWx0IGZvciBgTlVNQV9CQUxBTkNJTkdgIGlzIGB5YCwgc28ganVzdCBlbmFibGluZyB0aGF0IGNvbmZpZyBzaG91bGQgYmUgc3VmZmljaWVudC4gTGV0JiMzOTtzIGRpZyBpbiBhIGJpdCBtb3JlLiBJJiMzOTt2ZSB0cmFja2VkIGRvd24gdGhhdCBgdm1hX3BvbGljeV9tb2ZgIGlzIG9ubHkgY2FsbGVkIHdpdGhpbiBga2VybmVsL3NjaGVkL2ZhaXIuY2AuIFRoYXQgZnVuY3Rpb24gc2VlbXMgbGlrZSBhIGdvb2QgJiMzNDtmb2N1cyBzeW1ib2wmIzM0OyBmb3IgZnV6emluZyB0aGlzIHBhdGNoLgoKSXMgYHZtYV9wb2xpY3lfbW9mYCBhIHBhcnRpY3VsYXJseSBob3QgcGF0aD8gSXQgaXMgY2FsbGVkIGR1cmluZyBgdGFza19udW1hX3dvcmtgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBwZXJpb2RpYyBWTUEgc2Nhbm5pbmcgcHJvY2Vzcy4gSXQgaXNuJiMzOTt0IGFzIGNyaXRpY2FsIGFzIHRoZSBgc2NoZWR1bGVgIG9yIGBwYWdlX2ZhdWx0YCBmdW5jdGlvbnMsIGJ1dCBpdCAqaXMqIGNhbGxlZCBmb3IgZXZlcnkgVk1BIGR1cmluZyBlYWNoIHNjYW4sIGFuZCBpdCYjMzk7cyAqcHJlY2lzZWx5KiB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBiZWluZyBtb2RpZmllZC4gVGhlcmVmb3JlLCBpdCBpcyBhIGdyZWF0IGNob2ljZS4gSSYjMzk7bGwgYWxzbyBpbmNsdWRlIGB0YXNrX251bWFfd29ya2AgdG8gaW5jcmVhc2UgdGhlIGNoYW5jZSBvZiB0cmlnZ2VyaW5nIHRoZSBOVU1BIGJhbGFuY2luZyBsb2dpYy4KClNvLCBoZXJlJiMzOTtzIHRoZSBwbGFuLgoKKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KKiAgIGBGb2N1c1N5bWJvbHNgOiBJJiMzOTtsbCB0YXJnZXQgYm90aCBgdm1hX3BvbGljeV9tb2ZgIGFuZCBgdGFza19udW1hX3dvcmtgLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBKdXN0IGVuYWJsZSBgTlVNQV9CQUxBTkNJTkdgIOKAkyB0aGUgZGVmYXVsdCBzaG91bGQgd29yay4KKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggYWx0ZXJzIGB2bWFfcG9saWN5X21vZmAmIzM5O3MgYmVoYXZpb3IsIHNwZWNpZmljYWxseSBoYW5kbGluZyBjYXNlcyB3aGVyZSBhIFZNQSYjMzk7cyBgZ2V0X3BvbGljeWAgb3BlcmF0aW9uIHJldHVybnMgTlVMTCBieSBmYWxsaW5nIGJhY2sgdG8gdGhlIHRhc2smIzM5O3MgbWVtb3J5IHBvbGljeS4gVGhpcyBpbXBhY3RzIE5VTUEgYmFsYW5jaW5nLiBUaGUgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLgoKSSBhbHNvIHdhbnRlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYF9fZ2V0X3ZtYV9wb2xpY3lgIHdvcmtzIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhpcyByaWdodC4gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBjb2RlLCBhbmQgaXQgY29uZmlybXMgbXkgdW5kZXJzdGFuZGluZzoKCmBgYGMKc3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdvZmZfdCAqaWx4KQp7CgkqaWx4ID0gMDsKCXJldHVybiAodm1hLSZndDt2bV9vcHMgJmFtcDsmYW1wOyB2bWEtJmd0O3ZtX29wcy0mZ3Q7Z2V0X3BvbGljeSkgPwoJCXZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5KHZtYSwgYWRkciwgaWx4KSA6IHZtYS0mZ3Q7dm1fcG9saWN5Owp9CmBgYAoKSWYgdGhlIGB2bWEtJmd0O3ZtX29wcy0mZ3Q7Z2V0X3BvbGljeWAgZXhpc3RzLCBpdCBjYWxscyBpdC4gT3RoZXJ3aXNlLCBpdCB1c2VzIGB2bWEtJmd0O3ZtX3BvbGljeWAuICBJZiB0aGUgYHZtYS0mZ3Q7dm1fb3BzLSZndDtnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMLCB0aGVuIGBfX2dldF92bWFfcG9saWN5YCByZXR1cm5zIE5VTEwsIHdoaWNoIGNhdXNlcyBgdm1hX3BvbGljeV9tb2ZgIHRvIGZhbGxiYWNrIHRvIHVzaW5nIGBnZXRfdGFza19wb2xpY3koY3VycmVudClgLiBUaGlzIGlzIHByZWNpc2VseSB0aGUgY2hhbmdlIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLiBJbiB0aGUgb2xkIGNvZGUsIGEgTlVMTCByZXR1cm4gZnJvbSBgdm1hLSZndDt2bV9vcHMtJmd0O2dldF9wb2xpY3lgIHJlc3VsdGVkIGluIGB2bWFfcG9saWN5X21vZmAgcmV0dXJuaW5nIGBmYWxzZWAuIEl0ICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZS4KCkFscmlnaHQsIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BX0JBTEFOQ0lORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtYV9wb2xpY3lfbW9mJiMzNDssCiAgICAmIzM0O3Rhc2tfbnVtYV93b3JrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB2bWFfcG9saWN5X21vZmAgdG8gY29ycmVjdGx5IGZhbGwgYmFjayB0byB0aGUgdGFzayYjMzk7cyBtZW1vcnkgcG9saWN5IHdoZW4gYSBWTUEmIzM5O3MgYGdldF9wb2xpY3lgIG9wZXJhdGlvbiByZXR1cm5zIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgTlVNQSBiYWxhbmNpbmcgYmVoYXZpb3IuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUFfQkFMQU5DSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1hX3BvbGljeV9tb2YmIzM0OywKICAgICYjMzQ7dGFza19udW1hX3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYHZtYV9wb2xpY3lfbW9mYCB0byBjb3JyZWN0bHkgZmFsbCBiYWNrIHRvIHRoZSB0YXNrJiMzOTtzIG1lbW9yeSBwb2xpY3kgd2hlbiBhIFZNQSYjMzk7cyBgZ2V0X3BvbGljeWAgb3BlcmF0aW9uIHJldHVybnMgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBOVU1BIGJhbGFuY2luZyBiZWhhdmlvci4gVGhlIGZlYXR1cmUgcmVxdWlyZXMgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AgdG8gYmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjEzOjExLjYwMzAyODU0OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5OTE0MjI4NzE0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BX0JBTEFOQ0lOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYV9wb2xpY3lfbW9mXCIsXG4gICAgXCJ0YXNrX251bWFfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB2bWFfcG9saWN5X21vZmAgdG8gY29ycmVjdGx5IGZhbGwgYmFjayB0byB0aGUgdGFzaydzIG1lbW9yeSBwb2xpY3kgd2hlbiBhIFZNQSdzIGBnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIE5VTUEgYmFsYW5jaW5nIGJlaGF2aW9yLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxMzoxMS42MDMwMzc1NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjI0ODE4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDVlYzdlODJkM2ZjMzVhNGFmMDk0OWYxOGMyOTJlOWRhYzI3OGY5OTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTc6MTM6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuY1xcbmluZGV4IDM2Njk5ZmFiZDNjMjIzLi5iYmE2NTg5OGFlZTE3NSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1wb2xpY3kuY1xcbisrKyBiL21tL21lbXBvbGljeS5jXFxuQEAgLTIwNTcsMjQgKzIwNTcsMTUgQEAgc3RydWN0IG1lbXBvbGljeSAqZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIGJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIHtcXG4gXFx0c3RydWN0IG1lbXBvbGljeSAqcG9sO1xcbitcXHRwZ29mZl90IGlseDtcXG4rXFx0Ym9vbCBtb2Y7XFxuIFxcbi1cXHRpZiAodm1hLVxcdTAwM2V2bV9vcHMgXFx1MDAyNlxcdTAwMjYgdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWdldF9wb2xpY3kpIHtcXG4tXFx0XFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4tXFx0XFx0cGdvZmZfdCBpbHg7XFx0XFx0LyogaWdub3JlZCBoZXJlICovXFxuLVxcbi1cXHRcXHRwb2wgPSB2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlZ2V0X3BvbGljeSh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIFxcdTAwMjZpbHgpO1xcbi1cXHRcXHRpZiAocG9sIFxcdTAwMjZcXHUwMDI2IChwb2wtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTVBPTF9GX01PRikpXFxuLVxcdFxcdFxcdHJldCA9IHRydWU7XFxuLVxcdFxcdG1wb2xfY29uZF9wdXQocG9sKTtcXG4tXFxuLVxcdFxcdHJldHVybiByZXQ7XFxuLVxcdH1cXG4tXFxuLVxcdHBvbCA9IHZtYS1cXHUwMDNldm1fcG9saWN5O1xcbitcXHRwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCwgXFx1MDAyNmlseCk7XFxuIFxcdGlmICghcG9sKVxcbiBcXHRcXHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XFxuLVxcbi1cXHRyZXR1cm4gcG9sLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1QT0xfRl9NT0Y7XFxuK1xcdG1vZiA9IHBvbC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNUE9MX0ZfTU9GO1xcbitcXHRtcG9sX2NvbmRfcHV0KHBvbCk7XFxuK1xcdHJldHVybiBtb2Y7XFxuIH1cXG4gXFxuIGJvb2wgYXBwbHlfcG9saWN5X3pvbmUoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5LCBlbnVtIHpvbmVfdHlwZSB6b25lKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxMzoxMi4wMjAxMDgxMTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODcyNTE5MTI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BX0JBTEFOQ0lOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYV9wb2xpY3lfbW9mXCIsXG4gICAgXCJ0YXNrX251bWFfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB2bWFfcG9saWN5X21vZmAgdG8gY29ycmVjdGx5IGZhbGwgYmFjayB0byB0aGUgdGFzaydzIG1lbW9yeSBwb2xpY3kgd2hlbiBhIFZNQSdzIGBnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIE5VTUEgYmFsYW5jaW5nIGJlaGF2aW9yLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVlYzdlODJkM2ZjMzVhNGFmMDk0OWYxOGMyOTJlOWRhYzI3OGY5OTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNzoxMzoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmNcbmluZGV4IDM2Njk5ZmFiZDNjMjIzLi5iYmE2NTg5OGFlZTE3NSAxMDA2NDRcbi0tLSBhL21tL21lbXBvbGljeS5jXG4rKysgYi9tbS9tZW1wb2xpY3kuY1xuQEAgLTIwNTcsMjQgKzIwNTcsMTUgQEAgc3RydWN0IG1lbXBvbGljeSAqZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gYm9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiB7XG4gXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7XG4rXHRwZ29mZl90IGlseDtcbitcdGJvb2wgbW9mO1xuIFxuLVx0aWYgKHZtYS1cdTAwM2V2bV9vcHMgXHUwMDI2XHUwMDI2IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeSkge1xuLVx0XHRib29sIHJldCA9IGZhbHNlO1xuLVx0XHRwZ29mZl90IGlseDtcdFx0LyogaWdub3JlZCBoZXJlICovXG4tXG4tXHRcdHBvbCA9IHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgXHUwMDI2aWx4KTtcbi1cdFx0aWYgKHBvbCBcdTAwMjZcdTAwMjYgKHBvbC1cdTAwM2VmbGFncyBcdTAwMjYgTVBPTF9GX01PRikpXG4tXHRcdFx0cmV0ID0gdHJ1ZTtcbi1cdFx0bXBvbF9jb25kX3B1dChwb2wpO1xuLVxuLVx0XHRyZXR1cm4gcmV0O1xuLVx0fVxuLVxuLVx0cG9sID0gdm1hLVx1MDAzZXZtX3BvbGljeTtcbitcdHBvbCA9IF9fZ2V0X3ZtYV9wb2xpY3kodm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIFx1MDAyNmlseCk7XG4gXHRpZiAoIXBvbClcbiBcdFx0cG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuLVxuLVx0cmV0dXJuIHBvbC1cdTAwM2VmbGFncyBcdTAwMjYgTVBPTF9GX01PRjtcbitcdG1vZiA9IHBvbC1cdTAwM2VmbGFncyBcdTAwMjYgTVBPTF9GX01PRjtcbitcdG1wb2xfY29uZF9wdXQocG9sKTtcbitcdHJldHVybiBtb2Y7XG4gfVxuIFxuIGJvb2wgYXBwbHlfcG9saWN5X3pvbmUoc3RydWN0IG1lbXBvbGljeSAqcG9saWN5LCBlbnVtIHpvbmVfdHlwZSB6b25lKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTM6MTIuMDIwMTEwNjM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ3MDkzODI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbXBvbGljeSBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9tZW1wb2xpY3kuY2AsIHNwZWNpZmljYWxseSB0aGUgY2hhbmdlcyB0byB0aGUgYHZtYV9wb2xpY3lfbW9mYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgbW9kaWZpY2F0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkndmUgc2ltcGxpZmllZCBgdm1hX3BvbGljeV9tb2ZgIGJ5IGludHJvZHVjaW5nIGBfX2dldF92bWFfcG9saWN5YC4gVGhlIG9sZCBjb2RlIGhhZCB0aGF0IGNvbmRpdGlvbmFsIG9mIHVzaW5nIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3lgIG9yIGZhbGxpbmcgYmFjayB0byBgdm1hLVx1MDAzZXZtX3BvbGljeWAsIGJ1dCB0aGlzIHBhdGNoIHJlcGxhY2VkIGl0IHdpdGggYSBkaXJlY3QgY2FsbCB0byBgX19nZXRfdm1hX3BvbGljeWAuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBpcyBhbiBpbXByb3ZlbWVudC4gVGhlIGNvZGUgYXBwZWFycyB0byBiZSBjYWxsaW5nIGEgbmV3IGhlbHBlciBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCBgX19nZXRfdm1hX3BvbGljeWAgYWJzdHJhY3RzIGF3YXkgdGhlIGxvZ2ljIG9mIGhhbmRsaW5nIGJvdGggdGhlIGB2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgYW5kIHRoZSBkaXJlY3QgYHZtX3BvbGljeWAgYWNjZXNzLiBTbywgaXQncyBkb2luZyBwcmVjaXNlbHkgd2hhdCB0aGUgb3JpZ2luYWwgY29kZSBkaWQsIGJ1dCBpbiBhIGNsZWFuZXIgZmFzaGlvbi4gVG8gYmUgc3VyZSwgSSdsbCBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBfX2dldF92bWFfcG9saWN5YCBpdHNlbGYsIGFsc28gaW4gYG1tL21lbXBvbGljeS5jYCwgdG8gdmVyaWZ5IG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTM6MTcuNDkxMDUxOTk1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NDg5MzI4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2dldF92bWFfcG9saWN5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21lbXBvbGljeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTExNDc9c3RhdGljIGxvbmcgZG9fZ2V0X21lbXBvbGljeShpbnQgKnBvbGljeSwgbm9kZW1hc2tfdCAqbm1hc2ssXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0xMTgxLVxcdFxcdH1cXG5tbS9tZW1wb2xpY3kuYzoxMTgyOlxcdFxcdHBvbCA9IF9fZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCBcXHUwMDI2aWx4KTtcXG5tbS9tZW1wb2xpY3kuYy0xMTgzLVxcdH0gZWxzZSBpZiAoYWRkcilcXG4tLVxcbm1tL21lbXBvbGljeS5jPTE5OTA9Ym9vbCB2bWFfbWlncmF0YWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIwMTctXFxubW0vbWVtcG9saWN5LmM6MjAxODpzdHJ1Y3QgbWVtcG9saWN5ICpfX2dldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbXBvbGljeS5jLTIwMTktXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwZ29mZl90ICppbHgpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDQxPXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjA0NS1cXG5tbS9tZW1wb2xpY3kuYzoyMDQ2OlxcdHBvbCA9IF9fZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCBpbHgpO1xcbm1tL21lbXBvbGljeS5jLTIwNDctXFx0aWYgKCFwb2wpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDU3PWJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMDYyLVxcbm1tL21lbXBvbGljeS5jOjIwNjM6XFx0cG9sID0gX19nZXRfdm1hX3BvbGljeSh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIFxcdTAwMjZpbHgpO1xcbm1tL21lbXBvbGljeS5jLTIwNjQtXFx0aWYgKCFwb2wpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjEzOjE3Ljc0NTk1MzE0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU3MDA2NDM4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYF9fZ2V0X3ZtYV9wb2xpY3lgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGUgZGV0YWlscy4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgYF9fZ2V0X3ZtYV9wb2xpY3lgIGltcGxlbWVudGF0aW9uLiBJJ20gZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgbWVtb3J5IHBvbGljaWVzIHdpdGhpbiB0aGUgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBjb250ZXh0LiBJIHdhbnQgdG8gbG9vayBhdCB0aGUgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFZNQSBmbGFncywgdGhlIE5VTUEgcG9saWNpZXMsIGFuZCBwb3RlbnRpYWxseSBob3cgaXQgaW50ZWdyYXRlcyB3aXRoIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgKFRIUCkgb3Igb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBjcnVjaWFsIGRlY2lzaW9uIHBvaW50cyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBhbmQgdGhlbiBJJ2xsIGV2YWx1YXRlIHRoZSBjb2RlIGZvciBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBzdWJ0bGUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGVkZ2UgY2FzZXMgYXJvdW5kIHBvbGljeSBpbmhlcml0YW5jZSwgbWlncmF0aW9uLCBhbmQgdGhlIGltcGFjdCBvZiBwb2xpY3kgY2hhbmdlcyBkdXJpbmcgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb25zLiBJIGV4cGVjdCB0aGVyZSB0byBiZSBzb21lIGludGVyZXN0aW5nIG51YW5jZXMgaW4gdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxMzozMy40NDY2MDMyNzVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzkzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtcG9saWN5LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAxOCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAxODpcXHRzdHJ1Y3QgbWVtcG9saWN5ICpfX2dldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjIwMTk6XFx0XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwZ29mZl90ICppbHgpXFxuMjAyMDpcXHR7XFxuMjAyMTpcXHRcXHQqaWx4ID0gMDtcXG4yMDIyOlxcdFxcdHJldHVybiAodm1hLVxcdTAwM2V2bV9vcHMgXFx1MDAyNlxcdTAwMjYgdm1hLVxcdTAwM2V2bV9vcHMtXFx1MDAzZWdldF9wb2xpY3kpID9cXG4yMDIzOlxcdFxcdFxcdHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VnZXRfcG9saWN5KHZtYSwgYWRkciwgaWx4KSA6IHZtYS1cXHUwMDNldm1fcG9saWN5O1xcbjIwMjQ6XFx0fVxcbjIwMjU6XFx0XFxuMjAyNjpcXHQvKlxcbjIwMjc6XFx0ICogZ2V0X3ZtYV9wb2xpY3koQHZtYSwgQGFkZHIsIEBvcmRlciwgQGlseClcXG4yMDI4OlxcdCAqIEB2bWE6IHZpcnR1YWwgbWVtb3J5IGFyZWEgd2hvc2UgcG9saWN5IGlzIHNvdWdodFxcbjIwMjk6XFx0ICogQGFkZHI6IGFkZHJlc3MgaW4gQHZtYSBmb3Igc2hhcmVkIHBvbGljeSBsb29rdXBcXG4yMDMwOlxcdCAqIEBvcmRlcjogMCwgb3IgYXBwcm9wcmlhdGUgaHVnZV9wYWdlX29yZGVyIGZvciBpbnRlcmxlYXZpbmdcXG4yMDMxOlxcdCAqIEBpbHg6IGludGVybGVhdmUgaW5kZXggKG91dHB1dCksIGZvciB1c2Ugb25seSB3aGVuIE1QT0xfSU5URVJMRUFWRSBvclxcbjIwMzI6XFx0ICogICAgICAgTVBPTF9XRUlHSFRFRF9JTlRFUkxFQVZFXFxuMjAzMzpcXHQgKlxcbjIwMzQ6XFx0ICogUmV0dXJucyBlZmZlY3RpdmUgcG9saWN5IGZvciBhIFZNQSBhdCBzcGVjaWZpZWQgYWRkcmVzcy5cXG4yMDM1OlxcdCAqIEZhbGxzIGJhY2sgdG8gY3VycmVudC1cXHUwMDNlbWVtcG9saWN5IG9yIHN5c3RlbSBkZWZhdWx0IHBvbGljeSwgYXMgbmVjZXNzYXJ5LlxcbjIwMzY6XFx0ICogU2hhcmVkIHBvbGljaWVzIFt0aG9zZSBtYXJrZWQgYXMgTVBPTF9GX1NIQVJFRF0gcmVxdWlyZSBhbiBleHRyYSByZWZlcmVuY2VcXG4yMDM3OlxcdCAqIGNvdW50LS1hZGRlZCBieSB0aGUgZ2V0X3BvbGljeSgpIHZtX29wLCBhcyBhcHByb3ByaWF0ZS0tdG8gcHJvdGVjdCBhZ2FpbnN0XFxuMjAzODpcXHQgKiBmcmVlaW5nIGJ5IGFub3RoZXIgdGFzay4gIEl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIHRoZVxcbjIwMzk6XFx0ICogZXh0cmEgcmVmZXJlbmNlIGZvciBzaGFyZWQgcG9saWNpZXMuXFxuMjA0MDpcXHQgKi9cXG4yMDQxOlxcdHN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjIwNDI6XFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG9yZGVyLCBwZ29mZl90ICppbHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjEzOjMzLjQ0NzA4NzQzNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4Njk3NDk2MTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT3B0aW1pemF0aW9uIG9mIGB2bWFfcG9saWN5X21vZmAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCdzIG1ha2luZyBhIHNlZW1pbmdseSBzdHJhaWdodGZvcndhcmQgY2hhbmdlIHRvIGB2bWFfcG9saWN5X21vZmAuIEVzc2VudGlhbGx5LCBpdCdzIHJlcGxhY2luZyBzb21lIGR1cGxpY2F0ZWQgbG9naWMgd2l0aCBhIGNhbGwgdG8gYF9fZ2V0X3ZtYV9wb2xpY3lgLiBUaGUgb2xkIGNvZGUgd2FzIGhhbmRsaW5nIHRoZSByZXRyaWV2YWwgb2YgdGhlIG1lbW9yeSBwb2xpY3kgaW4gYSBtb3JlIHZlcmJvc2Ugd2F5LiBJdCBjaGVja2VkIGlmIGB2bWEtXHUwMDNldm1fb3BzYCBhbmQgaXRzIGBnZXRfcG9saWN5YCBmdW5jdGlvbiB3ZXJlIHZhbGlkLiBJZiB0aGV5IHdlcmUsIGl0IGNhbGxlZCB0aGF0IGZ1bmN0aW9uIGFuZCBjaGVja2VkIHRoZSBmbGFncyBmb3IgdGhlIGBNUE9MX0ZfTU9GYCBiaXQuIE90aGVyd2lzZSwgaXQgZGVmYXVsdGVkIHRvIHRoZSBgdm1hLVx1MDAzZXZtX3BvbGljeWAgb3IgdGhlIHRhc2sgcG9saWN5LiBUaGUgbmV3IGNvZGUgaXMgY2xlYW5lcjogaXQgdXNlcyBgX19nZXRfdm1hX3BvbGljeWAgdG8gYWJzdHJhY3QgdGhhdCBhd2F5LlxuXG5Ob3csIG15IGluaXRpYWwgdGhvdWdodCBpczogdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgaW1wcm92ZW1lbnQsIGJ1dCB0aGVyZSdzIGFsd2F5cyBhIGhpZGRlbiBjb3JuZXIgY2FzZS4gTGV0IG1lIHRoaW5rLiAqQWhhISogYF9fZ2V0X3ZtYV9wb2xpY3lgIG1pZ2h0IHJldHVybiBgdm1hLVx1MDAzZXZtX3BvbGljeWAgaWYgYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgaXMgTlVMTC4gVGhpcyBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCwgYmVjYXVzZSBub3cgYG1wb2xfY29uZF9wdXQocG9sKWAgd2lsbCBiZSBjYWxsZWQgb24gYHZtYS1cdTAwM2V2bV9wb2xpY3lgLiBJIHdvbmRlciwgZG9lcyBgbXBvbF9jb25kX3B1dGAgYWN0dWFsbHkgKmRvKiBhbnl0aGluZyB3aGVuIGFwcGxpZWQgdG8gYHZtYS1cdTAwM2V2bV9wb2xpY3lgPyBJdCBmZWVscyBhIGxpdHRsZSByZWR1bmRhbnQgdG8gbWUuIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBtcG9sX2NvbmRfcHV0YCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyB3aXRoIHRoaXMgc2ltcGxpZmljYXRpb24uIEknbSBnb2luZyB0byBsb29rIGludG8gaXQgcmlnaHQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjk5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTM6NTIuMTQ0NTg2MjkzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzk0Njk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wb2xfY29uZF9wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWVtcG9saWN5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtcG9saWN5LmM9MTE0Nz1zdGF0aWMgbG9uZyBkb19nZXRfbWVtcG9saWN5KGludCAqcG9saWN5LCBub2RlbWFza190ICpubWFzayxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTEyMzktIG91dDpcXG5tbS9tZW1wb2xpY3kuYzoxMjQwOlxcdG1wb2xfY29uZF9wdXQocG9sKTtcXG5tbS9tZW1wb2xpY3kuYy0xMjQxLVxcdGlmICh2bWEpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNDg2PXN0YXRpYyBsb25nIGRvX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMTYwMi1cXHRcXHRcXHRcXHQvKiBXZSBhbHJlYWR5IGtub3cgdGhlIHBvbCwgYnV0IG5vdCB0aGUgaWx4ICovXFxubW0vbWVtcG9saWN5LmM6MTYwMzpcXHRcXHRcXHRcXHRtcG9sX2NvbmRfcHV0KGdldF92bWFfcG9saWN5KHZtYSwgYWRkciwgb3JkZXIsXFxubW0vbWVtcG9saWN5LmMtMTYwNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZtbXBvbC5pbHgpKTtcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIwNTc9Ym9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIwNjYtXFx0bW9mID0gcG9sLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1QT0xfRl9NT0Y7XFxubW0vbWVtcG9saWN5LmM6MjA2NzpcXHRtcG9sX2NvbmRfcHV0KHBvbCk7XFxubW0vbWVtcG9saWN5LmMtMjA2OC1cXHRyZXR1cm4gbW9mO1xcbi0tXFxubW0vbWVtcG9saWN5LmM9MjUyND1zdHJ1Y3QgZm9saW8gKnZtYV9hbGxvY19mb2xpb19ub3Byb2YoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjUzNS1cXHRmb2xpbyA9IGZvbGlvX2FsbG9jX21wb2xfbm9wcm9mKGdmcCwgb3JkZXIsIHBvbCwgaWx4LCBudW1hX25vZGVfaWQoKSk7XFxubW0vbWVtcG9saWN5LmM6MjUzNjpcXHRtcG9sX2NvbmRfcHV0KHBvbCk7XFxubW0vbWVtcG9saWN5LmMtMjUzNy1cXHRyZXR1cm4gZm9saW87XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yOTc1PWludCBtcG9sX21pc3BsYWNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTMwNjYtb3V0Olxcbm1tL21lbXBvbGljeS5jOjMwNjc6XFx0bXBvbF9jb25kX3B1dChwb2wpO1xcbm1tL21lbXBvbGljeS5jLTMwNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjEzOjUyLjIwNTM4Nzc3N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NzAzNTgyMDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlZmluaXRpb24gb2YgYG1wb2xfY29uZF9wdXRgKipcblxuUmlnaHQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG1wb2xfY29uZF9wdXRgIGZ1bmN0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIGFsd2F5cyB0byBmaWd1cmUgb3V0IGV4YWN0bHkgd2hlcmUgaXQncyBkZWZpbmVkLiBLbm93aW5nIHRoZSBkZWZpbml0aW9uIGlzIGNydWNpYWw7IGl0J3MgdGhlIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHB1cnBvc2UsIHRoZSBkYXRhIGl0IG9wZXJhdGVzIG9uLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uIEknbGwgbmVlZCB0byBsb2NhdGUgdGhlIGhlYWRlciBmaWxlIG9yIHNvdXJjZSBmaWxlIHdoZXJlIHRoaXMgaXMgZGVjbGFyZWQgb3IgaW1wbGVtZW50ZWQuIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAzMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE0OjIwLjkwODk5NzQ5NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4MzY4OTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1wb2xfY29uZF9wdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oPTc3PXN0YXRpYyBpbmxpbmUgaW50IG1wb2xfbmVlZHNfY29uZF9yZWYoc3RydWN0IG1lbXBvbGljeSAqcG9sKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC04MS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjgyOnN0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX2NvbmRfcHV0KHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTgzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtcG9saWN5Lmg9MjAwPXN0YXRpYyBpbmxpbmUgdm9pZCBtcG9sX3B1dChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oLTIwMy1cXG5pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oOjIwNDpzdGF0aWMgaW5saW5lIHZvaWQgbXBvbF9jb25kX3B1dChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0yMDUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNDoyMS4wNDczODUwNTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDExMjQ4ODU5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYG1wb2xfY29uZF9wdXRgIGluIGBsaW51eC9tZW1wb2xpY3kuaGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNyYWNrIG9wZW4gdGhlIGBsaW51eC9tZW1wb2xpY3kuaGAgaGVhZGVyIGZpbGUgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBgbXBvbF9jb25kX3B1dGAgZnVuY3Rpb24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgcGllY2UgcmVsYXRlZCB0byBtZW1vcnkgcG9saWNpZXMsIHNvIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBiZWhhdmlvci4gSXQncyBsaWtlbHkgYSBjb25kaXRpb25hbCBkZWNyZW1lbnQgb3BlcmF0aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIHJlZmVyZW5jZSBjb3VudGluZyBvciBzb21lIG90aGVyIGZvcm0gb2YgcmVzb3VyY2UgbWFuYWdlbWVudCBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IHBvbGljeSBzdHJ1Y3R1cmVzLiBUaGUgXCJjb25kXCIgc3VnZ2VzdHMgc29tZSBzb3J0IG9mIGNoZWNrIG9yIGd1YXJkIGlzIGludm9sdmVkIGJlZm9yZSB0aGUgZGVjcmVtZW50IGFjdHVhbGx5IGhhcHBlbnMsIHdoaWNoIGNvdWxkIGJlIGltcG9ydGFudCBmb3IgY29uY3VycmVuY3kgY29udHJvbCBvciBhdm9pZGluZyB1bmRlcmZsb3cuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgY29uc2lkZXIgYW55IGNvbmRpdGlvbnMgYXR0YWNoZWQsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciByZWxhdGVkIHN0cnVjdHVyZXMgYW5kIHdoYXQgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzIGFyZS4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkYXRhIHR5cGVzIGludm9sdmVkIGFuZCB0cnkgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGJlaGluZCBpdHMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgcHJvYmFibHkgYSBnb29kIHRpbWUgdG8gZ2V0IGEgcmVtaW5kZXIgYXMgdG8gdGhlIHB1cnBvc2Ugb2YgdGhlIHBvbGljeSBjYWNoZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTM5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE1OjAyLjE3MjI3NDY0OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA3NyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3NzpcXHRzdGF0aWMgaW5saW5lIGludCBtcG9sX25lZWRzX2NvbmRfcmVmKHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcXG4gIDc4OlxcdHtcXG4gIDc5OlxcdFxcdHJldHVybiAocG9sIFxcdTAwMjZcXHUwMDI2IChwb2wtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTVBPTF9GX1NIQVJFRCkpO1xcbiAgODA6XFx0fVxcbiAgODE6XFx0XFxuICA4MjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbXBvbF9jb25kX3B1dChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXFxuICA4MzpcXHR7XFxuICA4NDpcXHRcXHRpZiAobXBvbF9uZWVkc19jb25kX3JlZihwb2wpKVxcbiAgODU6XFx0XFx0XFx0X19tcG9sX3B1dChwb2wpO1xcbiAgODY6XFx0fVxcbiAgODc6XFx0XFxuICA4ODpcXHRleHRlcm4gc3RydWN0IG1lbXBvbGljeSAqX19tcG9sX2R1cChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpO1xcbiAgODk6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sX2R1cChzdHJ1Y3QgbWVtcG9saWN5ICpwb2wpXFxuICA5MDpcXHR7XFxuICA5MTpcXHRcXHRpZiAocG9sKVxcbiAgOTI6XFx0XFx0XFx0cG9sID0gX19tcG9sX2R1cChwb2wpO1xcbiAgOTM6XFx0XFx0cmV0dXJuIHBvbDtcXG4gIDk0OlxcdH1cXG4gIDk1OlxcdFxcbiAgOTY6XFx0c3RhdGljIGlubGluZSB2b2lkIG1wb2xfZ2V0KHN0cnVjdCBtZW1wb2xpY3kgKnBvbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTU6MDIuMTcyMzc2NTc5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMzQwNjI1OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbW9yeSBQb2xpY3kgUmVmYWN0b3JpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBjb2RlIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRoZSBgbXBvbF9jb25kX3B1dGAgdXNhZ2UuIE15IGluaXRpYWwgdGhvdWdodCBpcywgYG1wb2xfY29uZF9wdXRgIG9ubHkgZGVjcmVtZW50cyBhIHJlZmVyZW5jZSBpZiBgTVBPTF9GX1NIQVJFRGAgaXMgc2V0LiBOb3csIEknbSB0cnlpbmcgdG8gdHJhY2UgdGhlIGxvZ2ljLiBJZiBgdm1hLVx1MDAzZXZtX3BvbGljeWAgKmhhcyogYE1QT0xfRl9TSEFSRURgIHNldCwgdGhlbiBgbXBvbF9jb25kX3B1dGAgd2lsbCByZWxlYXNlIHRoZSBwb2xpY3ksIHJpZ2h0PyBCdXQgd2FpdCwgSSBkb24ndCB0aGluayBgdm1hLVx1MDAzZXZtX3BvbGljeWAgKmV2ZXIqIGhhcyBgTVBPTF9GX1NIQVJFRGAgc2V0IGJ5IGRlZmF1bHQuIEkgbmVlZCB0byBjb25maXJtIHRoYXQuXG5cbkl0J3MgdXN1YWxseSBvbmx5IHNldCBvbiBwb2xpY2llcyByZXR1cm5lZCBieSBgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5YCwgbGlrZSBpbiBzaGFyZWQgbWVtb3J5LiBJZiB3ZSdyZSBqdXN0IGRlYWxpbmcgd2l0aCB0aGUgZGVmYXVsdCBgdm1hLVx1MDAzZXZtX3BvbGljeWAgdGhlbiBgbXBvbF9jb25kX3B1dGAgZG9lcyBub3RoaW5nLiBCdXQsIHdoYXQgaWYgdGhlIHRhc2sncyBwb2xpY3ksIGZyb20gYGdldF90YXNrX3BvbGljeShjdXJyZW50KWAsIGlzIGBNUE9MX0ZfU0hBUkVEYD8gTm8sIHRhc2sgcG9saWNpZXMgc2hvdWxkbid0IGhhdmUgdGhhdCBmbGFnLCBzbyB0aGlzIGlzIGFib3V0IGFuIGVxdWl2YWxlbnQgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblNvIGl0IHNlZW1zIHRvIGJlIGxvZ2ljYWxseSB0aGUgc2FtZSwgYnV0IHRoaXMgY291bGQgYmUgYSByZWZhY3RvcmluZy4gSSdkIGxvdmUgdG8ga25vdyB3aGF0IHRoZSBjb21taXQgbWVzc2FnZSBpcywgYnV0IGl0J3Mgbm90IGF2YWlsYWJsZSByaWdodCBub3cuIExldCdzIHNlZS4uLiB0aGUgY2hhbmdlIGlzIHRoaXM6XG5cbmBgYGNcbi1cdGlmICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kpIHtcbi1cdFx0Ym9vbCByZXQgPSBmYWxzZTtcbi1cdFx0cGdvZmZfdCBpbHg7XHRcdC8qIGlnbm9yZWQgaGVyZSAqL1xuLVxuLVx0XHRwb2wgPSB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kodm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIFx1MDAyNmlseCk7XG4tXHRcdGlmIChwb2wgXHUwMDI2XHUwMDI2IChwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0YpKVxuLVx0XHRcdHJldCA9IHRydWU7XG4tXHRcdG1wb2xfY29uZF9wdXQocG9sKTtcbi1cbi1cdFx0cmV0dXJuIHJldDtcbi1cdH1cbi1cbi1cdHBvbCA9IHZtYS1cdTAwM2V2bV9wb2xpY3k7XG4rXHRwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCBcdTAwMjZpbHgpO1xuIFx0aWYgKCFwb2wpXG4gXHRcdHBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbi1cbi1cdHJldHVybiBwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0Y7XG4rXHRtb2YgPSBwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0Y7XG4rXHRtcG9sX2NvbmRfcHV0KHBvbCk7XG4rXHRyZXR1cm4gbW9mO1xuYGBgXG5cbk9rYXksIHNvIGxldCdzIGJyZWFrIGRvd24gdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gVGhlIG9sZCBjb2RlIGhhbmRsZWQgdGhlIGNhc2Ugd2hlcmUgYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgcmV0dXJuZWQgTlVMTCwgbGlrZSB0aGlzOlxuXG5gYGBjXG5cdFx0cG9sID0gdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5KHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCBcdTAwMjZpbHgpO1xuXHRcdGlmIChwb2wgXHUwMDI2XHUwMDI2IChwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0YpKVxuXHRcdFx0cmV0ID0gdHJ1ZTtcblx0XHRtcG9sX2NvbmRfcHV0KHBvbCk7XG5cblx0XHRyZXR1cm4gcmV0O1xuYGBgXG5cbkVzc2VudGlhbGx5LCBpZiBgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5YCByZXR1cm5zIE5VTEwsIHRoZSBvbGQgY29kZSByZXR1cm5zIGBmYWxzZWAhIE5vdywgbG9va2luZyBhdCB0aGUgbmV3IGNvZGU6XG5cbmBgYGNcblx0cG9sID0gX19nZXRfdm1hX3BvbGljeSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgXHUwMDI2aWx4KTtcbmBgYFxuXG5JZiBgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5YCByZXR1cm5zIE5VTEwsIGl0IHNlZW1zIGBfX2dldF92bWFfcG9saWN5YCByZXR1cm5zIGB2bWEtXHUwMDNldm1fcG9saWN5YC4gT2theSwgbGV0J3MgZG91YmxlIGNoZWNrIHdoYXQgYF9fZ2V0X3ZtYV9wb2xpY3lgIGRvZXMuLi4gVGhpcyBjb3VsZCBiZSBrZXkhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU5NTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNToxMi41MTMwMTk5NjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY4NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbXBvbGljeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMTgsXG4gIFwiTGluZUNvdW50XCI6IDEwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwMTg6XFx0c3RydWN0IG1lbXBvbGljeSAqX19nZXRfdm1hX3BvbGljeShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4yMDE5OlxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdvZmZfdCAqaWx4KVxcbjIwMjA6XFx0e1xcbjIwMjE6XFx0XFx0KmlseCA9IDA7XFxuMjAyMjpcXHRcXHRyZXR1cm4gKHZtYS1cXHUwMDNldm1fb3BzIFxcdTAwMjZcXHUwMDI2IHZtYS1cXHUwMDNldm1fb3BzLVxcdTAwM2VnZXRfcG9saWN5KSA/XFxuMjAyMzpcXHRcXHRcXHR2bWEtXFx1MDAzZXZtX29wcy1cXHUwMDNlZ2V0X3BvbGljeSh2bWEsIGFkZHIsIGlseCkgOiB2bWEtXFx1MDAzZXZtX3BvbGljeTtcXG4yMDI0OlxcdH1cXG4yMDI1OlxcdFxcbjIwMjY6XFx0LypcXG4yMDI3OlxcdCAqIGdldF92bWFfcG9saWN5KEB2bWEsIEBhZGRyLCBAb3JkZXIsIEBpbHgpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE1OjEyLjUxMzI5MjAzN1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTgzNDE1NjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvbGljeSBDaGFuZ2UgaW4gdGhlIFZpcnR1YWwgTWVtb3J5IEFyZWEgKFZNQSkgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBfX2dldF92bWFfcG9saWN5YCwgdGhlIGNvZGUgbm93IGV4cGxpY2l0bHkgY2hlY2tzIGlmIGEgYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgZnVuY3Rpb24gZXhpc3RzIGFuZCBjYWxscyBpdCBpZiBpdCBkb2VzLiBDcnVjaWFsbHksIGlmIHRoYXQgZnVuY3Rpb24gKnJldHVybnMqIE5VTEwsIGBfX2dldF92bWFfcG9saWN5YCBpdHNlbGYgKnJldHVybnMqIE5VTEwuIFRoaXMgaXMgdGhlIGtleSBkaWZmZXJlbmNlLiBUaGVuLCBgdm1hX3BvbGljeV9tb2ZgIHVzZXMgdGhlIHJlc3VsdCBmcm9tIGBfX2dldF92bWFfcG9saWN5YC4gSXQgY2hlY2tzIGlmIHRoZSByZXR1cm5lZCB2YWx1ZSBmcm9tIGBfX2dldF92bWFfcG9saWN5YCBpcyBOVUxMLCBhbmQgKmlmKiBpdCdzIE5VTEwsIGl0IGZhbGxzIGJhY2sgdG8gdXNpbmcgYGdldF90YXNrX3BvbGljeShjdXJyZW50KWAuXG5cbk5vdywgdGhlIG9sZCBjb2RlIHdhcyBkaWZmZXJlbnQuIFByZXZpb3VzbHksIGlmIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3lgIHJldHVybmVkIE5VTEwsIHRoZSAqZW50aXJlIGZ1bmN0aW9uKiBpbW1lZGlhdGVseSByZXR1cm5lZCBgZmFsc2VgLiBJdCBkaWRuJ3QgZmFsbCBiYWNrIHRvIGB2bWEtXHUwMDNldm1fcG9saWN5YCBvciBgZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpYC4gU28sIHRoZSByZXR1cm4gb2YgTlVMTCBmcm9tIHRoZSBgZ2V0X3BvbGljeWAgZnVuY3Rpb24gd2FzIGVmZmVjdGl2ZWx5IHRyZWF0ZWQgYXMgYSBmYWlsdXJlLlxuXG5UaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSEgVGhpcyBmaXhlcyBhIGJ1ZyB3aGVyZSBgdm1hX3BvbGljeV9tb2ZgIHdvdWxkIGluY29ycmVjdGx5IHJldHVybiBgZmFsc2VgIGlmIHRoZSBgZ2V0X3BvbGljeWAgZnVuY3Rpb24gcmV0dXJuZWQgTlVMTC4gVGhlIG5ldyBiZWhhdmlvciBjb3JyZWN0bHkgZmFsbHMgYmFjayB0byB0aGUgdGFzayBwb2xpY3kgaW4gdGhpcyBzY2VuYXJpby5cblxuTGV0J3MgY29uZmlybSB0aGlzIGJlaGF2aW9yIGlzIGV4cGVjdGVkLiBDYW4gYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgYWN0dWFsbHkgcmV0dXJuIE5VTEw/IFllcyEgRm9yIGluc3RhbmNlLCBgc2htZW1fZ2V0X3BvbGljeWAgbWlnaHQgcmV0dXJuIE5VTEwgaWYgbm8gcG9saWN5IGlzIHNldCBvbiB0aGUgaW5vZGUuIFRoaXMgY2hhbmdlIGVuc3VyZXMgdGhhdCB0aGUgdGFzayBwb2xpY3kgaXMgdXNlZCB3aGVuIGl0IHNob3VsZCBiZS4gVGhlIGJlaGF2aW9yIGNoYW5nZSBpcyBjb3JyZWN0LlxuXG5UaGlzIGlzIGEgY2xlYXIgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUaGUgZm9jdXMgZnVuY3Rpb24gaXMgYHZtYV9wb2xpY3lfbW9mYC4gTm93LCB3aG8gY2FsbHMgYHZtYV9wb2xpY3lfbW9mYD9cblxuXG4iLCJJbnB1dFRva2VucyI6NzczNSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE1OjIwLjA5NjcxMjgzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzEwNDcyNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hX3BvbGljeV9tb2ZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbXBvbGljeS5jPTIwNDE9c3RydWN0IG1lbXBvbGljeSAqZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMDU2LVxcbm1tL21lbXBvbGljeS5jOjIwNTc6Ym9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5tbS9tZW1wb2xpY3kuYy0yMDU4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTU6MjAuNDY3NzY4Njg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NjAyNjY0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhcyBpZiB0aGVzZSBhcmUgbXkgdGhvdWdodHMsIGtlZXBpbmcgaW4gbWluZCBteSBmaWVsZCBvZiBleHBlcnRpc2UgKHdoaWNoIEkgYXNzdW1lIHlvdSdsbCBpbmZlciBmcm9tIHRoZSBxdWVyeSk6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYHZtYV9wb2xpY3lfbW9mYCBDYWxsZXIqKlxuXG5BbHJpZ2h0LCBob2xkIG9uIGEgc2Vjb25kLiBCZWZvcmUgSSBwcm9jZWVkIGFueSBmdXJ0aGVyIHdpdGggdGhpcyBsaW5lIG9mIGludmVzdGlnYXRpb24sIEkgbmVlZCB0byB0YWtlIGEgc3RlcCBiYWNrIGFuZCBpZGVudGlmeSB0aGUgc291cmNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aG8sIG9yIHdoYXQgc3BlY2lmaWMgcGFydCBvZiB0aGUga2VybmVsLCBpcyBjYWxsaW5nIGB2bWFfcG9saWN5X21vZmAuIFRoaXMgZnVuY3Rpb24ncyB2ZXJ5IG5hbWUgc3VnZ2VzdHMgYSBjcml0aWNhbCBsaW5rIHRvIE1lbW9yeS1PcHRpbWl6ZWQgRnVuY3Rpb25zIChNT0ZzKSwgb3IgcGVyaGFwcyBhIHdpZGVyIHBvbGljeSByZWxhdGVkIHRvIFZpcnR1YWwgTWVtb3J5IEFyZWFzIChWTUFzKSwgYW5kIGJlZm9yZSBJIGNhbiBkaXNzZWN0ICp3aGF0KiBpdCdzIGRvaW5nLCBJIGhhdmUgdG8ga25vdyAqd2hvKiBpcyB0ZWxsaW5nIGl0IHRvIGRvIGl0LiBJcyBpdCBhIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50PyBJcyBpdCB0cmlnZ2VyZWQgYnkgYSBzcGVjaWZpYyBzeXN0ZW0gY2FsbD8gSXMgaXQgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgZHJpdmVyIG9yIHN1YnN5c3RlbT8gS25vd2luZyB0aGUgY2FsbGVyIGlzIGFic29sdXRlbHkgZm91bmRhdGlvbmFsIHRvIHVuZGVyc3RhbmRpbmcgaXRzIHBsYWNlIGluIHRoZSBncmVhdGVyIHN5c3RlbSBkZXNpZ24gYW5kIHRoZSBsb2dpYyBpdCdzIHRyeWluZyB0byBpbXBsZW1lbnQsIGFuZCB0aHVzLCBJICpuZWVkKiB0byBzdGFydCB0aGVyZS4gSSdtIGdvaW5nIHRvIHRyYWNrIGRvd24gdGhlIGNhbGxlcnMgKnJpZ2h0IG5vdyosIGJlZm9yZSBldmVuIGNvbnNpZGVyaW5nIHRoZSBuZXh0IHN0ZXAgaW4gbXkgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODczNiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE1OjI0LjAyODAzOTIyM1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc4MzA4NzAzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWFfcG9saWN5X21vZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaD0xMzQ9c3RydWN0IG1lbXBvbGljeSAqZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xMzUtXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgb3JkZXIsIHBnb2ZmX3QgKmlseCk7XFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaDoxMzY6Ym9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaC0xMzctXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTQwNzY9c3RhdGljIHZvaWQgdGFza19udW1hX3dvcmsoc3RydWN0IGNhbGxiYWNrX2hlYWQgKndvcmspXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQxNjgtXFx0Zm9yICg7IHZtYTsgdm1hID0gdm1hX25leHQoXFx1MDAyNnZtaSkpIHtcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjQxNjk6XFx0XFx0aWYgKCF2bWFfbWlncmF0YWJsZSh2bWEpIHx8ICF2bWFfcG9saWN5X21vZih2bWEpIHx8XFxua2VybmVsL3NjaGVkL2ZhaXIuYy00MTcwLVxcdFxcdFxcdGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpIHx8ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTUlYRURNQVApKSB7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDQxPXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjA1Ni1cXG5tbS9tZW1wb2xpY3kuYzoyMDU3OmJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxubW0vbWVtcG9saWN5LmMtMjA1OC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE1OjI4LjgxMTE0NDQ4NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTIzMjI1ODI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gd2VsbC12ZXJzZWQgaW4ga2VybmVsIGludGVybmFsczpcblxuKipEaXZpbmcgaW50byBOVU1BIEJhbGFuY2luZyBMb2dpYyoqXG5cbkFscmlnaHQsIHNvIGB2bWFfcG9saWN5X21vZmDigKYgdGhhdCByaW5ncyBhIGJlbGwuIEFoIHllcywgaXQncyBjYWxsZWQgYnkgYHRhc2tfbnVtYV93b3JrYCDigJMgYW5kIHRoYXQncyBpbiBga2VybmVsL3NjaGVkL2ZhaXIuY2AuIFJpZ2h0LCBzbyB0aGlzIGlzIGFsbCBwYXJ0IG9mIHRoZSBOVU1BIGJhbGFuY2luZyBpbmZyYXN0cnVjdHVyZSwgb2J2aW91c2x5LiBHb3R0YSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZmxvdyBoZXJlLiBMZXQgbWUgdHJhY2UgYmFjayBhbmQgY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGhvdyBgdGFza19udW1hX3dvcmtgIGlzIHV0aWxpemVkLCB0aGUgZ29hbCBvZiB0aGlzIGJhbGFuY2luZy4gV2hhdCdzIHRyaWdnZXJpbmcgaXQsIHdoYXQgYXJlIHRoZSBjb25kaXRpb25zIHRoYXQgbGVhZCB0byBgdm1hX3BvbGljeV9tb2ZgIGJlaW5nIGludm9rZWQ/IEknbGwgcHJvYmFibHkgc3RhcnQgZGlnZ2luZyBpbnRvIGhvdyB0aGUgc2NoZWR1bGVyIGludGVyYWN0cyB3aXRoIG1lbW9yeSBwb2xpY3kgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NDExLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTY6MDQuMDQzNDEyNTQ2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjk3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3NjaGVkL2ZhaXIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MTY1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0MTY1OlxcdFxcdFxcdHZtYSA9IHZtYV9uZXh0KFxcdTAwMjZ2bWkpO1xcbjQxNjY6XFx0XFx0fVxcbjQxNjc6XFx0XFxuNDE2ODpcXHRcXHRmb3IgKDsgdm1hOyB2bWEgPSB2bWFfbmV4dChcXHUwMDI2dm1pKSkge1xcbjQxNjk6XFx0XFx0XFx0aWYgKCF2bWFfbWlncmF0YWJsZSh2bWEpIHx8ICF2bWFfcG9saWN5X21vZih2bWEpIHx8XFxuNDE3MDpcXHRcXHRcXHRcXHRpc192bV9odWdldGxiX3BhZ2Uodm1hKSB8fCAodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01JWEVETUFQKSkge1xcbjQxNzE6XFx0XFx0XFx0XFx0dHJhY2Vfc2NoZWRfc2tpcF92bWFfbnVtYShtbSwgdm1hLCBOVU1BQl9TS0lQX1VOU1VJVEFCTEUpO1xcbjQxNzI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNDE3MzpcXHRcXHRcXHR9XFxuNDE3NDpcXHRcXG40MTc1OlxcdFxcdFxcdC8qXFxuNDE3NjpcXHRcXHRcXHQgKiBTaGFyZWQgbGlicmFyeSBwYWdlcyBtYXBwZWQgYnkgbXVsdGlwbGUgcHJvY2Vzc2VzIGFyZSBub3RcXG40MTc3OlxcdFxcdFxcdCAqIG1pZ3JhdGVkIGFzIGl0IGlzIGV4cGVjdGVkIHRoZXkgYXJlIGNhY2hlIHJlcGxpY2F0ZWQuIEF2b2lkXFxuNDE3ODpcXHRcXHRcXHQgKiBoaW50aW5nIGZhdWx0cyBpbiByZWFkLW9ubHkgZmlsZS1iYWNrZWQgbWFwcGluZ3Mgb3IgdGhlIHZEU09cXG40MTc5OlxcdFxcdFxcdCAqIGFzIG1pZ3JhdGluZyB0aGUgcGFnZXMgd2lsbCBiZSBvZiBtYXJnaW5hbCBiZW5lZml0LlxcbjQxODA6XFx0XFx0XFx0ICovXFxuNDE4MTpcXHRcXHRcXHRpZiAoIXZtYS1cXHUwMDNldm1fbW0gfHxcXG40MTgyOlxcdFxcdFxcdCAgICAodm1hLVxcdTAwM2V2bV9maWxlIFxcdTAwMjZcXHUwMDI2ICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgKFZNX1JFQUR8Vk1fV1JJVEUpKSA9PSAoVk1fUkVBRCkpKSB7XFxuNDE4MzpcXHRcXHRcXHRcXHR0cmFjZV9zY2hlZF9za2lwX3ZtYV9udW1hKG1tLCB2bWEsIE5VTUFCX1NLSVBfU0hBUkVEX1JPKTtcXG40MTg0OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNjowNC4wNDQ2NDg1MjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYwNzgwNzQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIE5VTUEgQmFsYW5jaW5nKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGB2bWFfcG9saWN5X21vZmAgZnVuY3Rpb24g4oCTIGl0IGxvb2tzIGxpa2UgdGhlIGtleSB0byBkZWNpZGluZyB3aGV0aGVyIGEgVmlydHVhbCBNZW1vcnkgQXJlYSAoVk1BKSBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3IgTlVNQSBiYWxhbmNpbmcuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBsb29rIGZvciB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gdGhhdCBkcml2ZXMgdGhpcyBiZWhhdmlvci4gTGV0IG1lIHNlZSwgeWVzLCB0aGF0J3MgaXQ6IGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBBbHJpZ2h0LCBsZXQncyBnbyBjaGVjayB0aGUgc3BlY2lmaWNzIG9mIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIGJlaGluZCB0aGUgZGVjaXNpb25zIG1hZGUgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE2OjA3LjY1MjQ2MDZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMDY5OTE1NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5VTUFfQkFMQU5DSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTAwNz1jb25maWcgQVJDSF9XQU5UX05VTUFfVkFSSUFCTEVfTE9DQUxJVFlcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDA5LVxcbmluaXQvS2NvbmZpZzoxMDEwOmNvbmZpZyBOVU1BX0JBTEFOQ0lOR1xcbmluaXQvS2NvbmZpZy0xMDExLVxcdGJvb2wgXFxcIk1lbW9yeSBwbGFjZW1lbnQgYXdhcmUgTlVNQSBzY2hlZHVsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWc9MTAyMj1jb25maWcgU0NIRURfQ0FDSEVcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDMyLVxcbmluaXQvS2NvbmZpZzoxMDMzOmNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcXG5pbml0L0tjb25maWctMTAzNC1cXHRib29sIFxcXCJBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTY6MTEuOTU5NDY3MzY4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NzkzNDUxMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKlRlc3RpbmcgTlVNQSBCYWxhbmNpbmc6IEEgUXVpY2sgUnVuLURvd24qKlxuXG5SaWdodCwgc28gdG8gcHJvcGVybHkgdGVzdCB0aGlzIE5VTUEgYmFsYW5jaW5nIGZ1bmN0aW9uYWxpdHksIEknbSBnb2luZyB0byBuZWVkIHRvIG1ha2Ugc3VyZSBib3RoIGBOVU1BX0JBTEFOQ0lOR2AgYW5kIGBOVU1BYCBhcmUgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gVGhhdCdzIHRoZSBiYXNlbGluZS4gSSBjYW4ndCBldmVuIGJlZ2luIHRvIGV2YWx1YXRlIGl0IHdpdGhvdXQgdGhvc2UgcGllY2VzIGluIHBsYWNlLlxuXG5BbmQgdGhlbiwgSSBzaG91bGQga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGB2bWFfcG9saWN5X21vZmAgdmFyaWFibGUgaXMgaGFuZ2luZyBvdXQgaW4gYG1tL21lbXBvbGljeS5jYCwgYW5kLCBhcyBJIHJlY2FsbCwgdGhhdCB3aG9sZSBmaWxlIG9ubHkgZ2V0cyBjb21waWxlZCB3aGVuIGBDT05GSUdfTlVNQWAgaXMgc2V0IGluIHRoZSBrZXJuZWwuIFNvLCB0byBldmVuICpzZWUqIHRoYXQgY29kZSwgSSdtIHN0aWxsIHJlbGlhbnQgb24gdGhhdCBmdW5kYW1lbnRhbCBOVU1BIHN1cHBvcnQgYmVpbmcgZW5hYmxlZC4gSXQncyBhbGwgY29ubmVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ0NSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE2OjE1LjUzODgxODcwNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NzMzNzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbXBvbGljeS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTg1PW9iai0kKENPTkZJR19IVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUClcXHQrPSBodWdldGxiX3ZtZW1tYXAub1xcbm1tL01ha2VmaWxlOjg2Om9iai0kKENPTkZJR19OVU1BKSBcXHQrPSBtZW1wb2xpY3kub1xcbm1tL01ha2VmaWxlLTg3LW9iai0kKENPTkZJR19TUEFSU0VNRU0pXFx0Kz0gc3BhcnNlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTY6MTUuNzM0NTYyMDk0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODc0NDY4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOVU1BIERlcGVuZGVuY2llcyBhbmQgYHRhc2tfbnVtYV93b3JrYCoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGNvZGUgYW5kIHRoZSBkZXBlbmRlbmNpZXMuIEl0J3MgY2xlYXIgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGggTlVNQSwgYW5kIGl0IHNlZW1zIGxpa2UgYE5VTUFgIGlzIGEgcHJlcmVxdWlzaXRlLCBvYnZpb3VzbHkuIFRoZW4sIHRvIGdldCBgdGFza19udW1hX3dvcmtgIGNvbXBpbGVkLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgYE5VTUFfQkFMQU5DSU5HYCBlbmFibGVkLiBOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHRhc2tfbnVtYV93b3JrYCBpdHNlbGYuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGF0LiBJJ2xsIGdvIGNoZWNrIHdoZXJlIGl0J3MgZGVmaW5lZCwgYGtlcm5lbC9zY2hlZC9mYWlyLmNgLiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDgwMywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE2OjE5LjQyMjAxNjI2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjIyMDYyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YXNrX251bWFfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvc2NoZWQvZmFpci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9zY2hlZC9mYWlyLmM9NDAzMz1zdGF0aWMgYm9vbCB2bWFfaXNfYWNjZXNzZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy00MDc1LSAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6NDA3NjpzdGF0aWMgdm9pZCB0YXNrX251bWFfd29yayhzdHJ1Y3QgY2FsbGJhY2tfaGVhZCAqd29yaylcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQwNzcte1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz00MzMzPXZvaWQgaW5pdF9udW1hX2JhbGFuY2luZyh1NjQgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDM0OC1cXHRwLVxcdTAwM2VudW1hX21pZ3JhdGVfcmV0cnlcXHRcXHQ9IDA7XFxua2VybmVsL3NjaGVkL2ZhaXIuYzo0MzQ5OlxcdC8qIFByb3RlY3QgYWdhaW5zdCBkb3VibGUgYWRkLCBzZWUgdGFza190aWNrX251bWEgYW5kIHRhc2tfbnVtYV93b3JrICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYy00MzUwLVxcdHAtXFx1MDAzZW51bWFfd29yay5uZXh0XFx0XFx0PSBcXHUwMDI2cC1cXHUwMDNlbnVtYV93b3JrO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy00MzU3LVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6NDM1ODpcXHRpbml0X3Rhc2tfd29yayhcXHUwMDI2cC1cXHUwMDNlbnVtYV93b3JrLCB0YXNrX251bWFfd29yayk7XFxua2VybmVsL3NjaGVkL2ZhaXIuYy00MzU5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNjoxOS41MTQyNDY5MzFaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQwMTExMjQ2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4gTXkgZmlyc3QgdGhvdWdodCBpczpcblxuKipDaGVja2luZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBmb3IgYHRhc2tfbnVtYV93b3JrYCoqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAsIEkgbmVlZCB0byB2ZXJpZnkgYSBmdW5kYW1lbnRhbCBjb25kaXRpb24uIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24sIGB0YXNrX251bWFfd29ya2AsIGludGVyYWN0cyB3aXRoIHRoZSBOVU1BIGJhbGFuY2luZyBjb25maWd1cmF0aW9uLiBTbywgbXkgaW5pdGlhbCBzdGVwIGlzIHRvIGRldGVybWluZSBpZiBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYCNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGV0aGVyIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBldmVuICpwcmVzZW50KiBpbiB0aGUgYnVpbGQgSSdtIGN1cnJlbnRseSBsb29raW5nIGF0LCBhbmQgSSBjYW4gYWRqdXN0IG15IGV4cGVjdGF0aW9ucyBhY2NvcmRpbmdseS4gSWYgaXQncyAqbm90KiB1bmRlciB0aGF0IGNvbmRpdGlvbmFsLCB0aGVuIGl0J3MgYWx3YXlzIGluY2x1ZGVkIGFuZCBJIG5lZWQgdG8gY29uc2lkZXIgaXQgZGlmZmVyZW50bHkuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgc3RhbmQgYmVmb3JlIEkgY2FuIG1ha2UgYSBqdWRnZW1lbnQuIExldCdzIHNlZSBpZiB0aGlzIGlzIGluY2x1ZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTM3NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE2OjQzLjUyNTM3NTg0OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzgzMzQwOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX05VTUFfQkFMQU5DSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9zY2hlZC9mYWlyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3NjaGVkL2ZhaXIuYz0xMjU9c3RhdGljIHVuc2lnbmVkIGludCBzeXNjdGxfc2NoZWRfY2ZzX2JhbmR3aWR0aF9zbGljZVxcdFxcdD0gNTAwMFVMO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjctXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMjg6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTI5LS8qIFJlc3RyaWN0IHRoZSBOVU1BIHByb21vdGlvbiB0aHJvdWdocHV0IChNQi9zKSBmb3IgZWFjaCB0YXJnZXQgbm9kZS4gKi9cXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHNjaGVkX2ZhaXJfc3lzY3Rsc1tdID0ge1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDQtI2VuZGlmXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNDU6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTQ2LVxcdHtcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTUzLVxcdH0sXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTQ6I2VuZGlmIC8qIENPTkZJR19OVU1BX0JBTEFOQ0lORyAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTU1LX07XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE0MzQ9c3RhdGljIGJvb2wgZXhjZWVkX2xsY19jYXBhY2l0eShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IGNwdSlcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE0MzUte1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTQzNjojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNDM3LVxcdHVuc2lnbmVkIGxvbmcgbGxjLCBmb290cHJpbnQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTE2NTM9c3RhdGljIGludCBnZXRfcHJlZl9sbGMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTY2My1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE2NjQ6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTY2NS1cXHRcXHQvKlxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xNzY0PXN0YXRpYyB2b2lkIGdldF9zY2FuX2NwdW1hc2tzKGNwdW1hc2tfdmFyX3QgY3B1cywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTc2NS17XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNzY2OiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE3NjctXFx0aW50IGNwdSwgY3Vycl9jcHUsIG5pZCwgcHJlZl9uaWQ7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTIxNzk9YWRqdXN0X251bWFfaW1iYWxhbmNlKGludCBpbWJhbGFuY2UsIGludCBkc3RfcnVubmluZywgaW50IGltYl9udW1hX25yKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yMjAxLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MjIwMjojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0yMjAzLS8qXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTQ0MTM9c3RhdGljIHZvaWQgdXBkYXRlX3NjYW5fcGVyaW9kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5ld19jcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQ0NDYtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzo0NDQ3OiNlbHNlIC8qICFDT05GSUdfTlVNQV9CQUxBTkNJTkc6ICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYy00NDQ4LVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz00NDYxPXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfc2Nhbl9wZXJpb2Qoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmV3X2NwdSlcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDQ2NC1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjQ0NjU6I2VuZGlmIC8qICFDT05GSUdfTlVNQV9CQUxBTkNJTkcgKi9cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQ0NjYtXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTEwMjg5PXN0YXRpYyBpbnQgdGFza19ob3Qoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbGJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEwMzI5LVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTAzMzA6I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzMzEtLypcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTAzMzY9c3RhdGljIGxvbmcgbWlncmF0ZV9kZWdyYWRlc19sb2NhbGl0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudilcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzODEtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDM4MjojZWxzZSAvKiAhQ09ORklHX05VTUFfQkFMQU5DSU5HOiAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzODMtc3RhdGljIGlubGluZSBsb25nIG1pZ3JhdGVfZGVncmFkZXNfbG9jYWxpdHkoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMDM4Ny19XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMDM4ODojZW5kaWYgLyogIUNPTkZJR19OVU1BX0JBTEFOQ0lORyAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTAzODktXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTExMjUzPXN0cnVjdCBzZ19sYl9zdGF0cyB7XFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTExMjY4LVxcdHVuc2lnbmVkIGludCBncm91cF9vdmVydXRpbGl6ZWQ7XFx0LyogQXQgbGVhc3Qgb25lIENQVSBpcyBvdmVydXRpbGl6ZWQgaW4gdGhlIGdyb3VwICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMTI2OTojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTI3MC1cXHR1bnNpZ25lZCBpbnQgbnJfbnVtYV9ydW5uaW5nO1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTc5Nz1zdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3NnX2xiX3N0YXRzKHN0cnVjdCBsYl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTE4NTEtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMTg1MjojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMTg1My1cXHRcXHQvKiBPbmx5IGZicV9jbGFzc2lmeV9ncm91cCgpIHVzZXMgdGhpcyB0byBjbGFzc2lmeSBOVU1BIGdyb3VwcyAqL1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMTkxNj1zdGF0aWMgYm9vbCB1cGRhdGVfc2RfcGlja19idXNpZXN0KHN0cnVjdCBsYl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIwNjQtXFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxMjA2NTojaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA2Ni1zdGF0aWMgaW5saW5lIGVudW0gZmJxX3R5cGUgZmJxX2NsYXNzaWZ5X2dyb3VwKHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMjA3NT1zdGF0aWMgaW5saW5lIGVudW0gZmJxX3R5cGUgZmJxX2NsYXNzaWZ5X3JxKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyMDgyLX1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEyMDgzOiNlbHNlIC8qICFDT05GSUdfTlVNQV9CQUxBTkNJTkc6ICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA4NC1zdGF0aWMgaW5saW5lIGVudW0gZmJxX3R5cGUgZmJxX2NsYXNzaWZ5X2dyb3VwKHN0cnVjdCBzZ19sYl9zdGF0cyAqc2dzKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYz0xMjA4OT1zdGF0aWMgaW5saW5lIGVudW0gZmJxX3R5cGUgZmJxX2NsYXNzaWZ5X3JxKHN0cnVjdCBycSAqcnEpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyMDkyLX1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEyMDkzOiNlbmRpZiAvKiAhQ09ORklHX05VTUFfQkFMQU5DSU5HICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjA5NC1cXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTIyNjM9c2NoZWRfYmFsYW5jZV9maW5kX2RzdF9ncm91cChzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgdGhpc19jcHUpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyMzc2LVxcdFxcdFxcdGludCBpbWJfbnVtYV9uciA9IHNkLVxcdTAwM2VpbWJfbnVtYV9ucjtcXG5rZXJuZWwvc2NoZWQvZmFpci5jOjEyMzc3OiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTEyMzc4LVxcdFxcdFxcdGludCBpZGxlc3RfY3B1O1xcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xMjM4OC1cXHRcXHRcXHRcXHRyZXR1cm4gaWRsZXN0O1xcbmtlcm5lbC9zY2hlZC9mYWlyLmM6MTIzODk6I2VuZGlmIC8qIENPTkZJR19OVU1BX0JBTEFOQ0lORyAqL1xcbmtlcm5lbC9zY2hlZC9mYWlyLmMtMTIzOTAtXFx0XFx0XFx0LypcXG4tLVxcbmtlcm5lbC9zY2hlZC9mYWlyLmM9MTU0MDI9dm9pZCBwcmludF9jZnNfc3RhdHMoc3RydWN0IHNlcV9maWxlICptLCBpbnQgY3B1KVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTQxMS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jOjE1NDEyOiNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTE1NDEzLXZvaWQgc2hvd19udW1hX3N0YXRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHNlcV9maWxlICptKVxcbi0tXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTQzMy19XFxua2VybmVsL3NjaGVkL2ZhaXIuYzoxNTQzNDojZW5kaWYgLyogQ09ORklHX05VTUFfQkFMQU5DSU5HICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYy0xNTQzNS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTY6NDMuNjAzNzIwMjVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgxMjEwMzYwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOVU1BIEJhbGFuY2luZyBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgdGFza19udW1hX3dvcmtgIGZ1bmN0aW9uIGFuZCBpdCdzIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgZnVuY3Rpb24gaXMgc3BlY2lmaWMgdG8gTlVNQSBzeXN0ZW1zIGFuZCBOVU1BIGJhbGFuY2luZyBmZWF0dXJlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGRvaW5nIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBsYXJnZXIgTlVNQSBwaWN0dXJlLiBSaWdodCwgbGV0J3MgZGl2ZSBpbnRvIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gY2hlY2sgYXJvdW5kIGxpbmUgNDA3Ni4gVGhhdCBzaG91bGQgYmUgdGhlIGFyZWEgd2hlcmUgdGhpcyBgdGFza19udW1hX3dvcmtgIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZCwgd2hpY2ggaG9wZWZ1bGx5IGdpdmVzIG1lIHRoZSBjcnVjaWFsIGNvbnRleHQgSSBuZWVkLiBJJ20gZ3Vlc3NpbmcgSSdsbCBmaW5kIGl0cyBwdXJwb3NlLCBhbmQgcG9zc2libHkgc2VlIGhvdyBpdCdzIGludm9rZWQgd2l0aGluIHRoZSBzY2hlZHVsaW5nIGRvbWFpbi4gVW5kZXJzdGFuZGluZyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHR3byB3aWxsIGJlIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNjo1MC40MTU4Mjc0MDdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1ODkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJrZXJuZWwvc2NoZWQvZmFpci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwNzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQwNzA6XFx0I2RlZmluZSBWTUFfUElEX1JFU0VUX1BFUklPRCAoNCAqIHN5c2N0bF9udW1hX2JhbGFuY2luZ19zY2FuX2RlbGF5KVxcbjQwNzE6XFx0XFxuNDA3MjpcXHQvKlxcbjQwNzM6XFx0ICogVGhlIGV4cGVuc2l2ZSBwYXJ0IG9mIG51bWEgbWlncmF0aW9uIGlzIGRvbmUgZnJvbSB0YXNrX3dvcmsgY29udGV4dC5cXG40MDc0OlxcdCAqIFRyaWdnZXJlZCBmcm9tIHRhc2tfdGlja19udW1hKCkuXFxuNDA3NTpcXHQgKi9cXG40MDc2OlxcdHN0YXRpYyB2b2lkIHRhc2tfbnVtYV93b3JrKHN0cnVjdCBjYWxsYmFja19oZWFkICp3b3JrKVxcbjQwNzc6XFx0e1xcbjQwNzg6XFx0XFx0dW5zaWduZWQgbG9uZyBtaWdyYXRlLCBuZXh0X3NjYW4sIG5vdyA9IGppZmZpZXM7XFxuNDA3OTpcXHRcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBjdXJyZW50O1xcbjQwODA6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwLVxcdTAwM2VtbTtcXG40MDgxOlxcdFxcdHU2NCBydW50aW1lID0gcC1cXHUwMDNlc2Uuc3VtX2V4ZWNfcnVudGltZTtcXG40MDgyOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbjQwODM6XFx0XFx0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kO1xcbjQwODQ6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wdGVfdXBkYXRlcyA9IDA7XFxuNDA4NTpcXHRcXHRsb25nIHBhZ2VzLCB2aXJ0cGFnZXM7XFxuNDA4NjpcXHRcXHRzdHJ1Y3Qgdm1hX2l0ZXJhdG9yIHZtaTtcXG40MDg3OlxcdFxcdGJvb2wgdm1hX3BpZHNfc2tpcHBlZDtcXG40MDg4OlxcdFxcdGJvb2wgdm1hX3BpZHNfZm9yY2VkID0gZmFsc2U7XFxuNDA4OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTY6NTAuNDE3MTg5OTk3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MzQ0ODIyODA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHRhc2tfbnVtYV93b3JrYCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gYHRhc2tfbnVtYV93b3JrYCBpcyBkZWZpbml0ZWx5IHBhcnQgb2YgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AuICBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLiBUaHVzLCBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCBoYXMgdG8gYmUgZW5hYmxlZCBmb3IgdGhhdCBjb2RlIHRvIGJlIGNvbXBpbGVkLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgd2hhdCBlbHNlIG1pZ2h0IGJlIGNhbGxpbmcgYHZtYV9wb2xpY3lfbW9mYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgaXRzIHVzZS5cblxuVGhlIGBncmVwYCBvdXRwdXQgZ2l2ZXMgbWUgc29tZSBjbHVlczogaXQncyBkZWZpbmVkIGluIGBpbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oYCwgYW5kIGNhbGxlZCBmcm9tIGBrZXJuZWwvc2NoZWQvZmFpci5jYCBhbmQgYG1tL21lbXBvbGljeS5jYC4gIEhhbmcgb24sIGl0IGxvb2tzIGxpa2UgYHRhc2tfbnVtYV93b3JrYCBpcyB0aGUgKm9ubHkqIGNhbGxlciBvZiBgdm1hX3BvbGljeV9tb2ZgIGJleW9uZCB0aG9zZSB0d28gbG9jYXRpb25zLlxuXG5BaGEsIHdhaXQsIGB2bWFfcG9saWN5X21vZmAgaXMgaW4gYG1tL21lbXBvbGljeS5jYC4gVGhhdCBtZWFucyBgbW0vbWVtcG9saWN5LmNgIGlzIGNvbXBpbGVkIHdpdGggYENPTkZJR19OVU1BYC4gU28sIGBDT05GSUdfTlVNQWAgKmFuZCogYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AgYXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBoZXJlLlxuXG5Ob3csIGxldCdzIHpvb20gaW4gb24gdGhlIGltcGxlbWVudGF0aW9uIG9mIGB2bWFfcG9saWN5X21vZmAgaXRzZWxmLlxuXG5gYGBjXG5ib29sIHZtYV9wb2xpY3lfbW9mKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxue1xuXHRzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7XG5cdHBnb2ZmX3QgaWx4O1xuXHRib29sIG1vZjtcblxuXHRwb2wgPSBfX2dldF92bWFfcG9saWN5KHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCBcdTAwMjZpbHgpO1xuXHRpZiAoIXBvbClcblx0XHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XG5cdG1vZiA9IHBvbC1cdTAwM2VmbGFncyBcdTAwMjYgTVBPTF9GX01PRjtcblx0bXBvbF9jb25kX3B1dChwb2wpO1xuXHRyZXR1cm4gbW9mO1xufVxuYGBgXG5cbk9rYXksIGl0IGdldHMgdGhlIG1lbXBvbGljeSBmb3IgdGhlIFZNQS4gSWYgYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgaXMgZGVmaW5lZCBpdCB3aWxsIGNhbGwgaXQuIElmIHRoaXMgcmV0dXJucyBOVUxMLCBpdCBjYWxscyBgZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpYC4gVGhlbiBpdCBjaGVja3MgdGhlIGBwb2wtXHUwMDNlZmxhZ3NgIHRvIHNlZSBpZiBgTVBPTF9GX01PRmAgaXMgc2V0LiBXaGF0IHRyaWdnZXJzIHRoaXMgZmxhZz8gSSBzdXNwZWN0IGl0J3MgcmVsYXRlZCB0byB0aGUgbGF6eSBtaWdyYXRpb24gbWVtcG9saWN5IGZsYWcuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBNUE9MX0ZfTU9GYCBpcyBzZXQgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyMTUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNzoxNi43NjIwMTkxNjJaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MjU0Mzc3NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTVBPTF9GX01PRlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oPTE5PWVudW0ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L21lbXBvbGljeS5oLTY3LSNkZWZpbmUgTVBPTF9GX1NIQVJFRCAgKDEgXFx1MDAzY1xcdTAwM2MgMClcXHQvKiBpZGVudGlmeSBzaGFyZWQgcG9saWNpZXMgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvbWVtcG9saWN5Lmg6Njg6I2RlZmluZSBNUE9MX0ZfTU9GXFx0KDEgXFx1MDAzY1xcdTAwM2MgMykgLyogdGhpcyBwb2xpY3kgd2FudHMgbWlncmF0ZSBvbiBmYXVsdCAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9tZW1wb2xpY3kuaC02OS0jZGVmaW5lIE1QT0xfRl9NT1JPTlxcdCgxIFxcdTAwM2NcXHUwMDNjIDQpIC8qIE1pZ3JhdGUgT24gcHJvdG5vbmUgUmVmZXJlbmNlIE9uIE5vZGUgKi9cXG4tLVxcbm1tL21lbXBvbGljeS5jPTE3MjE9c3RhdGljIGlubGluZSBpbnQgc2FuaXRpemVfbXBvbF9mbGFncyhpbnQgKm1vZGUsIHVuc2lnbmVkIHNob3J0ICpmbGFncylcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE3MzEtXFx0XFx0aWYgKCptb2RlID09IE1QT0xfQklORCB8fCAqbW9kZSA9PSBNUE9MX1BSRUZFUlJFRF9NQU5ZKVxcbm1tL21lbXBvbGljeS5jOjE3MzI6XFx0XFx0XFx0KmZsYWdzIHw9IChNUE9MX0ZfTU9GIHwgTVBPTF9GX01PUk9OKTtcXG5tbS9tZW1wb2xpY3kuYy0xNzMzLVxcdFxcdGVsc2VcXG4tLVxcbm1tL21lbXBvbGljeS5jPTIwNTc9Ym9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL21lbXBvbGljeS5jLTIwNjUtXFx0XFx0cG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbm1tL21lbXBvbGljeS5jOjIwNjY6XFx0bW9mID0gcG9sLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1QT0xfRl9NT0Y7XFxubW0vbWVtcG9saWN5LmMtMjA2Ny1cXHRtcG9sX2NvbmRfcHV0KHBvbCk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yOTc1PWludCBtcG9sX21pc3BsYWNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTI5OTMtXFx0cG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyLCBmb2xpb19vcmRlcihmb2xpbyksIFxcdTAwMjZpbHgpO1xcbm1tL21lbXBvbGljeS5jOjI5OTQ6XFx0aWYgKCEocG9sLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1QT0xfRl9NT0YpKVxcbm1tL21lbXBvbGljeS5jLTI5OTUtXFx0XFx0Z290byBvdXQ7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0zMzI2PXZvaWQgX19pbml0IG51bWFfcG9saWN5X2luaXQodm9pZClcXG4tLVxcbm1tL21lbXBvbGljeS5jLTMzNDMtXFx0XFx0XFx0Lm1vZGUgPSBNUE9MX1BSRUZFUlJFRCxcXG5tbS9tZW1wb2xpY3kuYzozMzQ0OlxcdFxcdFxcdC5mbGFncyA9IE1QT0xfRl9NT0YgfCBNUE9MX0ZfTU9ST04sXFxubW0vbWVtcG9saWN5LmMtMzM0NS1cXHRcXHRcXHQubm9kZXMgPSBub2RlbWFza19vZl9ub2RlKG5pZCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE3OjE5LjU4NzQ2ODI2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NTcxNjgzNTExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqTVBPTCBGbGFnIFNhbml0eSBDaGVjayoqXG5cbkFscmlnaHQsIG15IGluaXRpYWwgdGhvdWdodCBpczogd2h5IGlzIGBNUE9MX0ZfTU9GYCBnZXR0aW5nIHNldD8gSXMgaXQgYmVpbmcgZm9yY2VkIGFsb25nIHdpdGggYE1QT0xfQklORGAgb3IgYE1QT0xfUFJFRkVSUkVEX01BTllgLCBhbmQgcGVyaGFwcyBhbHNvIGBNUE9MX0ZfTlVNQV9CQUxBTkNJTkdgPyBNZW1vcnkgcG9saWN5IGZsYWdzIGFyZSBhbHdheXMgYSBkZWxpY2F0ZSBkYW5jZS4gVGhlbiwgYSBxdWljayBmbGFzaCBvZiBtZW1vcnnigJRhaCwgcmlnaHQsIHRoZSBgc2FuaXRpemVfbXBvbF9mbGFnc2AgZnVuY3Rpb24uIFRoYXQncyB0aGUgbGlrZWx5IGN1bHByaXQuIE5vdyBJIG5lZWQgdG8gZHJpbGwgaW50byB3aGF0IGBzYW5pdGl6ZV9tcG9sX2ZsYWdzYCBkb2VzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYE1QT0xfRl9NT0ZgIGdldHMgYWN0aXZhdGVkLiBUaW1lIHRvIGNoZWNrIHRoZSBzb3VyY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTEzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTc6MzYuMTU5MTU1NDQyWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1wb2xpY3kuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNzIxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNzIxOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNhbml0aXplX21wb2xfZmxhZ3MoaW50ICptb2RlLCB1bnNpZ25lZCBzaG9ydCAqZmxhZ3MpXFxuMTcyMjpcXHR7XFxuMTcyMzpcXHRcXHQqZmxhZ3MgPSAqbW9kZSBcXHUwMDI2IE1QT0xfTU9ERV9GTEFHUztcXG4xNzI0OlxcdFxcdCptb2RlIFxcdTAwMjY9IH5NUE9MX01PREVfRkxBR1M7XFxuMTcyNTpcXHRcXG4xNzI2OlxcdFxcdGlmICgodW5zaWduZWQgaW50KSgqbW9kZSkgXFx1MDAzZT0gIE1QT0xfTUFYKVxcbjE3Mjc6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTcyODpcXHRcXHRpZiAoKCpmbGFncyBcXHUwMDI2IE1QT0xfRl9TVEFUSUNfTk9ERVMpIFxcdTAwMjZcXHUwMDI2ICgqZmxhZ3MgXFx1MDAyNiBNUE9MX0ZfUkVMQVRJVkVfTk9ERVMpKVxcbjE3Mjk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTczMDpcXHRcXHRpZiAoKmZsYWdzIFxcdTAwMjYgTVBPTF9GX05VTUFfQkFMQU5DSU5HKSB7XFxuMTczMTpcXHRcXHRcXHRpZiAoKm1vZGUgPT0gTVBPTF9CSU5EIHx8ICptb2RlID09IE1QT0xfUFJFRkVSUkVEX01BTlkpXFxuMTczMjpcXHRcXHRcXHRcXHQqZmxhZ3MgfD0gKE1QT0xfRl9NT0YgfCBNUE9MX0ZfTU9ST04pO1xcbjE3MzM6XFx0XFx0XFx0ZWxzZVxcbjE3MzQ6XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuMTczNTpcXHRcXHR9XFxuMTczNjpcXHRcXHRyZXR1cm4gMDtcXG4xNzM3OlxcdH1cXG4xNzM4OlxcdFxcbjE3Mzk6XFx0c3RhdGljIGxvbmcga2VybmVsX21iaW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbjE3NDA6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgbW9kZSwgY29uc3QgdW5zaWduZWQgbG9uZyBfX3VzZXIgKm5tYXNrLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNzozNi4xNTkzNjI0NzJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1OTcxMTAwODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOVU1BIEJhbGFuY2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWJvdXQgTlVNQSBiYWxhbmNpbmcsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBgTVBPTF9GX05VTUFfQkFMQU5DSU5HYCBmbGFnIHNldHMgdGhlIGBNUE9MX0ZfTU9GYCBmbGFnLCB3aGljaCBpcyBhbHNvIHNldCBmb3IgYHByZWZlcnJlZF9ub2RlX3BvbGljeWAgZHVyaW5nIGBudW1hX3BvbGljeV9pbml0YC4gVGhlIGNyaXRpY2FsIGNoYW5nZSBoZXJlIGlzIGluIGB2bWFfcG9saWN5X21vZmAuIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB3aGVuIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3lgIHJldHVybnMgTlVMTCwgaXQgY29ycmVjdGx5IGZhbGxzIGJhY2sgdG8gdGhlIHRhc2sncyBwb2xpY3kuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyB0aGUgbWFpbiBtb2RpZmljYXRpb24uXG5cbk15IGluaXRpYWwgdGhvdWdodCB3YXMgdG8gZm9jdXMgb24gYHZtYV9wb2xpY3lfbW9mYCBzaW5jZSBpdCdzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuICBUaGVuIEkgcmVhbGl6ZWQgdGhhdCBgdm1hX3BvbGljeV9tb2ZgIGdldHMgY2FsbGVkIGZyb20gYHRhc2tfbnVtYV93b3JrYCwgd2hpY2ggaXMgZXhlY3V0ZWQgYXN5bmNocm9ub3VzbHkgdmlhIGB0YXNrX3dvcmtgLiBIbW0sIGNvdWxkIEkgZnV6eiBgdm1hX3BvbGljeV9tb2ZgIGRpcmVjdGx5PyBJdCdzIGNhbGxlZCB3aGVuIGB0YXNrX251bWFfd29ya2AgcnVucywgdHJpZ2dlcmVkIGJ5IGB0YXNrX3RpY2tfbnVtYWAuICBQZXJoYXBzIGB0YXNrX251bWFfd29ya2AgaXRzZWxmIHNob3VsZCBiZSBhIGZvY3VzIHN5bWJvbCBhcyB3ZWxsLiBBbHRob3VnaCwgd2hpbGUgaXQncyBhIHNtYWxsZXIgZnVuY3Rpb24sIGB2bWFfcG9saWN5X21vZmAgaXMgdGhlIG9uZSBtb2RpZmllZC5cblxuSSdtIGxlYW5pbmcgdG93YXJkcyBhZGRpbmcgYm90aCBgdm1hX3BvbGljeV9tb2ZgIGFuZCBgdGFza19udW1hX3dvcmtgIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCwgdGhvdWdoIGB0YXNrX251bWFfd29ya2AgaXMgYSBsYXJnZXIgZnVuY3Rpb24sIHNvIG1heWJlIGp1c3QgYHZtYV9wb2xpY3lfbW9mYCBpcyBzdWZmaWNpZW50LlxuXG5MZXQncyBxdWlja2x5IHZlcmlmeSB0aGF0IGB2bWFfcG9saWN5X21vZmAgaXMgYWN0dWFsbHkgcmVhY2hhYmxlLiAgUmlnaHQsIGlmIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgIGlzIGVuYWJsZWQsIGB0YXNrX3RpY2tfbnVtYWAgc2NoZWR1bGVzIGB0YXNrX251bWFfd29ya2AsIHdoaWNoIGl0ZXJhdGVzIG92ZXIgVk1BcyBhbmQgdGhlbiBjYWxscyBgdm1hX3BvbGljeV9tb2ZgLiAgU28sIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZSBwYXRjaCBzZWVtcyB0byBleGNsdXNpdmVseSBtb2RpZnkgYHZtYV9wb2xpY3lfbW9mYC5cblxuYGBgY1xuYm9vbCB2bWFfcG9saWN5X21vZihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbntcblx0c3RydWN0IG1lbXBvbGljeSAqcG9sO1xuXHRwZ29mZl90IGlseDtcblx0Ym9vbCBtb2Y7XG5cblx0cG9sID0gX19nZXRfdm1hX3BvbGljeSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgXHUwMDI2aWx4KTtcblx0aWYgKCFwb2wpXG5cdFx0cG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuXHRtb2YgPSBwb2wtXHUwMDNlZmxhZ3MgXHUwMDI2IE1QT0xfRl9NT0Y7XG5cdG1wb2xfY29uZF9wdXQocG9sKTtcblx0cmV0dXJuIG1vZjtcbn1cbmBgYFxuXG5Pa2F5LCB0aGUgbW9yZSBJIGxvb2sgYXQgdGhpcyBjb2RlLCB0aGUgY2xlYXJlciBpdCBiZWNvbWVzLiBJZiBgX19nZXRfdm1hX3BvbGljeWAgcmV0dXJucyBhIHBvbGljeSBmcm9tIGB2bWEtXHUwMDNldm1fcG9saWN5YCwgYW5kIGl0J3Mgbm90IE5VTEwsIGl0IGRvZXNuJ3QgaGF2ZSBgTVBPTF9GX1NIQVJFRGAgc2V0LCBzbyBgbXBvbF9jb25kX3B1dGAgZG9lcyBub3RoaW5nLiBJZiBgX19nZXRfdm1hX3BvbGljeWAgcmV0dXJucyBhIHBvbGljeSBmcm9tIGB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3lgLCBpdCBtaWdodCBoYXZlIGBNUE9MX0ZfU0hBUkVEYCBzZXQsIHNvIGBtcG9sX2NvbmRfcHV0YCB3aWxsIGRyb3AgdGhlIHJlZmVyZW5jZS4gSWYgYF9fZ2V0X3ZtYV9wb2xpY3lgIHJldHVybnMgTlVMTCwgaXQgY29ycmVjdGx5IGZhbGxzIGJhY2sgdG8gYGdldF90YXNrX3BvbGljeShjdXJyZW50KWAuIGBnZXRfdGFza19wb2xpY3koY3VycmVudClgIHJldHVybnMgZWl0aGVyIGBjdXJyZW50LVx1MDAzZW1lbXBvbGljeWAgb3IgYGRlZmF1bHRfcG9saWN5YCwgbmVpdGhlciBvZiB3aGljaCBoYXZlIGBNUE9MX0ZfU0hBUkVEYCBzZXQsIHNvIGFnYWluLCBgbXBvbF9jb25kX3B1dGAgZG9lcyBub3RoaW5nLiBUaGlzIGlzIGFsbCBjb3JyZWN0LlxuSSdtIHNhdGlzZmllZCB3aXRoIHRoaXMgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTIyLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTc6NDkuNzU2NDc4ODk4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE5MzI0Mjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF90YXNrX3BvbGljeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1wb2xpY3kuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1wb2xpY3kuYz0zMzg9RVhQT1JUX1NZTUJPTF9HUEwobmVhcmVzdF9ub2RlX25vZGVtYXNrKTtcXG5tbS9tZW1wb2xpY3kuYy0zMzktXFxubW0vbWVtcG9saWN5LmM6MzQwOnN0cnVjdCBtZW1wb2xpY3kgKmdldF90YXNrX3BvbGljeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxubW0vbWVtcG9saWN5LmMtMzQxLXtcXG4tLVxcbm1tL21lbXBvbGljeS5jLTM1Ny19XFxubW0vbWVtcG9saWN5LmM6MzU4OkVYUE9SVF9TWU1CT0xfRk9SX01PRFVMRVMoZ2V0X3Rhc2tfcG9saWN5LCBcXFwia3ZtXFxcIik7XFxubW0vbWVtcG9saWN5LmMtMzU5LVxcbi0tXFxubW0vbWVtcG9saWN5LmM9MTQ4Nj1zdGF0aWMgbG9uZyBkb19tYmluZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbixcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE1NjgtXFx0XFx0aWYgKCFuZXcpIHtcXG5tbS9tZW1wb2xpY3kuYzoxNTY5OlxcdFxcdFxcdG5ldyA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG5tbS9tZW1wb2xpY3kuYy0xNTcwLVxcdFxcdFxcdG1wb2xfZ2V0KG5ldyk7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDQxPXN0cnVjdCBtZW1wb2xpY3kgKmdldF92bWFfcG9saWN5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjA0Ny1cXHRpZiAoIXBvbClcXG5tbS9tZW1wb2xpY3kuYzoyMDQ4OlxcdFxcdHBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG5tbS9tZW1wb2xpY3kuYy0yMDQ5LVxcdGlmIChwb2wtXFx1MDAzZW1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFIHx8XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yMDU3PWJvb2wgdm1hX3BvbGljeV9tb2Yoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yMDY0LVxcdGlmICghcG9sKVxcbm1tL21lbXBvbGljeS5jOjIwNjU6XFx0XFx0cG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbm1tL21lbXBvbGljeS5jLTIwNjYtXFx0bW9mID0gcG9sLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1QT0xfRl9NT0Y7XFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0yNTQxPXN0cnVjdCBwYWdlICphbGxvY19mcm96ZW5fcGFnZXNfbm9wcm9mKGdmcF90IGdmcCwgdW5zaWduZWQgb3JkZXIpXFxuLS1cXG5tbS9tZW1wb2xpY3kuYy0yNTQ5LVxcdGlmICghaW5faW50ZXJydXB0KCkgXFx1MDAyNlxcdTAwMjYgIShnZnAgXFx1MDAyNiBfX0dGUF9USElTTk9ERSkpXFxubW0vbWVtcG9saWN5LmM6MjU1MDpcXHRcXHRwb2wgPSBnZXRfdGFza19wb2xpY3koY3VycmVudCk7XFxubW0vbWVtcG9saWN5LmMtMjU1MS1cXG4tLVxcbm1tL21lbXBvbGljeS5jPTI3NjU9dW5zaWduZWQgbG9uZyBhbGxvY19wYWdlc19idWxrX21lbXBvbGljeV9ub3Byb2YoZ2ZwX3QgZ2ZwLFxcbi0tXFxubW0vbWVtcG9saWN5LmMtMjc3Mi1cXHRpZiAoIWluX2ludGVycnVwdCgpIFxcdTAwMjZcXHUwMDI2ICEoZ2ZwIFxcdTAwMjYgX19HRlBfVEhJU05PREUpKVxcbm1tL21lbXBvbGljeS5jOjI3NzM6XFx0XFx0cG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xcbm1tL21lbXBvbGljeS5jLTI3NzQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE3OjUxLjQ3NTgxOTQ4M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDU5Njk2ODIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlVNQSBQb2xpY3kgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBsb29raW5nIGF0IHRoaXMgY29kZSwgYGdldF90YXNrX3BvbGljeWAgaXMgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIGp1c3QgaGFuZGluZyBiYWNrIHRoZSB0YXNrIHBvbGljeSwgbm90aGluZyBjb21wbGljYXRlZCB0aGVyZS4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGEgYnVnIHdoZXJlIGB2bWFfcG9saWN5X21vZmAgd2FzIHByZW1hdHVyZWx5IHJldHVybmluZyBgZmFsc2VgLiBJdCB3YXMgYmFpbGluZyBvdXQgaWYgYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgcmV0dXJuZWQgTlVMTCwgaW5zdGVhZCBvZiBjb3JyZWN0bHkgZmFsbGluZyBiYWNrIHRvIHRoZSB0YXNrIHBvbGljeSwgd2hpY2ggaXMgbm90IHRoZSBkZXNpcmVkIGJlaGF2aW9yLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW1wb3J0YW50IG9uZSBhY3R1YWxseSFcblxuTm93LCBsZXQncyBzZWUsIHdoYXQgY29uZmlncyBhcmUgYXQgcGxheSBoZXJlPyBJdCBsb29rcyBsaWtlIHdlIG5lZWQgYE5VTUFgIGFuZCBgTlVNQV9CQUxBTkNJTkdgLiBCdXQgd2FpdCwgZG9lc24ndCBgTlVNQV9CQUxBTkNJTkdgIGRlcGVuZCBvbiBgTlVNQWA/IEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGF0IGRlcGVuZGVuY3kgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMZXQgbWUgZ28gcG9rZSBhcm91bmQgYGluaXQvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGF0LiBHb3R0YSBkb3QgbXkgaSdzIGFuZCBjcm9zcyBteSB0J3Mgd2l0aCB0aGVzZSBOVU1BIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc0OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxNzo1NS45MzU1MjEyNTZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDA5LFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDA5OlxcdFxcbjEwMTA6XFx0Y29uZmlnIE5VTUFfQkFMQU5DSU5HXFxuMTAxMTpcXHRcXHRib29sIFxcXCJNZW1vcnkgcGxhY2VtZW50IGF3YXJlIE5VTUEgc2NoZWR1bGVyXFxcIlxcbjEwMTI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX05VTUFfQkFMQU5DSU5HXFxuMTAxMzpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX1dBTlRfTlVNQV9WQVJJQUJMRV9MT0NBTElUWVxcbjEwMTQ6XFx0XFx0ZGVwZW5kcyBvbiBTTVAgXFx1MDAyNlxcdTAwMjYgTlVNQV9NSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4xMDE1OlxcdFxcdGhlbHBcXG4xMDE2OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBhdXRvbWF0aWMgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnQuXFxuMTAxNzpcXHRcXHQgIFRoZSBtZWNoYW5pc20gaXMgcXVpdGUgcHJpbWl0aXZlIGFuZCBpcyBiYXNlZCBvbiBtaWdyYXRpbmcgbWVtb3J5IHdoZW5cXG4xMDE4OlxcdFxcdCAgaXQgaGFzIHJlZmVyZW5jZXMgdG8gdGhlIG5vZGUgdGhlIHRhc2sgaXMgcnVubmluZyBvbi5cXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0ICBUaGlzIHN5c3RlbSB3aWxsIGJlIGluYWN0aXZlIG9uIFVNQSBzeXN0ZW1zLlxcbjEwMjE6XFx0XFxuMTAyMjpcXHRjb25maWcgU0NIRURfQ0FDSEVcXG4xMDIzOlxcdFxcdGJvb2wgXFxcIkNhY2hlIGF3YXJlIGxvYWQgYmFsYW5jZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTc6NTUuOTM1NzYwNDg2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjcwMTkzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIE5VTUEgQmFsYW5jaW5nKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoZSBrZXJuZWwgY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBOVU1BIGJhbGFuY2luZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYE5VTUFfQkFMQU5DSU5HYCBkZXBlbmRzIG9uIHF1aXRlIGEgZmV3IHRoaW5nczogYEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdgLCBgU01QYCwgYE5VTUFfTUlHUkFUSU9OYCwgYW5kIGltcG9ydGFudGx5LCBpdCdzICpub3QqIGNvbXBhdGlibGUgd2l0aCBgUFJFRU1QVF9SVGAuIFJpZ2h0LCBzbyB0aGlzIGZlYXR1cmUgaXMgb25seSByZWxldmFudCBmb3Igc3BlY2lmaWMgYXJjaGl0ZWN0dXJlcyBhbmQgd29ya2xvYWRzLlxuXG5UaGUgaW1tZWRpYXRlIGFjdGlvbiBJIG5lZWQgdG8gdGFrZSBpcyB0byBlbnN1cmUgdGhhdCBgTlVNQV9CQUxBTkNJTkdgIGdldHMgYWRkZWQgdG8gYEVuYWJsZUNvbmZpZ3NgLCBzaW5jZSBJJ20gdHJ5aW5nIHRvLCB3ZWxsLCBlbmFibGUgaXQuIE5vIG5lZWQgdG8gYWRkIGBOVU1BYCBzZXBhcmF0ZWx5OyBhcyBleHBlY3RlZCwgYE5VTUFfTUlHUkFUSU9OYCBhbHJlYWR5IGltcGxpZXMgdGhhdCB0aGUgc3lzdGVtIGlzIE5VTUEtYXdhcmUsIHNvIGBOVU1BX0JBTEFOQ0lOR2AgaXMgdGhlIHNwZWNpZmljIHRoaW5nIEknbSBhZnRlci5cblxuQWgsIHllcywgYE5VTUFfQkFMQU5DSU5HYCBpcyB0aGUgc3BlY2lmaWMgY29uZmlnIHRoYXQgZW5hYmxlcyBgdGFza19udW1hX3dvcmtgLCB0aGF0J3MgaG93IGl0J3MgbGlua2VkIHRvIHRoZSBhY3R1YWwgd29yay4gU28sIHllYWgsIGBOVU1BX0JBTEFOQ0lOR2AgaXMgZGVmaW5pdGVseSB0aGUgcmlnaHQgY29uZmlnIHRvIGZvY3VzIG9uLlxuXG5CdXQsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayBpZiB0aGVyZSdzIGFueXRoaW5nIGVsc2UgaW52b2x2ZWQuIEknbSB3b25kZXJpbmcgaWYgdGhlcmUncyBhIGRlZmF1bHQgZW5hYmxlbWVudCBvcHRpb24uIENvdWxkIGBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURgIGFsc28gYmUgbmVjZXNzYXJ5PyBPdGhlcndpc2UsIEkgbWlnaHQgYmUgc3R1Y2sgd2l0aCBzeXNjdGxzIGp1c3QgdG8gZW5hYmxlIGl0LiBJIHNob3VsZCBnbyBhbmQgY2hlY2sgYE5VTUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRGAgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTM2OCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjE4OjAwLjk2Mjc4MzM5NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc1OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzIsXG4gIFwiTGluZUNvdW50XCI6IDE1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwMzI6XFx0XFxuMTAzMzpcXHRjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuMTAzNDpcXHRcXHRib29sIFxcXCJBdXRvbWF0aWNhbGx5IGVuYWJsZSBOVU1BIGF3YXJlIG1lbW9yeS90YXNrIHBsYWNlbWVudFxcXCJcXG4xMDM1OlxcdFxcdGRlZmF1bHQgeVxcbjEwMzY6XFx0XFx0ZGVwZW5kcyBvbiBOVU1BX0JBTEFOQ0lOR1xcbjEwMzc6XFx0XFx0aGVscFxcbjEwMzg6XFx0XFx0ICBJZiBzZXQsIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyB3aWxsIGJlIGVuYWJsZWQgaWYgcnVubmluZyBvbiBhIE5VTUFcXG4xMDM5OlxcdFxcdCAgbWFjaGluZS5cXG4xMDQwOlxcdFxcbjEwNDE6XFx0Y29uZmlnIFNMQUJfT0JKX0VYVFxcbjEwNDI6XFx0XFx0Ym9vbFxcbjEwNDM6XFx0XFxuMTA0NDpcXHRtZW51Y29uZmlnIENHUk9VUFNcXG4xMDQ1OlxcdFxcdGJvb2wgXFxcIkNvbnRyb2wgR3JvdXAgc3VwcG9ydFxcXCJcXG4xMDQ2OlxcdFxcdHNlbGVjdCBLRVJORlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTg6MDAuOTYyOTQzMDI0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk2Mjk1ODI4MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgRnV6emluZyBTdHJhdGVneSBmb3IgTlVNQSBCYWxhbmNpbmcqKlxuXG5Pa2F5LCBzbyB0aGUgZGVmYXVsdCBmb3IgYE5VTUFfQkFMQU5DSU5HYCBpcyBgeWAsIHNvIGp1c3QgZW5hYmxpbmcgdGhhdCBjb25maWcgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIExldCdzIGRpZyBpbiBhIGJpdCBtb3JlLiBJJ3ZlIHRyYWNrZWQgZG93biB0aGF0IGB2bWFfcG9saWN5X21vZmAgaXMgb25seSBjYWxsZWQgd2l0aGluIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4gVGhhdCBmdW5jdGlvbiBzZWVtcyBsaWtlIGEgZ29vZCBcImZvY3VzIHN5bWJvbFwiIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guXG5cbklzIGB2bWFfcG9saWN5X21vZmAgYSBwYXJ0aWN1bGFybHkgaG90IHBhdGg/IEl0IGlzIGNhbGxlZCBkdXJpbmcgYHRhc2tfbnVtYV93b3JrYCwgd2hpY2ggbWVhbnMgaXQncyBwYXJ0IG9mIHRoZSBwZXJpb2RpYyBWTUEgc2Nhbm5pbmcgcHJvY2Vzcy4gSXQgaXNuJ3QgYXMgY3JpdGljYWwgYXMgdGhlIGBzY2hlZHVsZWAgb3IgYHBhZ2VfZmF1bHRgIGZ1bmN0aW9ucywgYnV0IGl0ICppcyogY2FsbGVkIGZvciBldmVyeSBWTUEgZHVyaW5nIGVhY2ggc2NhbiwgYW5kIGl0J3MgKnByZWNpc2VseSogdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBtb2RpZmllZC4gVGhlcmVmb3JlLCBpdCBpcyBhIGdyZWF0IGNob2ljZS4gSSdsbCBhbHNvIGluY2x1ZGUgYHRhc2tfbnVtYV93b3JrYCB0byBpbmNyZWFzZSB0aGUgY2hhbmNlIG9mIHRyaWdnZXJpbmcgdGhlIE5VTUEgYmFsYW5jaW5nIGxvZ2ljLlxuXG5TbywgaGVyZSdzIHRoZSBwbGFuLlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IFRydWUuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLlxuKiAgIGBGb2N1c1N5bWJvbHNgOiBJJ2xsIHRhcmdldCBib3RoIGB2bWFfcG9saWN5X21vZmAgYW5kIGB0YXNrX251bWFfd29ya2AuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBKdXN0IGVuYWJsZSBgTlVNQV9CQUxBTkNJTkdgIOKAkyB0aGUgZGVmYXVsdCBzaG91bGQgd29yay5cbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIGFsdGVycyBgdm1hX3BvbGljeV9tb2ZgJ3MgYmVoYXZpb3IsIHNwZWNpZmljYWxseSBoYW5kbGluZyBjYXNlcyB3aGVyZSBhIFZNQSdzIGBnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMIGJ5IGZhbGxpbmcgYmFjayB0byB0aGUgdGFzaydzIG1lbW9yeSBwb2xpY3kuIFRoaXMgaW1wYWN0cyBOVU1BIGJhbGFuY2luZy4gVGhlIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBgQ09ORklHX05VTUFfQkFMQU5DSU5HYC5cblxuSSBhbHNvIHdhbnRlZCB0byBkb3VibGUtY2hlY2sgbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgYF9fZ2V0X3ZtYV9wb2xpY3lgIHdvcmtzIHRvIG1ha2Ugc3VyZSBJJ3ZlIGdvdCB0aGlzIHJpZ2h0LiBJJ20gbG9va2luZyBhdCB0aGUgY29kZSwgYW5kIGl0IGNvbmZpcm1zIG15IHVuZGVyc3RhbmRpbmc6XG5cbmBgYGNcbnN0cnVjdCBtZW1wb2xpY3kgKl9fZ2V0X3ZtYV9wb2xpY3koc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYWRkciwgcGdvZmZfdCAqaWx4KVxue1xuXHQqaWx4ID0gMDtcblx0cmV0dXJuICh2bWEtXHUwMDNldm1fb3BzIFx1MDAyNlx1MDAyNiB2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kpID9cblx0XHR2bWEtXHUwMDNldm1fb3BzLVx1MDAzZWdldF9wb2xpY3kodm1hLCBhZGRyLCBpbHgpIDogdm1hLVx1MDAzZXZtX3BvbGljeTtcbn1cbmBgYFxuXG5JZiB0aGUgYHZtYS1cdTAwM2V2bV9vcHMtXHUwMDNlZ2V0X3BvbGljeWAgZXhpc3RzLCBpdCBjYWxscyBpdC4gT3RoZXJ3aXNlLCBpdCB1c2VzIGB2bWEtXHUwMDNldm1fcG9saWN5YC4gIElmIHRoZSBgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMLCB0aGVuIGBfX2dldF92bWFfcG9saWN5YCByZXR1cm5zIE5VTEwsIHdoaWNoIGNhdXNlcyBgdm1hX3BvbGljeV9tb2ZgIHRvIGZhbGxiYWNrIHRvIHVzaW5nIGBnZXRfdGFza19wb2xpY3koY3VycmVudClgLiBUaGlzIGlzIHByZWNpc2VseSB0aGUgY2hhbmdlIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLiBJbiB0aGUgb2xkIGNvZGUsIGEgTlVMTCByZXR1cm4gZnJvbSBgdm1hLVx1MDAzZXZtX29wcy1cdTAwM2VnZXRfcG9saWN5YCByZXN1bHRlZCBpbiBgdm1hX3BvbGljeV9tb2ZgIHJldHVybmluZyBgZmFsc2VgLiBJdCAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cbkFscmlnaHQsIGxldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMzAsIk91dHB1dFRva2VucyI6MTIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTg6MTAuNTkyNTI5MjgxWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzYwMzI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BX0JBTEFOQ0lOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtYV9wb2xpY3lfbW9mXCIsXG4gICAgXCJ0YXNrX251bWFfd29ya1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB2bWFfcG9saWN5X21vZmAgdG8gY29ycmVjdGx5IGZhbGwgYmFjayB0byB0aGUgdGFzaydzIG1lbW9yeSBwb2xpY3kgd2hlbiBhIFZNQSdzIGBnZXRfcG9saWN5YCBvcGVyYXRpb24gcmV0dXJucyBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIE5VTUEgYmFsYW5jaW5nIGJlaGF2aW9yLiBUaGUgZmVhdHVyZSByZXF1aXJlcyBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFfQkFMQU5DSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1hX3BvbGljeV9tb2ZcIixcbiAgICBcInRhc2tfbnVtYV93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHZtYV9wb2xpY3lfbW9mYCB0byBjb3JyZWN0bHkgZmFsbCBiYWNrIHRvIHRoZSB0YXNrJ3MgbWVtb3J5IHBvbGljeSB3aGVuIGEgVk1BJ3MgYGdldF9wb2xpY3lgIG9wZXJhdGlvbiByZXR1cm5zIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgTlVNQSBiYWxhbmNpbmcgYmVoYXZpb3IuIFRoZSBmZWF0dXJlIHJlcXVpcmVzIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgIHRvIGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xm7k[1] Phase: Succeeded StartedAt: 2026-06-29 17:19:59 +0000 UTC FinishedAt: 2026-06-29 17:19:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 17:19:59 +0000 UTC FinishedAt: 2026-06-29 17:19:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2] Phase: Succeeded StartedAt: 2026-06-29 17:19:59 +0000 UTC FinishedAt: 2026-06-29 21:20:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:19:59 +0000 UTC FinishedAt: 2026-06-29 21:20:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:19:59 +0000 UTC FinishedAt: 2026-06-29 17:23:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:19:59 +0000 UTC FinishedAt: 2026-06-29 17:20:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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-workflow6xm7k/series-workflow6xm7k-convert-artifact-1230905912/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:23:06 +0000 UTC FinishedAt: 2026-06-29 17:46:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:23:06 +0000 UTC FinishedAt: 2026-06-29 17:46:29 +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:*df9ed9bf-abb0-4c2a-ad0d-31247e4ed1f6,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-workflow6xm7k/series-workflow6xm7k-convert-artifact-1230905912/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": "d87ca865-36f7-4323-adf2-30a0efcf7c68", "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-workflow6xm7k/series-workflow6xm7k-build-action-3616499694/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:23:06 +0000 UTC FinishedAt: 2026-06-29 17:45:27 +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:*df9ed9bf-abb0-4c2a-ad0d-31247e4ed1f6,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-workflow6xm7k/series-workflow6xm7k-convert-artifact-1230905912/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": "d87ca865-36f7-4323-adf2-30a0efcf7c68", "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-workflow6xm7k/series-workflow6xm7k-build-action-3616499694/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:46:29 +0000 UTC FinishedAt: 2026-06-29 17:46:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:46:29 +0000 UTC FinishedAt: 2026-06-29 17:46:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:46:29 +0000 UTC FinishedAt: 2026-06-29 17:46:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:46:29 +0000 UTC FinishedAt: 2026-06-29 17:46:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-workflow6xm7k/series-workflow6xm7k-convert-artifact-3245284767/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:46:54 +0000 UTC FinishedAt: 2026-06-29 17:49:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:46:54 +0000 UTC FinishedAt: 2026-06-29 17:48:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d87ca865-36f7-4323-adf2-30a0efcf7c68,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-workflow6xm7k/series-workflow6xm7k-build-action-3616499694/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-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:49:06 +0000 UTC FinishedAt: 2026-06-29 17:49:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:49:06 +0000 UTC FinishedAt: 2026-06-29 17:49:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:49:06 +0000 UTC FinishedAt: 2026-06-29 18:15:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:49:06 +0000 UTC FinishedAt: 2026-06-29 18:15:15 +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:*df9ed9bf-abb0-4c2a-ad0d-31247e4ed1f6,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-workflow6xm7k/series-workflow6xm7k-convert-artifact-3245284767/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": "38cf6f95-8141-4211-b810-12142d6f6c97", "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-workflow6xm7k/series-workflow6xm7k-build-action-645591091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 17:49:06 +0000 UTC FinishedAt: 2026-06-29 18:15:05 +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:*df9ed9bf-abb0-4c2a-ad0d-31247e4ed1f6,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-workflow6xm7k/series-workflow6xm7k-convert-artifact-3245284767/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": "38cf6f95-8141-4211-b810-12142d6f6c97", "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-workflow6xm7k/series-workflow6xm7k-build-action-645591091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 18:15:15 +0000 UTC FinishedAt: 2026-06-29 18:15:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 18:15:15 +0000 UTC FinishedAt: 2026-06-29 18:15:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 18:15:15 +0000 UTC FinishedAt: 2026-06-29 18:17:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 18:15:15 +0000 UTC FinishedAt: 2026-06-29 18:17:08 +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:*38cf6f95-8141-4211-b810-12142d6f6c97,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-workflow6xm7k/series-workflow6xm7k-build-action-645591091/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-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 18:17:18 +0000 UTC FinishedAt: 2026-06-29 21:20:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 18:17:18 +0000 UTC FinishedAt: 2026-06-29 21:20:22 +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":["vma_policy_mof","task_numa_work"],"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:*d87ca865-36f7-4323-adf2-30a0efcf7c68,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*38cf6f95-8141-4211-b810-12142d6f6c97,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-workflow6xm7k/series-workflow6xm7k-build-action-3616499694/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-workflow6xm7k/series-workflow6xm7k-build-action-645591091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 18:17:18 +0000 UTC FinishedAt: 2026-06-29 18:17:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 18:17:18 +0000 UTC FinishedAt: 2026-06-29 18:17:27 +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":["vma_policy_mof","task_numa_work"],"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-workflow6xm7k/series-workflow6xm7k-convert-artifact-1806435768/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 18:17:18 +0000 UTC FinishedAt: 2026-06-29 18:17:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 18:17:18 +0000 UTC FinishedAt: 2026-06-29 18:17:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 18:17:19 +0000 UTC FinishedAt: 2026-06-29 18:17:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 18:17:29 +0000 UTC FinishedAt: 2026-06-29 21:20:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6xm7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"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":["vma_policy_mof","task_numa_work"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING"],"series_id":"e625c2a3-2cd3-4d6b-b3b0-fbaa35cdb2d6","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-06-29 18:17:29 +0000 UTC FinishedAt: 2026-06-29 21:20:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d87ca865-36f7-4323-adf2-30a0efcf7c68,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*38cf6f95-8141-4211-b810-12142d6f6c97,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-workflow6xm7k/series-workflow6xm7k-build-action-3616499694/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-workflow6xm7k/series-workflow6xm7k-build-action-645591091/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-workflow6xm7k/series-workflow6xm7k-convert-artifact-1806435768/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,}