Name: series-workflowvl9gc Phase: Succeeded StartedAt: 2026-07-03 01:00:08 +0000 UTC FinishedAt: 2026-07-03 05:28:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[0] Phase: Succeeded StartedAt: 2026-07-03 01:00:08 +0000 UTC FinishedAt: 2026-07-03 01:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 01:00:08 +0000 UTC FinishedAt: 2026-07-03 01:16:55 +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": "55558ff9d39dada178e584f0a3be18603622c9db", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "CMA", "COMPACTION", "MEMORY_HOTPLUG" ], "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": "55558ff9d39dada178e584f0a3be18603622c9db", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "CMA", "COMPACTION", "MEMORY_HOTPLUG" ], "series_id": "559dc7b0-9211-4995-b16e-473f10b959b7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_cma_alloc_frozen_folio", "alloc_gigantic_frozen_folio", "alloc_and_dissolve_hugetlb_folio", "isolate_or_dissolve_huge_folio", "replace_free_hugepage_folios" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O3JlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2Agd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBnaWdhbnRpYyBodWdlcGFnZSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBkaXNzb2x2aW5nIGFuZCByZXBsYWNpbmcgZnJlZSBodWdlcGFnZXMgKGUuZy4sIGR1cmluZyBjb21wYWN0aW9uLCBDTUEgYWxsb2NhdGlvbiwgb3IgbWVtb3J5IGhvdHBsdWcpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBjZjllOGVmNzAzZDcyNzk1MDFmZTVkYjZiYjJhZWQ3ODVmNzUwNDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDAxOjEyOjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0ZS4uNTYzZTExZTYwN2U1ZWMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiX2NtYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX2NtYS5jXG5AQCAtMzQsNiAmIzQzOzM0LDkgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4mIzQzO1x0aWYgKCFub2RlbWFzaylcbiYjNDM7XHRcdG5vZGVtYXNrID0gXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xuJiM0MztcbiBcdGlmIChodWdldGxiX2NtYVtuaWRdKVxuIFx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDssCiAgICAmIzM0O2FsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDtpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8mIzM0OywKICAgICYjMzQ7cmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGdpZ2FudGljIGh1Z2VwYWdlIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGRpc3NvbHZpbmcgYW5kIHJlcGxhY2luZyBmcmVlIGh1Z2VwYWdlcyAoZS5nLiwgZHVyaW5nIGNvbXBhY3Rpb24sIENNQSBhbGxvY2F0aW9uLCBvciBtZW1vcnkgaG90cGx1ZykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwY2Y5ZThlZjcwM2Q3Mjc5NTAxZmU1ZGI2YmIyYWVkNzg1Zjc1MDQzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAwMToxMjo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jCmluZGV4IDM5MzQ0ZDZjNzhkODRlLi41NjNlMTFlNjA3ZTVlYyAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYl9jbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX2NtYS5jCkBAIC0zNCw2ICYjNDM7MzQsOSBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLAogCWlmICghaHVnZXRsYl9jbWFfc2l6ZSkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJaWYgKCFub2RlbWFzaykKJiM0MzsJCW5vZGVtYXNrID0gJmFtcDtub2RlX3N0YXRlc1tOX01FTU9SWV07CiYjNDM7CiAJaWYgKGh1Z2V0bGJfY21hW25pZF0pCiAJCXBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZVRMQiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBgbW0vaHVnZXRsYl9jbWEuY2AgZmlsZS4gVGhlIGNvcmUgY2hhbmdlIGZvY3VzZXMgb24gdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCYjMzk7cyBhYm91dCBoYW5kbGluZyBhIHNjZW5hcmlvIHdoZXJlIHRoZSBgbm9kZW1hc2tgIGFyZ3VtZW50IGlzIHBvdGVudGlhbGx5IGBOVUxMYC4KClRoZSBleGlzdGluZyBjb2RlIGNoZWNrcyBmb3IgYGh1Z2V0bGJfY21hX3NpemVgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyBhbiBlYXJseSBleGl0IGlmIHRoZXJlJiMzOTtzIG5vdGhpbmcgdG8gYWxsb2NhdGUuIFRoZW4sIHRoaXMgcGF0Y2ggYWRkcyBhIGNoZWNrLiBOb3csIGlmIGBub2RlbWFza2AgaXMgYE5VTExgLCBpdCYjMzk7cyBkZWZhdWx0aW5nIHRoZSBgbm9kZW1hc2tgIHRvIGAmYW1wO25vZGVfc3RhdGVzW05fTUVNT1JZXWAuIFRoaXMgbWVhbnMgaXQmIzM5O3MgZWZmZWN0aXZlbHkgdXNpbmcgdGhlICYjMzQ7bWVtb3J5JiMzNDsgbm9kZSBtYXNrIGFzIGEgZmFsbGJhY2suIEFuZCBmcm9tIHRoZXJlLCBpZiB0aGVyZSYjMzk7cyBhIHZhbGlkIENNQSByZWdpb24gZm9yIHRoZSBub2RlIChgaHVnZXRsYl9jbWFbbmlkXWApLCBpdCBjYWxscyBgY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZGAuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGBub2RlbWFza2AgY291bGQgYmUgYE5VTExgLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBhbmQgaG93IGRvZXMgYG5vZGVtYXNrYCB0eXBpY2FsbHkgZ2V0IHBvcHVsYXRlZD8gSXMgaXQgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbWF5YmUgaGFuZGxpbmcgYSBjYXNlIHdoZXJlIHRoZSBzeXN0ZW0gdG9wb2xvZ3kgaXNuJiMzOTt0IGZ1bGx5IGluaXRpYWxpemVkPyBJZiB0aGUgZmFsbGJhY2sgdG8gYE5fTUVNT1JZYCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGRlc2lyZWQgYmVoYXZpb3IgaW4gdGhlIHNwZWNpZmljIHNpdHVhdGlvbiwgdGhlbiBpdCYjMzk7cyBwcm9iYWJseSBmaW5lLCBidXQgSSYjMzk7ZCB3YW50IHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGxlYWQgdG8gYW55IHVuZXhwZWN0ZWQgTlVNQSBlZmZlY3RzIG9yIGFsbG9jYXRpb24gZmFpbHVyZXMgaW4gZWRnZSBjYXNlcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgc2l0ZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBodWdldGxiX2NtYS5jYCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIGl0IGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIGRlc2lnbiBnb2FscyBvZiB0aGUgQ01BIEh1Z2VUTEIgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9jbWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiX2NtYS5jPTIxPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI2LVxubW0vaHVnZXRsYl9jbWEuYzoyNzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuYy0yOC1cdFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gRXNzZW50aWFsbHksIEkgd2FudCB0byBtYXAgb3V0IGFsbCB0aGUgcGxhY2VzIGluIHRoZSBrZXJuZWwgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGlzIGlzIG9mdGVuIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIHB1cnBvc2Ugb2YgYW55IGFsbG9jYXRpb24gcGF0aCwgZXNwZWNpYWxseSBvbmUgcmVsYXRlZCB0byBIdWdlVExCIGFuZCBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRpb24pLCB3aGljaCBjYW4gaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEl04oCZcyBhbHNvIGNydWNpYWwgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcywgdHJhY2luZyBkb3duIG1lbW9yeSBsZWFrcywgb3IgY29tcHJlaGVuZGluZyB0aGUgaW50ZXJhY3Rpb24gb2YgdGhpcyBhbGxvY2F0aW9uIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29sc2V0IChgZ3JlcGAsIGBjdGFnc2AsIHRoZSBkZWJ1Z2dlciwgZXRjLikgdG8gdHJhdmVyc2UgdGhlIHNvdXJjZSBjb2RlIGFuZCBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgYWxsb2NhdGlvbiBsYW5kc2NhcGUuIEnigJltIHRoaW5raW5nIEnigJlsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgZGlyZWN0IGNhbGxzLiBUaGVuLCBpZiB0aGF0IHlpZWxkcyBsaW1pdGVkIHJlc3VsdHMsIEnigJlsbCBuZWVkIHRvIGNvbnNpZGVyIGluZGlyZWN0IGZ1bmN0aW9uIGNhbGxzIGFuZCBwb3RlbnRpYWxseSBhbmFseXplIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhvbGQgZnVuY3Rpb24gcG9pbnRlcnMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGNhbGxiYWNrIHVzYWdlLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHVzYWdlIG9mIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTM2NC1cbm1tL2h1Z2V0bGIuYzoxMzY1Olx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbm1tL2h1Z2V0bGIuYy0xMzY2LVx0aWYgKGZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjE9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjYtXG5tbS9odWdldGxiX2NtYS5jOjI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9odWdldGxiX2NtYS5jLTI4LVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuaC04LVx0XHRcdFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuaC0xOS1cbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXG5tbS9odWdldGxiX2NtYS5oLTIxLVx0XHRnZnBfdCBnZnBfbWFzayxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzOTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgZm9yIEh1Z2VUTEIgQ01BKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgYGh1Z2V0bGJfY21hLmNgIGZpbGUuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCYjMzk7cyBhbHdheXMgdGhlIGJlc3QgcGxhY2UgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY29uZmlndXJhYmxlLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGlzIGZlYXR1cmUgaW50ZWdyYXRlcyBpbnRvIHRoZSBsYXJnZXIgc3lzdGVtLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBlbnRyaWVzIHNwZWNpZmljYWxseSBtZW50aW9uaW5nIGBodWdldGxiX2NtYS5jYCBvciAmIzM0O2h1Z2UgcGFnZXMmIzM0OyBhbmQgJiMzNDtDTUEmIzM0OyB0b2dldGhlci4gVGhpcyBzaG91bGQgdGVsbCBtZSBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQsIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgd2hhdCBvdGhlciBzZXR0aW5ncyBtaWdodCBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIGl0IHRvIHdvcmsgY29ycmVjdGx5LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCB2ZXJzaW9ucywgYXJjaGl0ZWN0dXJlLCBhbmQgcG9zc2libHkgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkgbmVlZCB0byBiZSByZWFkeSB0byBpbnRlcnByZXQgdGhlIGRlcGVuZGVuY2llcyBjb3JyZWN0bHksIGFzIEkgYWxyZWFkeSBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIEtjb25maWcgc3ludGF4IGFuZCB0aGUgZ2VuZXJhbCBrZXJuZWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIE15IGdvYWwgaXMgdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGltcGxpY2F0aW9ucyBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9jbWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT04Mj1pZmRlZiBDT05GSUdfQ01BXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGJfY21hLm9cbm1tL01ha2VmaWxlLTg0LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLgoKKipOYXZpZ2F0aW5nIHRoZSBIdWdlVExCIGFuZCBDTUEgQ29uZmx1ZW5jZSoqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoaXMgY2VudGVycyBhcm91bmQgYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIGl0IOKAkyB0aGUgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yIHdvcmtpbmcgaW4gY29uanVuY3Rpb24gd2l0aCBIdWdlVExCIGZpbGUgc3lzdGVtcy4gSW50ZXJlc3RpbmcuIE15IGZvY3VzIGlzIHF1aWNrbHkgZHJhd24gdG8gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFRoYXQgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLCB3aGljaCByZXNpZGVzIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gTm93IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCBmdXJ0aGVyIGJhY2suIExldCBtZSBxdWlja2x5IGRldGVybWluZSB3aGVyZSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCBpdHNlbGYgaXMgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSB1cHN0cmVhbSBjYWxsZXJzIHdpbGwgYmUgZXNzZW50aWFsIGZvciBmdWxsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTMyMD1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTEzNTktI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DT05USUdfQUxMT0MpXG5tbS9odWdldGxiLmM6MTM2MDpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGIuYy0xMzYxLVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiLmMtMTM3Ni0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cbm1tL2h1Z2V0bGIuYzoxMzc3OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxubW0vaHVnZXRsYi5jLTEzNzgtXHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vaHVnZXRsYi5jPTE4MzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE4NDYtXHRpZiAob3JkZXJfaXNfZ2lnYW50aWMob3JkZXIpKVxubW0vaHVnZXRsYi5jOjE4NDc6XHRcdGZvbGlvID0gYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBubWFzayk7XG5tbS9odWdldGxiLmMtMTg0OC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQwMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gSHVnZVRMQiBGb2xpbyBBbGxvY2F0aW9uKioKClJpZ2h0LCBzbyBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIHJlcXVlc3RpbmcgYSBmcmVzaCwgdW5pbml0aWFsaXplZCBIdWdlVExCIGZvbGlvLiBJbnRlcmVzdGluZy4gSSBpbW1lZGlhdGVseSBzZWUgdGhhdCBpdCBmdW5uZWxzIGludG8gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHByb2JhYmx5IHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBhY3R1YWxseSAqZG9pbmcqIHRoZSBhbGxvY2F0aW9uLCBhbmQgJiMzOTtmcm96ZW4mIzM5OyBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSBtZW1vcnkgcmVnaW9uIHRoYXQmIzM5O3MgYWxyZWFkeSBiZWVuIHNldCB1cCBmb3IgdGhlIHVzZXIuIFNvLCBteSBuZXh0IHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyB0aGlzIGBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGhvdyB0aGVzZSBmb2xpb3MgYXJlIHJlcXVlc3RlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGVudHJ5IHBvaW50IHRvIHRoZSBzb3VyY2Ugb2YgdGhlIHJlcXVlc3RzLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xNzkxPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYy0xODM1LVxubW0vaHVnZXRsYi5jOjE4MzY6c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMTgzNy1cdFx0Z2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIG5vZGVtYXNrX3QgKm5tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYz0xODYzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTg2Ny1cbm1tL2h1Z2V0bGIuYzoxODY4Olx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2ssIE5VTEwpO1xubW0vaHVnZXRsYi5jLTE4NjktXHRpZiAoZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jPTE4OTY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfcG9vbF9odWdlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE5MDYtXG5tbS9odWdldGxiLmM6MTkwNzpcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5vZGUsXG5tbS9odWdldGxiLmMtMTkwOC1cdFx0XHRcdFx0bm9kZXNfYWxsb3dlZCwgbm9kZV9hbGxvY19ub3JldHJ5KTtcbi0tXG5tbS9odWdldGxiLmM9MzM5Nz1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkKVxuLS1cbm1tL2h1Z2V0bGIuYy0zNDEwLVxubW0vaHVnZXRsYi5jOjM0MTE6XHRcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcbm1tL2h1Z2V0bGIuYy0zNDEyLVx0XHRcdFx0XHRcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xuLS1cbm1tL2h1Z2V0bGIuYy0zNDE2LVx0XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW9fbGlzdCk7XG5tbS9odWdldGxiLmM6MzQxNzpcdFx0XHRcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXG5tbS9odWdldGxiLmMtMzQxOC1cdFx0XHRcdFx0XHRcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjYyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBIdWdlcGFnZSBBbGxvY2F0aW9uIEZpeCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIGZpeCBpcyBkZWFsaW5nIHdpdGggaHVnZXBhZ2UgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyBhIGJ1ZyB3aGVyZSB0aGUgYG5vZGVtYXNrYCBpcyB1bmV4cGVjdGVkbHkgYE5VTExgLCBjYXVzaW5nIGl0IHRvIGRlZmF1bHQgdG8gYCZhbXA7bm9kZV9zdGF0ZXNbTl9NRU1PUlldYC4gVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFzIGl0IG1vZGlmaWVzIHRoZSBiZWhhdmlvciBpbiBgbW0vaHVnZXRsYl9jbWEuY2AuIEdpdmVuIHRoYXQgdGhpcyB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gaHVnZXBhZ2VzLCBJJiMzOTtkIHNheSB0aGF0IGZ1enppbmcgaXMgYWJzb2x1dGVseSB3YXJyYW50ZWQgaGVyZS4gV2UgbmVlZCB0byBlbnN1cmUgdGhpcyBmaXggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBleHBvc2UgbmV3IHZ1bG5lcmFiaWxpdGllcy4KClRpbWUgdG8gcmV2aXNpdCB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb247IGxldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyBudWxsIGNoZWNrIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfY21hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9jbWEuYz0yMT12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yNi1cbm1tL2h1Z2V0bGJfY21hLmM6Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGJfY21hLmMtMjgtXHRcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgdGhpcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gQ01BLCBodWdldGxiZnMsIGFuZCwgb2YgY291cnNlLCB0aGUgZm9saW8gc3RydWN0dXJlcy4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIHRoaXMgaXMgYWJvdXQgYWxsb2NhdGluZyBhIGZyb3plbiBmb2xpbywgbWVhbmluZyBpdCBsaWtlbHkgZGVhbHMgd2l0aCBwcmUtaW5pdGlhbGl6ZWQgb3IgcHJlLXBvcHVsYXRlZCBtZW1vcnkgcmVnaW9ucyB3aXRoaW4gdGhlIGh1Z2V0bGJmcyBzcGFjZSwgcG90ZW50aWFsbHkgZm9yIHRoaW5ncyBsaWtlIGRldmljZSBtZW1vcnkgb3IgcHJlLWFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLiBUaGUgJiMzNDtmcm96ZW4mIzM0OyBhc3BlY3QgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBJJiMzOTtkIGFudGljaXBhdGUgc2VlaW5nIG1lY2hhbmlzbXMgdG8gcHJldmVudCB0aGUgZm9saW8gZnJvbSBiZWluZyBpbmFkdmVydGVudGx5IGZyZWVkIG9yIG1vZGlmaWVkLCBhdCBsZWFzdCBmcm9tIHRoZSBzdGFuZGFyZCBwYWdlIGFsbG9jYXRpb24gcGF0aHMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayBhY3F1aXNpdGlvbiBhbmQgcmVsZWFzZSBvcmRlcmluZywgYXMgY29uY3VycmVudCBhY2Nlc3MgaW4gdGhpcyBlbnZpcm9ubWVudCBjYW4gYmUgbm90b3Jpb3VzbHkgdHJpY2t5LCBlc3BlY2lhbGx5IHdpdGggaHVnZXRsYmZzJiMzOTtzIGluaGVyZW50IGNvbXBsZXhpdHkuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IGtpbmQgb2YgaW5pdGlhbCBzdGF0ZSBkb2VzIHRoaXMgYWxsb2NhdGlvbiBlbnN1cmU/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIENNQSBhbGxvY2F0b3ImIzM5O3Mgem9uZXMsIGVzcGVjaWFsbHkgdGhlIGNvbnNpZGVyYXRpb25zIGZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5PyBBbmQgaG93IGRvZXMgaXQgaGFuZGxlIHRoZSBjb21wbGV4aXRpZXMgb2YgaHVnZXRsYmZzIG1hcHBpbmdzIGFuZCBwZXJtaXNzaW9ucywgc3BlY2lmaWNhbGx5IHRoZSBwb3RlbnRpYWwgbmVlZCBmb3Igc2hhcmVkIG1hcHBpbmdzIG9yIHNwZWNpZmljIGFjY2VzcyBmbGFncz8gSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBzcGVjaWZpYyBjYWxscyB0byBgaHVnZXRsYl9jbWFfYWxsb2NfZm9saW9gIG9yIHJlbGF0ZWQgaW50ZXJuYWwgZnVuY3Rpb25zLCBsZXQmIzM5O3MgZ2V0IGludG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9jbWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjc6XHRzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuICAyODpcdFx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbiAgMjk6XHR7XG4gIDMwOlx0XHRpbnQgbm9kZTtcbiAgMzE6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gIDMyOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4gIDMzOlx0XG4gIDM0Olx0XHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG4gIDM1Olx0XHRcdHJldHVybiBOVUxMO1xuICAzNjpcdFxuICAzNzpcdFx0aWYgKCFub2RlbWFzaylcbiAgMzg6XHRcdFx0bm9kZW1hc2sgPSBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XG4gIDM5Olx0XG4gIDQwOlx0XHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbiAgNDE6XHRcdFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xuICA0MjpcdFxuICA0MzpcdFx0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpIHtcbiAgNDQ6XHRcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpub2RlbWFzaykge1xuICA0NTpcdFx0XHRcdGlmIChub2RlID09IG5pZCB8fCAhaHVnZXRsYl9jbWFbbm9kZV0pXG4gIDQ2Olx0XHRcdFx0XHRjb250aW51ZTtcbiAgNDc6XHRcbiAgNDg6XHRcdFx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtub2RlXSwgb3JkZXIpO1xuICA0OTpcdFx0XHRcdGlmIChwYWdlKVxuICA1MDpcdFx0XHRcdFx0YnJlYWs7XG4gIDUxOlx0XHRcdH1cbiAgNTI6XHRcdH1cbiAgNTM6XHRcbiAgNTQ6XHRcdGlmICghcGFnZSlcbiAgNTU6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDU2Olx0XG4gIDU3Olx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4gIDU4Olx0XHRmb2xpb19zZXRfaHVnZXRsYl9jbWEoZm9saW8pO1xuICA1OTpcdFx0cmV0dXJuIGZvbGlvO1xuICA2MDpcdH1cbiAgNjE6XHRcbiAgNjI6XHRzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKiBfX2luaXRcbiAgNjM6XHRodWdldGxiX2NtYV9hbGxvY19ib290bWVtKHN0cnVjdCBoc3RhdGUgKmgsIGludCAqbmlkLCBib29sIG5vZGVfZXhhY3QpXG4gIDY0Olx0e1xuICA2NTpcdFx0c3RydWN0IGNtYSAqY21hO1xuICA2NjpcdFx0c3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptO1xuICA2NzpcdFx0aW50IG5vZGUgPSAqbmlkO1xuICA2ODpcdFxuICA2OTpcdFx0Y21hID0gaHVnZXRsYl9jbWFbKm5pZF07XG4gIDcwOlx0XHRtID0gY21hX3Jlc2VydmVfZWFybHkoY21hLCBodWdlX3BhZ2Vfc2l6ZShoKSk7XG4gIDcxOlx0XHRpZiAoIW0pIHtcbiAgNzI6XHRcdFx0aWYgKG5vZGVfZXhhY3QpXG4gIDczOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDc0Olx0XG4gIDc1Olx0XHRcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBodWdldGxiX2Jvb3RtZW1fbm9kZXMpIHtcbiAgNzY6XHRcdFx0XHRjbWEgPSBodWdldGxiX2NtYVtub2RlXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc4MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlIGluIEh1Z2VUTEIgQ01BIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwb3RlbnRpYWwgY3Jhc2guIEl0IGxvb2tzIGxpa2UgaWYgYG5vZGVtYXNrYCBpcyBOVUxMLCB3ZSYjMzk7cmUgZ29pbmcgdG8gaGl0IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5vZGVtYXNrKWAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGVycm9yLCBhbmQgaXQgc2VlbXMgdG8gYmUgaGFwcGVuaW5nIHVuZGVyIHZlcnkgc3BlY2lmaWMgY29uZGl0aW9ucyByZWxhdGVkIHRvIEh1Z2VUTEIgQ01BIGFsbG9jYXRpb24uIE15IGh1bmNoIGlzIHRoYXQgdGhpcyBvcmlnaW5hdGVzIHdoZW4gYGh1Z2V0bGJfY21hW25pZF1gIGRvZXNuJiMzOTt0IGhhdmUgZW5vdWdoIGF2YWlsYWJsZSBtZW1vcnksIG9yIHdvcnNlLCBpcyBhY3R1YWxseSBOVUxMIGl0c2VsZiwgYW5kIHdlJiMzOTtyZSBub3QgdXNpbmcgYF9fR0ZQX1RISVNOT0RFYC4gVGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgcHJlY2lzZWx5IHRoYXQsIGFpbWluZyB0byBwcmV2ZW50IHRoZSBkZXJlZmVyZW5jZS4KCk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbnM/IEJhc2VkIG9uIHRoZSBjb2RlLCBpdCBzZWVtcyB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBlbmFibGVkLCBvYnZpb3VzbHkuIEJ1dCB0aGVyZSBtaWdodCBiZSBtb3JlIHRvIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBhbHNvIG1pZ2h0IG5lZWQgYENPTkZJR19DT05USUdfQUxMT0NgIGFuZCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGJlY2F1c2Ugb2YgaG93IGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIHdvcmtzLCBhbmQgaG93IGl0IGNhbGxzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBJdCYjMzk7cyBwcmV0dHkgbGlrZWx5IHdlJiMzOTtsbCBoYXZlIHRvIGRlbHZlIGludG8gYG1tL2h1Z2V0bGIuY2AgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBjYWxsIHN0YWNrIHRvIGJlIHN1cmUuIFRpbWUgdG8gY2hlY2sgdGhvc2UgY29uZmlndXJhdGlvbnMgYW5kIHRoZSBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1OTpcdCNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09OVElHX0FMTE9DKVxuMTM2MDpcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuMTM2MTpcdFx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbjEzNjI6XHR7XG4xMzYzOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMTM2NDpcdFxuMTM2NTpcdFx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbjEzNjY6XHRcdGlmIChmb2xpbylcbjEzNjc6XHRcdFx0cmV0dXJuIGZvbGlvO1xuMTM2ODpcdFxuMTM2OTpcdFx0aWYgKGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYygpKVxuMTM3MDpcdFx0XHRyZXR1cm4gTlVMTDtcbjEzNzE6XHRcbjEzNzI6XHRcdGZvbGlvID0gKHN0cnVjdCBmb2xpbyAqKWFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXMoMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIGdmcF9tYXNrLFxuMTM3MzpcdFx0XHRcdFx0XHRcdFx0ICBuaWQsIG5vZGVtYXNrKTtcbjEzNzQ6XHRcdHJldHVybiBmb2xpbztcbjEzNzU6XHR9XG4xMzc2Olx0I2Vsc2UgLyogIUNPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFIHx8ICFDT05GSUdfQ09OVElHX0FMTE9DICovXG4xMzc3Olx0c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG4xMzc4Olx0XHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4xMzc5Olx0e1xuMTM4MDpcdFx0cmV0dXJuIE5VTEw7XG4xMzgxOlx0fVxuMTM4MjpcdCNlbmRpZlxuMTM4MzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzIwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgbWVudGFsIHJ1bmRvd24gb24gdGhpcywgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgR2lnYW50aWMgUGFnZXMgYW5kIENvbnRpZ3VvdXMgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBiYXNlZCBvbiB3aGF0IEkmIzM5O20gc2VlaW5nLCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGFuZCBgQ09ORklHX0NPTlRJR19BTExPQ2AgYXJlIGRlZmluaXRlbHkgY3J1Y2lhbCBoZXJlLiBJdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBIbW0sIGJ1dCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBhYm91dCB0aGlzLiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgLCB0aGF0JiMzOTtzIGdlbmVyYWxseSB0aWVkIHRvIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgYXJjaGl0ZWN0dXJhbCBkZXBlbmRlbmNpZXMuIE9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgdGhvdWdodCBpcywgbGV0JiMzOTtzIGFsc28gZmFjdG9yIGluIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXkgYXJlIGFsc28gY29uc2lkZXJlZCB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBBbmQsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHNjYW4gZm9yIG90aGVyIGNhbGxlcnMgb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIE5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhhdCBhbGxvY2F0aW9uIHBhdGguIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBJIGhhdmVuJiMzOTt0IGFjY291bnRlZCBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTM2NC1cbm1tL2h1Z2V0bGIuYzoxMzY1Olx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbm1tL2h1Z2V0bGIuYy0xMzY2LVx0aWYgKGZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjE9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjYtXG5tbS9odWdldGxiX2NtYS5jOjI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9odWdldGxiX2NtYS5jLTI4LVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuaC04LVx0XHRcdFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuaC0xOS1cbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXG5tbS9odWdldGxiX2NtYS5oLTIxLVx0XHRnZnBfdCBnZnBfbWFzayxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEdpZ2FudGljIEZvbGlvIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYWxsb2NhdGlvbiBvZiB0aGVzZSBnaWdhbnRpYyBmb2xpb3MuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgY29yZSBmdW5jdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLiBBbmQgSSBzZWUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHBvaW50IG9mIG9yaWdpbiBxdWl0ZSBzaWduaWZpY2FudGx5LgoKTm93LCBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBnZXRzIGNhbGxlZCBmcm9tIGEgZmV3IG90aGVyIGZ1bmN0aW9uczogYGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLCBgYWxsb2NfcG9vbF9odWdlX2ZvbGlvYCwgYW5kIGBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19vbmVub2RlYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19vbmVub2RlYC4gSXQgc2VlbXMgdG8gYmUgdGhlIG1vc3QgYWJzdHJhY3Qgb2YgdGhlIHRocmVlLiBJdCBpcyBsaWtlbHkgaXQgaXMgd2hlcmUgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBiZWdpbnMuIFRoaXMgbWlnaHQgYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHRoZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0MDU6XHRcdFx0XHRpZiAoIWFsbG9jX2Jvb3RtZW1faHVnZV9wYWdlKGgsIG5pZCkpXG4zNDA2Olx0XHRcdFx0XHRicmVhaztcbjM0MDc6XHRcdFx0fSBlbHNlIHtcbjM0MDg6XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMzQwOTpcdFx0XHRcdGdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpIHwgX19HRlBfVEhJU05PREU7XG4zNDEwOlx0XG4zNDExOlx0XHRcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcbjM0MTI6XHRcdFx0XHRcdFx0XHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcbjM0MTM6XHRcdFx0XHRpZiAoIWZvbGlvIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZmb2xpb19saXN0KSBcdTAwMjZcdTAwMjZcbjM0MTQ6XHRcdFx0XHQgICAgaHVnZXRsYl92bWVtbWFwX29wdGltaXphYmxlX3NpemUoaCkpIHtcbjM0MTU6XHRcdFx0XHRcdHByZXBfYW5kX2FkZF9hbGxvY2F0ZWRfZm9saW9zKGgsIFx1MDAyNmZvbGlvX2xpc3QpO1xuMzQxNjpcdFx0XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW9fbGlzdCk7XG4zNDE3Olx0XHRcdFx0XHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLFxuMzQxODpcdFx0XHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XG4zNDE5Olx0XHRcdFx0fVxuMzQyMDpcdFx0XHRcdGlmICghZm9saW8pXG4zNDIxOlx0XHRcdFx0XHRicmVhaztcbjM0MjI6XHRcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvX2xpc3QpO1xuMzQyMzpcdFx0XHR9XG4zNDI0Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGJvbGRlZCBoZWFkZXIgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZWAmIzM5O3MgTm9kZSBNYXNrKioKCkFscmlnaHQsIHNvIGBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19vbmVub2RlYCBpcyBwYXNzaW5nIGAmYW1wO25vZGVfc3RhdGVzW05fTUVNT1JZXWAgYXMgdGhlIGBub2RlbWFza2AgYXJndW1lbnQuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nIGluIG15IG1pbmQuIGAmYW1wO25vZGVfc3RhdGVzW05fTUVNT1JZXWAgZXNzZW50aWFsbHkgcmVwcmVzZW50cyAqYWxsKiBtZW1vcnkgbm9kZXMsIHJpZ2h0PyBUaGUgaW50ZW50aW9uIGhlcmUgaXMgbGlrZWx5IHRvIGFsbG9jYXRlIHRoZSBodWdlIHBhZ2VzIGZyb20gYW55IGF2YWlsYWJsZSBOVU1BIG5vZGUsIHRyZWF0aW5nIHRoZW0gYXMgaW50ZXJjaGFuZ2VhYmxlIGluIHRoaXMgY29udGV4dC4gQnV0IGl0JiMzOTtzIHdvcnRoIGRvdWJsZS1jaGVja2luZyBob3cgdGhpcyBgbm9kZW1hc2tgIGlzIGFjdHVhbGx5IHVzZWQgZG93bnN0cmVhbS4gTGV0IG1lIHNlZS4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgdG8gdGhpcyBgbm9kZW1hc2tgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgaXQgd2lsbCBsaWtlbHkgYmUgdXNlZCB0byByZXN0cmljdCBhbGxvY2F0aW9uIHRvIHRob3NlIG5vZGVzLgoKT2theSwgbGV0JiMzOTtzIGRpdmUgZGVlcGVyLiBXaGVyZSBkb2VzIHRoaXMgYG5vZGVtYXNrYCBnZXQgdXNlZD8gVGhlIG5leHQgbG9naWNhbCBwbGFjZSB0byBsb29rIGlzIGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB3aGVyZSB0aGUgYWxsb2NhdGlvbiBhY3R1YWxseSBoYXBwZW5zLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGUgYG5vZGVtYXNrYCBpcyBwYXNzZWQgaW4gYXMgYSByZXN0cmljdGlvbiwgd2hpY2ggd2lsbCBlaXRoZXIgYmUgcGFzc2VkIG9uIGRvd24gdGhlIGFsbG9jYXRpb24gY2hhaW4gb3IgZGlyZWN0bHkgdXNlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGUgYWxsLW5vZGVzIGBub2RlbWFza2AgYWZmZWN0cyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneS4gVGhlIGRldGFpbHMgb2YgaG93IHRoaXMgaGFwcGVucyB3aWxsIGRldGVybWluZSB0aGUgZWZmZWN0aXZlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCBmb3IgdGhlIHdvcmtsb2FkLiBMZXQmIzM5O3Mgc2VlIGhvdyBgYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AgaGFuZGxlcyB0aGlzIGBub2RlbWFza2AuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjM6XHRzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4xODY0Olx0XHRcdGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBub2RlbWFza190ICpubWFzaylcbjE4NjU6XHR7XG4xODY2Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMTg2NzpcdFxuMTg2ODpcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2ssIE5VTEwpO1xuMTg2OTpcdFx0aWYgKGZvbGlvKVxuMTg3MDpcdFx0XHRodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oaCwgZm9saW8pO1xuMTg3MTpcdFx0cmV0dXJuIGZvbGlvO1xuMTg3MjpcdH1cbjE4NzM6XHRcbjE4NzQ6XHR2b2lkIHByZXBfYW5kX2FkZF9hbGxvY2F0ZWRfZm9saW9zKHN0cnVjdCBoc3RhdGUgKmgsXG4xODc1Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuMTg3NjpcdHtcbjE4Nzc6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4xODc4Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqdG1wX2Y7XG4xODc5Olx0XG4xODgwOlx0XHQvKiBTZW5kIGxpc3QgZm9yIGJ1bGsgdm1lbW1hcCBvcHRpbWl6YXRpb24gcHJvY2Vzc2luZyAqL1xuMTg4MTpcdFx0aHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvcyhoLCBmb2xpb19saXN0KTtcbjE4ODI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSHVnZVRMQiBGb2xpbyBBbGxvY2F0aW9uKioKCk9rYXksIHNvIGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBpcyB1c2luZyB0aGlzIGBubWFza2AgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgdHJhY2UgdGhpcyBjYWxsIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gc3RyYXRlZ3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbm1hc2tgIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBJdCBzZWVtcyBsaWtlIGl0IG11c3QgaW5mbHVlbmNlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGJhY2tpbmcgcG9vbCwgb3IgcG90ZW50aWFsbHkgdGhlIHNwZWNpZmljIHBhZ2VzIHdpdGhpbiBhIHBvb2wgdGhhdCBhcmUgY29uc2lkZXJlZC4gTm93LCBsZXQmIzM5O3Mgc3RlcCBvdmVyIHRvIGBhbGxvY19wb29sX2h1Z2VfZm9saW9gLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyBgbm1hc2tgIHRoZXJlOyBJIGV4cGVjdCB0aGF0IGl0IHdpbGwgaGF2ZSBzb21lIGltcGFjdCBvbiB0aGUgZmluYWwgZm9saW8gYWxsb2NhdGlvbiwgYnV0IEkgbmVlZCB0byBhc2NlcnRhaW4gdGhlIHNwZWNpZmljcy4gSSBhbSB2ZXJ5IGludGVyZXN0ZWQgdG8gc2VlIGhvdyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcG9vbCBpbXBhY3RzIGFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg5NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODk2Olx0c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfcG9vbF9odWdlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4xODk3Olx0XHRcdFx0XHRcdG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4xODk4Olx0XHRcdFx0XHRcdG5vZGVtYXNrX3QgKm5vZGVfYWxsb2Nfbm9yZXRyeSxcbjE4OTk6XHRcdFx0XHRcdFx0aW50ICpuZXh0X25vZGUpXG4xOTAwOlx0e1xuMTkwMTpcdFx0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCkgfCBfX0dGUF9USElTTk9ERTtcbjE5MDI6XHRcdGludCBucl9ub2Rlcywgbm9kZTtcbjE5MDM6XHRcbjE5MDQ6XHRcdGZvcl9lYWNoX25vZGVfbWFza190b19hbGxvYyhuZXh0X25vZGUsIG5yX25vZGVzLCBub2RlLCBub2Rlc19hbGxvd2VkKSB7XG4xOTA1Olx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4xOTA2Olx0XG4xOTA3Olx0XHRcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBub2RlLFxuMTkwODpcdFx0XHRcdFx0XHRub2Rlc19hbGxvd2VkLCBub2RlX2FsbG9jX25vcmV0cnkpO1xuMTkwOTpcdFx0XHRpZiAoZm9saW8pXG4xOTEwOlx0XHRcdFx0cmV0dXJuIGZvbGlvO1xuMTkxMTpcdFx0fVxuMTkxMjpcdFxuMTkxMzpcdFx0cmV0dXJuIE5VTEw7XG4xOTE0Olx0fVxuMTkxNTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYxNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEh1Z2VUTEIgRm9saW8gQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBgYWxsb2NfcG9vbF9odWdlX2ZvbGlvYCBnb3QgY2FsbGVkLCBhbmQgaXQgcGFzc2VkIGFsb25nIGBub2Rlc19hbGxvd2VkYC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoYXQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBgYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AsIGlzIGJlaW5nIGludm9rZWQuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZXNlIGh1Z2UgcGFnZSBmb2xpb3MgYXJlIGFjdHVhbGx5IGFsbG9jYXRlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBpbiB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTE3OTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTE4MzUtXG5tbS9odWdldGxiLmM6MTgzNjpzdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGIuYy0xODM3LVx0XHRnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm1hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTE4NjItICovXG5tbS9odWdldGxiLmM6MTg2MzpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMTg2NC1cdFx0Z2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIG5vZGVtYXNrX3QgKm5tYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYy0xODY3LVxubW0vaHVnZXRsYi5jOjE4Njg6XHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBubWFzaywgTlVMTCk7XG5tbS9odWdldGxiLmMtMTg2OS1cdGlmIChmb2xpbylcbi0tXG5tbS9odWdldGxiLmM9MTg5Nj1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19wb29sX2h1Z2VfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTkwNi1cbm1tL2h1Z2V0bGIuYzoxOTA3Olx0XHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbm9kZSxcbm1tL2h1Z2V0bGIuYy0xOTA4LVx0XHRcdFx0XHRub2Rlc19hbGxvd2VkLCBub2RlX2FsbG9jX25vcmV0cnkpO1xuLS1cbm1tL2h1Z2V0bGIuYz0yMDc2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMDg4LVxubW0vaHVnZXRsYi5jOjIwODk6XHRmb2xpbyA9IGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2spO1xubW0vaHVnZXRsYi5jLTIwOTAtXHRpZiAoIWZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYz0yMTI0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMjEzMS1cbm1tL2h1Z2V0bGIuYzoyMTMyOlx0Zm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcbm1tL2h1Z2V0bGIuYy0yMTMzLVx0aWYgKCFmb2xpbylcbi0tXG5tbS9odWdldGxiLmM9MjY0MT1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNjg2LVx0XHRcdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpIHwgX19HRlBfVEhJU05PREU7XG5tbS9odWdldGxiLmM6MjY4NzpcdFx0XHRuZXdfZm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLFxubW0vaHVnZXRsYi5jLTI2ODgtXHRcdFx0XHRcdFx0XHQgICAgICBuaWQsIE5VTEwpO1xuLS1cbm1tL2h1Z2V0bGIuYz0zMzk3PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19vbmVub2RlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQpXG4tLVxubW0vaHVnZXRsYi5jLTM0MTAtXG5tbS9odWdldGxiLmM6MzQxMTpcdFx0XHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLFxubW0vaHVnZXRsYi5jLTM0MTItXHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XG4tLVxubW0vaHVnZXRsYi5jLTM0MTYtXHRcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmb2xpb19saXN0KTtcbm1tL2h1Z2V0bGIuYzozNDE3Olx0XHRcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcbm1tL2h1Z2V0bGIuYy0zNDE4LVx0XHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzk4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AgYW5kIEkgc2VlIHNvbWV0aGluZyB0aGF0JiMzOTtzIGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gcGFzc2VzIGBOVUxMYCBhcyB0aGUgYG5tYXNrYCBhcmd1bWVudCB0byBgYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AuIExldCYjMzk7cyB0YWtlIGEgbG9vay4gCgpgYGBjCgkJCW5ld19mb2xpbyA9IGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssCgkJCQkJCQkgICAgICBuaWQsIE5VTEwpOwpgYGAKCkFoLCByaWdodCB0aGVyZSEgSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGlzIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGBOVUxMYCBub2RlbWFzay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgaXMgYmVpbmcgZG9uZSwgd2hhdCBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgbWFkZSBoZXJlLCBhbmQgaWYgaXQmIzM5O3MgY29ycmVjdC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IG9mIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AgdG8gc2VlIHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzIGRlY2lzaW9uIGFuZCBkZXRlcm1pbmUgdGhlIGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoYXQgZnVuY3Rpb24gbW9yZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY4MDpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjI2ODE6XHRcdFx0Z290byByZXRyeTtcbjI2ODI6XHRcdH0gZWxzZSB7XG4yNjgzOlx0XHRcdGggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTtcbjI2ODQ6XHRcdFx0aWYgKCFuZXdfZm9saW8pIHtcbjI2ODU6XHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbjI2ODY6XHRcdFx0XHRnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1RISVNOT0RFO1xuMjY4NzpcdFx0XHRcdG5ld19mb2xpbyA9IGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssXG4yNjg4Olx0XHRcdFx0XHRcdFx0XHQgICAgICBuaWQsIE5VTEwpO1xuMjY4OTpcdFx0XHRcdGlmICghbmV3X2ZvbGlvKVxuMjY5MDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yNjkxOlx0XHRcdFx0Z290byByZXRyeTtcbjI2OTI6XHRcdFx0fVxuMjY5MzpcdFxuMjY5NDpcdFx0XHQvKlxuMjY5NTpcdFx0XHQgKiBPaywgb2xkX2ZvbGlvIGlzIHN0aWxsIGEgZ2VudWluZSBmcmVlIGh1Z2VwYWdlLiBSZW1vdmUgaXQgZnJvbVxuMjY5NjpcdFx0XHQgKiB0aGUgZnJlZWxpc3QgYW5kIGRlY3JlYXNlIHRoZSBjb3VudGVycy4gVGhlc2Ugd2lsbCBiZVxuMjY5NzpcdFx0XHQgKiBpbmNyZW1lbnRlZCBhZ2FpbiB3aGVuIGNhbGxpbmcgYWNjb3VudF9uZXdfaHVnZXRsYl9mb2xpbygpXG4yNjk4Olx0XHRcdCAqIGFuZCBlbnF1ZXVlX2h1Z2V0bGJfZm9saW8oKSBmb3IgbmV3X2ZvbGlvLiBUaGUgY291bnRlcnMgd2lsbFxuMjY5OTpcdFx0XHQgKiByZW1haW4gc3RhYmxlIHNpbmNlIHRoaXMgaGFwcGVucyB1bmRlciB0aGUgbG9jay5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0OTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKk15IFBlcnNwZWN0aXZlIG9uIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AqKgoKUmlnaHQsIHNvIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AuLi4gdGhhdCBmdW5jdGlvbiYjMzk7cyBzaWduYXR1cmUgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIGltcG9ydGFudCBpbiBodWdlIHBhZ2UgbWFuYWdlbWVudC4gVGhlIG5hbWUgaXRzZWxmIGlzIGZhaXJseSBkZXNjcmlwdGl2ZSwgaW5kaWNhdGluZyBhIHR3by1wYXJ0IG9wZXJhdGlvbi4gJiMzNDtBbGxvYyYjMzQ7IHN1Z2dlc3RzIGFsbG9jYXRpbmcgYSBodWdldGxiIGZvbGlvIChhIGNvbnRpZ3VvdXMgcmVnaW9uIG9mIG1lbW9yeSBzdWl0YWJsZSBmb3IgYSBsYXJnZSBwYWdlKSwgYW5kICYjMzQ7ZGlzc29sdmUmIzM0OyBpbXBsaWVzIHRlYXJpbmcgaXQgZG93biwgd2hpY2ggbXVzdCBtZWFuIHdlIGFyZSBsb29raW5nIGF0IGlzb2xhdGluZyBhIHNpbmdsZSBwYWdlIGluIHRoZSBmb2xpbyBvciBtb3ZpbmcgaXQgZWxzZXdoZXJlLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfcGFnZWAgaXMgdGhlIGtleS4gVGhhdCBmdW5jdGlvbiBjbGVhcmx5IG9yY2hlc3RyYXRlcyB0aGUgaXNvbGF0aW9uIG9yLCBwb3RlbnRpYWxseSwgdGhlIHRvdGFsIGRlY29uc3RydWN0aW9uIG9mIGEgaHVnZSBwYWdlLiBTbywgYGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvYCBpcyBsaWtlbHkgKnRoZSogd29ya2hvcnNlIOKAkyB0aGUgY29yZSBtZWNoYW5pc20gdGhhdCBlaXRoZXIgY2FydmVzIG91dCBhIHNpbmdsZSBwYWdlIGZyb20gYSBsYXJnZXIgYWxsb2NhdGlvbiwgcHJvYmFibHkgc28gdGhhdCBhIHN1YnNlcXVlbnQgYWxsb2NhdGlvbiBjYW4gYmUgbWFkZSwgcGVyaGFwcyB0byBwcmV2ZW50IGZyYWdtZW50YXRpb24gb3IgdG8gZmFjaWxpdGF0ZSBhIG1pZ3JhdGlvbi4gVGhlIGNvbnRleHQgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBodWdlIHBhZ2UgaW5mcmFzdHJ1Y3R1cmUuIEFueSBlcnJvciBwYXRocyBhcmUgb2J2aW91c2x5IGdvaW5nIHRvIGJlIGltcG9ydGFudCB0byBzY3J1dGluaXplLCBiZWNhdXNlIG1lc3NpbmcgdXAgaHVnZSBwYWdlIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uIHdvdWxkIGJlIGEgcGVyZm9ybWFuY2Uga2lsbGVyLCBubyBkb3VidC4gVW5kZXJzdGFuZGluZyB0aGUgbG9ja2luZyBpbnZvbHZlZCBpbiBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX3BhZ2VgIGlzIGFsc28gY3JpdGljYWwsIHNpbmNlIGl0IHNob3VsZCBwcm92aWRlIHRoZSBwcm90ZWN0aW9uIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIGZvbGlvIHN0cnVjdHVyZS4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGFyZWEgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXMgYWNjZXNzaW5nIHRoZSBzYW1lIGh1Z2V0bGIgcmVnaW9uLCBvciBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGR5bmFtaWMgY29uZmlndXJhdGlvbiBvZiBodWdlIHBhZ2VzLiBPdmVyYWxsLCB0aGUgcmVsYXRpb25zaGlwIGlzIHZlcnkgY2xlYXIgYW5kIHRoZSBpbnRlbnQgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIGlzIHByb2JhYmx5IGEgY2VudHJhbCBjb21wb25lbnQgZm9yIG1hbmFnaW5nIGxhcmdlIG1lbW9yeSByZWdpb25zIGFuZCBlbnN1cmluZyBlZmZpY2llbnQgcGFnZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yNTYwPXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNjM0LS8qXG5tbS9odWdldGxiLmM6MjYzNTogKiBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyAtIEFsbG9jYXRlIGEgbmV3IGZvbGlvIGFuZCBkaXNzb2x2ZVxubW0vaHVnZXRsYi5jLTI2MzYtICogdGhlIG9sZCBvbmVcbi0tXG5tbS9odWdldGxiLmMtMjY0MC0gKi9cbm1tL2h1Z2V0bGIuYzoyNjQxOnN0YXRpYyBpbnQgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXG5tbS9odWdldGxiLmMtMjY0Mi1cdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbm1tL2h1Z2V0bGIuYz0yNzI3PWludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiLmMtMjc0NS1cdGVsc2UgaWYgKCFmb2xpb19yZWZfY291bnQoZm9saW8pKVxubW0vaHVnZXRsYi5jOjI3NDY6XHRcdHJldCA9IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKGZvbGlvLCBsaXN0KTtcbm1tL2h1Z2V0bGIuYy0yNzQ3LVxuLS1cbm1tL2h1Z2V0bGIuYz0yNzU4PWludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxubW0vaHVnZXRsYi5jLTI3OTctXG5tbS9odWdldGxiLmM6Mjc5ODpcdFx0XHRcdHJldCA9IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKGZvbGlvLCBcdTAwMjZsaXN0KTtcbm1tL2h1Z2V0bGIuYy0yNzk5LVx0XHRcdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzOTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBBbGxvY2F0aW9uIGFuZCBEaXNzb2x1dGlvbiBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGh1Z2UgcGFnZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGFyb3VuZCBmb2xpbyBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGxpa2UgYGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpb2AgZ2V0cyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMsIGluY2x1ZGluZyBtZW1vcnkgaG90cGx1ZywgQ01BLCBhbmQgbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zLiAgYHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NgIGlzIG1vcmUgbmFycm93bHkgdGllZCB0byBtZW1vcnkgaG90cGx1Zy4gVGhpcyBoYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIGlzIGludGVyZXN0aW5nIOKAkyBpbmRpY2F0aW5nIHRoaXMgaXMgYW4gYXJlYSB3aGVyZSBmdXp6aW5nIGNvdWxkIHBvdGVudGlhbGx5IHVuY292ZXIgc29tZSBzdWJ0bGUgaXNzdWVzLgoKVGhlIGNvcmUgZnVuY3Rpb25zIG9mIGludGVyZXN0IGhlcmUsIHdoaWNoIHNob3VsZCBiZSB0aGUgZm9jdXMgb2Ygc29tZSB0YXJnZXRlZCBmdXp6aW5nLCBhcmU6IGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLCBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgYGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvYCwgYGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpb2AsIGFuZCBgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvc2AuIEkgd2lsbCBtYWtlIGEgbm90ZSB0byBwcmlvcml0aXNlIHRoZXNlIGZvciBmdXp6aW5nLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGlmIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIHN0YXRpYyBvciBub3QuLi4gb2theSwgaXQmIzM5O3Mgbm90IHN0YXRpYyBhbmQgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbW0vaHVnZXRsYl9jbWEuY2AuIFRoaXMgdGVsbHMgbWUgaXQgaXMgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoYXQgZmlsZS4KCk5vdywgbGV0JiMzOTtzIHJldmlldyB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJIHNlZSBgSFVHRVRMQkZTYCwgYENNQWAsIGBDT05USUdfQUxMT0NgLCBhbmQgdGhlbiBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAuIFRoZSBpbmNsdXNpb24gb2YgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIGEgYml0IHVudXN1YWwuIFRoaXMgaXMgdHlwaWNhbGx5IGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmZWF0dXJlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhIHVzZXItc2VsZWN0YWJsZSBjb25maWcgb3Igc29tZXRoaW5nIGltcGxpY2l0bHkgZW5hYmxlZCBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb25maWd1cmF0aW9uIHNwYWNlIHdoZW4gY3JhZnRpbmcgZWZmZWN0aXZlIGZ1enppbmcgc3RyYXRlZ2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yODM9Y29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xuLS1cbmZzL0tjb25maWctMjg2LVxuZnMvS2NvbmZpZzoyODc6Y29uZmlnIEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbmZzL0tjb25maWctMjg4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEzOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAuIEl0JiMzOTtzIGEgYm9vbGVhbiBvcHRpb24sIGJ1dCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IGl0JiMzOTtzICphcmNoLXNlbGVjdGVkKiBhbmQgZG9lc24mIzM5O3QgaGF2ZSBhIGRpcmVjdCBwcm9tcHQuIFRoYXQgbWVhbnMgdGhlIGFyY2hpdGVjdHVyZSBpdHNlbGYgZGVjaWRlcyB3aGV0aGVyIGl0JiMzOTtzIGVuYWJsZWQgb3Igbm90LiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB3ZSBzaG91bGRuJiMzOTt0IHJlYWxseSBib3RoZXIgaW5jbHVkaW5nIGl0IGluIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgc2luY2UgaXQmIzM5O3MgdWx0aW1hdGVseSB1cCB0byB0aGUgYXJjaGl0ZWN0dXJlLiBPciwgd2UgKmNvdWxkKiBpbmNsdWRlIGl0LCBidXQgaXQgd291bGQgZWZmZWN0aXZlbHkgZG8gbm90aGluZyBpZiB0aGUgYXJjaGl0ZWN0dXJlIGRvZXNuJiMzOTt0IGhhdmUgaXQgZW5hYmxlZCBpbnRyaW5zaWNhbGx5LiBJdCB3b3VsZCBqdXN0IGJlIG5vaXNlLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGEgYml0LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYENPTlRJR19BTExPQ2AuIEkgd29uZGVyIGhvdyB0aGF0JiMzOTtzIHJlbGF0ZWQgdG8gYWxsIG9mIHRoaXMuIEkgYmV0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgcGh5c2ljYWwgbWVtb3J5IGFsbG9jYXRpb24uIExldCYjMzk7cyBzZWUgaG93IGl0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09OVElHX0FMTE9DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxuLS1cbm1tL0tjb25maWctNzE4LVxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xubW0vS2NvbmZpZy03MjAtXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcdTAwMjZcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gTG9naWMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgQ09OVElHX0FMTE9DYCBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGRlZmluZWQgYnkgZWl0aGVyIHRoZSBjb21iaW5hdGlvbiBvZiBgTUVNT1JZX0lTT0xBVElPTmAgYW5kIGBDT01QQUNUSU9OYCwgb3IgaXQmIzM5O3MgZGlyZWN0bHkgdGllZCB0byBgQ01BYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQ6IGlmIGBDTUFgIGlzIGVuYWJsZWQsIGBDT05USUdfQUxMT0NgIGlzIGVuYWJsZWQuIEEgY2xlYXIgZGVwZW5kZW5jeS4KClRoZXJlZm9yZSwgbG9va2luZyBhdCB3aGF0JiMzOTtzIHNldCB0byAmIzM0O3llcyYjMzQ7IEkgc2VlIGBIVUdFVExCRlNgIGFuZCBgQ01BYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgY29udHJpYnV0aW5nIGZhY3RvcnMuCgpCdXQgSSYjMzk7bSBub3Qgc3RvcHBpbmcgdGhlcmUuIEkgbmVlZCB0byB0aGluayBiaWdnZXIuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBvdGhlciBjb25maWd1cmF0aW9ucy4gUGFydGljdWxhcmx5LCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgTUVNT1JZX0hPVFBMVUdgIG9yIGBNRU1PUllfRkFJTFVSRWAgYXJlIHNldCB0byB0cmlnZ2VyIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gLiBJdCBjb3VsZCBiZSB1c2VmdWwgZm9yIGZ1cnRoZXIgb3B0aW1pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkxPWJvb2wgaHVnZXRsYl9ib290bWVtX3BhZ2Vfem9uZXNfdmFsaWQoaW50IG5pZCwgc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY5Mi1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjY5MzppbnQgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjk0LWludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEwOTg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZpbGVtYXBfbG9ja19odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEwMy1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMDQ6c3RhdGljIGlubGluZSBpbnQgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTA1LVx0XHRcdFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vY29tcGFjdGlvbi5jPTg1NT1pc29sYXRlX21pZ3JhdGVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgdW5zaWduZWQgbG9uZyBsb3dfcGZuLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy05ODktXHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xubW0vY29tcGFjdGlvbi5jOjk5MDpcdFx0XHRyZXQgPSBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oZm9saW8sIFx1MDAyNmNjLVx1MDAzZW1pZ3JhdGVwYWdlcyk7XG5tbS9jb21wYWN0aW9uLmMtOTkxLVxubW0vY29tcGFjdGlvbi5jLTk5Mi1cdFx0XHQvKlxubW0vY29tcGFjdGlvbi5jOjk5MzpcdFx0XHQgKiBGYWlsIGlzb2xhdGlvbiBpbiBjYXNlIGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbygpXG5tbS9jb21wYWN0aW9uLmMtOTk0LVx0XHRcdCAqIHJlcG9ydHMgYW4gZXJyb3IuIEluIGNhc2Ugb2YgLUVOT01FTSwgYWJvcnQgcmlnaHQgYXdheS5cbi0tXG5tbS9odWdldGxiLmM9MjY0MT1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNzI2LVxubW0vaHVnZXRsYi5jOjI3Mjc6aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxubW0vaHVnZXRsYi5jLTI3Mjgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM5MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipUcmFjaW5nIHRoZSBIdWdlIFBhZ2UgUGF0aCoqCgpSaWdodCwgc28gYGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpb2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGtleSBmdW5jdGlvbiB3ZSYjMzk7cmUgY29uY2VybmVkIHdpdGguIEFuZCB0aGUgY2x1ZSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG1tL2NvbXBhY3Rpb24uY2AuIEltbWVkaWF0ZWx5LCB0aGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBjb21wYWN0aW9uLCB3aGljaCBtZWFucyAqKkNPTVBBQ1RJT04qKiBpcyBkZWZpbml0ZWx5IGEgcmVsZXZhbnQgZmFjdG9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvc2AuIFRoaXMgc291bmRzIGxpa2UgYSBwcmltZSBwbGFjZSB0byBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgdHdvIHJlbGF0ZSBhbmQgaG93IGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gIHBsYXlzIGEgcGFydCBpbiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgYW5kIGNvbXBhY3Rpb24uIEkgbmVlZCB0byBmb2xsb3cgdGhlIHRocmVhZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTY5Mz1pbnQgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Njk0OmludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjk1LXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEwND1zdGF0aWMgaW5saW5lIGludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTA5LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTExMDpzdGF0aWMgaW5saW5lIGludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTExMS1cdFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuLS1cbm1tL2h1Z2V0bGIuYz0yNzI3PWludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiLmMtMjc1MS0vKlxubW0vaHVnZXRsYi5jOjI3NTI6ICogIHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3MgLSBSZXBsYWNlIGZyZWUgaHVnZXBhZ2UgZm9saW9zIGluIGEgZ2l2ZW4gcGZuXG5tbS9odWdldGxiLmMtMjc1My0gKiAgcmFuZ2Ugd2l0aCBuZXcgZm9saW9zLlxuLS1cbm1tL2h1Z2V0bGIuYy0yNzU3LSAqL1xubW0vaHVnZXRsYi5jOjI3NTg6aW50IHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbilcbm1tL2h1Z2V0bGIuYy0yNzU5LXtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzEwMT1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxNzgtXHQgKiBidWRkeSBzeXN0ZW0uICBBZnRlciB0aGUgbWlncmF0aW9uIG9mIGluLXVzZSBodWdlIHBhZ2VzIGlzIGNvbXBsZXRlZCxcbm1tL3BhZ2VfYWxsb2MuYzo3MTc5Olx0ICogd2Ugd2lsbCBpbnZva2UgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvcygpIHRvIGVuc3VyZSB0aGF0IHRoZXNlXG5tbS9wYWdlX2FsbG9jLmMtNzE4MC1cdCAqIGh1Z2VwYWdlcyBhcmUgcHJvcGVybHkgcmVsZWFzZWQgdG8gdGhlIGJ1ZGR5IHN5c3RlbS5cbm1tL3BhZ2VfYWxsb2MuYy03MTgxLVx0ICovXG5tbS9wYWdlX2FsbG9jLmM6NzE4MjpcdHJldCA9IHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3Moc3RhcnQsIGVuZCk7XG5tbS9wYWdlX2FsbG9jLmMtNzE4My1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjcxCgkJCQkJCQlvdXRwdXQ6IDIwNQoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igd2hhdCBzZWVtcyBsaWtlIGFuIGludGVyZXN0aW5nIGNvZGUgcGF0aC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHdoaWNoIGlzIGEga2V5IGFyZWEgZm9yIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24uIFRoaXMsIGluIHR1cm4sIGlzIHBhcnQgb2YgYGFsbG9jX2NvbnRpZ19yYW5nZWAsIGEgZnVuY3Rpb24gZnVuZGFtZW50YWwgdG8gYm90aCBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgYW5kIG1lbW9yeSBob3RwbHVnZ2luZy4gVGhhdCBnaXZlcyB1cyBhIHByZXR0eSBnb29kIHNlbnNlIG9mIHRoZSBjb250ZXh0LgoKR2l2ZW4gdGhhdCBjb250ZXh0LCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZyBvcHRpb25zIHdvdWxkIGxvZ2ljYWxseSBiZSBgSFVHRVRMQkZTYCwgYENNQWAsIGBDT01QQUNUSU9OYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBNRU1PUllfRkFJTFVSRWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByZXJlcXVpc2l0ZSBmZWF0dXJlcyBmb3IgdGhlIGNvZGUgaW4gcXVlc3Rpb24gdG8gYmUgYWN0aXZlLgoKTm93LCBsZXQmIzM5O3MgcmVmaW5lIHRoZSBzcGVjaWZpYyBzeW1ib2xzIHRvIGZvY3VzIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgZnVuY3Rpb25zIGludm9sdmVkIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdC4gSSYjMzk7bGwgcHV0IGEgcGluIG9uIHRoZSBmb2xsb3dpbmc6IGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLCBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgYGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvYCwgYGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpb2AsIGFuZCBgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvc2Agd2hpY2ggc2VlbSBjbG9zZWx5IHJlbGF0ZWQgdG8gdGhlIGNvcmUgbG9naWMuCgpUaGUgY29yZSBvZiB0aGUgaXNzdWUgYXBwZWFycyB0byBiZSBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGUgdnVsbmVyYWJpbGl0eSB0cmlnZ2VycyB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBnaWdhbnRpYyBodWdlcGFnZSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHRoZSBwcm9jZXNzIG9mIGRpc3NvbHZpbmcgYW5kIHJlcGxhY2luZyBmcmVlIGh1Z2VwYWdlcy4gSXQgc2VlbXMgbGlrZWx5IHRoZSB0cmlnZ2VyIGlzIHdoZW4gY29tcGFjdGlvbiBpcyBydW5uaW5nLCBDTUEgaXMgYWxsb2NhdGluZywgb3IgbWVtb3J5IGhvdHBsdWcgaXMgb3BlcmF0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuCgpDcnVjaWFsbHksIGNhbiB0aGlzIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2U/IENNQSBhbGxvY2F0aW9ucyBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlLCBlaXRoZXIgZGlyZWN0bHkgdGhyb3VnaCBodWdlcGFnZSBhbGxvY2F0aW9ucywgb3IgaW5kaXJlY3RseSB0aHJvdWdoIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBob3RwbHVnIG9yIGNvbXBhY3Rpb24sIHdoaWNoIHVzZXJzcGFjZSBjYW4gaW5pdGlhdGUuIFRoZXJlZm9yZSwgKnllcyosIHRoaXMgcGF0aCBpcyBpbmRlZWQgcmVhY2hhYmxlLCBhbmQgdGhhdCBzaWduaWZpY2FudGx5IGluY3JlYXNlcyB0aGUgcG90ZW50aWFsIHJpc2suIEdpdmVuIHRoaXMgaXMgYSByZWFjaGFibGUsIGZ1bmN0aW9uYWwgY2hhbmdlLCBmdXp6aW5nIHdvdWxkIGJlIGFuIGFwcHJvcHJpYXRlIG5leHQgc3RlcCBpbiB0aGUgdGVzdGluZyBtZXRob2RvbG9neS4KCkkmIzM5O2xsIHByb2NlZWQgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gZm9ybWFsaXplIHRoZXNlIGZpbmRpbmdzIGFuZCBkb2N1bWVudCB0aGUgcmVsZXZhbnQgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDssCiAgICAmIzM0O2FsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDtpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8mIzM0OywKICAgICYjMzQ7cmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGdpZ2FudGljIGh1Z2VwYWdlIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGRpc3NvbHZpbmcgYW5kIHJlcGxhY2luZyBmcmVlIGh1Z2VwYWdlcyAoZS5nLiwgZHVyaW5nIGNvbXBhY3Rpb24sIENNQSBhbGxvY2F0aW9uLCBvciBtZW1vcnkgaG90cGx1ZykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvJiMzNDssCiAgICAmIzM0O2FsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2lzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgZ2lnYW50aWMgaHVnZXBhZ2UgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZGlzc29sdmluZyBhbmQgcmVwbGFjaW5nIGZyZWUgaHVnZXBhZ2VzIChlLmcuLCBkdXJpbmcgY29tcGFjdGlvbiwgQ01BIGFsbG9jYXRpb24sIG9yIG1lbW9yeSBob3RwbHVnKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxMjo0My4xMjA4MDU2MTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA3NzE3NDQ1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCIsXG4gICAgXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIixcbiAgICBcImFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9cIixcbiAgICBcInJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGdpZ2FudGljIGh1Z2VwYWdlIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGRpc3NvbHZpbmcgYW5kIHJlcGxhY2luZyBmcmVlIGh1Z2VwYWdlcyAoZS5nLiwgZHVyaW5nIGNvbXBhY3Rpb24sIENNQSBhbGxvY2F0aW9uLCBvciBtZW1vcnkgaG90cGx1ZykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxMjo0My4xMjA4MTE5NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTc3MjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBjZjllOGVmNzAzZDcyNzk1MDFmZTVkYjZiYjJhZWQ3ODVmNzUwNDNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMyAwMToxMjo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX2NtYS5jIGIvbW0vaHVnZXRsYl9jbWEuY1xcbmluZGV4IDM5MzQ0ZDZjNzhkODRlLi41NjNlMTFlNjA3ZTVlYyAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiX2NtYS5jXFxuKysrIGIvbW0vaHVnZXRsYl9jbWEuY1xcbkBAIC0zNCw2ICszNCw5IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuIFxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbitcXHRpZiAoIW5vZGVtYXNrKVxcbitcXHRcXHRub2RlbWFzayA9IFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XFxuK1xcbiBcXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcXG4gXFx0XFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTI6NDMuNTczMzg4MDI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDAzMTkxNTE2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCIsXG4gICAgXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIixcbiAgICBcImFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9cIixcbiAgICBcInJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGdpZ2FudGljIGh1Z2VwYWdlIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGRpc3NvbHZpbmcgYW5kIHJlcGxhY2luZyBmcmVlIGh1Z2VwYWdlcyAoZS5nLiwgZHVyaW5nIGNvbXBhY3Rpb24sIENNQSBhbGxvY2F0aW9uLCBvciBtZW1vcnkgaG90cGx1ZykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBjZjllOGVmNzAzZDcyNzk1MDFmZTVkYjZiYjJhZWQ3ODVmNzUwNDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDAxOjEyOjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9jbWEuYyBiL21tL2h1Z2V0bGJfY21hLmNcbmluZGV4IDM5MzQ0ZDZjNzhkODRlLi41NjNlMTFlNjA3ZTVlYyAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfY21hLmNcbisrKyBiL21tL2h1Z2V0bGJfY21hLmNcbkBAIC0zNCw2ICszNCw5IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0aWYgKCFub2RlbWFzaylcbitcdFx0bm9kZW1hc2sgPSBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XG4rXG4gXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbiBcdFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTI6NDMuNTczMzg5NjU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3ODc1MDM3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIENNQSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBgbW0vaHVnZXRsYl9jbWEuY2AgZmlsZS4gVGhlIGNvcmUgY2hhbmdlIGZvY3VzZXMgb24gdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCdzIGFib3V0IGhhbmRsaW5nIGEgc2NlbmFyaW8gd2hlcmUgdGhlIGBub2RlbWFza2AgYXJndW1lbnQgaXMgcG90ZW50aWFsbHkgYE5VTExgLlxuXG5UaGUgZXhpc3RpbmcgY29kZSBjaGVja3MgZm9yIGBodWdldGxiX2NtYV9zaXplYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgYW4gZWFybHkgZXhpdCBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gYWxsb2NhdGUuIFRoZW4sIHRoaXMgcGF0Y2ggYWRkcyBhIGNoZWNrLiBOb3csIGlmIGBub2RlbWFza2AgaXMgYE5VTExgLCBpdCdzIGRlZmF1bHRpbmcgdGhlIGBub2RlbWFza2AgdG8gYFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXWAuIFRoaXMgbWVhbnMgaXQncyBlZmZlY3RpdmVseSB1c2luZyB0aGUgXCJtZW1vcnlcIiBub2RlIG1hc2sgYXMgYSBmYWxsYmFjay4gQW5kIGZyb20gdGhlcmUsIGlmIHRoZXJlJ3MgYSB2YWxpZCBDTUEgcmVnaW9uIGZvciB0aGUgbm9kZSAoYGh1Z2V0bGJfY21hW25pZF1gKSwgaXQgY2FsbHMgYGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmRgLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGBub2RlbWFza2AgY291bGQgYmUgYE5VTExgLiBXaGF0J3MgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIGFuZCBob3cgZG9lcyBgbm9kZW1hc2tgIHR5cGljYWxseSBnZXQgcG9wdWxhdGVkPyBJcyBpdCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBtYXliZSBoYW5kbGluZyBhIGNhc2Ugd2hlcmUgdGhlIHN5c3RlbSB0b3BvbG9neSBpc24ndCBmdWxseSBpbml0aWFsaXplZD8gSWYgdGhlIGZhbGxiYWNrIHRvIGBOX01FTU9SWWAgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBkZXNpcmVkIGJlaGF2aW9yIGluIHRoZSBzcGVjaWZpYyBzaXR1YXRpb24sIHRoZW4gaXQncyBwcm9iYWJseSBmaW5lLCBidXQgSSdkIHdhbnQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgZG9lc24ndCBsZWFkIHRvIGFueSB1bmV4cGVjdGVkIE5VTUEgZWZmZWN0cyBvciBhbGxvY2F0aW9uIGZhaWx1cmVzIGluIGVkZ2UgY2FzZXMuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgc2l0ZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBodWdldGxiX2NtYS5jYCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIGl0IGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIGRlc2lnbiBnb2FscyBvZiB0aGUgQ01BIEh1Z2VUTEIgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxMzoxMC4zNjA4OTU2MjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3OTU5MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiX2NtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGJfY21hLmM9MjE9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNi1cXG5tbS9odWdldGxiX2NtYS5jOjI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuYy0yOC1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTM6MTAuNjc4ODYxNzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjY2OTM0NjQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gRXNzZW50aWFsbHksIEkgd2FudCB0byBtYXAgb3V0IGFsbCB0aGUgcGxhY2VzIGluIHRoZSBrZXJuZWwgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGlzIGlzIG9mdGVuIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIHB1cnBvc2Ugb2YgYW55IGFsbG9jYXRpb24gcGF0aCwgZXNwZWNpYWxseSBvbmUgcmVsYXRlZCB0byBIdWdlVExCIGFuZCBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRpb24pLCB3aGljaCBjYW4gaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEl04oCZcyBhbHNvIGNydWNpYWwgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcywgdHJhY2luZyBkb3duIG1lbW9yeSBsZWFrcywgb3IgY29tcHJlaGVuZGluZyB0aGUgaW50ZXJhY3Rpb24gb2YgdGhpcyBhbGxvY2F0aW9uIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEknbGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2xzZXQgKGBncmVwYCwgYGN0YWdzYCwgdGhlIGRlYnVnZ2VyLCBldGMuKSB0byB0cmF2ZXJzZSB0aGUgc291cmNlIGNvZGUgYW5kIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHdoZXJlIHRoaXMgZnVuY3Rpb24gZml0cyB3aXRoaW4gdGhlIGxhcmdlciBhbGxvY2F0aW9uIGxhbmRzY2FwZS4gSeKAmW0gdGhpbmtpbmcgSeKAmWxsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIGZvciBkaXJlY3QgY2FsbHMuIFRoZW4sIGlmIHRoYXQgeWllbGRzIGxpbWl0ZWQgcmVzdWx0cywgSeKAmWxsIG5lZWQgdG8gY29uc2lkZXIgaW5kaXJlY3QgZnVuY3Rpb24gY2FsbHMgYW5kIHBvdGVudGlhbGx5IGFuYWx5emUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaG9sZCBmdW5jdGlvbiBwb2ludGVycyB0byBpZGVudGlmeSBwb3RlbnRpYWwgY2FsbGJhY2sgdXNhZ2UuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgdXNhZ2Ugb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNDoyNy4zNDgyMTE1NTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgzODEyODY2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzYwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNjQtXFxubW0vaHVnZXRsYi5jOjEzNjU6XFx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcXG5tbS9odWdldGxiLmMtMTM2Ni1cXHRpZiAoZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTIxPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjYtXFxubW0vaHVnZXRsYl9jbWEuYzoyNzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjgtXFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5oLTgtXFx0XFx0XFx0XFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuaD0xNj1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmgtMTktXFxubW0vaHVnZXRsYl9jbWEuaDoyMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlcixcXG5tbS9odWdldGxiX2NtYS5oLTIxLVxcdFxcdGdmcF90IGdmcF9tYXNrLFxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNDozMS4xODYzNTI2NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMyNTI3MDU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIGZvciBIdWdlVExCIENNQSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgYGh1Z2V0bGJfY21hLmNgIGZpbGUuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0J3MgYWx3YXlzIHRoZSBiZXN0IHBsYWNlIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgY29uZmlndXJhYmxlLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGlzIGZlYXR1cmUgaW50ZWdyYXRlcyBpbnRvIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGVudHJpZXMgc3BlY2lmaWNhbGx5IG1lbnRpb25pbmcgYGh1Z2V0bGJfY21hLmNgIG9yIFwiaHVnZSBwYWdlc1wiIGFuZCBcIkNNQVwiIHRvZ2V0aGVyLiBUaGlzIHNob3VsZCB0ZWxsIG1lIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCwgd2hldGhlciBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgbWlnaHQgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBpdCB0byB3b3JrIGNvcnJlY3RseS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCB2ZXJzaW9ucywgYXJjaGl0ZWN0dXJlLCBhbmQgcG9zc2libHkgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkgbmVlZCB0byBiZSByZWFkeSB0byBpbnRlcnByZXQgdGhlIGRlcGVuZGVuY2llcyBjb3JyZWN0bHksIGFzIEkgYWxyZWFkeSBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIEtjb25maWcgc3ludGF4IGFuZCB0aGUgZ2VuZXJhbCBrZXJuZWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIE15IGdvYWwgaXMgdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGltcGxpY2F0aW9ucyBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNDo0Mi41MTE2MjYwNzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4MDA3NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfY21hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTgyPWlmZGVmIENPTkZJR19DTUFcXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGJfY21hLm9cXG5tbS9NYWtlZmlsZS04NC1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNDo0Mi45MDk2NTI4NjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODcwMDI4MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZS5cblxuKipOYXZpZ2F0aW5nIHRoZSBIdWdlVExCIGFuZCBDTUEgQ29uZmx1ZW5jZSoqXG5cbkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhpcyBjZW50ZXJzIGFyb3VuZCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYC4gUmlnaHQsIHRoYXQncyB0aGUgY29yZSBvZiBpdCDigJMgdGhlIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvciB3b3JraW5nIGluIGNvbmp1bmN0aW9uIHdpdGggSHVnZVRMQiBmaWxlIHN5c3RlbXMuIEludGVyZXN0aW5nLiBNeSBmb2N1cyBpcyBxdWlja2x5IGRyYXduIHRvIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0IGZ1bmN0aW9uIGlzIGludm9rZWQgZnJvbSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggcmVzaWRlcyB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuIE5vdyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggZnVydGhlciBiYWNrLiBMZXQgbWUgcXVpY2tseSBkZXRlcm1pbmUgd2hlcmUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgaXRzZWxmIGlzIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGJlIGVzc2VudGlhbCBmb3IgZnVsbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzM5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTQ6NDUuNzc5NjgzOTI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc4MzUzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzIwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzU5LSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DT05USUdfQUxMT0MpXFxubW0vaHVnZXRsYi5jOjEzNjA6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYi5jLTEzNjEtXFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiLmMtMTM3Ni0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cXG5tbS9odWdldGxiLmM6MTM3NzpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcXG5tbS9odWdldGxiLmMtMTM3OC1cXHRcXHRcXHRcXHRcXHQgIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jPTE4MzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTg0Ni1cXHRpZiAob3JkZXJfaXNfZ2lnYW50aWMob3JkZXIpKVxcbm1tL2h1Z2V0bGIuYzoxODQ3OlxcdFxcdGZvbGlvID0gYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBubWFzayk7XFxubW0vaHVnZXRsYi5jLTE4NDgtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNDo0NS44NTQ0Nzk4MjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1OTUwMzkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIEh1Z2VUTEIgRm9saW8gQWxsb2NhdGlvbioqXG5cblJpZ2h0LCBzbyBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIHJlcXVlc3RpbmcgYSBmcmVzaCwgdW5pbml0aWFsaXplZCBIdWdlVExCIGZvbGlvLiBJbnRlcmVzdGluZy4gSSBpbW1lZGlhdGVseSBzZWUgdGhhdCBpdCBmdW5uZWxzIGludG8gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgcHJvYmFibHkgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGFjdHVhbGx5ICpkb2luZyogdGhlIGFsbG9jYXRpb24sIGFuZCAnZnJvemVuJyBzdWdnZXN0cyBpdCdzIGxpa2VseSBhIG1lbW9yeSByZWdpb24gdGhhdCdzIGFscmVhZHkgYmVlbiBzZXQgdXAgZm9yIHRoZSB1c2VyLiBTbywgbXkgbmV4dCBxdWVzdGlvbiBpcywgd2hlcmUgaXMgdGhpcyBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBmdW5jdGlvbiBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBob3cgdGhlc2UgZm9saW9zIGFyZSByZXF1ZXN0ZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBlbnRyeSBwb2ludCB0byB0aGUgc291cmNlIG9mIHRoZSByZXF1ZXN0cy4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE0OjQ4LjkxMzk4NTcxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NjQwMTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTE3OTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTgzNS1cXG5tbS9odWdldGxiLmM6MTgzNjpzdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtMTgzNy1cXHRcXHRnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm1hc2ssXFxuLS1cXG5tbS9odWdldGxiLmM9MTg2Mz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTg2Ny1cXG5tbS9odWdldGxiLmM6MTg2ODpcXHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBubWFzaywgTlVMTCk7XFxubW0vaHVnZXRsYi5jLTE4NjktXFx0aWYgKGZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jPTE4OTY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfcG9vbF9odWdlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTkwNi1cXG5tbS9odWdldGxiLmM6MTkwNzpcXHRcXHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbm9kZSxcXG5tbS9odWdldGxiLmMtMTkwOC1cXHRcXHRcXHRcXHRcXHRub2Rlc19hbGxvd2VkLCBub2RlX2FsbG9jX25vcmV0cnkpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTMzOTc9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX29uZW5vZGUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNDEwLVxcbm1tL2h1Z2V0bGIuYzozNDExOlxcdFxcdFxcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXFxubW0vaHVnZXRsYi5jLTM0MTItXFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XFxuLS1cXG5tbS9odWdldGxiLmMtMzQxNi1cXHRcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Zm9saW9fbGlzdCk7XFxubW0vaHVnZXRsYi5jOjM0MTc6XFx0XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG5tbS9odWdldGxiLmMtMzQxOC1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTQ6NDkuMTM5NjMxNjU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMTc2MzkwNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBIdWdlcGFnZSBBbGxvY2F0aW9uIEZpeCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBmaXggaXMgZGVhbGluZyB3aXRoIGh1Z2VwYWdlIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgYSBidWcgd2hlcmUgdGhlIGBub2RlbWFza2AgaXMgdW5leHBlY3RlZGx5IGBOVUxMYCwgY2F1c2luZyBpdCB0byBkZWZhdWx0IHRvIGBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV1gLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgbW9kaWZpZXMgdGhlIGJlaGF2aW9yIGluIGBtbS9odWdldGxiX2NtYS5jYC4gR2l2ZW4gdGhhdCB0aGlzIHRvdWNoZXMgY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBodWdlcGFnZXMsIEknZCBzYXkgdGhhdCBmdXp6aW5nIGlzIGFic29sdXRlbHkgd2FycmFudGVkIGhlcmUuIFdlIG5lZWQgdG8gZW5zdXJlIHRoaXMgZml4IGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBleHBvc2UgbmV3IHZ1bG5lcmFiaWxpdGllcy5cblxuVGltZSB0byByZXZpc2l0IHRoZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBmdW5jdGlvbjsgbGV0J3Mgc2VlIHdoZXJlIHRoaXMgbnVsbCBjaGVjayBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjYyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE1OjAyLjMxNjAyNTU5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1MDM5NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiX2NtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGJfY21hLmM9MjE9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNi1cXG5tbS9odWdldGxiX2NtYS5jOjI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuYy0yOC1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6MDIuNjcxMDcwMTc4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMDcwMDYyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB0aGlzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGltcGxlbWVudGF0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBDTUEsIGh1Z2V0bGJmcywgYW5kLCBvZiBjb3Vyc2UsIHRoZSBmb2xpbyBzdHJ1Y3R1cmVzLiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCB0aGlzIGlzIGFib3V0IGFsbG9jYXRpbmcgYSBmcm96ZW4gZm9saW8sIG1lYW5pbmcgaXQgbGlrZWx5IGRlYWxzIHdpdGggcHJlLWluaXRpYWxpemVkIG9yIHByZS1wb3B1bGF0ZWQgbWVtb3J5IHJlZ2lvbnMgd2l0aGluIHRoZSBodWdldGxiZnMgc3BhY2UsIHBvdGVudGlhbGx5IGZvciB0aGluZ3MgbGlrZSBkZXZpY2UgbWVtb3J5IG9yIHByZS1hbGxvY2F0ZWQgc2hhcmVkIG1lbW9yeSBzZWdtZW50cy4gVGhlIFwiZnJvemVuXCIgYXNwZWN0IGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgSSdkIGFudGljaXBhdGUgc2VlaW5nIG1lY2hhbmlzbXMgdG8gcHJldmVudCB0aGUgZm9saW8gZnJvbSBiZWluZyBpbmFkdmVydGVudGx5IGZyZWVkIG9yIG1vZGlmaWVkLCBhdCBsZWFzdCBmcm9tIHRoZSBzdGFuZGFyZCBwYWdlIGFsbG9jYXRpb24gcGF0aHMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIG9yZGVyaW5nLCBhcyBjb25jdXJyZW50IGFjY2VzcyBpbiB0aGlzIGVudmlyb25tZW50IGNhbiBiZSBub3RvcmlvdXNseSB0cmlja3ksIGVzcGVjaWFsbHkgd2l0aCBodWdldGxiZnMncyBpbmhlcmVudCBjb21wbGV4aXR5LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCBraW5kIG9mIGluaXRpYWwgc3RhdGUgZG9lcyB0aGlzIGFsbG9jYXRpb24gZW5zdXJlPyBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBDTUEgYWxsb2NhdG9yJ3Mgem9uZXMsIGVzcGVjaWFsbHkgdGhlIGNvbnNpZGVyYXRpb25zIGZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5PyBBbmQgaG93IGRvZXMgaXQgaGFuZGxlIHRoZSBjb21wbGV4aXRpZXMgb2YgaHVnZXRsYmZzIG1hcHBpbmdzIGFuZCBwZXJtaXNzaW9ucywgc3BlY2lmaWNhbGx5IHRoZSBwb3RlbnRpYWwgbmVlZCBmb3Igc2hhcmVkIG1hcHBpbmdzIG9yIHNwZWNpZmljIGFjY2VzcyBmbGFncz8gSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBzcGVjaWZpYyBjYWxscyB0byBgaHVnZXRsYl9jbWFfYWxsb2NfZm9saW9gIG9yIHJlbGF0ZWQgaW50ZXJuYWwgZnVuY3Rpb25zLCBsZXQncyBnZXQgaW50byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE1OjA5Ljk3ODA3ODA2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiX2NtYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI3OlxcdHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuICAyODpcXHRcXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4gIDI5OlxcdHtcXG4gIDMwOlxcdFxcdGludCBub2RlO1xcbiAgMzE6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gIDMyOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbiAgMzU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdGlmICghbm9kZW1hc2spXFxuICAzODpcXHRcXHRcXHRub2RlbWFzayA9IFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdGlmIChodWdldGxiX2NtYVtuaWRdKVxcbiAgNDE6XFx0XFx0XFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHRpZiAoIXBhZ2UgXFx1MDAyNlxcdTAwMjYgIShnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xcbiAgNDQ6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpub2RlbWFzaykge1xcbiAgNDU6XFx0XFx0XFx0XFx0aWYgKG5vZGUgPT0gbmlkIHx8ICFodWdldGxiX2NtYVtub2RlXSlcXG4gIDQ2OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRcXHRcXHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtub2RlXSwgb3JkZXIpO1xcbiAgNDk6XFx0XFx0XFx0XFx0aWYgKHBhZ2UpXFxuICA1MDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gIDUxOlxcdFxcdFxcdH1cXG4gIDUyOlxcdFxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0aWYgKCFwYWdlKVxcbiAgNTU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA1NjpcXHRcXG4gIDU3OlxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4gIDU4OlxcdFxcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XFxuICA1OTpcXHRcXHRyZXR1cm4gZm9saW87XFxuICA2MDpcXHR9XFxuICA2MTpcXHRcXG4gIDYyOlxcdHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqIF9faW5pdFxcbiAgNjM6XFx0aHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgKm5pZCwgYm9vbCBub2RlX2V4YWN0KVxcbiAgNjQ6XFx0e1xcbiAgNjU6XFx0XFx0c3RydWN0IGNtYSAqY21hO1xcbiAgNjY6XFx0XFx0c3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptO1xcbiAgNjc6XFx0XFx0aW50IG5vZGUgPSAqbmlkO1xcbiAgNjg6XFx0XFxuICA2OTpcXHRcXHRjbWEgPSBodWdldGxiX2NtYVsqbmlkXTtcXG4gIDcwOlxcdFxcdG0gPSBjbWFfcmVzZXJ2ZV9lYXJseShjbWEsIGh1Z2VfcGFnZV9zaXplKGgpKTtcXG4gIDcxOlxcdFxcdGlmICghbSkge1xcbiAgNzI6XFx0XFx0XFx0aWYgKG5vZGVfZXhhY3QpXFxuICA3MzpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGh1Z2V0bGJfYm9vdG1lbV9ub2Rlcykge1xcbiAgNzY6XFx0XFx0XFx0XFx0Y21hID0gaHVnZXRsYl9jbWFbbm9kZV07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE1OjA5Ljk3ODE1ODYwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcxNjYxNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gSHVnZVRMQiBDTUEgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwb3RlbnRpYWwgY3Jhc2guIEl0IGxvb2tzIGxpa2UgaWYgYG5vZGVtYXNrYCBpcyBOVUxMLCB3ZSdyZSBnb2luZyB0byBoaXQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAqbm9kZW1hc2spYC4gVGhhdCdzIGEgY2xhc3NpYyBlcnJvciwgYW5kIGl0IHNlZW1zIHRvIGJlIGhhcHBlbmluZyB1bmRlciB2ZXJ5IHNwZWNpZmljIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBIdWdlVExCIENNQSBhbGxvY2F0aW9uLiBNeSBodW5jaCBpcyB0aGF0IHRoaXMgb3JpZ2luYXRlcyB3aGVuIGBodWdldGxiX2NtYVtuaWRdYCBkb2Vzbid0IGhhdmUgZW5vdWdoIGF2YWlsYWJsZSBtZW1vcnksIG9yIHdvcnNlLCBpcyBhY3R1YWxseSBOVUxMIGl0c2VsZiwgYW5kIHdlJ3JlIG5vdCB1c2luZyBgX19HRlBfVEhJU05PREVgLiBUaGlzIHBhdGNoIGlzIHRhcmdldGluZyBwcmVjaXNlbHkgdGhhdCwgYWltaW5nIHRvIHByZXZlbnQgdGhlIGRlcmVmZXJlbmNlLlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zPyBCYXNlZCBvbiB0aGUgY29kZSwgaXQgc2VlbXMgd2UnbGwgbmVlZCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBlbmFibGVkLCBvYnZpb3VzbHkuIEJ1dCB0aGVyZSBtaWdodCBiZSBtb3JlIHRvIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBhbHNvIG1pZ2h0IG5lZWQgYENPTkZJR19DT05USUdfQUxMT0NgIGFuZCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGJlY2F1c2Ugb2YgaG93IGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIHdvcmtzLCBhbmQgaG93IGl0IGNhbGxzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBJdCdzIHByZXR0eSBsaWtlbHkgd2UnbGwgaGF2ZSB0byBkZWx2ZSBpbnRvIGBtbS9odWdldGxiLmNgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIG92ZXJhbGwgY2FsbCBzdGFjayB0byBiZSBzdXJlLiBUaW1lIHRvIGNoZWNrIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFuZCB0aGUgY2FsbCBncmFwaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc4MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE1OjE0LjE0OTgyMjQ3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTksXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTk6XFx0I2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcXG4xMzYwOlxcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbjEzNjE6XFx0XFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuMTM2MjpcXHR7XFxuMTM2MzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjEzNjQ6XFx0XFxuMTM2NTpcXHRcXHRmb2xpbyA9IGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhvcmRlciwgZ2ZwX21hc2ssIG5pZCwgbm9kZW1hc2spO1xcbjEzNjY6XFx0XFx0aWYgKGZvbGlvKVxcbjEzNjc6XFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbjEzNjg6XFx0XFxuMTM2OTpcXHRcXHRpZiAoaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKCkpXFxuMTM3MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzcxOlxcdFxcbjEzNzI6XFx0XFx0Zm9saW8gPSAoc3RydWN0IGZvbGlvICopYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlcygxIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBnZnBfbWFzayxcXG4xMzczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbmlkLCBub2RlbWFzayk7XFxuMTM3NDpcXHRcXHRyZXR1cm4gZm9saW87XFxuMTM3NTpcXHR9XFxuMTM3NjpcXHQjZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cXG4xMzc3OlxcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbjEzNzg6XFx0XFx0XFx0XFx0XFx0XFx0ICBub2RlbWFza190ICpub2RlbWFzaylcXG4xMzc5OlxcdHtcXG4xMzgwOlxcdFxcdHJldHVybiBOVUxMO1xcbjEzODE6XFx0fVxcbjEzODI6XFx0I2VuZGlmXFxuMTM4MzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6MTQuMTUwMTI1NzI2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzgzOTY4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBtZW50YWwgcnVuZG93biBvbiB0aGlzLCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIEdpZ2FudGljIFBhZ2VzIGFuZCBDb250aWd1b3VzIEFsbG9jYXRpb24qKlxuXG5BbHJpZ2h0LCBiYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgYW5kIGBDT05GSUdfQ09OVElHX0FMTE9DYCBhcmUgZGVmaW5pdGVseSBjcnVjaWFsIGhlcmUuIEl0J3MgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gSG1tLCBidXQgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhpcy4gYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYCwgdGhhdCdzIGdlbmVyYWxseSB0aWVkIHRvIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgaXNuJ3QgaXQ/IEkgbmVlZCB0byBiZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jaWVzLiBPa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgdGhvdWdodCBpcywgbGV0J3MgYWxzbyBmYWN0b3IgaW4gYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhleSBhcmUgYWxzbyBjb25zaWRlcmVkIHRvIGhhdmUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUuIEFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgc2NhbiBmb3Igb3RoZXIgY2FsbGVycyBvZiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gTmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyByZWxhdGVkIHRvIHRoYXQgYWxsb2NhdGlvbiBwYXRoLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBJIGhhdmVuJ3QgYWNjb3VudGVkIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcyMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6MTguODI4NTI0NTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDg1NTI2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzY0LVxcbm1tL2h1Z2V0bGIuYzoxMzY1OlxcdGZvbGlvID0gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XFxubW0vaHVnZXRsYi5jLTEzNjYtXFx0aWYgKGZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yMT12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTI2LVxcbm1tL2h1Z2V0bGJfY21hLmM6Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5jLTI4LVxcdFxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuaD02PXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaHVnZXRsYl9jbWEuaDo3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuaC04LVxcdFxcdFxcdFxcdCAgICAgIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oLTE5LVxcbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXFxubW0vaHVnZXRsYl9jbWEuaC0yMS1cXHRcXHRnZnBfdCBnZnBfbWFzayxcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6MjAuOTc3MDg3NzA5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzU0NTcwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgR2lnYW50aWMgRm9saW8gQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYWxsb2NhdGlvbiBvZiB0aGVzZSBnaWdhbnRpYyBmb2xpb3MuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgY29yZSBmdW5jdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLiBBbmQgSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCBleGNsdXNpdmVseSBmcm9tIGBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgcG9pbnQgb2Ygb3JpZ2luIHF1aXRlIHNpZ25pZmljYW50bHkuXG5cbk5vdywgYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AgZ2V0cyBjYWxsZWQgZnJvbSBhIGZldyBvdGhlciBmdW5jdGlvbnM6IGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCwgYGFsbG9jX3Bvb2xfaHVnZV9mb2xpb2AsIGFuZCBgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZWAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byBgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZWAuIEl0IHNlZW1zIHRvIGJlIHRoZSBtb3N0IGFic3RyYWN0IG9mIHRoZSB0aHJlZS4gSXQgaXMgbGlrZWx5IGl0IGlzIHdoZXJlIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgYmVnaW5zLiBUaGlzIG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1ODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6MjQuMzUyNTQ2NjE5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQwNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQwNTpcXHRcXHRcXHRcXHRpZiAoIWFsbG9jX2Jvb3RtZW1faHVnZV9wYWdlKGgsIG5pZCkpXFxuMzQwNjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4zNDA3OlxcdFxcdFxcdH0gZWxzZSB7XFxuMzQwODpcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjM0MDk6XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCkgfCBfX0dGUF9USElTTk9ERTtcXG4zNDEwOlxcdFxcbjM0MTE6XFx0XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG4zNDEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xcbjM0MTM6XFx0XFx0XFx0XFx0aWYgKCFmb2xpbyBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2Zm9saW9fbGlzdCkgXFx1MDAyNlxcdTAwMjZcXG4zNDE0OlxcdFxcdFxcdFxcdCAgICBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGVfc2l6ZShoKSkge1xcbjM0MTU6XFx0XFx0XFx0XFx0XFx0cHJlcF9hbmRfYWRkX2FsbG9jYXRlZF9mb2xpb3MoaCwgXFx1MDAyNmZvbGlvX2xpc3QpO1xcbjM0MTY6XFx0XFx0XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmZvbGlvX2xpc3QpO1xcbjM0MTc6XFx0XFx0XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG4zNDE4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xcbjM0MTk6XFx0XFx0XFx0XFx0fVxcbjM0MjA6XFx0XFx0XFx0XFx0aWYgKCFmb2xpbylcXG4zNDIxOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjM0MjI6XFx0XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZmb2xpb19saXN0KTtcXG4zNDIzOlxcdFxcdFxcdH1cXG4zNDI0OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNToyNC4zNTI4NTY5ODlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2Mzk4NDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIHRoZSBib2xkZWQgaGVhZGVyIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZWAncyBOb2RlIE1hc2sqKlxuXG5BbHJpZ2h0LCBzbyBgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZWAgaXMgcGFzc2luZyBgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldYCBhcyB0aGUgYG5vZGVtYXNrYCBhcmd1bWVudC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmcgaW4gbXkgbWluZC4gYFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXWAgZXNzZW50aWFsbHkgcmVwcmVzZW50cyAqYWxsKiBtZW1vcnkgbm9kZXMsIHJpZ2h0PyBUaGUgaW50ZW50aW9uIGhlcmUgaXMgbGlrZWx5IHRvIGFsbG9jYXRlIHRoZSBodWdlIHBhZ2VzIGZyb20gYW55IGF2YWlsYWJsZSBOVU1BIG5vZGUsIHRyZWF0aW5nIHRoZW0gYXMgaW50ZXJjaGFuZ2VhYmxlIGluIHRoaXMgY29udGV4dC4gQnV0IGl0J3Mgd29ydGggZG91YmxlLWNoZWNraW5nIGhvdyB0aGlzIGBub2RlbWFza2AgaXMgYWN0dWFsbHkgdXNlZCBkb3duc3RyZWFtLiBMZXQgbWUgc2VlLi4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB0byB0aGlzIGBub2RlbWFza2AuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCB3aWxsIGxpa2VseSBiZSB1c2VkIHRvIHJlc3RyaWN0IGFsbG9jYXRpb24gdG8gdGhvc2Ugbm9kZXMuXG5cbk9rYXksIGxldCdzIGRpdmUgZGVlcGVyLiBXaGVyZSBkb2VzIHRoaXMgYG5vZGVtYXNrYCBnZXQgdXNlZD8gVGhlIG5leHQgbG9naWNhbCBwbGFjZSB0byBsb29rIGlzIGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB3aGVyZSB0aGUgYWxsb2NhdGlvbiBhY3R1YWxseSBoYXBwZW5zLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQncyB0aGUgcG9pbnQgd2hlcmUgdGhlIGBub2RlbWFza2AgaXMgcGFzc2VkIGluIGFzIGEgcmVzdHJpY3Rpb24sIHdoaWNoIHdpbGwgZWl0aGVyIGJlIHBhc3NlZCBvbiBkb3duIHRoZSBhbGxvY2F0aW9uIGNoYWluIG9yIGRpcmVjdGx5IHVzZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXRoZXIgdGhlIGFsbC1ub2RlcyBgbm9kZW1hc2tgIGFmZmVjdHMgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kuIFRoZSBkZXRhaWxzIG9mIGhvdyB0aGlzIGhhcHBlbnMgd2lsbCBkZXRlcm1pbmUgdGhlIGVmZmVjdGl2ZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBhbmQgd2hldGhlciBpdCdzIHRoZSBtb3N0IGVmZmljaWVudCBmb3IgdGhlIHdvcmtsb2FkLiBMZXQncyBzZWUgaG93IGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBoYW5kbGVzIHRoaXMgYG5vZGVtYXNrYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjg0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNToyOC42MTY4NDM0OTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODYzLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODYzOlxcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4xODY0OlxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBub2RlbWFza190ICpubWFzaylcXG4xODY1OlxcdHtcXG4xODY2OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuMTg2NzpcXHRcXG4xODY4OlxcdFxcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrLCBOVUxMKTtcXG4xODY5OlxcdFxcdGlmIChmb2xpbylcXG4xODcwOlxcdFxcdFxcdGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpbyhoLCBmb2xpbyk7XFxuMTg3MTpcXHRcXHRyZXR1cm4gZm9saW87XFxuMTg3MjpcXHR9XFxuMTg3MzpcXHRcXG4xODc0OlxcdHZvaWQgcHJlcF9hbmRfYWRkX2FsbG9jYXRlZF9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqaCxcXG4xODc1OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuMTg3NjpcXHR7XFxuMTg3NzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjE4Nzg6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgKnRtcF9mO1xcbjE4Nzk6XFx0XFxuMTg4MDpcXHRcXHQvKiBTZW5kIGxpc3QgZm9yIGJ1bGsgdm1lbW1hcCBvcHRpbWl6YXRpb24gcHJvY2Vzc2luZyAqL1xcbjE4ODE6XFx0XFx0aHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvcyhoLCBmb2xpb19saXN0KTtcXG4xODgyOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNToyOC42MTcyODgyMzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUxODAzNTA1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEh1Z2VUTEIgRm9saW8gQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBpcyB1c2luZyB0aGlzIGBubWFza2AgcGFyYW1ldGVyLiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIExldCdzIHRyYWNlIHRoaXMgY2FsbCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYG5tYXNrYCByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gSXQgc2VlbXMgbGlrZSBpdCBtdXN0IGluZmx1ZW5jZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSBiYWNraW5nIHBvb2wsIG9yIHBvdGVudGlhbGx5IHRoZSBzcGVjaWZpYyBwYWdlcyB3aXRoaW4gYSBwb29sIHRoYXQgYXJlIGNvbnNpZGVyZWQuIE5vdywgbGV0J3Mgc3RlcCBvdmVyIHRvIGBhbGxvY19wb29sX2h1Z2VfZm9saW9gLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGBubWFza2AgdGhlcmU7IEkgZXhwZWN0IHRoYXQgaXQgd2lsbCBoYXZlIHNvbWUgaW1wYWN0IG9uIHRoZSBmaW5hbCBmb2xpbyBhbGxvY2F0aW9uLCBidXQgSSBuZWVkIHRvIGFzY2VydGFpbiB0aGUgc3BlY2lmaWNzLiBJIGFtIHZlcnkgaW50ZXJlc3RlZCB0byBzZWUgaG93IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwb29sIGltcGFjdHMgYWxsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE1OjQzLjc5NzY0MTQ2OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTgwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4OTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4OTY6XFx0c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfcG9vbF9odWdlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuMTg5NzpcXHRcXHRcXHRcXHRcXHRcXHRub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbjE4OTg6XFx0XFx0XFx0XFx0XFx0XFx0bm9kZW1hc2tfdCAqbm9kZV9hbGxvY19ub3JldHJ5LFxcbjE4OTk6XFx0XFx0XFx0XFx0XFx0XFx0aW50ICpuZXh0X25vZGUpXFxuMTkwMDpcXHR7XFxuMTkwMTpcXHRcXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1RISVNOT0RFO1xcbjE5MDI6XFx0XFx0aW50IG5yX25vZGVzLCBub2RlO1xcbjE5MDM6XFx0XFxuMTkwNDpcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2tfdG9fYWxsb2MobmV4dF9ub2RlLCBucl9ub2Rlcywgbm9kZSwgbm9kZXNfYWxsb3dlZCkge1xcbjE5MDU6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4xOTA2OlxcdFxcbjE5MDc6XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5vZGUsXFxuMTkwODpcXHRcXHRcXHRcXHRcXHRcXHRub2Rlc19hbGxvd2VkLCBub2RlX2FsbG9jX25vcmV0cnkpO1xcbjE5MDk6XFx0XFx0XFx0aWYgKGZvbGlvKVxcbjE5MTA6XFx0XFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbjE5MTE6XFx0XFx0fVxcbjE5MTI6XFx0XFxuMTkxMzpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xOTE0OlxcdH1cXG4xOTE1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNTo0My43OTc5NjE1MDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3NDk0NDk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBGb2xpbyBBbGxvY2F0aW9uKipcblxuT2theSwgc28gYGFsbG9jX3Bvb2xfaHVnZV9mb2xpb2AgZ290IGNhbGxlZCwgYW5kIGl0IHBhc3NlZCBhbG9uZyBgbm9kZXNfYWxsb3dlZGAuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLCBpcyBiZWluZyBpbnZva2VkLiBJJ20gZ29pbmcgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZXNlIGh1Z2UgcGFnZSBmb2xpb3MgYXJlIGFjdHVhbGx5IGFsbG9jYXRlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBpbiB0aGlzIGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNTo0Ni40NzI5MDk5NjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NjY3MzA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTc5MT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19idWRkeV9mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xODM1LVxcbm1tL2h1Z2V0bGIuYzoxODM2OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKm9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0xODM3LVxcdFxcdGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBub2RlbWFza190ICpubWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xODYyLSAqL1xcbm1tL2h1Z2V0bGIuYzoxODYzOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtMTg2NC1cXHRcXHRnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm1hc2spXFxuLS1cXG5tbS9odWdldGxiLmMtMTg2Ny1cXG5tbS9odWdldGxiLmM6MTg2ODpcXHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBubWFzaywgTlVMTCk7XFxubW0vaHVnZXRsYi5jLTE4NjktXFx0aWYgKGZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jPTE4OTY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfcG9vbF9odWdlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTkwNi1cXG5tbS9odWdldGxiLmM6MTkwNzpcXHRcXHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbm9kZSxcXG5tbS9odWdldGxiLmMtMTkwOC1cXHRcXHRcXHRcXHRcXHRub2Rlc19hbGxvd2VkLCBub2RlX2FsbG9jX25vcmV0cnkpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTIwNzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjA4OC1cXG5tbS9odWdldGxiLmM6MjA4OTpcXHRmb2xpbyA9IGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2spO1xcbm1tL2h1Z2V0bGIuYy0yMDkwLVxcdGlmICghZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmM9MjEyND1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMjEzMS1cXG5tbS9odWdldGxiLmM6MjEzMjpcXHRmb2xpbyA9IGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2spO1xcbm1tL2h1Z2V0bGIuYy0yMTMzLVxcdGlmICghZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmM9MjY0MT1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI2ODYtXFx0XFx0XFx0Z2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCkgfCBfX0dGUF9USElTTk9ERTtcXG5tbS9odWdldGxiLmM6MjY4NzpcXHRcXHRcXHRuZXdfZm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGIuYy0yNjg4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG5pZCwgTlVMTCk7XFxuLS1cXG5tbS9odWdldGxiLmM9MzM5Nz1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTM0MTAtXFxubW0vaHVnZXRsYi5jOjM0MTE6XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG5tbS9odWdldGxiLmMtMzQxMi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNDE2LVxcdFxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmb2xpb19saXN0KTtcXG5tbS9odWdldGxiLmM6MzQxNzpcXHRcXHRcXHRcXHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLFxcbm1tL2h1Z2V0bGIuYy0zNDE4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNTo0Ni44Mzk1ODg5MzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2MjA5NzAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW9gIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvYCBhbmQgSSBzZWUgc29tZXRoaW5nIHRoYXQncyBpbW1lZGlhdGVseSBwaXF1ZWQgbXkgaW50ZXJlc3QuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIHBhc3NlcyBgTlVMTGAgYXMgdGhlIGBubWFza2AgYXJndW1lbnQgdG8gYGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLiBMZXQncyB0YWtlIGEgbG9vay4gXG5cbmBgYGNcblx0XHRcdG5ld19mb2xpbyA9IGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssXG5cdFx0XHRcdFx0XHRcdCAgICAgIG5pZCwgTlVMTCk7XG5gYGBcblxuQWgsIHJpZ2h0IHRoZXJlISBJdCdzIGNsZWFyIHRoYXQgdGhpcyBpcyB0aGUgc291cmNlIG9mIHRoZSBgTlVMTGAgbm9kZW1hc2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGlzIGJlaW5nIGRvbmUsIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgaGVyZSwgYW5kIGlmIGl0J3MgY29ycmVjdC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IG9mIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AgdG8gc2VlIHdoYXQncyBkcml2aW5nIHRoaXMgZGVjaXNpb24gYW5kIGRldGVybWluZSB0aGUgaW1wbGljYXRpb25zLiBJJ2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGF0IGZ1bmN0aW9uIG1vcmUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3OTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6NTAuNTAxNjg4OTQ5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY4MDpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yNjgxOlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjY4MjpcXHRcXHR9IGVsc2Uge1xcbjI2ODM6XFx0XFx0XFx0aCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pO1xcbjI2ODQ6XFx0XFx0XFx0aWYgKCFuZXdfZm9saW8pIHtcXG4yNjg1OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4yNjg2OlxcdFxcdFxcdFxcdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpIHwgX19HRlBfVEhJU05PREU7XFxuMjY4NzpcXHRcXHRcXHRcXHRuZXdfZm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLFxcbjI2ODg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmlkLCBOVUxMKTtcXG4yNjg5OlxcdFxcdFxcdFxcdGlmICghbmV3X2ZvbGlvKVxcbjI2OTA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjY5MTpcXHRcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI2OTI6XFx0XFx0XFx0fVxcbjI2OTM6XFx0XFxuMjY5NDpcXHRcXHRcXHQvKlxcbjI2OTU6XFx0XFx0XFx0ICogT2ssIG9sZF9mb2xpbyBpcyBzdGlsbCBhIGdlbnVpbmUgZnJlZSBodWdlcGFnZS4gUmVtb3ZlIGl0IGZyb21cXG4yNjk2OlxcdFxcdFxcdCAqIHRoZSBmcmVlbGlzdCBhbmQgZGVjcmVhc2UgdGhlIGNvdW50ZXJzLiBUaGVzZSB3aWxsIGJlXFxuMjY5NzpcXHRcXHRcXHQgKiBpbmNyZW1lbnRlZCBhZ2FpbiB3aGVuIGNhbGxpbmcgYWNjb3VudF9uZXdfaHVnZXRsYl9mb2xpbygpXFxuMjY5ODpcXHRcXHRcXHQgKiBhbmQgZW5xdWV1ZV9odWdldGxiX2ZvbGlvKCkgZm9yIG5ld19mb2xpby4gVGhlIGNvdW50ZXJzIHdpbGxcXG4yNjk5OlxcdFxcdFxcdCAqIHJlbWFpbiBzdGFibGUgc2luY2UgdGhpcyBoYXBwZW5zIHVuZGVyIHRoZSBsb2NrLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNTo1MC41MDE5NzQ2MjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4NTE0OTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AqKlxuXG5SaWdodCwgc28gYGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvYC4uLiB0aGF0IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBpbXBvcnRhbnQgaW4gaHVnZSBwYWdlIG1hbmFnZW1lbnQuIFRoZSBuYW1lIGl0c2VsZiBpcyBmYWlybHkgZGVzY3JpcHRpdmUsIGluZGljYXRpbmcgYSB0d28tcGFydCBvcGVyYXRpb24uIFwiQWxsb2NcIiBzdWdnZXN0cyBhbGxvY2F0aW5nIGEgaHVnZXRsYiBmb2xpbyAoYSBjb250aWd1b3VzIHJlZ2lvbiBvZiBtZW1vcnkgc3VpdGFibGUgZm9yIGEgbGFyZ2UgcGFnZSksIGFuZCBcImRpc3NvbHZlXCIgaW1wbGllcyB0ZWFyaW5nIGl0IGRvd24sIHdoaWNoIG11c3QgbWVhbiB3ZSBhcmUgbG9va2luZyBhdCBpc29sYXRpbmcgYSBzaW5nbGUgcGFnZSBpbiB0aGUgZm9saW8gb3IgbW92aW5nIGl0IGVsc2V3aGVyZS4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfcGFnZWAgaXMgdGhlIGtleS4gVGhhdCBmdW5jdGlvbiBjbGVhcmx5IG9yY2hlc3RyYXRlcyB0aGUgaXNvbGF0aW9uIG9yLCBwb3RlbnRpYWxseSwgdGhlIHRvdGFsIGRlY29uc3RydWN0aW9uIG9mIGEgaHVnZSBwYWdlLiBTbywgYGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvYCBpcyBsaWtlbHkgKnRoZSogd29ya2hvcnNlIOKAkyB0aGUgY29yZSBtZWNoYW5pc20gdGhhdCBlaXRoZXIgY2FydmVzIG91dCBhIHNpbmdsZSBwYWdlIGZyb20gYSBsYXJnZXIgYWxsb2NhdGlvbiwgcHJvYmFibHkgc28gdGhhdCBhIHN1YnNlcXVlbnQgYWxsb2NhdGlvbiBjYW4gYmUgbWFkZSwgcGVyaGFwcyB0byBwcmV2ZW50IGZyYWdtZW50YXRpb24gb3IgdG8gZmFjaWxpdGF0ZSBhIG1pZ3JhdGlvbi4gVGhlIGNvbnRleHQgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBodWdlIHBhZ2UgaW5mcmFzdHJ1Y3R1cmUuIEFueSBlcnJvciBwYXRocyBhcmUgb2J2aW91c2x5IGdvaW5nIHRvIGJlIGltcG9ydGFudCB0byBzY3J1dGluaXplLCBiZWNhdXNlIG1lc3NpbmcgdXAgaHVnZSBwYWdlIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uIHdvdWxkIGJlIGEgcGVyZm9ybWFuY2Uga2lsbGVyLCBubyBkb3VidC4gVW5kZXJzdGFuZGluZyB0aGUgbG9ja2luZyBpbnZvbHZlZCBpbiBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX3BhZ2VgIGlzIGFsc28gY3JpdGljYWwsIHNpbmNlIGl0IHNob3VsZCBwcm92aWRlIHRoZSBwcm90ZWN0aW9uIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIGZvbGlvIHN0cnVjdHVyZS4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGFyZWEgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXMgYWNjZXNzaW5nIHRoZSBzYW1lIGh1Z2V0bGIgcmVnaW9uLCBvciBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGR5bmFtaWMgY29uZmlndXJhdGlvbiBvZiBodWdlIHBhZ2VzLiBPdmVyYWxsLCB0aGUgcmVsYXRpb25zaGlwIGlzIHZlcnkgY2xlYXIgYW5kIHRoZSBpbnRlbnQgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIGlzIHByb2JhYmx5IGEgY2VudHJhbCBjb21wb25lbnQgZm9yIG1hbmFnaW5nIGxhcmdlIG1lbW9yeSByZWdpb25zIGFuZCBlbnN1cmluZyBlZmZpY2llbnQgcGFnZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDkyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNTo1NC40ODcxMjczODFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MTA4NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MjU2MD12b2lkIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNjM0LS8qXFxubW0vaHVnZXRsYi5jOjI2MzU6ICogYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8gLSBBbGxvY2F0ZSBhIG5ldyBmb2xpbyBhbmQgZGlzc29sdmVcXG5tbS9odWdldGxiLmMtMjYzNi0gKiB0aGUgb2xkIG9uZVxcbi0tXFxubW0vaHVnZXRsYi5jLTI2NDAtICovXFxubW0vaHVnZXRsYi5jOjI2NDE6c3RhdGljIGludCBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcXG5tbS9odWdldGxiLmMtMjY0Mi1cXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZXRsYi5jPTI3Mjc9aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZXRsYi5jLTI3NDUtXFx0ZWxzZSBpZiAoIWZvbGlvX3JlZl9jb3VudChmb2xpbykpXFxubW0vaHVnZXRsYi5jOjI3NDY6XFx0XFx0cmV0ID0gYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8oZm9saW8sIGxpc3QpO1xcbm1tL2h1Z2V0bGIuYy0yNzQ3LVxcbi0tXFxubW0vaHVnZXRsYi5jPTI3NTg9aW50IHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNzk3LVxcbm1tL2h1Z2V0bGIuYzoyNzk4OlxcdFxcdFxcdFxcdHJldCA9IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKGZvbGlvLCBcXHUwMDI2bGlzdCk7XFxubW0vaHVnZXRsYi5jLTI3OTktXFx0XFx0XFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6NTQuNTQ1MjQyMDQ2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MDM4MzgwMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlIFBhZ2UgQWxsb2NhdGlvbiBhbmQgRGlzc29sdXRpb24gZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZvbGlvIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSXQgc2VlbXMgbGlrZSBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvYCBnZXRzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHBsYWNlcywgaW5jbHVkaW5nIG1lbW9yeSBob3RwbHVnLCBDTUEsIGFuZCBtZW1vcnkgZmFpbHVyZSBzY2VuYXJpb3MuICBgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvc2AgaXMgbW9yZSBuYXJyb3dseSB0aWVkIHRvIG1lbW9yeSBob3RwbHVnLiBUaGlzIGhhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgd2hpY2ggaXMgaW50ZXJlc3Rpbmcg4oCTIGluZGljYXRpbmcgdGhpcyBpcyBhbiBhcmVhIHdoZXJlIGZ1enppbmcgY291bGQgcG90ZW50aWFsbHkgdW5jb3ZlciBzb21lIHN1YnRsZSBpc3N1ZXMuXG5cblRoZSBjb3JlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBoZXJlLCB3aGljaCBzaG91bGQgYmUgdGhlIGZvY3VzIG9mIHNvbWUgdGFyZ2V0ZWQgZnV6emluZywgYXJlOiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCwgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AsIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gLCBhbmQgYHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NgLiBJIHdpbGwgbWFrZSBhIG5vdGUgdG8gcHJpb3JpdGlzZSB0aGVzZSBmb3IgZnV6emluZy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGlmIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIHN0YXRpYyBvciBub3QuLi4gb2theSwgaXQncyBub3Qgc3RhdGljIGFuZCBpdCdzIGRlZmluZWQgaW4gYG1tL2h1Z2V0bGJfY21hLmNgLiBUaGlzIHRlbGxzIG1lIGl0IGlzIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGF0IGZpbGUuXG5cbk5vdywgbGV0J3MgcmV2aWV3IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBIVUdFVExCRlNgLCBgQ01BYCwgYENPTlRJR19BTExPQ2AsIGFuZCB0aGVuIGBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYC4gVGhlIGluY2x1c2lvbiBvZiBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgYSBiaXQgdW51c3VhbC4gVGhpcyBpcyB0eXBpY2FsbHkgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZlYXR1cmUuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgdXNlci1zZWxlY3RhYmxlIGNvbmZpZyBvciBzb21ldGhpbmcgaW1wbGljaXRseSBlbmFibGVkIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBzcGFjZSB3aGVuIGNyYWZ0aW5nIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWdpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzk5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE2OjEyLjU4MzYyNDI2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk1MjkyNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI4Mz1jb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxuLS1cXG5mcy9LY29uZmlnLTI4Ni1cXG5mcy9LY29uZmlnOjI4Nzpjb25maWcgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbmZzL0tjb25maWctMjg4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTY6MTQuNTc4OTIxOTQ4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxODcwMzg4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgLiBJdCdzIGEgYm9vbGVhbiBvcHRpb24sIGJ1dCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IGl0J3MgKmFyY2gtc2VsZWN0ZWQqIGFuZCBkb2Vzbid0IGhhdmUgYSBkaXJlY3QgcHJvbXB0LiBUaGF0IG1lYW5zIHRoZSBhcmNoaXRlY3R1cmUgaXRzZWxmIGRlY2lkZXMgd2hldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90LiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB3ZSBzaG91bGRuJ3QgcmVhbGx5IGJvdGhlciBpbmNsdWRpbmcgaXQgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBzaW5jZSBpdCdzIHVsdGltYXRlbHkgdXAgdG8gdGhlIGFyY2hpdGVjdHVyZS4gT3IsIHdlICpjb3VsZCogaW5jbHVkZSBpdCwgYnV0IGl0IHdvdWxkIGVmZmVjdGl2ZWx5IGRvIG5vdGhpbmcgaWYgdGhlIGFyY2hpdGVjdHVyZSBkb2Vzbid0IGhhdmUgaXQgZW5hYmxlZCBpbnRyaW5zaWNhbGx5LiBJdCB3b3VsZCBqdXN0IGJlIG5vaXNlLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhIGJpdC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBDT05USUdfQUxMT0NgLiBJIHdvbmRlciBob3cgdGhhdCdzIHJlbGF0ZWQgdG8gYWxsIG9mIHRoaXMuIEkgYmV0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgcGh5c2ljYWwgbWVtb3J5IGFsbG9jYXRpb24uIExldCdzIHNlZSBob3cgaXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTM5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTY6MjIuNzY1OTYyOTgzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg0MTQ5MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT05USUdfQUxMT0NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbi0tXFxubW0vS2NvbmZpZy03MTgtXFxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xcbm1tL0tjb25maWctNzIwLVxcdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFxcdTAwMjZcXHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNjoyNC44NTAxMjM3MjRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1ODMzNTcwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIExvZ2ljKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBDT05USUdfQUxMT0NgIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMuIFNwZWNpZmljYWxseSwgaXQncyBkZWZpbmVkIGJ5IGVpdGhlciB0aGUgY29tYmluYXRpb24gb2YgYE1FTU9SWV9JU09MQVRJT05gIGFuZCBgQ09NUEFDVElPTmAsIG9yIGl0J3MgZGlyZWN0bHkgdGllZCB0byBgQ01BYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZDogaWYgYENNQWAgaXMgZW5hYmxlZCwgYENPTlRJR19BTExPQ2AgaXMgZW5hYmxlZC4gQSBjbGVhciBkZXBlbmRlbmN5LlxuXG5UaGVyZWZvcmUsIGxvb2tpbmcgYXQgd2hhdCdzIHNldCB0byBcInllc1wiIEkgc2VlIGBIVUdFVExCRlNgIGFuZCBgQ01BYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgY29udHJpYnV0aW5nIGZhY3RvcnMuXG5cbkJ1dCBJJ20gbm90IHN0b3BwaW5nIHRoZXJlLiBJIG5lZWQgdG8gdGhpbmsgYmlnZ2VyLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBvdGhlciBjb25maWd1cmF0aW9ucy4gUGFydGljdWxhcmx5LCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgTUVNT1JZX0hPVFBMVUdgIG9yIGBNRU1PUllfRkFJTFVSRWAgYXJlIHNldCB0byB0cmlnZ2VyIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gLiBJdCBjb3VsZCBiZSB1c2VmdWwgZm9yIGZ1cnRoZXIgb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNjoyOS4xMDg0NjI2MDZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjMzODYyODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02OTE9Ym9vbCBodWdldGxiX2Jvb3RtZW1fcGFnZV96b25lc192YWxpZChpbnQgbmlkLCBzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm0pO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY5Mi1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2OTM6aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02OTQtaW50IHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMDk4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmaWxlbWFwX2xvY2tfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEwMy1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTA0OnN0YXRpYyBpbmxpbmUgaW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMDUtXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz04NTU9aXNvbGF0ZV9taWdyYXRlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgbG93X3BmbixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy05ODktXFx0XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbm1tL2NvbXBhY3Rpb24uYzo5OTA6XFx0XFx0XFx0cmV0ID0gaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvKGZvbGlvLCBcXHUwMDI2Y2MtXFx1MDAzZW1pZ3JhdGVwYWdlcyk7XFxubW0vY29tcGFjdGlvbi5jLTk5MS1cXG5tbS9jb21wYWN0aW9uLmMtOTkyLVxcdFxcdFxcdC8qXFxubW0vY29tcGFjdGlvbi5jOjk5MzpcXHRcXHRcXHQgKiBGYWlsIGlzb2xhdGlvbiBpbiBjYXNlIGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbygpXFxubW0vY29tcGFjdGlvbi5jLTk5NC1cXHRcXHRcXHQgKiByZXBvcnRzIGFuIGVycm9yLiBJbiBjYXNlIG9mIC1FTk9NRU0sIGFib3J0IHJpZ2h0IGF3YXkuXFxuLS1cXG5tbS9odWdldGxiLmM9MjY0MT1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI3MjYtXFxubW0vaHVnZXRsYi5jOjI3Mjc6aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2V0bGIuYy0yNzI4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTY6MzEuMzMxODU1ODg3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTY2NzAzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKlRyYWNpbmcgdGhlIEh1Z2UgUGFnZSBQYXRoKipcblxuUmlnaHQsIHNvIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gIOKAkyB0aGF0J3MgdGhlIGtleSBmdW5jdGlvbiB3ZSdyZSBjb25jZXJuZWQgd2l0aC4gQW5kIHRoZSBjbHVlIGhlcmUgaXMgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGBtbS9jb21wYWN0aW9uLmNgLiBJbW1lZGlhdGVseSwgdGhhdCB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBjb21wYWN0aW9uLCB3aGljaCBtZWFucyAqKkNPTVBBQ1RJT04qKiBpcyBkZWZpbml0ZWx5IGEgcmVsZXZhbnQgZmFjdG9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgYHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NgLiBUaGlzIHNvdW5kcyBsaWtlIGEgcHJpbWUgcGxhY2UgdG8gY29udGludWUgbXkgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGRldGVybWluZSBob3cgdGhlIHR3byByZWxhdGUgYW5kIGhvdyBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvYCBwbGF5cyBhIHBhcnQgaW4gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgcmVsYXRlZCB0byBodWdlIHBhZ2VzIGFuZCBjb21wYWN0aW9uLiBJIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzOTMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNjozNC4zMjg1Mjg2NjhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDk3NjYwMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Njk0OmludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY5NS12b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEwND1zdGF0aWMgaW5saW5lIGludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMDktXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTExMDpzdGF0aWMgaW5saW5lIGludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMTEtXFx0XFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbi0tXFxubW0vaHVnZXRsYi5jPTI3Mjc9aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZXRsYi5jLTI3NTEtLypcXG5tbS9odWdldGxiLmM6Mjc1MjogKiAgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvcyAtIFJlcGxhY2UgZnJlZSBodWdlcGFnZSBmb2xpb3MgaW4gYSBnaXZlbiBwZm5cXG5tbS9odWdldGxiLmMtMjc1My0gKiAgcmFuZ2Ugd2l0aCBuZXcgZm9saW9zLlxcbi0tXFxubW0vaHVnZXRsYi5jLTI3NTctICovXFxubW0vaHVnZXRsYi5jOjI3NTg6aW50IHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG5tbS9odWdldGxiLmMtMjc1OS17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzEwMT1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE3OC1cXHQgKiBidWRkeSBzeXN0ZW0uICBBZnRlciB0aGUgbWlncmF0aW9uIG9mIGluLXVzZSBodWdlIHBhZ2VzIGlzIGNvbXBsZXRlZCxcXG5tbS9wYWdlX2FsbG9jLmM6NzE3OTpcXHQgKiB3ZSB3aWxsIGludm9rZSByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKCkgdG8gZW5zdXJlIHRoYXQgdGhlc2VcXG5tbS9wYWdlX2FsbG9jLmMtNzE4MC1cXHQgKiBodWdlcGFnZXMgYXJlIHByb3Blcmx5IHJlbGVhc2VkIHRvIHRoZSBidWRkeSBzeXN0ZW0uXFxubW0vcGFnZV9hbGxvYy5jLTcxODEtXFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjcxODI6XFx0cmV0ID0gcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvcyhzdGFydCwgZW5kKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzE4My1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNjozNi41MzgzMDA0NzJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI4MTAxMjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHdoYXQgc2VlbXMgbGlrZSBhbiBpbnRlcmVzdGluZyBjb2RlIHBhdGguIEl0J3MgY2FsbGVkIGZyb20gYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHdoaWNoIGlzIGEga2V5IGFyZWEgZm9yIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24uIFRoaXMsIGluIHR1cm4sIGlzIHBhcnQgb2YgYGFsbG9jX2NvbnRpZ19yYW5nZWAsIGEgZnVuY3Rpb24gZnVuZGFtZW50YWwgdG8gYm90aCBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgYW5kIG1lbW9yeSBob3RwbHVnZ2luZy4gVGhhdCBnaXZlcyB1cyBhIHByZXR0eSBnb29kIHNlbnNlIG9mIHRoZSBjb250ZXh0LlxuXG5HaXZlbiB0aGF0IGNvbnRleHQsIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgd291bGQgbG9naWNhbGx5IGJlIGBIVUdFVExCRlNgLCBgQ01BYCwgYENPTVBBQ1RJT05gLCBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYE1FTU9SWV9GQUlMVVJFYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgcHJlcmVxdWlzaXRlIGZlYXR1cmVzIGZvciB0aGUgY29kZSBpbiBxdWVzdGlvbiB0byBiZSBhY3RpdmUuXG5cbk5vdywgbGV0J3MgcmVmaW5lIHRoZSBzcGVjaWZpYyBzeW1ib2xzIHRvIGZvY3VzIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgZnVuY3Rpb25zIGludm9sdmVkIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdC4gSSdsbCBwdXQgYSBwaW4gb24gdGhlIGZvbGxvd2luZzogYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AsIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLCBgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW9gLCBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvYCwgYW5kIGByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zYCB3aGljaCBzZWVtIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgY29yZSBsb2dpYy5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGFwcGVhcnMgdG8gYmUgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdpdGhpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gVGhlIHZ1bG5lcmFiaWxpdHkgdHJpZ2dlcnMgd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwuIFRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gZ2lnYW50aWMgaHVnZXBhZ2UgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGR1cmluZyB0aGUgcHJvY2VzcyBvZiBkaXNzb2x2aW5nIGFuZCByZXBsYWNpbmcgZnJlZSBodWdlcGFnZXMuIEl0IHNlZW1zIGxpa2VseSB0aGUgdHJpZ2dlciBpcyB3aGVuIGNvbXBhY3Rpb24gaXMgcnVubmluZywgQ01BIGlzIGFsbG9jYXRpbmcsIG9yIG1lbW9yeSBob3RwbHVnIGlzIG9wZXJhdGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlZXAgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlxuXG5DcnVjaWFsbHksIGNhbiB0aGlzIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2U/IENNQSBhbGxvY2F0aW9ucyBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlLCBlaXRoZXIgZGlyZWN0bHkgdGhyb3VnaCBodWdlcGFnZSBhbGxvY2F0aW9ucywgb3IgaW5kaXJlY3RseSB0aHJvdWdoIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBob3RwbHVnIG9yIGNvbXBhY3Rpb24sIHdoaWNoIHVzZXJzcGFjZSBjYW4gaW5pdGlhdGUuIFRoZXJlZm9yZSwgKnllcyosIHRoaXMgcGF0aCBpcyBpbmRlZWQgcmVhY2hhYmxlLCBhbmQgdGhhdCBzaWduaWZpY2FudGx5IGluY3JlYXNlcyB0aGUgcG90ZW50aWFsIHJpc2suIEdpdmVuIHRoaXMgaXMgYSByZWFjaGFibGUsIGZ1bmN0aW9uYWwgY2hhbmdlLCBmdXp6aW5nIHdvdWxkIGJlIGFuIGFwcHJvcHJpYXRlIG5leHQgc3RlcCBpbiB0aGUgdGVzdGluZyBtZXRob2RvbG9neS5cblxuSSdsbCBwcm9jZWVkIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIGZvcm1hbGl6ZSB0aGVzZSBmaW5kaW5ncyBhbmQgZG9jdW1lbnQgdGhlIHJlbGV2YW50IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNzEsIk91dHB1dFRva2VucyI6MjA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE2OjQzLjgxOTMxNTI1MloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjIwMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkNNQVwiLFxuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIixcbiAgICBcImFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb1wiLFxuICAgIFwiYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcImlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpb1wiLFxuICAgIFwicmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgZ2lnYW50aWMgaHVnZXBhZ2UgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZGlzc29sdmluZyBhbmQgcmVwbGFjaW5nIGZyZWUgaHVnZXBhZ2VzIChlLmcuLCBkdXJpbmcgY29tcGFjdGlvbiwgQ01BIGFsbG9jYXRpb24sIG9yIG1lbW9yeSBob3RwbHVnKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCIsXG4gICAgXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIixcbiAgICBcImFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9cIixcbiAgICBcInJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGdpZ2FudGljIGh1Z2VwYWdlIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGRpc3NvbHZpbmcgYW5kIHJlcGxhY2luZyBmcmVlIGh1Z2VwYWdlcyAoZS5nLiwgZHVyaW5nIGNvbXBhY3Rpb24sIENNQSBhbGxvY2F0aW9uLCBvciBtZW1vcnkgaG90cGx1ZykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvl9gc[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 01:00:08 +0000 UTC FinishedAt: 2026-07-03 01:16:45 +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": "55558ff9d39dada178e584f0a3be18603622c9db", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "CMA", "COMPACTION", "MEMORY_HOTPLUG" ], "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": "55558ff9d39dada178e584f0a3be18603622c9db", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "CMA", "COMPACTION", "MEMORY_HOTPLUG" ], "series_id": "559dc7b0-9211-4995-b16e-473f10b959b7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_cma_alloc_frozen_folio", "alloc_gigantic_frozen_folio", "alloc_and_dissolve_hugetlb_folio", "isolate_or_dissolve_huge_folio", "replace_free_hugepage_folios" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtDTUEmIzM0OywKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7LAogICAgJiMzNDtNRU1PUllfSE9UUExVRyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvJiMzNDssCiAgICAmIzM0O3JlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2Agd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBnaWdhbnRpYyBodWdlcGFnZSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgd2hlbiBkaXNzb2x2aW5nIGFuZCByZXBsYWNpbmcgZnJlZSBodWdlcGFnZXMgKGUuZy4sIGR1cmluZyBjb21wYWN0aW9uLCBDTUEgYWxsb2NhdGlvbiwgb3IgbWVtb3J5IGhvdHBsdWcpLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBjZjllOGVmNzAzZDcyNzk1MDFmZTVkYjZiYjJhZWQ3ODVmNzUwNDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDAxOjEyOjQxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jXG5pbmRleCAzOTM0NGQ2Yzc4ZDg0ZS4uNTYzZTExZTYwN2U1ZWMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiX2NtYS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX2NtYS5jXG5AQCAtMzQsNiAmIzQzOzM0LDkgQEAgc3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbiBcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXG4mIzQzO1x0aWYgKCFub2RlbWFzaylcbiYjNDM7XHRcdG5vZGVtYXNrID0gXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldO1xuJiM0MztcbiBcdGlmIChodWdldGxiX2NtYVtuaWRdKVxuIFx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtuaWRdLCBvcmRlcik7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDssCiAgICAmIzM0O2FsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDtpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8mIzM0OywKICAgICYjMzQ7cmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGdpZ2FudGljIGh1Z2VwYWdlIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGRpc3NvbHZpbmcgYW5kIHJlcGxhY2luZyBmcmVlIGh1Z2VwYWdlcyAoZS5nLiwgZHVyaW5nIGNvbXBhY3Rpb24sIENNQSBhbGxvY2F0aW9uLCBvciBtZW1vcnkgaG90cGx1ZykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwY2Y5ZThlZjcwM2Q3Mjc5NTAxZmU1ZGI2YmIyYWVkNzg1Zjc1MDQzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMyAwMToxMjo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY21hLmMgYi9tbS9odWdldGxiX2NtYS5jCmluZGV4IDM5MzQ0ZDZjNzhkODRlLi41NjNlMTFlNjA3ZTVlYyAxMDA2NDQKLS0tIGEvbW0vaHVnZXRsYl9jbWEuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9odWdldGxiX2NtYS5jCkBAIC0zNCw2ICYjNDM7MzQsOSBAQCBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLAogCWlmICghaHVnZXRsYl9jbWFfc2l6ZSkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJaWYgKCFub2RlbWFzaykKJiM0MzsJCW5vZGVtYXNrID0gJmFtcDtub2RlX3N0YXRlc1tOX01FTU9SWV07CiYjNDM7CiAJaWYgKGh1Z2V0bGJfY21hW25pZF0pCiAJCXBhZ2UgPSBjbWFfYWxsb2NfZnJvemVuX2NvbXBvdW5kKGh1Z2V0bGJfY21hW25pZF0sIG9yZGVyKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODQ2CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZVRMQiBDTUEgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBgbW0vaHVnZXRsYl9jbWEuY2AgZmlsZS4gVGhlIGNvcmUgY2hhbmdlIGZvY3VzZXMgb24gdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCYjMzk7cyBhYm91dCBoYW5kbGluZyBhIHNjZW5hcmlvIHdoZXJlIHRoZSBgbm9kZW1hc2tgIGFyZ3VtZW50IGlzIHBvdGVudGlhbGx5IGBOVUxMYC4KClRoZSBleGlzdGluZyBjb2RlIGNoZWNrcyBmb3IgYGh1Z2V0bGJfY21hX3NpemVgLCB3aGljaCBtYWtlcyBzZW5zZSBhcyBhbiBlYXJseSBleGl0IGlmIHRoZXJlJiMzOTtzIG5vdGhpbmcgdG8gYWxsb2NhdGUuIFRoZW4sIHRoaXMgcGF0Y2ggYWRkcyBhIGNoZWNrLiBOb3csIGlmIGBub2RlbWFza2AgaXMgYE5VTExgLCBpdCYjMzk7cyBkZWZhdWx0aW5nIHRoZSBgbm9kZW1hc2tgIHRvIGAmYW1wO25vZGVfc3RhdGVzW05fTUVNT1JZXWAuIFRoaXMgbWVhbnMgaXQmIzM5O3MgZWZmZWN0aXZlbHkgdXNpbmcgdGhlICYjMzQ7bWVtb3J5JiMzNDsgbm9kZSBtYXNrIGFzIGEgZmFsbGJhY2suIEFuZCBmcm9tIHRoZXJlLCBpZiB0aGVyZSYjMzk7cyBhIHZhbGlkIENNQSByZWdpb24gZm9yIHRoZSBub2RlIChgaHVnZXRsYl9jbWFbbmlkXWApLCBpdCBjYWxscyBgY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZGAuCgpJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGBub2RlbWFza2AgY291bGQgYmUgYE5VTExgLiBXaGF0JiMzOTtzIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBhbmQgaG93IGRvZXMgYG5vZGVtYXNrYCB0eXBpY2FsbHkgZ2V0IHBvcHVsYXRlZD8gSXMgaXQgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgbWF5YmUgaGFuZGxpbmcgYSBjYXNlIHdoZXJlIHRoZSBzeXN0ZW0gdG9wb2xvZ3kgaXNuJiMzOTt0IGZ1bGx5IGluaXRpYWxpemVkPyBJZiB0aGUgZmFsbGJhY2sgdG8gYE5fTUVNT1JZYCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGRlc2lyZWQgYmVoYXZpb3IgaW4gdGhlIHNwZWNpZmljIHNpdHVhdGlvbiwgdGhlbiBpdCYjMzk7cyBwcm9iYWJseSBmaW5lLCBidXQgSSYjMzk7ZCB3YW50IHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGxlYWQgdG8gYW55IHVuZXhwZWN0ZWQgTlVNQSBlZmZlY3RzIG9yIGFsbG9jYXRpb24gZmFpbHVyZXMgaW4gZWRnZSBjYXNlcy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgc2l0ZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBodWdldGxiX2NtYS5jYCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIGl0IGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIGRlc2lnbiBnb2FscyBvZiB0aGUgQ01BIEh1Z2VUTEIgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9jbWEuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiX2NtYS5jPTIxPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9odWdldGxiX2NtYS5jLTI2LVxubW0vaHVnZXRsYl9jbWEuYzoyNzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuYy0yOC1cdFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU4MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqVHJhY2luZyB0aGUgVXNhZ2Ugb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gRXNzZW50aWFsbHksIEkgd2FudCB0byBtYXAgb3V0IGFsbCB0aGUgcGxhY2VzIGluIHRoZSBrZXJuZWwgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGlzIGlzIG9mdGVuIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIHB1cnBvc2Ugb2YgYW55IGFsbG9jYXRpb24gcGF0aCwgZXNwZWNpYWxseSBvbmUgcmVsYXRlZCB0byBIdWdlVExCIGFuZCBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRpb24pLCB3aGljaCBjYW4gaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEl04oCZcyBhbHNvIGNydWNpYWwgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcywgdHJhY2luZyBkb3duIG1lbW9yeSBsZWFrcywgb3IgY29tcHJlaGVuZGluZyB0aGUgaW50ZXJhY3Rpb24gb2YgdGhpcyBhbGxvY2F0aW9uIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCB0b29sc2V0IChgZ3JlcGAsIGBjdGFnc2AsIHRoZSBkZWJ1Z2dlciwgZXRjLikgdG8gdHJhdmVyc2UgdGhlIHNvdXJjZSBjb2RlIGFuZCBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgd2l0aGluIHRoZSBsYXJnZXIgYWxsb2NhdGlvbiBsYW5kc2NhcGUuIEnigJltIHRoaW5raW5nIEnigJlsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgZGlyZWN0IGNhbGxzLiBUaGVuLCBpZiB0aGF0IHlpZWxkcyBsaW1pdGVkIHJlc3VsdHMsIEnigJlsbCBuZWVkIHRvIGNvbnNpZGVyIGluZGlyZWN0IGZ1bmN0aW9uIGNhbGxzIGFuZCBwb3RlbnRpYWxseSBhbmFseXplIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhvbGQgZnVuY3Rpb24gcG9pbnRlcnMgdG8gaWRlbnRpZnkgcG90ZW50aWFsIGNhbGxiYWNrIHVzYWdlLiBUaGlzIGlzIGdvaW5nIHRvIGJlIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBsZXRlIHVzYWdlIG9mIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTM2NC1cbm1tL2h1Z2V0bGIuYzoxMzY1Olx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbm1tL2h1Z2V0bGIuYy0xMzY2LVx0aWYgKGZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjE9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjYtXG5tbS9odWdldGxiX2NtYS5jOjI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9odWdldGxiX2NtYS5jLTI4LVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuaC04LVx0XHRcdFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuaC0xOS1cbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXG5tbS9odWdldGxiX2NtYS5oLTIxLVx0XHRnZnBfdCBnZnBfbWFzayxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzOTYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgZm9yIEh1Z2VUTEIgQ01BKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgYGh1Z2V0bGJfY21hLmNgIGZpbGUuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcy4gVGhhdCYjMzk7cyBhbHdheXMgdGhlIGJlc3QgcGxhY2UgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgY29uZmlndXJhYmxlLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGlzIGZlYXR1cmUgaW50ZWdyYXRlcyBpbnRvIHRoZSBsYXJnZXIgc3lzdGVtLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBlbnRyaWVzIHNwZWNpZmljYWxseSBtZW50aW9uaW5nIGBodWdldGxiX2NtYS5jYCBvciAmIzM0O2h1Z2UgcGFnZXMmIzM0OyBhbmQgJiMzNDtDTUEmIzM0OyB0b2dldGhlci4gVGhpcyBzaG91bGQgdGVsbCBtZSBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQsIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgd2hhdCBvdGhlciBzZXR0aW5ncyBtaWdodCBuZWVkIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQgZm9yIGl0IHRvIHdvcmsgY29ycmVjdGx5LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCB2ZXJzaW9ucywgYXJjaGl0ZWN0dXJlLCBhbmQgcG9zc2libHkgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkgbmVlZCB0byBiZSByZWFkeSB0byBpbnRlcnByZXQgdGhlIGRlcGVuZGVuY2llcyBjb3JyZWN0bHksIGFzIEkgYWxyZWFkeSBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIEtjb25maWcgc3ludGF4IGFuZCB0aGUgZ2VuZXJhbCBrZXJuZWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIE15IGdvYWwgaXMgdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGltcGxpY2F0aW9ucyBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZXRsYl9jbWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT04Mj1pZmRlZiBDT05GSUdfQ01BXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0JiM0Mzs9IGh1Z2V0bGJfY21hLm9cbm1tL01ha2VmaWxlLTg0LWVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzczOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBoZXJlLgoKKipOYXZpZ2F0aW5nIHRoZSBIdWdlVExCIGFuZCBDTUEgQ29uZmx1ZW5jZSoqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIHRoaXMgY2VudGVycyBhcm91bmQgYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuIFJpZ2h0LCB0aGF0JiMzOTtzIHRoZSBjb3JlIG9mIGl0IOKAkyB0aGUgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yIHdvcmtpbmcgaW4gY29uanVuY3Rpb24gd2l0aCBIdWdlVExCIGZpbGUgc3lzdGVtcy4gSW50ZXJlc3RpbmcuIE15IGZvY3VzIGlzIHF1aWNrbHkgZHJhd24gdG8gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIFRoYXQgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLCB3aGljaCByZXNpZGVzIHdpdGhpbiBgbW0vaHVnZXRsYi5jYC4gTm93IEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCBmdXJ0aGVyIGJhY2suIExldCBtZSBxdWlja2x5IGRldGVybWluZSB3aGVyZSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCBpdHNlbGYgaXMgY2FsbGVkLiBVbmRlcnN0YW5kaW5nIHRoZSB1cHN0cmVhbSBjYWxsZXJzIHdpbGwgYmUgZXNzZW50aWFsIGZvciBmdWxsIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTMyMD1zdGF0aWMgc3RydWN0IGZvbGlvICpkZXF1ZXVlX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTEzNTktI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19DT05USUdfQUxMT0MpXG5tbS9odWdldGxiLmM6MTM2MDpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGIuYy0xMzYxLVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiLmMtMTM3Ni0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cbm1tL2h1Z2V0bGIuYzoxMzc3OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxubW0vaHVnZXRsYi5jLTEzNzgtXHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4tLVxubW0vaHVnZXRsYi5jPTE4MzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE4NDYtXHRpZiAob3JkZXJfaXNfZ2lnYW50aWMob3JkZXIpKVxubW0vaHVnZXRsYi5jOjE4NDc6XHRcdGZvbGlvID0gYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBubWFzayk7XG5tbS9odWdldGxiLmMtMTg0OC1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQwMAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gSHVnZVRMQiBGb2xpbyBBbGxvY2F0aW9uKioKClJpZ2h0LCBzbyBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIHJlcXVlc3RpbmcgYSBmcmVzaCwgdW5pbml0aWFsaXplZCBIdWdlVExCIGZvbGlvLiBJbnRlcmVzdGluZy4gSSBpbW1lZGlhdGVseSBzZWUgdGhhdCBpdCBmdW5uZWxzIGludG8gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHByb2JhYmx5IHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBhY3R1YWxseSAqZG9pbmcqIHRoZSBhbGxvY2F0aW9uLCBhbmQgJiMzOTtmcm96ZW4mIzM5OyBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSBtZW1vcnkgcmVnaW9uIHRoYXQmIzM5O3MgYWxyZWFkeSBiZWVuIHNldCB1cCBmb3IgdGhlIHVzZXIuIFNvLCBteSBuZXh0IHF1ZXN0aW9uIGlzLCB3aGVyZSBpcyB0aGlzIGBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0IG9mIGhvdyB0aGVzZSBmb2xpb3MgYXJlIHJlcXVlc3RlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGVudHJ5IHBvaW50IHRvIHRoZSBzb3VyY2Ugb2YgdGhlIHJlcXVlc3RzLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0xNzkxPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYy0xODM1LVxubW0vaHVnZXRsYi5jOjE4MzY6c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMTgzNy1cdFx0Z2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIG5vZGVtYXNrX3QgKm5tYXNrLFxuLS1cbm1tL2h1Z2V0bGIuYz0xODYzPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTg2Ny1cbm1tL2h1Z2V0bGIuYzoxODY4Olx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2ssIE5VTEwpO1xubW0vaHVnZXRsYi5jLTE4NjktXHRpZiAoZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jPTE4OTY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfcG9vbF9odWdlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxubW0vaHVnZXRsYi5jLTE5MDYtXG5tbS9odWdldGxiLmM6MTkwNzpcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5vZGUsXG5tbS9odWdldGxiLmMtMTkwOC1cdFx0XHRcdFx0bm9kZXNfYWxsb3dlZCwgbm9kZV9hbGxvY19ub3JldHJ5KTtcbi0tXG5tbS9odWdldGxiLmM9MzM5Nz1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkKVxuLS1cbm1tL2h1Z2V0bGIuYy0zNDEwLVxubW0vaHVnZXRsYi5jOjM0MTE6XHRcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcbm1tL2h1Z2V0bGIuYy0zNDEyLVx0XHRcdFx0XHRcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xuLS1cbm1tL2h1Z2V0bGIuYy0zNDE2LVx0XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW9fbGlzdCk7XG5tbS9odWdldGxiLmM6MzQxNzpcdFx0XHRcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXG5tbS9odWdldGxiLmMtMzQxOC1cdFx0XHRcdFx0XHRcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjYyCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMTAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIEtlcm5lbCBIdWdlcGFnZSBBbGxvY2F0aW9uIEZpeCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIGZpeCBpcyBkZWFsaW5nIHdpdGggaHVnZXBhZ2UgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikuIFRoZSBjb3JlIG9mIHRoZSBpc3N1ZSBpcyBhIGJ1ZyB3aGVyZSB0aGUgYG5vZGVtYXNrYCBpcyB1bmV4cGVjdGVkbHkgYE5VTExgLCBjYXVzaW5nIGl0IHRvIGRlZmF1bHQgdG8gYCZhbXA7bm9kZV9zdGF0ZXNbTl9NRU1PUlldYC4gVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFzIGl0IG1vZGlmaWVzIHRoZSBiZWhhdmlvciBpbiBgbW0vaHVnZXRsYl9jbWEuY2AuIEdpdmVuIHRoYXQgdGhpcyB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gaHVnZXBhZ2VzLCBJJiMzOTtkIHNheSB0aGF0IGZ1enppbmcgaXMgYWJzb2x1dGVseSB3YXJyYW50ZWQgaGVyZS4gV2UgbmVlZCB0byBlbnN1cmUgdGhpcyBmaXggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBleHBvc2UgbmV3IHZ1bG5lcmFiaWxpdGllcy4KClRpbWUgdG8gcmV2aXNpdCB0aGUgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb247IGxldCYjMzk7cyBzZWUgd2hlcmUgdGhpcyBudWxsIGNoZWNrIGZpdHMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGJfY21hLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9jbWEuYz0yMT12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuYy0yNi1cbm1tL2h1Z2V0bGJfY21hLmM6Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbm1tL2h1Z2V0bGJfY21hLmMtMjgtXHRcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MgYW5kIGRpc3NlY3QgdGhpcyBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBpbXBsZW1lbnRhdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gQ01BLCBodWdldGxiZnMsIGFuZCwgb2YgY291cnNlLCB0aGUgZm9saW8gc3RydWN0dXJlcy4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIHRoaXMgaXMgYWJvdXQgYWxsb2NhdGluZyBhIGZyb3plbiBmb2xpbywgbWVhbmluZyBpdCBsaWtlbHkgZGVhbHMgd2l0aCBwcmUtaW5pdGlhbGl6ZWQgb3IgcHJlLXBvcHVsYXRlZCBtZW1vcnkgcmVnaW9ucyB3aXRoaW4gdGhlIGh1Z2V0bGJmcyBzcGFjZSwgcG90ZW50aWFsbHkgZm9yIHRoaW5ncyBsaWtlIGRldmljZSBtZW1vcnkgb3IgcHJlLWFsbG9jYXRlZCBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzLiBUaGUgJiMzNDtmcm96ZW4mIzM0OyBhc3BlY3QgaXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBJJiMzOTtkIGFudGljaXBhdGUgc2VlaW5nIG1lY2hhbmlzbXMgdG8gcHJldmVudCB0aGUgZm9saW8gZnJvbSBiZWluZyBpbmFkdmVydGVudGx5IGZyZWVkIG9yIG1vZGlmaWVkLCBhdCBsZWFzdCBmcm9tIHRoZSBzdGFuZGFyZCBwYWdlIGFsbG9jYXRpb24gcGF0aHMuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgbG9jayBhY3F1aXNpdGlvbiBhbmQgcmVsZWFzZSBvcmRlcmluZywgYXMgY29uY3VycmVudCBhY2Nlc3MgaW4gdGhpcyBlbnZpcm9ubWVudCBjYW4gYmUgbm90b3Jpb3VzbHkgdHJpY2t5LCBlc3BlY2lhbGx5IHdpdGggaHVnZXRsYmZzJiMzOTtzIGluaGVyZW50IGNvbXBsZXhpdHkuIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOiBXaGF0IGtpbmQgb2YgaW5pdGlhbCBzdGF0ZSBkb2VzIHRoaXMgYWxsb2NhdGlvbiBlbnN1cmU/IEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIENNQSBhbGxvY2F0b3ImIzM5O3Mgem9uZXMsIGVzcGVjaWFsbHkgdGhlIGNvbnNpZGVyYXRpb25zIGZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5PyBBbmQgaG93IGRvZXMgaXQgaGFuZGxlIHRoZSBjb21wbGV4aXRpZXMgb2YgaHVnZXRsYmZzIG1hcHBpbmdzIGFuZCBwZXJtaXNzaW9ucywgc3BlY2lmaWNhbGx5IHRoZSBwb3RlbnRpYWwgbmVlZCBmb3Igc2hhcmVkIG1hcHBpbmdzIG9yIHNwZWNpZmljIGFjY2VzcyBmbGFncz8gSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBzcGVjaWZpYyBjYWxscyB0byBgaHVnZXRsYl9jbWFfYWxsb2NfZm9saW9gIG9yIHJlbGF0ZWQgaW50ZXJuYWwgZnVuY3Rpb25zLCBsZXQmIzM5O3MgZ2V0IGludG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYl9jbWEuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMjc6XHRzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuICAyODpcdFx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbiAgMjk6XHR7XG4gIDMwOlx0XHRpbnQgbm9kZTtcbiAgMzE6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gIDMyOlx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XG4gIDMzOlx0XG4gIDM0Olx0XHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG4gIDM1Olx0XHRcdHJldHVybiBOVUxMO1xuICAzNjpcdFxuICAzNzpcdFx0aWYgKCFub2RlbWFzaylcbiAgMzg6XHRcdFx0bm9kZW1hc2sgPSBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XG4gIDM5Olx0XG4gIDQwOlx0XHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbiAgNDE6XHRcdFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xuICA0MjpcdFxuICA0MzpcdFx0aWYgKCFwYWdlIFx1MDAyNlx1MDAyNiAhKGdmcF9tYXNrIFx1MDAyNiBfX0dGUF9USElTTk9ERSkpIHtcbiAgNDQ6XHRcdFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpub2RlbWFzaykge1xuICA0NTpcdFx0XHRcdGlmIChub2RlID09IG5pZCB8fCAhaHVnZXRsYl9jbWFbbm9kZV0pXG4gIDQ2Olx0XHRcdFx0XHRjb250aW51ZTtcbiAgNDc6XHRcbiAgNDg6XHRcdFx0XHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtub2RlXSwgb3JkZXIpO1xuICA0OTpcdFx0XHRcdGlmIChwYWdlKVxuICA1MDpcdFx0XHRcdFx0YnJlYWs7XG4gIDUxOlx0XHRcdH1cbiAgNTI6XHRcdH1cbiAgNTM6XHRcbiAgNTQ6XHRcdGlmICghcGFnZSlcbiAgNTU6XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDU2Olx0XG4gIDU3Olx0XHRmb2xpbyA9IHBhZ2VfZm9saW8ocGFnZSk7XG4gIDU4Olx0XHRmb2xpb19zZXRfaHVnZXRsYl9jbWEoZm9saW8pO1xuICA1OTpcdFx0cmV0dXJuIGZvbGlvO1xuICA2MDpcdH1cbiAgNjE6XHRcbiAgNjI6XHRzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKiBfX2luaXRcbiAgNjM6XHRodWdldGxiX2NtYV9hbGxvY19ib290bWVtKHN0cnVjdCBoc3RhdGUgKmgsIGludCAqbmlkLCBib29sIG5vZGVfZXhhY3QpXG4gIDY0Olx0e1xuICA2NTpcdFx0c3RydWN0IGNtYSAqY21hO1xuICA2NjpcdFx0c3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptO1xuICA2NzpcdFx0aW50IG5vZGUgPSAqbmlkO1xuICA2ODpcdFxuICA2OTpcdFx0Y21hID0gaHVnZXRsYl9jbWFbKm5pZF07XG4gIDcwOlx0XHRtID0gY21hX3Jlc2VydmVfZWFybHkoY21hLCBodWdlX3BhZ2Vfc2l6ZShoKSk7XG4gIDcxOlx0XHRpZiAoIW0pIHtcbiAgNzI6XHRcdFx0aWYgKG5vZGVfZXhhY3QpXG4gIDczOlx0XHRcdFx0cmV0dXJuIE5VTEw7XG4gIDc0Olx0XG4gIDc1Olx0XHRcdGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBodWdldGxiX2Jvb3RtZW1fbm9kZXMpIHtcbiAgNzY6XHRcdFx0XHRjbWEgPSBodWdldGxiX2NtYVtub2RlXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc4MgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgTlVMTCBQb2ludGVyIERlcmVmZXJlbmNlIGluIEh1Z2VUTEIgQ01BIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwb3RlbnRpYWwgY3Jhc2guIEl0IGxvb2tzIGxpa2UgaWYgYG5vZGVtYXNrYCBpcyBOVUxMLCB3ZSYjMzk7cmUgZ29pbmcgdG8gaGl0IGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBmb3JfZWFjaF9ub2RlX21hc2sobm9kZSwgKm5vZGVtYXNrKWAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGVycm9yLCBhbmQgaXQgc2VlbXMgdG8gYmUgaGFwcGVuaW5nIHVuZGVyIHZlcnkgc3BlY2lmaWMgY29uZGl0aW9ucyByZWxhdGVkIHRvIEh1Z2VUTEIgQ01BIGFsbG9jYXRpb24uIE15IGh1bmNoIGlzIHRoYXQgdGhpcyBvcmlnaW5hdGVzIHdoZW4gYGh1Z2V0bGJfY21hW25pZF1gIGRvZXNuJiMzOTt0IGhhdmUgZW5vdWdoIGF2YWlsYWJsZSBtZW1vcnksIG9yIHdvcnNlLCBpcyBhY3R1YWxseSBOVUxMIGl0c2VsZiwgYW5kIHdlJiMzOTtyZSBub3QgdXNpbmcgYF9fR0ZQX1RISVNOT0RFYC4gVGhpcyBwYXRjaCBpcyB0YXJnZXRpbmcgcHJlY2lzZWx5IHRoYXQsIGFpbWluZyB0byBwcmV2ZW50IHRoZSBkZXJlZmVyZW5jZS4KCk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbnM/IEJhc2VkIG9uIHRoZSBjb2RlLCBpdCBzZWVtcyB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBlbmFibGVkLCBvYnZpb3VzbHkuIEJ1dCB0aGVyZSBtaWdodCBiZSBtb3JlIHRvIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBhbHNvIG1pZ2h0IG5lZWQgYENPTkZJR19DT05USUdfQUxMT0NgIGFuZCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGJlY2F1c2Ugb2YgaG93IGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIHdvcmtzLCBhbmQgaG93IGl0IGNhbGxzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBJdCYjMzk7cyBwcmV0dHkgbGlrZWx5IHdlJiMzOTtsbCBoYXZlIHRvIGRlbHZlIGludG8gYG1tL2h1Z2V0bGIuY2AgdG8gY29uZmlybSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB0aGUgb3ZlcmFsbCBjYWxsIHN0YWNrIHRvIGJlIHN1cmUuIFRpbWUgdG8gY2hlY2sgdGhvc2UgY29uZmlndXJhdGlvbnMgYW5kIHRoZSBjYWxsIGdyYXBoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzNTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM1OTpcdCNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09OVElHX0FMTE9DKVxuMTM2MDpcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuMTM2MTpcdFx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbjEzNjI6XHR7XG4xMzYzOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMTM2NDpcdFxuMTM2NTpcdFx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbjEzNjY6XHRcdGlmIChmb2xpbylcbjEzNjc6XHRcdFx0cmV0dXJuIGZvbGlvO1xuMTM2ODpcdFxuMTM2OTpcdFx0aWYgKGh1Z2V0bGJfY21hX2V4Y2x1c2l2ZV9hbGxvYygpKVxuMTM3MDpcdFx0XHRyZXR1cm4gTlVMTDtcbjEzNzE6XHRcbjEzNzI6XHRcdGZvbGlvID0gKHN0cnVjdCBmb2xpbyAqKWFsbG9jX2NvbnRpZ19mcm96ZW5fcGFnZXMoMSBcdTAwM2NcdTAwM2Mgb3JkZXIsIGdmcF9tYXNrLFxuMTM3MzpcdFx0XHRcdFx0XHRcdFx0ICBuaWQsIG5vZGVtYXNrKTtcbjEzNzQ6XHRcdHJldHVybiBmb2xpbztcbjEzNzU6XHR9XG4xMzc2Olx0I2Vsc2UgLyogIUNPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFIHx8ICFDT05GSUdfQ09OVElHX0FMTE9DICovXG4xMzc3Olx0c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsXG4xMzc4Olx0XHRcdFx0XHRcdCAgbm9kZW1hc2tfdCAqbm9kZW1hc2spXG4xMzc5Olx0e1xuMTM4MDpcdFx0cmV0dXJuIE5VTEw7XG4xMzgxOlx0fVxuMTM4MjpcdCNlbmRpZlxuMTM4MzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzIwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgbWVudGFsIHJ1bmRvd24gb24gdGhpcywgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOgoKKipBc3Nlc3NpbmcgR2lnYW50aWMgUGFnZXMgYW5kIENvbnRpZ3VvdXMgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBiYXNlZCBvbiB3aGF0IEkmIzM5O20gc2VlaW5nLCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGFuZCBgQ09ORklHX0NPTlRJR19BTExPQ2AgYXJlIGRlZmluaXRlbHkgY3J1Y2lhbCBoZXJlLiBJdCYjMzk7cyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBIbW0sIGJ1dCBob2xkIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBhYm91dCB0aGlzLiBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgLCB0aGF0JiMzOTtzIGdlbmVyYWxseSB0aWVkIHRvIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgaXNuJiMzOTt0IGl0PyBJIG5lZWQgdG8gYmUgc3VyZSBJJiMzOTttIG5vdCBvdmVybG9va2luZyBhbnkgYXJjaGl0ZWN0dXJhbCBkZXBlbmRlbmNpZXMuIE9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgdGhvdWdodCBpcywgbGV0JiMzOTtzIGFsc28gZmFjdG9yIGluIGBDT05GSUdfQ01BYCBhbmQgYENPTkZJR19IVUdFVExCRlNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZXkgYXJlIGFsc28gY29uc2lkZXJlZCB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSBwaWN0dXJlLiBBbmQsIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHNjYW4gZm9yIG90aGVyIGNhbGxlcnMgb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AuIE5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhhdCBhbGxvY2F0aW9uIHBhdGguIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhhdCB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBJIGhhdmVuJiMzOTt0IGFjY291bnRlZCBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMTM2NC1cbm1tL2h1Z2V0bGIuYzoxMzY1Olx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcbm1tL2h1Z2V0bGIuYy0xMzY2LVx0aWYgKGZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmM9MjE9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2h1Z2V0bGJfY21hLmMtMjYtXG5tbS9odWdldGxiX2NtYS5jOjI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG5tbS9odWdldGxiX2NtYS5jLTI4LVx0XHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcbi0tXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL2h1Z2V0bGJfY21hLmg6NzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxubW0vaHVnZXRsYl9jbWEuaC04LVx0XHRcdFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xuLS1cbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYl9jbWEuaC0xOS1cbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXG5tbS9odWdldGxiX2NtYS5oLTIxLVx0XHRnZnBfdCBnZnBfbWFzayxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEdpZ2FudGljIEZvbGlvIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYWxsb2NhdGlvbiBvZiB0aGVzZSBnaWdhbnRpYyBmb2xpb3MuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgY29yZSBmdW5jdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLiBBbmQgSSBzZWUgdGhhdCBpdCYjMzk7cyBjYWxsZWQgZXhjbHVzaXZlbHkgZnJvbSBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gVGhhdCBuYXJyb3dzIGRvd24gdGhlIHBvaW50IG9mIG9yaWdpbiBxdWl0ZSBzaWduaWZpY2FudGx5LgoKTm93LCBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBnZXRzIGNhbGxlZCBmcm9tIGEgZmV3IG90aGVyIGZ1bmN0aW9uczogYGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLCBgYWxsb2NfcG9vbF9odWdlX2ZvbGlvYCwgYW5kIGBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19vbmVub2RlYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19vbmVub2RlYC4gSXQgc2VlbXMgdG8gYmUgdGhlIG1vc3QgYWJzdHJhY3Qgb2YgdGhlIHRocmVlLiBJdCBpcyBsaWtlbHkgaXQgaXMgd2hlcmUgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBiZWdpbnMuIFRoaXMgbWlnaHQgYmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IHRoZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDA1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzM0MDU6XHRcdFx0XHRpZiAoIWFsbG9jX2Jvb3RtZW1faHVnZV9wYWdlKGgsIG5pZCkpXG4zNDA2Olx0XHRcdFx0XHRicmVhaztcbjM0MDc6XHRcdFx0fSBlbHNlIHtcbjM0MDg6XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMzQwOTpcdFx0XHRcdGdmcF90IGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpIHwgX19HRlBfVEhJU05PREU7XG4zNDEwOlx0XG4zNDExOlx0XHRcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcbjM0MTI6XHRcdFx0XHRcdFx0XHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcbjM0MTM6XHRcdFx0XHRpZiAoIWZvbGlvIFx1MDAyNlx1MDAyNiAhbGlzdF9lbXB0eShcdTAwMjZmb2xpb19saXN0KSBcdTAwMjZcdTAwMjZcbjM0MTQ6XHRcdFx0XHQgICAgaHVnZXRsYl92bWVtbWFwX29wdGltaXphYmxlX3NpemUoaCkpIHtcbjM0MTU6XHRcdFx0XHRcdHByZXBfYW5kX2FkZF9hbGxvY2F0ZWRfZm9saW9zKGgsIFx1MDAyNmZvbGlvX2xpc3QpO1xuMzQxNjpcdFx0XHRcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2Zm9saW9fbGlzdCk7XG4zNDE3Olx0XHRcdFx0XHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLFxuMzQxODpcdFx0XHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XG4zNDE5Olx0XHRcdFx0fVxuMzQyMDpcdFx0XHRcdGlmICghZm9saW8pXG4zNDIxOlx0XHRcdFx0XHRicmVhaztcbjM0MjI6XHRcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmZvbGlvX2xpc3QpO1xuMzQyMzpcdFx0XHR9XG4zNDI0Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mjg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIHdpdGggdGhlIGJvbGRlZCBoZWFkZXIgYXMgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZWAmIzM5O3MgTm9kZSBNYXNrKioKCkFscmlnaHQsIHNvIGBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19vbmVub2RlYCBpcyBwYXNzaW5nIGAmYW1wO25vZGVfc3RhdGVzW05fTUVNT1JZXWAgYXMgdGhlIGBub2RlbWFza2AgYXJndW1lbnQuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3Mgc29tZXRoaW5nIGluIG15IG1pbmQuIGAmYW1wO25vZGVfc3RhdGVzW05fTUVNT1JZXWAgZXNzZW50aWFsbHkgcmVwcmVzZW50cyAqYWxsKiBtZW1vcnkgbm9kZXMsIHJpZ2h0PyBUaGUgaW50ZW50aW9uIGhlcmUgaXMgbGlrZWx5IHRvIGFsbG9jYXRlIHRoZSBodWdlIHBhZ2VzIGZyb20gYW55IGF2YWlsYWJsZSBOVU1BIG5vZGUsIHRyZWF0aW5nIHRoZW0gYXMgaW50ZXJjaGFuZ2VhYmxlIGluIHRoaXMgY29udGV4dC4gQnV0IGl0JiMzOTtzIHdvcnRoIGRvdWJsZS1jaGVja2luZyBob3cgdGhpcyBgbm9kZW1hc2tgIGlzIGFjdHVhbGx5IHVzZWQgZG93bnN0cmVhbS4gTGV0IG1lIHNlZS4uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGhhcHBlbnMgdG8gdGhpcyBgbm9kZW1hc2tgLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgaXQgd2lsbCBsaWtlbHkgYmUgdXNlZCB0byByZXN0cmljdCBhbGxvY2F0aW9uIHRvIHRob3NlIG5vZGVzLgoKT2theSwgbGV0JiMzOTtzIGRpdmUgZGVlcGVyLiBXaGVyZSBkb2VzIHRoaXMgYG5vZGVtYXNrYCBnZXQgdXNlZD8gVGhlIG5leHQgbG9naWNhbCBwbGFjZSB0byBsb29rIGlzIGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB3aGVyZSB0aGUgYWxsb2NhdGlvbiBhY3R1YWxseSBoYXBwZW5zLCBzbyB0aGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBmb2N1cyBteSBhdHRlbnRpb24uIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGUgYG5vZGVtYXNrYCBpcyBwYXNzZWQgaW4gYXMgYSByZXN0cmljdGlvbiwgd2hpY2ggd2lsbCBlaXRoZXIgYmUgcGFzc2VkIG9uIGRvd24gdGhlIGFsbG9jYXRpb24gY2hhaW4gb3IgZGlyZWN0bHkgdXNlZC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hldGhlciB0aGUgYWxsLW5vZGVzIGBub2RlbWFza2AgYWZmZWN0cyB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneS4gVGhlIGRldGFpbHMgb2YgaG93IHRoaXMgaGFwcGVucyB3aWxsIGRldGVybWluZSB0aGUgZWZmZWN0aXZlIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGFuZCB3aGV0aGVyIGl0JiMzOTtzIHRoZSBtb3N0IGVmZmljaWVudCBmb3IgdGhlIHdvcmtsb2FkLiBMZXQmIzM5O3Mgc2VlIGhvdyBgYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AgaGFuZGxlcyB0aGlzIGBub2RlbWFza2AuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODYzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NjM6XHRzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4xODY0Olx0XHRcdGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBub2RlbWFza190ICpubWFzaylcbjE4NjU6XHR7XG4xODY2Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMTg2NzpcdFxuMTg2ODpcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2ssIE5VTEwpO1xuMTg2OTpcdFx0aWYgKGZvbGlvKVxuMTg3MDpcdFx0XHRodWdldGxiX3ZtZW1tYXBfb3B0aW1pemVfZm9saW8oaCwgZm9saW8pO1xuMTg3MTpcdFx0cmV0dXJuIGZvbGlvO1xuMTg3MjpcdH1cbjE4NzM6XHRcbjE4NzQ6XHR2b2lkIHByZXBfYW5kX2FkZF9hbGxvY2F0ZWRfZm9saW9zKHN0cnVjdCBoc3RhdGUgKmgsXG4xODc1Olx0XHRcdFx0XHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0KVxuMTg3NjpcdHtcbjE4Nzc6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4xODc4Olx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqdG1wX2Y7XG4xODc5Olx0XG4xODgwOlx0XHQvKiBTZW5kIGxpc3QgZm9yIGJ1bGsgdm1lbW1hcCBvcHRpbWl6YXRpb24gcHJvY2Vzc2luZyAqL1xuMTg4MTpcdFx0aHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvcyhoLCBmb2xpb19saXN0KTtcbjE4ODI6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gSHVnZVRMQiBGb2xpbyBBbGxvY2F0aW9uKioKCk9rYXksIHNvIGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBpcyB1c2luZyB0aGlzIGBubWFza2AgcGFyYW1ldGVyLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBMZXQmIzM5O3MgdHJhY2UgdGhpcyBjYWxsIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gc3RyYXRlZ3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgbm1hc2tgIHJlcHJlc2VudHMgaW4gdGhpcyBjb250ZXh0LiBJdCBzZWVtcyBsaWtlIGl0IG11c3QgaW5mbHVlbmNlIHRoZSBzZWxlY3Rpb24gb2YgdGhlIGJhY2tpbmcgcG9vbCwgb3IgcG90ZW50aWFsbHkgdGhlIHNwZWNpZmljIHBhZ2VzIHdpdGhpbiBhIHBvb2wgdGhhdCBhcmUgY29uc2lkZXJlZC4gTm93LCBsZXQmIzM5O3Mgc3RlcCBvdmVyIHRvIGBhbGxvY19wb29sX2h1Z2VfZm9saW9gLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyBgbm1hc2tgIHRoZXJlOyBJIGV4cGVjdCB0aGF0IGl0IHdpbGwgaGF2ZSBzb21lIGltcGFjdCBvbiB0aGUgZmluYWwgZm9saW8gYWxsb2NhdGlvbiwgYnV0IEkgbmVlZCB0byBhc2NlcnRhaW4gdGhlIHNwZWNpZmljcy4gSSBhbSB2ZXJ5IGludGVyZXN0ZWQgdG8gc2VlIGhvdyB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcG9vbCBpbXBhY3RzIGFsbG9jYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTg5NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODk2Olx0c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfcG9vbF9odWdlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4xODk3Olx0XHRcdFx0XHRcdG5vZGVtYXNrX3QgKm5vZGVzX2FsbG93ZWQsXG4xODk4Olx0XHRcdFx0XHRcdG5vZGVtYXNrX3QgKm5vZGVfYWxsb2Nfbm9yZXRyeSxcbjE4OTk6XHRcdFx0XHRcdFx0aW50ICpuZXh0X25vZGUpXG4xOTAwOlx0e1xuMTkwMTpcdFx0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCkgfCBfX0dGUF9USElTTk9ERTtcbjE5MDI6XHRcdGludCBucl9ub2Rlcywgbm9kZTtcbjE5MDM6XHRcbjE5MDQ6XHRcdGZvcl9lYWNoX25vZGVfbWFza190b19hbGxvYyhuZXh0X25vZGUsIG5yX25vZGVzLCBub2RlLCBub2Rlc19hbGxvd2VkKSB7XG4xOTA1Olx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4xOTA2Olx0XG4xOTA3Olx0XHRcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBub2RlLFxuMTkwODpcdFx0XHRcdFx0XHRub2Rlc19hbGxvd2VkLCBub2RlX2FsbG9jX25vcmV0cnkpO1xuMTkwOTpcdFx0XHRpZiAoZm9saW8pXG4xOTEwOlx0XHRcdFx0cmV0dXJuIGZvbGlvO1xuMTkxMTpcdFx0fVxuMTkxMjpcdFxuMTkxMzpcdFx0cmV0dXJuIE5VTEw7XG4xOTE0Olx0fVxuMTkxNTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYxNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIEh1Z2VUTEIgRm9saW8gQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBgYWxsb2NfcG9vbF9odWdlX2ZvbGlvYCBnb3QgY2FsbGVkLCBhbmQgaXQgcGFzc2VkIGFsb25nIGBub2Rlc19hbGxvd2VkYC4gTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoYXQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBgYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AsIGlzIGJlaW5nIGludm9rZWQuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZXNlIGh1Z2UgcGFnZSBmb2xpb3MgYXJlIGFjdHVhbGx5IGFsbG9jYXRlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBpbiB0aGlzIGFyZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTE3OTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTE4MzUtXG5tbS9odWdldGxiLmM6MTgzNjpzdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbm1tL2h1Z2V0bGIuYy0xODM3LVx0XHRnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm1hc2ssXG4tLVxubW0vaHVnZXRsYi5jLTE4NjItICovXG5tbS9odWdldGxiLmM6MTg2MzpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtMTg2NC1cdFx0Z2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsIG5vZGVtYXNrX3QgKm5tYXNrKVxuLS1cbm1tL2h1Z2V0bGIuYy0xODY3LVxubW0vaHVnZXRsYi5jOjE4Njg6XHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBubWFzaywgTlVMTCk7XG5tbS9odWdldGxiLmMtMTg2OS1cdGlmIChmb2xpbylcbi0tXG5tbS9odWdldGxiLmM9MTg5Nj1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19wb29sX2h1Z2VfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMTkwNi1cbm1tL2h1Z2V0bGIuYzoxOTA3Olx0XHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbm9kZSxcbm1tL2h1Z2V0bGIuYy0xOTA4LVx0XHRcdFx0XHRub2Rlc19hbGxvd2VkLCBub2RlX2FsbG9jX25vcmV0cnkpO1xuLS1cbm1tL2h1Z2V0bGIuYz0yMDc2PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX3N1cnBsdXNfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yMDg4LVxubW0vaHVnZXRsYi5jOjIwODk6XHRmb2xpbyA9IGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2spO1xubW0vaHVnZXRsYi5jLTIwOTAtXHRpZiAoIWZvbGlvKVxuLS1cbm1tL2h1Z2V0bGIuYz0yMTI0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLCBnZnBfdCBnZnBfbWFzayxcbi0tXG5tbS9odWdldGxiLmMtMjEzMS1cbm1tL2h1Z2V0bGIuYzoyMTMyOlx0Zm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrKTtcbm1tL2h1Z2V0bGIuYy0yMTMzLVx0aWYgKCFmb2xpbylcbi0tXG5tbS9odWdldGxiLmM9MjY0MT1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNjg2LVx0XHRcdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpIHwgX19HRlBfVEhJU05PREU7XG5tbS9odWdldGxiLmM6MjY4NzpcdFx0XHRuZXdfZm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLFxubW0vaHVnZXRsYi5jLTI2ODgtXHRcdFx0XHRcdFx0XHQgICAgICBuaWQsIE5VTEwpO1xuLS1cbm1tL2h1Z2V0bGIuYz0zMzk3PXN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19vbmVub2RlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQpXG4tLVxubW0vaHVnZXRsYi5jLTM0MTAtXG5tbS9odWdldGxiLmM6MzQxMTpcdFx0XHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLFxubW0vaHVnZXRsYi5jLTM0MTItXHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XG4tLVxubW0vaHVnZXRsYi5jLTM0MTYtXHRcdFx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZmb2xpb19saXN0KTtcbm1tL2h1Z2V0bGIuYzozNDE3Olx0XHRcdFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcbm1tL2h1Z2V0bGIuYy0zNDE4LVx0XHRcdFx0XHRcdFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzk4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AgYW5kIEkgc2VlIHNvbWV0aGluZyB0aGF0JiMzOTtzIGltbWVkaWF0ZWx5IHBpcXVlZCBteSBpbnRlcmVzdC4gU3BlY2lmaWNhbGx5LCB0aGUgZnVuY3Rpb24gcGFzc2VzIGBOVUxMYCBhcyB0aGUgYG5tYXNrYCBhcmd1bWVudCB0byBgYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AuIExldCYjMzk7cyB0YWtlIGEgbG9vay4gCgpgYGBjCgkJCW5ld19mb2xpbyA9IGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssCgkJCQkJCQkgICAgICBuaWQsIE5VTEwpOwpgYGAKCkFoLCByaWdodCB0aGVyZSEgSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGlzIGlzIHRoZSBzb3VyY2Ugb2YgdGhlIGBOVUxMYCBub2RlbWFzay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgaXMgYmVpbmcgZG9uZSwgd2hhdCBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgbWFkZSBoZXJlLCBhbmQgaWYgaXQmIzM5O3MgY29ycmVjdC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IG9mIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AgdG8gc2VlIHdoYXQmIzM5O3MgZHJpdmluZyB0aGlzIGRlY2lzaW9uIGFuZCBkZXRlcm1pbmUgdGhlIGltcGxpY2F0aW9ucy4gSSYjMzk7bGwgc3RhcnQgYnkgZXhhbWluaW5nIHRoYXQgZnVuY3Rpb24gbW9yZSBjbG9zZWx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjY4MDpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjI2ODE6XHRcdFx0Z290byByZXRyeTtcbjI2ODI6XHRcdH0gZWxzZSB7XG4yNjgzOlx0XHRcdGggPSBmb2xpb19oc3RhdGUob2xkX2ZvbGlvKTtcbjI2ODQ6XHRcdFx0aWYgKCFuZXdfZm9saW8pIHtcbjI2ODU6XHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aHVnZXRsYl9sb2NrKTtcbjI2ODY6XHRcdFx0XHRnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1RISVNOT0RFO1xuMjY4NzpcdFx0XHRcdG5ld19mb2xpbyA9IGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssXG4yNjg4Olx0XHRcdFx0XHRcdFx0XHQgICAgICBuaWQsIE5VTEwpO1xuMjY4OTpcdFx0XHRcdGlmICghbmV3X2ZvbGlvKVxuMjY5MDpcdFx0XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yNjkxOlx0XHRcdFx0Z290byByZXRyeTtcbjI2OTI6XHRcdFx0fVxuMjY5MzpcdFxuMjY5NDpcdFx0XHQvKlxuMjY5NTpcdFx0XHQgKiBPaywgb2xkX2ZvbGlvIGlzIHN0aWxsIGEgZ2VudWluZSBmcmVlIGh1Z2VwYWdlLiBSZW1vdmUgaXQgZnJvbVxuMjY5NjpcdFx0XHQgKiB0aGUgZnJlZWxpc3QgYW5kIGRlY3JlYXNlIHRoZSBjb3VudGVycy4gVGhlc2Ugd2lsbCBiZVxuMjY5NzpcdFx0XHQgKiBpbmNyZW1lbnRlZCBhZ2FpbiB3aGVuIGNhbGxpbmcgYWNjb3VudF9uZXdfaHVnZXRsYl9mb2xpbygpXG4yNjk4Olx0XHRcdCAqIGFuZCBlbnF1ZXVlX2h1Z2V0bGJfZm9saW8oKSBmb3IgbmV3X2ZvbGlvLiBUaGUgY291bnRlcnMgd2lsbFxuMjY5OTpcdFx0XHQgKiByZW1haW4gc3RhYmxlIHNpbmNlIHRoaXMgaGFwcGVucyB1bmRlciB0aGUgbG9jay5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0OTIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKk15IFBlcnNwZWN0aXZlIG9uIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AqKgoKUmlnaHQsIHNvIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AuLi4gdGhhdCBmdW5jdGlvbiYjMzk7cyBzaWduYXR1cmUgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIGltcG9ydGFudCBpbiBodWdlIHBhZ2UgbWFuYWdlbWVudC4gVGhlIG5hbWUgaXRzZWxmIGlzIGZhaXJseSBkZXNjcmlwdGl2ZSwgaW5kaWNhdGluZyBhIHR3by1wYXJ0IG9wZXJhdGlvbi4gJiMzNDtBbGxvYyYjMzQ7IHN1Z2dlc3RzIGFsbG9jYXRpbmcgYSBodWdldGxiIGZvbGlvIChhIGNvbnRpZ3VvdXMgcmVnaW9uIG9mIG1lbW9yeSBzdWl0YWJsZSBmb3IgYSBsYXJnZSBwYWdlKSwgYW5kICYjMzQ7ZGlzc29sdmUmIzM0OyBpbXBsaWVzIHRlYXJpbmcgaXQgZG93biwgd2hpY2ggbXVzdCBtZWFuIHdlIGFyZSBsb29raW5nIGF0IGlzb2xhdGluZyBhIHNpbmdsZSBwYWdlIGluIHRoZSBmb2xpbyBvciBtb3ZpbmcgaXQgZWxzZXdoZXJlLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfcGFnZWAgaXMgdGhlIGtleS4gVGhhdCBmdW5jdGlvbiBjbGVhcmx5IG9yY2hlc3RyYXRlcyB0aGUgaXNvbGF0aW9uIG9yLCBwb3RlbnRpYWxseSwgdGhlIHRvdGFsIGRlY29uc3RydWN0aW9uIG9mIGEgaHVnZSBwYWdlLiBTbywgYGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvYCBpcyBsaWtlbHkgKnRoZSogd29ya2hvcnNlIOKAkyB0aGUgY29yZSBtZWNoYW5pc20gdGhhdCBlaXRoZXIgY2FydmVzIG91dCBhIHNpbmdsZSBwYWdlIGZyb20gYSBsYXJnZXIgYWxsb2NhdGlvbiwgcHJvYmFibHkgc28gdGhhdCBhIHN1YnNlcXVlbnQgYWxsb2NhdGlvbiBjYW4gYmUgbWFkZSwgcGVyaGFwcyB0byBwcmV2ZW50IGZyYWdtZW50YXRpb24gb3IgdG8gZmFjaWxpdGF0ZSBhIG1pZ3JhdGlvbi4gVGhlIGNvbnRleHQgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBodWdlIHBhZ2UgaW5mcmFzdHJ1Y3R1cmUuIEFueSBlcnJvciBwYXRocyBhcmUgb2J2aW91c2x5IGdvaW5nIHRvIGJlIGltcG9ydGFudCB0byBzY3J1dGluaXplLCBiZWNhdXNlIG1lc3NpbmcgdXAgaHVnZSBwYWdlIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uIHdvdWxkIGJlIGEgcGVyZm9ybWFuY2Uga2lsbGVyLCBubyBkb3VidC4gVW5kZXJzdGFuZGluZyB0aGUgbG9ja2luZyBpbnZvbHZlZCBpbiBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX3BhZ2VgIGlzIGFsc28gY3JpdGljYWwsIHNpbmNlIGl0IHNob3VsZCBwcm92aWRlIHRoZSBwcm90ZWN0aW9uIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIGZvbGlvIHN0cnVjdHVyZS4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGFyZWEgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXMgYWNjZXNzaW5nIHRoZSBzYW1lIGh1Z2V0bGIgcmVnaW9uLCBvciBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGR5bmFtaWMgY29uZmlndXJhdGlvbiBvZiBodWdlIHBhZ2VzLiBPdmVyYWxsLCB0aGUgcmVsYXRpb25zaGlwIGlzIHZlcnkgY2xlYXIgYW5kIHRoZSBpbnRlbnQgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIGlzIHByb2JhYmx5IGEgY2VudHJhbCBjb21wb25lbnQgZm9yIG1hbmFnaW5nIGxhcmdlIG1lbW9yeSByZWdpb25zIGFuZCBlbnN1cmluZyBlZmZpY2llbnQgcGFnZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYz0yNTYwPXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNjM0LS8qXG5tbS9odWdldGxiLmM6MjYzNTogKiBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyAtIEFsbG9jYXRlIGEgbmV3IGZvbGlvIGFuZCBkaXNzb2x2ZVxubW0vaHVnZXRsYi5jLTI2MzYtICogdGhlIG9sZCBvbmVcbi0tXG5tbS9odWdldGxiLmMtMjY0MC0gKi9cbm1tL2h1Z2V0bGIuYzoyNjQxOnN0YXRpYyBpbnQgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGZvbGlvICpvbGRfZm9saW8sXG5tbS9odWdldGxiLmMtMjY0Mi1cdFx0XHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxuLS1cbm1tL2h1Z2V0bGIuYz0yNzI3PWludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiLmMtMjc0NS1cdGVsc2UgaWYgKCFmb2xpb19yZWZfY291bnQoZm9saW8pKVxubW0vaHVnZXRsYi5jOjI3NDY6XHRcdHJldCA9IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKGZvbGlvLCBsaXN0KTtcbm1tL2h1Z2V0bGIuYy0yNzQ3LVxuLS1cbm1tL2h1Z2V0bGIuYz0yNzU4PWludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pXG4tLVxubW0vaHVnZXRsYi5jLTI3OTctXG5tbS9odWdldGxiLmM6Mjc5ODpcdFx0XHRcdHJldCA9IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKGZvbGlvLCBcdTAwMjZsaXN0KTtcbm1tL2h1Z2V0bGIuYy0yNzk5LVx0XHRcdFx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzOTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBBbGxvY2F0aW9uIGFuZCBEaXNzb2x1dGlvbiBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGh1Z2UgcGFnZSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGFyb3VuZCBmb2xpbyBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoZSBrZXJuZWwuIEl0IHNlZW1zIGxpa2UgYGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpb2AgZ2V0cyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMsIGluY2x1ZGluZyBtZW1vcnkgaG90cGx1ZywgQ01BLCBhbmQgbWVtb3J5IGZhaWx1cmUgc2NlbmFyaW9zLiAgYHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NgIGlzIG1vcmUgbmFycm93bHkgdGllZCB0byBtZW1vcnkgaG90cGx1Zy4gVGhpcyBoYXMgYFdvcnRoRnV6emluZzogdHJ1ZWAsIHdoaWNoIGlzIGludGVyZXN0aW5nIOKAkyBpbmRpY2F0aW5nIHRoaXMgaXMgYW4gYXJlYSB3aGVyZSBmdXp6aW5nIGNvdWxkIHBvdGVudGlhbGx5IHVuY292ZXIgc29tZSBzdWJ0bGUgaXNzdWVzLgoKVGhlIGNvcmUgZnVuY3Rpb25zIG9mIGludGVyZXN0IGhlcmUsIHdoaWNoIHNob3VsZCBiZSB0aGUgZm9jdXMgb2Ygc29tZSB0YXJnZXRlZCBmdXp6aW5nLCBhcmU6IGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLCBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgYGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvYCwgYGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpb2AsIGFuZCBgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvc2AuIEkgd2lsbCBtYWtlIGEgbm90ZSB0byBwcmlvcml0aXNlIHRoZXNlIGZvciBmdXp6aW5nLgoKTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGlmIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIHN0YXRpYyBvciBub3QuLi4gb2theSwgaXQmIzM5O3Mgbm90IHN0YXRpYyBhbmQgaXQmIzM5O3MgZGVmaW5lZCBpbiBgbW0vaHVnZXRsYl9jbWEuY2AuIFRoaXMgdGVsbHMgbWUgaXQgaXMgY2FsbGFibGUgZnJvbSBvdXRzaWRlIHRoYXQgZmlsZS4KCk5vdywgbGV0JiMzOTtzIHJldmlldyB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBJIHNlZSBgSFVHRVRMQkZTYCwgYENNQWAsIGBDT05USUdfQUxMT0NgLCBhbmQgdGhlbiBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAuIFRoZSBpbmNsdXNpb24gb2YgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGlzIGEgYml0IHVudXN1YWwuIFRoaXMgaXMgdHlwaWNhbGx5IGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmZWF0dXJlLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhIHVzZXItc2VsZWN0YWJsZSBjb25maWcgb3Igc29tZXRoaW5nIGltcGxpY2l0bHkgZW5hYmxlZCBiYXNlZCBvbiB0aGUgYXJjaGl0ZWN0dXJlLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb25maWd1cmF0aW9uIHNwYWNlIHdoZW4gY3JhZnRpbmcgZWZmZWN0aXZlIGZ1enppbmcgc3RyYXRlZ2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMDE6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEFSQ0hfSEFTX0dJR0FOVElDX1BBR0UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yODM9Y29uZmlnIEhVR0VUTEJfUE1EX1BBR0VfVEFCTEVfU0hBUklOR1xuLS1cbmZzL0tjb25maWctMjg2LVxuZnMvS2NvbmZpZzoyODc6Y29uZmlnIEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VcbmZzL0tjb25maWctMjg4LVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDEzOQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAuIEl0JiMzOTtzIGEgYm9vbGVhbiBvcHRpb24sIGJ1dCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IGl0JiMzOTtzICphcmNoLXNlbGVjdGVkKiBhbmQgZG9lc24mIzM5O3QgaGF2ZSBhIGRpcmVjdCBwcm9tcHQuIFRoYXQgbWVhbnMgdGhlIGFyY2hpdGVjdHVyZSBpdHNlbGYgZGVjaWRlcyB3aGV0aGVyIGl0JiMzOTtzIGVuYWJsZWQgb3Igbm90LiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB3ZSBzaG91bGRuJiMzOTt0IHJlYWxseSBib3RoZXIgaW5jbHVkaW5nIGl0IGluIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCwgc2luY2UgaXQmIzM5O3MgdWx0aW1hdGVseSB1cCB0byB0aGUgYXJjaGl0ZWN0dXJlLiBPciwgd2UgKmNvdWxkKiBpbmNsdWRlIGl0LCBidXQgaXQgd291bGQgZWZmZWN0aXZlbHkgZG8gbm90aGluZyBpZiB0aGUgYXJjaGl0ZWN0dXJlIGRvZXNuJiMzOTt0IGhhdmUgaXQgZW5hYmxlZCBpbnRyaW5zaWNhbGx5LiBJdCB3b3VsZCBqdXN0IGJlIG5vaXNlLgoKTm93LCBsZXQmIzM5O3Mgc3dpdGNoIGdlYXJzIGEgYml0LiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYENPTlRJR19BTExPQ2AuIEkgd29uZGVyIGhvdyB0aGF0JiMzOTtzIHJlbGF0ZWQgdG8gYWxsIG9mIHRoaXMuIEkgYmV0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgcGh5c2ljYWwgbWVtb3J5IGFsbG9jYXRpb24uIExldCYjMzk7cyBzZWUgaG93IGl0IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQ09OVElHX0FMTE9DJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxuLS1cbm1tL0tjb25maWctNzE4LVxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xubW0vS2NvbmZpZy03MjAtXHRkZWZfYm9vbCAoTUVNT1JZX0lTT0xBVElPTiBcdTAwMjZcdTAwMjYgQ09NUEFDVElPTikgfHwgQ01BXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTE3CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTAyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gTG9naWMqKgoKT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBgQ09OVElHX0FMTE9DYCBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGRlZmluZWQgYnkgZWl0aGVyIHRoZSBjb21iaW5hdGlvbiBvZiBgTUVNT1JZX0lTT0xBVElPTmAgYW5kIGBDT01QQUNUSU9OYCwgb3IgaXQmIzM5O3MgZGlyZWN0bHkgdGllZCB0byBgQ01BYC4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQ6IGlmIGBDTUFgIGlzIGVuYWJsZWQsIGBDT05USUdfQUxMT0NgIGlzIGVuYWJsZWQuIEEgY2xlYXIgZGVwZW5kZW5jeS4KClRoZXJlZm9yZSwgbG9va2luZyBhdCB3aGF0JiMzOTtzIHNldCB0byAmIzM0O3llcyYjMzQ7IEkgc2VlIGBIVUdFVExCRlNgIGFuZCBgQ01BYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgY29udHJpYnV0aW5nIGZhY3RvcnMuCgpCdXQgSSYjMzk7bSBub3Qgc3RvcHBpbmcgdGhlcmUuIEkgbmVlZCB0byB0aGluayBiaWdnZXIuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBvdGhlciBjb25maWd1cmF0aW9ucy4gUGFydGljdWxhcmx5LCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgTUVNT1JZX0hPVFBMVUdgIG9yIGBNRU1PUllfRkFJTFVSRWAgYXJlIHNldCB0byB0cmlnZ2VyIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gLiBJdCBjb3VsZCBiZSB1c2VmdWwgZm9yIGZ1cnRoZXIgb3B0aW1pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkxPWJvb2wgaHVnZXRsYl9ib290bWVtX3BhZ2Vfem9uZXNfdmFsaWQoaW50IG5pZCwgc3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptKTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY5Mi1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjY5MzppbnQgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjk0LWludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTEwOTg9c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmZpbGVtYXBfbG9ja19odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEwMy1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjExMDQ6c3RhdGljIGlubGluZSBpbnQgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTA1LVx0XHRcdFx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubW0vY29tcGFjdGlvbi5jPTg1NT1pc29sYXRlX21pZ3JhdGVwYWdlc19ibG9jayhzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgdW5zaWduZWQgbG9uZyBsb3dfcGZuLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy05ODktXHRcdFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xubW0vY29tcGFjdGlvbi5jOjk5MDpcdFx0XHRyZXQgPSBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oZm9saW8sIFx1MDAyNmNjLVx1MDAzZW1pZ3JhdGVwYWdlcyk7XG5tbS9jb21wYWN0aW9uLmMtOTkxLVxubW0vY29tcGFjdGlvbi5jLTk5Mi1cdFx0XHQvKlxubW0vY29tcGFjdGlvbi5jOjk5MzpcdFx0XHQgKiBGYWlsIGlzb2xhdGlvbiBpbiBjYXNlIGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbygpXG5tbS9jb21wYWN0aW9uLmMtOTk0LVx0XHRcdCAqIHJlcG9ydHMgYW4gZXJyb3IuIEluIGNhc2Ugb2YgLUVOT01FTSwgYWJvcnQgcmlnaHQgYXdheS5cbi0tXG5tbS9odWdldGxiLmM9MjY0MT1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNzI2LVxubW0vaHVnZXRsYi5jOjI3Mjc6aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxubW0vaHVnZXRsYi5jLTI3Mjgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM5MwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipUcmFjaW5nIHRoZSBIdWdlIFBhZ2UgUGF0aCoqCgpSaWdodCwgc28gYGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpb2Ag4oCTIHRoYXQmIzM5O3MgdGhlIGtleSBmdW5jdGlvbiB3ZSYjMzk7cmUgY29uY2VybmVkIHdpdGguIEFuZCB0aGUgY2x1ZSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYG1tL2NvbXBhY3Rpb24uY2AuIEltbWVkaWF0ZWx5LCB0aGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBjb21wYWN0aW9uLCB3aGljaCBtZWFucyAqKkNPTVBBQ1RJT04qKiBpcyBkZWZpbml0ZWx5IGEgcmVsZXZhbnQgZmFjdG9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCBgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvc2AuIFRoaXMgc291bmRzIGxpa2UgYSBwcmltZSBwbGFjZSB0byBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGhvdyB0aGUgdHdvIHJlbGF0ZSBhbmQgaG93IGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gIHBsYXlzIGEgcGFydCBpbiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSByZWxhdGVkIHRvIGh1Z2UgcGFnZXMgYW5kIGNvbXBhY3Rpb24uIEkgbmVlZCB0byBmb2xsb3cgdGhlIHRocmVhZC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvaHVnZXRsYi5oPTY5Mz1pbnQgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Njk0OmludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNjk1LXZvaWQgd2FpdF9mb3JfZnJlZWRfaHVnZXRsYl9mb2xpb3Modm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEwND1zdGF0aWMgaW5saW5lIGludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC0xMTA5LVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTExMDpzdGF0aWMgaW5saW5lIGludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTExMS1cdFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuKVxuLS1cbm1tL2h1Z2V0bGIuYz0yNzI3PWludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcbi0tXG5tbS9odWdldGxiLmMtMjc1MS0vKlxubW0vaHVnZXRsYi5jOjI3NTI6ICogIHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3MgLSBSZXBsYWNlIGZyZWUgaHVnZXBhZ2UgZm9saW9zIGluIGEgZ2l2ZW4gcGZuXG5tbS9odWdldGxiLmMtMjc1My0gKiAgcmFuZ2Ugd2l0aCBuZXcgZm9saW9zLlxuLS1cbm1tL2h1Z2V0bGIuYy0yNzU3LSAqL1xubW0vaHVnZXRsYi5jOjI3NTg6aW50IHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbilcbm1tL2h1Z2V0bGIuYy0yNzU5LXtcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzEwMT1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTcxNzgtXHQgKiBidWRkeSBzeXN0ZW0uICBBZnRlciB0aGUgbWlncmF0aW9uIG9mIGluLXVzZSBodWdlIHBhZ2VzIGlzIGNvbXBsZXRlZCxcbm1tL3BhZ2VfYWxsb2MuYzo3MTc5Olx0ICogd2Ugd2lsbCBpbnZva2UgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvcygpIHRvIGVuc3VyZSB0aGF0IHRoZXNlXG5tbS9wYWdlX2FsbG9jLmMtNzE4MC1cdCAqIGh1Z2VwYWdlcyBhcmUgcHJvcGVybHkgcmVsZWFzZWQgdG8gdGhlIGJ1ZGR5IHN5c3RlbS5cbm1tL3BhZ2VfYWxsb2MuYy03MTgxLVx0ICovXG5tbS9wYWdlX2FsbG9jLmM6NzE4MjpcdHJldCA9IHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3Moc3RhcnQsIGVuZCk7XG5tbS9wYWdlX2FsbG9jLmMtNzE4My1cdGlmIChyZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDAxOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MjcxCgkJCQkJCQlvdXRwdXQ6IDIwNQoJCQkJCQkJdGhvdWdodHM6IDMyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgVnVsbmVyYWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NgIGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igd2hhdCBzZWVtcyBsaWtlIGFuIGludGVyZXN0aW5nIGNvZGUgcGF0aC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHdoaWNoIGlzIGEga2V5IGFyZWEgZm9yIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24uIFRoaXMsIGluIHR1cm4sIGlzIHBhcnQgb2YgYGFsbG9jX2NvbnRpZ19yYW5nZWAsIGEgZnVuY3Rpb24gZnVuZGFtZW50YWwgdG8gYm90aCBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgYW5kIG1lbW9yeSBob3RwbHVnZ2luZy4gVGhhdCBnaXZlcyB1cyBhIHByZXR0eSBnb29kIHNlbnNlIG9mIHRoZSBjb250ZXh0LgoKR2l2ZW4gdGhhdCBjb250ZXh0LCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZyBvcHRpb25zIHdvdWxkIGxvZ2ljYWxseSBiZSBgSFVHRVRMQkZTYCwgYENNQWAsIGBDT01QQUNUSU9OYCwgYE1FTU9SWV9IT1RQTFVHYCwgYW5kIGBNRU1PUllfRkFJTFVSRWAuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIHByZXJlcXVpc2l0ZSBmZWF0dXJlcyBmb3IgdGhlIGNvZGUgaW4gcXVlc3Rpb24gdG8gYmUgYWN0aXZlLgoKTm93LCBsZXQmIzM5O3MgcmVmaW5lIHRoZSBzcGVjaWZpYyBzeW1ib2xzIHRvIGZvY3VzIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgZnVuY3Rpb25zIGludm9sdmVkIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdC4gSSYjMzk7bGwgcHV0IGEgcGluIG9uIHRoZSBmb2xsb3dpbmc6IGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLCBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgYGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvYCwgYGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpb2AsIGFuZCBgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvc2Agd2hpY2ggc2VlbSBjbG9zZWx5IHJlbGF0ZWQgdG8gdGhlIGNvcmUgbG9naWMuCgpUaGUgY29yZSBvZiB0aGUgaXNzdWUgYXBwZWFycyB0byBiZSBhIHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2l0aGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGUgdnVsbmVyYWJpbGl0eSB0cmlnZ2VycyB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBpbnZvbHZlZCBpbiBnaWdhbnRpYyBodWdlcGFnZSBhbGxvY2F0aW9uLCBzcGVjaWZpY2FsbHkgZHVyaW5nIHRoZSBwcm9jZXNzIG9mIGRpc3NvbHZpbmcgYW5kIHJlcGxhY2luZyBmcmVlIGh1Z2VwYWdlcy4gSXQgc2VlbXMgbGlrZWx5IHRoZSB0cmlnZ2VyIGlzIHdoZW4gY29tcGFjdGlvbiBpcyBydW5uaW5nLCBDTUEgaXMgYWxsb2NhdGluZywgb3IgbWVtb3J5IGhvdHBsdWcgaXMgb3BlcmF0aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZGVlcCB3aXRoaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuCgpDcnVjaWFsbHksIGNhbiB0aGlzIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2U/IENNQSBhbGxvY2F0aW9ucyBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlLCBlaXRoZXIgZGlyZWN0bHkgdGhyb3VnaCBodWdlcGFnZSBhbGxvY2F0aW9ucywgb3IgaW5kaXJlY3RseSB0aHJvdWdoIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBob3RwbHVnIG9yIGNvbXBhY3Rpb24sIHdoaWNoIHVzZXJzcGFjZSBjYW4gaW5pdGlhdGUuIFRoZXJlZm9yZSwgKnllcyosIHRoaXMgcGF0aCBpcyBpbmRlZWQgcmVhY2hhYmxlLCBhbmQgdGhhdCBzaWduaWZpY2FudGx5IGluY3JlYXNlcyB0aGUgcG90ZW50aWFsIHJpc2suIEdpdmVuIHRoaXMgaXMgYSByZWFjaGFibGUsIGZ1bmN0aW9uYWwgY2hhbmdlLCBmdXp6aW5nIHdvdWxkIGJlIGFuIGFwcHJvcHJpYXRlIG5leHQgc3RlcCBpbiB0aGUgdGVzdGluZyBtZXRob2RvbG9neS4KCkkmIzM5O2xsIHByb2NlZWQgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gZm9ybWFsaXplIHRoZXNlIGZpbmRpbmdzIGFuZCBkb2N1bWVudCB0aGUgcmVsZXZhbnQgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAwMToxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O0NNQSYjMzQ7LAogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O01FTU9SWV9IT1RQTFVHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvJiMzNDssCiAgICAmIzM0O2FsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyYjMzQ7LAogICAgJiMzNDthbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICAgJiMzNDtpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8mIzM0OywKICAgICYjMzQ7cmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGdpZ2FudGljIGh1Z2VwYWdlIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGRpc3NvbHZpbmcgYW5kIHJlcGxhY2luZyBmcmVlIGh1Z2VwYWdlcyAoZS5nLiwgZHVyaW5nIGNvbXBhY3Rpb24sIENNQSBhbGxvY2F0aW9uLCBvciBtZW1vcnkgaG90cGx1ZykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7Q01BJiMzNDssCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7TUVNT1JZX0hPVFBMVUcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8mIzM0OywKICAgICYjMzQ7YWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvJiMzNDssCiAgICAmIzM0O2FsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2lzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtyZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgZ2lnYW50aWMgaHVnZXBhZ2UgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZGlzc29sdmluZyBhbmQgcmVwbGFjaW5nIGZyZWUgaHVnZXBhZ2VzIChlLmcuLCBkdXJpbmcgY29tcGFjdGlvbiwgQ01BIGFsbG9jYXRpb24sIG9yIG1lbW9yeSBob3RwbHVnKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxMjo0My4xMjA4MDU2MTJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA3NzE3NDQ1MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCIsXG4gICAgXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIixcbiAgICBcImFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9cIixcbiAgICBcInJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGdpZ2FudGljIGh1Z2VwYWdlIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGRpc3NvbHZpbmcgYW5kIHJlcGxhY2luZyBmcmVlIGh1Z2VwYWdlcyAoZS5nLiwgZHVyaW5nIGNvbXBhY3Rpb24sIENNQSBhbGxvY2F0aW9uLCBvciBtZW1vcnkgaG90cGx1ZykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxMjo0My4xMjA4MTE5NjJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MTc3MjYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBjZjllOGVmNzAzZDcyNzk1MDFmZTVkYjZiYjJhZWQ3ODVmNzUwNDNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMyAwMToxMjo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiX2NtYS5jIGIvbW0vaHVnZXRsYl9jbWEuY1xcbmluZGV4IDM5MzQ0ZDZjNzhkODRlLi41NjNlMTFlNjA3ZTVlYyAxMDA2NDRcXG4tLS0gYS9tbS9odWdldGxiX2NtYS5jXFxuKysrIGIvbW0vaHVnZXRsYl9jbWEuY1xcbkBAIC0zNCw2ICszNCw5IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuIFxcdGlmICghaHVnZXRsYl9jbWFfc2l6ZSlcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuIFxcbitcXHRpZiAoIW5vZGVtYXNrKVxcbitcXHRcXHRub2RlbWFzayA9IFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XFxuK1xcbiBcXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcXG4gXFx0XFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTI6NDMuNTczMzg4MDI2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDAzMTkxNTE2MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCIsXG4gICAgXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIixcbiAgICBcImFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9cIixcbiAgICBcInJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGdpZ2FudGljIGh1Z2VwYWdlIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGRpc3NvbHZpbmcgYW5kIHJlcGxhY2luZyBmcmVlIGh1Z2VwYWdlcyAoZS5nLiwgZHVyaW5nIGNvbXBhY3Rpb24sIENNQSBhbGxvY2F0aW9uLCBvciBtZW1vcnkgaG90cGx1ZykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBjZjllOGVmNzAzZDcyNzk1MDFmZTVkYjZiYjJhZWQ3ODVmNzUwNDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDAxOjEyOjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYl9jbWEuYyBiL21tL2h1Z2V0bGJfY21hLmNcbmluZGV4IDM5MzQ0ZDZjNzhkODRlLi41NjNlMTFlNjA3ZTVlYyAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGJfY21hLmNcbisrKyBiL21tL2h1Z2V0bGJfY21hLmNcbkBAIC0zNCw2ICszNCw5IEBAIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRpZiAoIWh1Z2V0bGJfY21hX3NpemUpXG4gXHRcdHJldHVybiBOVUxMO1xuIFxuK1x0aWYgKCFub2RlbWFzaylcbitcdFx0bm9kZW1hc2sgPSBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XG4rXG4gXHRpZiAoaHVnZXRsYl9jbWFbbmlkXSlcbiBcdFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTI6NDMuNTczMzg5NjU2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3ODc1MDM3NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdlVExCIENNQSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBgbW0vaHVnZXRsYl9jbWEuY2AgZmlsZS4gVGhlIGNvcmUgY2hhbmdlIGZvY3VzZXMgb24gdGhlIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGZ1bmN0aW9uLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCdzIGFib3V0IGhhbmRsaW5nIGEgc2NlbmFyaW8gd2hlcmUgdGhlIGBub2RlbWFza2AgYXJndW1lbnQgaXMgcG90ZW50aWFsbHkgYE5VTExgLlxuXG5UaGUgZXhpc3RpbmcgY29kZSBjaGVja3MgZm9yIGBodWdldGxiX2NtYV9zaXplYCwgd2hpY2ggbWFrZXMgc2Vuc2UgYXMgYW4gZWFybHkgZXhpdCBpZiB0aGVyZSdzIG5vdGhpbmcgdG8gYWxsb2NhdGUuIFRoZW4sIHRoaXMgcGF0Y2ggYWRkcyBhIGNoZWNrLiBOb3csIGlmIGBub2RlbWFza2AgaXMgYE5VTExgLCBpdCdzIGRlZmF1bHRpbmcgdGhlIGBub2RlbWFza2AgdG8gYFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXWAuIFRoaXMgbWVhbnMgaXQncyBlZmZlY3RpdmVseSB1c2luZyB0aGUgXCJtZW1vcnlcIiBub2RlIG1hc2sgYXMgYSBmYWxsYmFjay4gQW5kIGZyb20gdGhlcmUsIGlmIHRoZXJlJ3MgYSB2YWxpZCBDTUEgcmVnaW9uIGZvciB0aGUgbm9kZSAoYGh1Z2V0bGJfY21hW25pZF1gKSwgaXQgY2FsbHMgYGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmRgLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGBub2RlbWFza2AgY291bGQgYmUgYE5VTExgLiBXaGF0J3MgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIGFuZCBob3cgZG9lcyBgbm9kZW1hc2tgIHR5cGljYWxseSBnZXQgcG9wdWxhdGVkPyBJcyBpdCBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBtYXliZSBoYW5kbGluZyBhIGNhc2Ugd2hlcmUgdGhlIHN5c3RlbSB0b3BvbG9neSBpc24ndCBmdWxseSBpbml0aWFsaXplZD8gSWYgdGhlIGZhbGxiYWNrIHRvIGBOX01FTU9SWWAgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBkZXNpcmVkIGJlaGF2aW9yIGluIHRoZSBzcGVjaWZpYyBzaXR1YXRpb24sIHRoZW4gaXQncyBwcm9iYWJseSBmaW5lLCBidXQgSSdkIHdhbnQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIHRoaXMgZG9lc24ndCBsZWFkIHRvIGFueSB1bmV4cGVjdGVkIE5VTUEgZWZmZWN0cyBvciBhbGxvY2F0aW9uIGZhaWx1cmVzIGluIGVkZ2UgY2FzZXMuIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNhbGwgc2l0ZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBodWdldGxiX2NtYS5jYCB0byBmdWxseSBncmFzcCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIGFuZCB3aGV0aGVyIGl0IGFsaWducyB3aXRoIHRoZSBvdmVyYWxsIGRlc2lnbiBnb2FscyBvZiB0aGUgQ01BIEh1Z2VUTEIgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NDYsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxMzoxMC4zNjA4OTU2MjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3OTU5MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiX2NtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGJfY21hLmM9MjE9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNi1cXG5tbS9odWdldGxiX2NtYS5jOjI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuYy0yOC1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTM6MTAuNjc4ODYxNzZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjY2OTM0NjQwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBVc2FnZSBvZiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIGZvciBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gRXNzZW50aWFsbHksIEkgd2FudCB0byBtYXAgb3V0IGFsbCB0aGUgcGxhY2VzIGluIHRoZSBrZXJuZWwgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkLiBUaGlzIGlzIG9mdGVuIHRoZSBmaXJzdCBzdGVwIGluIHVuZGVyc3RhbmRpbmcgdGhlIHB1cnBvc2Ugb2YgYW55IGFsbG9jYXRpb24gcGF0aCwgZXNwZWNpYWxseSBvbmUgcmVsYXRlZCB0byBIdWdlVExCIGFuZCBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRpb24pLCB3aGljaCBjYW4gaGF2ZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEl04oCZcyBhbHNvIGNydWNpYWwgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcywgdHJhY2luZyBkb3duIG1lbW9yeSBsZWFrcywgb3IgY29tcHJlaGVuZGluZyB0aGUgaW50ZXJhY3Rpb24gb2YgdGhpcyBhbGxvY2F0aW9uIHdpdGggb3RoZXIga2VybmVsIHN1YnN5c3RlbXMuIEknbGwgbmVlZCB0byB1c2UgbXkgcHJlZmVycmVkIHRvb2xzZXQgKGBncmVwYCwgYGN0YWdzYCwgdGhlIGRlYnVnZ2VyLCBldGMuKSB0byB0cmF2ZXJzZSB0aGUgc291cmNlIGNvZGUgYW5kIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIHdoZXJlIHRoaXMgZnVuY3Rpb24gZml0cyB3aXRoaW4gdGhlIGxhcmdlciBhbGxvY2F0aW9uIGxhbmRzY2FwZS4gSeKAmW0gdGhpbmtpbmcgSeKAmWxsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgc2VhcmNoIGZvciBkaXJlY3QgY2FsbHMuIFRoZW4sIGlmIHRoYXQgeWllbGRzIGxpbWl0ZWQgcmVzdWx0cywgSeKAmWxsIG5lZWQgdG8gY29uc2lkZXIgaW5kaXJlY3QgZnVuY3Rpb24gY2FsbHMgYW5kIHBvdGVudGlhbGx5IGFuYWx5emUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaG9sZCBmdW5jdGlvbiBwb2ludGVycyB0byBpZGVudGlmeSBwb3RlbnRpYWwgY2FsbGJhY2sgdXNhZ2UuIFRoaXMgaXMgZ29pbmcgdG8gYmUgYWJvdXQgdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgdXNhZ2Ugb2YgYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1ODAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNDoyNy4zNDgyMTE1NTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzgzODEyODY2MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzYwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbi0tXFxubW0vaHVnZXRsYi5jLTEzNjQtXFxubW0vaHVnZXRsYi5jOjEzNjU6XFx0Zm9saW8gPSBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8ob3JkZXIsIGdmcF9tYXNrLCBuaWQsIG5vZGVtYXNrKTtcXG5tbS9odWdldGxiLmMtMTM2Ni1cXHRpZiAoZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jPTIxPXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmMtMjYtXFxubW0vaHVnZXRsYl9jbWEuYzoyNzpzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGJfY21hLmMtMjgtXFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oPTY9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG5tbS9odWdldGxiX2NtYS5oOjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5oLTgtXFx0XFx0XFx0XFx0ICAgICAgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spO1xcbi0tXFxubW0vaHVnZXRsYl9jbWEuaD0xNj1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmgtMTktXFxubW0vaHVnZXRsYl9jbWEuaDoyMDpzdGF0aWMgaW5saW5lIHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlcixcXG5tbS9odWdldGxiX2NtYS5oLTIxLVxcdFxcdGdmcF90IGdmcF9tYXNrLFxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNDozMS4xODYzNTI2NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTMyNTI3MDU3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIGZvciBIdWdlVExCIENNQSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgYGh1Z2V0bGJfY21hLmNgIGZpbGUuIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0J3MgYWx3YXlzIHRoZSBiZXN0IHBsYWNlIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgY29uZmlndXJhYmxlLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGlzIGZlYXR1cmUgaW50ZWdyYXRlcyBpbnRvIHRoZSBsYXJnZXIgc3lzdGVtLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGVudHJpZXMgc3BlY2lmaWNhbGx5IG1lbnRpb25pbmcgYGh1Z2V0bGJfY21hLmNgIG9yIFwiaHVnZSBwYWdlc1wiIGFuZCBcIkNNQVwiIHRvZ2V0aGVyLiBUaGlzIHNob3VsZCB0ZWxsIG1lIGhvdyB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgY29udHJvbGxlZCwgd2hldGhlciBpdCdzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIHdoYXQgb3RoZXIgc2V0dGluZ3MgbWlnaHQgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBpdCB0byB3b3JrIGNvcnJlY3RseS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGtlcm5lbCB2ZXJzaW9ucywgYXJjaGl0ZWN0dXJlLCBhbmQgcG9zc2libHkgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZmVhdHVyZXMuIEkgbmVlZCB0byBiZSByZWFkeSB0byBpbnRlcnByZXQgdGhlIGRlcGVuZGVuY2llcyBjb3JyZWN0bHksIGFzIEkgYWxyZWFkeSBoYXZlIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIEtjb25maWcgc3ludGF4IGFuZCB0aGUgZ2VuZXJhbCBrZXJuZWwgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUuIE15IGdvYWwgaXMgdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCB1bmRlcnN0YW5kIHRoZWlyIGltcGxpY2F0aW9ucyBmb3IgZW5hYmxpbmcgYW5kIGRpc2FibGluZyB0aGlzIGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzOTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNDo0Mi41MTE2MjYwNzdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4MDA3NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfY21hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTgyPWlmZGVmIENPTkZJR19DTUFcXG5tbS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfSFVHRVRMQkZTKVxcdCs9IGh1Z2V0bGJfY21hLm9cXG5tbS9NYWtlZmlsZS04NC1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNDo0Mi45MDk2NTI4NjVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODcwMDI4MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGggaGVyZS5cblxuKipOYXZpZ2F0aW5nIHRoZSBIdWdlVExCIGFuZCBDTUEgQ29uZmx1ZW5jZSoqXG5cbkFscmlnaHQsIGl0IGxvb2tzIGxpa2UgdGhpcyBjZW50ZXJzIGFyb3VuZCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYC4gUmlnaHQsIHRoYXQncyB0aGUgY29yZSBvZiBpdCDigJMgdGhlIENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvciB3b3JraW5nIGluIGNvbmp1bmN0aW9uIHdpdGggSHVnZVRMQiBmaWxlIHN5c3RlbXMuIEludGVyZXN0aW5nLiBNeSBmb2N1cyBpcyBxdWlja2x5IGRyYXduIHRvIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBUaGF0IGZ1bmN0aW9uIGlzIGludm9rZWQgZnJvbSBgYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvYCwgd2hpY2ggcmVzaWRlcyB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AuIE5vdyBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgZ3JhcGggZnVydGhlciBiYWNrLiBMZXQgbWUgcXVpY2tseSBkZXRlcm1pbmUgd2hlcmUgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AgaXRzZWxmIGlzIGNhbGxlZC4gVW5kZXJzdGFuZGluZyB0aGUgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGJlIGVzc2VudGlhbCBmb3IgZnVsbCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzM5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTQ6NDUuNzc5NjgzOTI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc4MzUzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xMzIwPXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmRlcXVldWVfaHVnZXRsYl9mb2xpb192bWEoc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzU5LSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19DT05USUdfQUxMT0MpXFxubW0vaHVnZXRsYi5jOjEzNjA6c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYi5jLTEzNjEtXFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuLS1cXG5tbS9odWdldGxiLmMtMTM3Ni0jZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cXG5tbS9odWdldGxiLmM6MTM3NzpzdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgaW50IG5pZCxcXG5tbS9odWdldGxiLmMtMTM3OC1cXHRcXHRcXHRcXHRcXHQgIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jPTE4MzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTg0Ni1cXHRpZiAob3JkZXJfaXNfZ2lnYW50aWMob3JkZXIpKVxcbm1tL2h1Z2V0bGIuYzoxODQ3OlxcdFxcdGZvbGlvID0gYWxsb2NfZ2lnYW50aWNfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBubWFzayk7XFxubW0vaHVnZXRsYi5jLTE4NDgtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNDo0NS44NTQ0Nzk4MjhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA1OTUwMzkzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIEh1Z2VUTEIgRm9saW8gQWxsb2NhdGlvbioqXG5cblJpZ2h0LCBzbyBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBzZWVtcyB0byBiZSB0aGUgZW50cnkgcG9pbnQgZm9yIHJlcXVlc3RpbmcgYSBmcmVzaCwgdW5pbml0aWFsaXplZCBIdWdlVExCIGZvbGlvLiBJbnRlcmVzdGluZy4gSSBpbW1lZGlhdGVseSBzZWUgdGhhdCBpdCBmdW5uZWxzIGludG8gYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgcHJvYmFibHkgdGhlIGNvcmUgZnVuY3Rpb24gZm9yIGFjdHVhbGx5ICpkb2luZyogdGhlIGFsbG9jYXRpb24sIGFuZCAnZnJvemVuJyBzdWdnZXN0cyBpdCdzIGxpa2VseSBhIG1lbW9yeSByZWdpb24gdGhhdCdzIGFscmVhZHkgYmVlbiBzZXQgdXAgZm9yIHRoZSB1c2VyLiBTbywgbXkgbmV4dCBxdWVzdGlvbiBpcywgd2hlcmUgaXMgdGhpcyBgb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBmdW5jdGlvbiBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dCBvZiBob3cgdGhlc2UgZm9saW9zIGFyZSByZXF1ZXN0ZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBlbnRyeSBwb2ludCB0byB0aGUgc291cmNlIG9mIHRoZSByZXF1ZXN0cy4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQwMCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE0OjQ4LjkxMzk4NTcxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1NjQwMTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTE3OTE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMTgzNS1cXG5tbS9odWdldGxiLmM6MTgzNjpzdGF0aWMgc3RydWN0IGZvbGlvICpvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtMTgzNy1cXHRcXHRnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm1hc2ssXFxuLS1cXG5tbS9odWdldGxiLmM9MTg2Mz1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTg2Ny1cXG5tbS9odWdldGxiLmM6MTg2ODpcXHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBubWFzaywgTlVMTCk7XFxubW0vaHVnZXRsYi5jLTE4NjktXFx0aWYgKGZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jPTE4OTY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfcG9vbF9odWdlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTkwNi1cXG5tbS9odWdldGxiLmM6MTkwNzpcXHRcXHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbm9kZSxcXG5tbS9odWdldGxiLmMtMTkwOC1cXHRcXHRcXHRcXHRcXHRub2Rlc19hbGxvd2VkLCBub2RlX2FsbG9jX25vcmV0cnkpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTMzOTc9c3RhdGljIHZvaWQgX19pbml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX29uZW5vZGUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNDEwLVxcbm1tL2h1Z2V0bGIuYzozNDExOlxcdFxcdFxcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsXFxubW0vaHVnZXRsYi5jLTM0MTItXFx0XFx0XFx0XFx0XFx0XFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXSwgTlVMTCk7XFxuLS1cXG5tbS9odWdldGxiLmMtMzQxNi1cXHRcXHRcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Zm9saW9fbGlzdCk7XFxubW0vaHVnZXRsYi5jOjM0MTc6XFx0XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG5tbS9odWdldGxiLmMtMzQxOC1cXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTQ6NDkuMTM5NjMxNjU0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMTc2MzkwNDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBIdWdlcGFnZSBBbGxvY2F0aW9uIEZpeCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBmaXggaXMgZGVhbGluZyB3aXRoIGh1Z2VwYWdlIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgQ01BIChDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IpLiBUaGUgY29yZSBvZiB0aGUgaXNzdWUgaXMgYSBidWcgd2hlcmUgdGhlIGBub2RlbWFza2AgaXMgdW5leHBlY3RlZGx5IGBOVUxMYCwgY2F1c2luZyBpdCB0byBkZWZhdWx0IHRvIGBcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV1gLiBUaGlzIGlzIGNsZWFybHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYXMgaXQgbW9kaWZpZXMgdGhlIGJlaGF2aW9yIGluIGBtbS9odWdldGxiX2NtYS5jYC4gR2l2ZW4gdGhhdCB0aGlzIHRvdWNoZXMgY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBodWdlcGFnZXMsIEknZCBzYXkgdGhhdCBmdXp6aW5nIGlzIGFic29sdXRlbHkgd2FycmFudGVkIGhlcmUuIFdlIG5lZWQgdG8gZW5zdXJlIHRoaXMgZml4IGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciBleHBvc2UgbmV3IHZ1bG5lcmFiaWxpdGllcy5cblxuVGltZSB0byByZXZpc2l0IHRoZSBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCBmdW5jdGlvbjsgbGV0J3Mgc2VlIHdoZXJlIHRoaXMgbnVsbCBjaGVjayBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjYyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE1OjAyLjMxNjAyNTU5N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzU1MDM5NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiX2NtYS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGJfY21hLmM9MjE9dm9pZCBodWdldGxiX2NtYV9mcmVlX2Zyb3plbl9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYy0yNi1cXG5tbS9odWdldGxiX2NtYS5jOjI3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuYy0yOC1cXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6MDIuNjcxMDcwMTc4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMDcwMDYyODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgZGlzc2VjdCB0aGlzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGltcGxlbWVudGF0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBDTUEsIGh1Z2V0bGJmcywgYW5kLCBvZiBjb3Vyc2UsIHRoZSBmb2xpbyBzdHJ1Y3R1cmVzLiBJJ20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCB0aGlzIGlzIGFib3V0IGFsbG9jYXRpbmcgYSBmcm96ZW4gZm9saW8sIG1lYW5pbmcgaXQgbGlrZWx5IGRlYWxzIHdpdGggcHJlLWluaXRpYWxpemVkIG9yIHByZS1wb3B1bGF0ZWQgbWVtb3J5IHJlZ2lvbnMgd2l0aGluIHRoZSBodWdldGxiZnMgc3BhY2UsIHBvdGVudGlhbGx5IGZvciB0aGluZ3MgbGlrZSBkZXZpY2UgbWVtb3J5IG9yIHByZS1hbGxvY2F0ZWQgc2hhcmVkIG1lbW9yeSBzZWdtZW50cy4gVGhlIFwiZnJvemVuXCIgYXNwZWN0IGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZywgSSdkIGFudGljaXBhdGUgc2VlaW5nIG1lY2hhbmlzbXMgdG8gcHJldmVudCB0aGUgZm9saW8gZnJvbSBiZWluZyBpbmFkdmVydGVudGx5IGZyZWVkIG9yIG1vZGlmaWVkLCBhdCBsZWFzdCBmcm9tIHRoZSBzdGFuZGFyZCBwYWdlIGFsbG9jYXRpb24gcGF0aHMuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIG9yZGVyaW5nLCBhcyBjb25jdXJyZW50IGFjY2VzcyBpbiB0aGlzIGVudmlyb25tZW50IGNhbiBiZSBub3RvcmlvdXNseSB0cmlja3ksIGVzcGVjaWFsbHkgd2l0aCBodWdldGxiZnMncyBpbmhlcmVudCBjb21wbGV4aXR5LiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTogV2hhdCBraW5kIG9mIGluaXRpYWwgc3RhdGUgZG9lcyB0aGlzIGFsbG9jYXRpb24gZW5zdXJlPyBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBDTUEgYWxsb2NhdG9yJ3Mgem9uZXMsIGVzcGVjaWFsbHkgdGhlIGNvbnNpZGVyYXRpb25zIGZvciBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5PyBBbmQgaG93IGRvZXMgaXQgaGFuZGxlIHRoZSBjb21wbGV4aXRpZXMgb2YgaHVnZXRsYmZzIG1hcHBpbmdzIGFuZCBwZXJtaXNzaW9ucywgc3BlY2lmaWNhbGx5IHRoZSBwb3RlbnRpYWwgbmVlZCBmb3Igc2hhcmVkIG1hcHBpbmdzIG9yIHNwZWNpZmljIGFjY2VzcyBmbGFncz8gSeKAmW0gZXhwZWN0aW5nIHRvIHNlZSBzcGVjaWZpYyBjYWxscyB0byBgaHVnZXRsYl9jbWFfYWxsb2NfZm9saW9gIG9yIHJlbGF0ZWQgaW50ZXJuYWwgZnVuY3Rpb25zLCBsZXQncyBnZXQgaW50byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTcyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE1OjA5Ljk3ODA3ODA2MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODU5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiX2NtYS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDI3OlxcdHN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuICAyODpcXHRcXHRcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG4gIDI5OlxcdHtcXG4gIDMwOlxcdFxcdGludCBub2RlO1xcbiAgMzE6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gIDMyOlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcXG4gIDMzOlxcdFxcbiAgMzQ6XFx0XFx0aWYgKCFodWdldGxiX2NtYV9zaXplKVxcbiAgMzU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdGlmICghbm9kZW1hc2spXFxuICAzODpcXHRcXHRcXHRub2RlbWFzayA9IFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV07XFxuICAzOTpcXHRcXG4gIDQwOlxcdFxcdGlmIChodWdldGxiX2NtYVtuaWRdKVxcbiAgNDE6XFx0XFx0XFx0cGFnZSA9IGNtYV9hbGxvY19mcm96ZW5fY29tcG91bmQoaHVnZXRsYl9jbWFbbmlkXSwgb3JkZXIpO1xcbiAgNDI6XFx0XFxuICA0MzpcXHRcXHRpZiAoIXBhZ2UgXFx1MDAyNlxcdTAwMjYgIShnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX1RISVNOT0RFKSkge1xcbiAgNDQ6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsICpub2RlbWFzaykge1xcbiAgNDU6XFx0XFx0XFx0XFx0aWYgKG5vZGUgPT0gbmlkIHx8ICFodWdldGxiX2NtYVtub2RlXSlcXG4gIDQ2OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiAgNDc6XFx0XFxuICA0ODpcXHRcXHRcXHRcXHRwYWdlID0gY21hX2FsbG9jX2Zyb3plbl9jb21wb3VuZChodWdldGxiX2NtYVtub2RlXSwgb3JkZXIpO1xcbiAgNDk6XFx0XFx0XFx0XFx0aWYgKHBhZ2UpXFxuICA1MDpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4gIDUxOlxcdFxcdFxcdH1cXG4gIDUyOlxcdFxcdH1cXG4gIDUzOlxcdFxcbiAgNTQ6XFx0XFx0aWYgKCFwYWdlKVxcbiAgNTU6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuICA1NjpcXHRcXG4gIDU3OlxcdFxcdGZvbGlvID0gcGFnZV9mb2xpbyhwYWdlKTtcXG4gIDU4OlxcdFxcdGZvbGlvX3NldF9odWdldGxiX2NtYShmb2xpbyk7XFxuICA1OTpcXHRcXHRyZXR1cm4gZm9saW87XFxuICA2MDpcXHR9XFxuICA2MTpcXHRcXG4gIDYyOlxcdHN0cnVjdCBodWdlX2Jvb3RtZW1fcGFnZSAqIF9faW5pdFxcbiAgNjM6XFx0aHVnZXRsYl9jbWFfYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgKm5pZCwgYm9vbCBub2RlX2V4YWN0KVxcbiAgNjQ6XFx0e1xcbiAgNjU6XFx0XFx0c3RydWN0IGNtYSAqY21hO1xcbiAgNjY6XFx0XFx0c3RydWN0IGh1Z2VfYm9vdG1lbV9wYWdlICptO1xcbiAgNjc6XFx0XFx0aW50IG5vZGUgPSAqbmlkO1xcbiAgNjg6XFx0XFxuICA2OTpcXHRcXHRjbWEgPSBodWdldGxiX2NtYVsqbmlkXTtcXG4gIDcwOlxcdFxcdG0gPSBjbWFfcmVzZXJ2ZV9lYXJseShjbWEsIGh1Z2VfcGFnZV9zaXplKGgpKTtcXG4gIDcxOlxcdFxcdGlmICghbSkge1xcbiAgNzI6XFx0XFx0XFx0aWYgKG5vZGVfZXhhY3QpXFxuICA3MzpcXHRcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gIDc0OlxcdFxcbiAgNzU6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIGh1Z2V0bGJfYm9vdG1lbV9ub2Rlcykge1xcbiAgNzY6XFx0XFx0XFx0XFx0Y21hID0gaHVnZXRsYl9jbWFbbm9kZV07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE1OjA5Ljk3ODE1ODYwMVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTcxNjYxNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBvdGVudGlhbCBOVUxMIFBvaW50ZXIgRGVyZWZlcmVuY2UgaW4gSHVnZVRMQiBDTUEgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwb3RlbnRpYWwgY3Jhc2guIEl0IGxvb2tzIGxpa2UgaWYgYG5vZGVtYXNrYCBpcyBOVUxMLCB3ZSdyZSBnb2luZyB0byBoaXQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gYGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAqbm9kZW1hc2spYC4gVGhhdCdzIGEgY2xhc3NpYyBlcnJvciwgYW5kIGl0IHNlZW1zIHRvIGJlIGhhcHBlbmluZyB1bmRlciB2ZXJ5IHNwZWNpZmljIGNvbmRpdGlvbnMgcmVsYXRlZCB0byBIdWdlVExCIENNQSBhbGxvY2F0aW9uLiBNeSBodW5jaCBpcyB0aGF0IHRoaXMgb3JpZ2luYXRlcyB3aGVuIGBodWdldGxiX2NtYVtuaWRdYCBkb2Vzbid0IGhhdmUgZW5vdWdoIGF2YWlsYWJsZSBtZW1vcnksIG9yIHdvcnNlLCBpcyBhY3R1YWxseSBOVUxMIGl0c2VsZiwgYW5kIHdlJ3JlIG5vdCB1c2luZyBgX19HRlBfVEhJU05PREVgLiBUaGlzIHBhdGNoIGlzIHRhcmdldGluZyBwcmVjaXNlbHkgdGhhdCwgYWltaW5nIHRvIHByZXZlbnQgdGhlIGRlcmVmZXJlbmNlLlxuXG5Ob3csIHdoYXQgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb25zPyBCYXNlZCBvbiB0aGUgY29kZSwgaXQgc2VlbXMgd2UnbGwgbmVlZCBgQ09ORklHX0NNQWAgYW5kIGBDT05GSUdfSFVHRVRMQkZTYCBlbmFibGVkLCBvYnZpb3VzbHkuIEJ1dCB0aGVyZSBtaWdodCBiZSBtb3JlIHRvIGl0LiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB3ZSBhbHNvIG1pZ2h0IG5lZWQgYENPTkZJR19DT05USUdfQUxMT0NgIGFuZCBgQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0VgIGJlY2F1c2Ugb2YgaG93IGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gIHdvcmtzLCBhbmQgaG93IGl0IGNhbGxzIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gLiBJdCdzIHByZXR0eSBsaWtlbHkgd2UnbGwgaGF2ZSB0byBkZWx2ZSBpbnRvIGBtbS9odWdldGxiLmNgIHRvIGNvbmZpcm0gdGhlIGRlcGVuZGVuY2llcyBhbmQgdGhlIG92ZXJhbGwgY2FsbCBzdGFjayB0byBiZSBzdXJlLiBUaW1lIHRvIGNoZWNrIHRob3NlIGNvbmZpZ3VyYXRpb25zIGFuZCB0aGUgY2FsbCBncmFwaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc4MiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE1OjE0LjE0OTgyMjQ3N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDA5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNTksXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzNTk6XFx0I2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTlRJR19BTExPQylcXG4xMzYwOlxcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxcbjEzNjE6XFx0XFx0XFx0aW50IG5pZCwgbm9kZW1hc2tfdCAqbm9kZW1hc2spXFxuMTM2MjpcXHR7XFxuMTM2MzpcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjEzNjQ6XFx0XFxuMTM2NTpcXHRcXHRmb2xpbyA9IGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhvcmRlciwgZ2ZwX21hc2ssIG5pZCwgbm9kZW1hc2spO1xcbjEzNjY6XFx0XFx0aWYgKGZvbGlvKVxcbjEzNjc6XFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbjEzNjg6XFx0XFxuMTM2OTpcXHRcXHRpZiAoaHVnZXRsYl9jbWFfZXhjbHVzaXZlX2FsbG9jKCkpXFxuMTM3MDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4xMzcxOlxcdFxcbjEzNzI6XFx0XFx0Zm9saW8gPSAoc3RydWN0IGZvbGlvICopYWxsb2NfY29udGlnX2Zyb3plbl9wYWdlcygxIFxcdTAwM2NcXHUwMDNjIG9yZGVyLCBnZnBfbWFzayxcXG4xMzczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgbmlkLCBub2RlbWFzayk7XFxuMTM3NDpcXHRcXHRyZXR1cm4gZm9saW87XFxuMTM3NTpcXHR9XFxuMTM3NjpcXHQjZWxzZSAvKiAhQ09ORklHX0FSQ0hfSEFTX0dJR0FOVElDX1BBR0UgfHwgIUNPTkZJR19DT05USUdfQUxMT0MgKi9cXG4xMzc3OlxcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLFxcbjEzNzg6XFx0XFx0XFx0XFx0XFx0XFx0ICBub2RlbWFza190ICpub2RlbWFzaylcXG4xMzc5OlxcdHtcXG4xMzgwOlxcdFxcdHJldHVybiBOVUxMO1xcbjEzODE6XFx0fVxcbjEzODI6XFx0I2VuZGlmXFxuMTM4MzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6MTQuMTUwMTI1NzI2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NzgzOTY4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBtZW50YWwgcnVuZG93biBvbiB0aGlzLCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6XG5cbioqQXNzZXNzaW5nIEdpZ2FudGljIFBhZ2VzIGFuZCBDb250aWd1b3VzIEFsbG9jYXRpb24qKlxuXG5BbHJpZ2h0LCBiYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIGBDT05GSUdfQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgYW5kIGBDT05GSUdfQ09OVElHX0FMTE9DYCBhcmUgZGVmaW5pdGVseSBjcnVjaWFsIGhlcmUuIEl0J3MgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gSG1tLCBidXQgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIGJlIHByZWNpc2UgYWJvdXQgdGhpcy4gYENPTkZJR19BUkNIX0hBU19HSUdBTlRJQ19QQUdFYCwgdGhhdCdzIGdlbmVyYWxseSB0aWVkIHRvIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSwgaXNuJ3QgaXQ/IEkgbmVlZCB0byBiZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jaWVzLiBPa2F5LCBsZXQncyBzdGVwIGJhY2sgYW5kIGNvbnNpZGVyIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IG5leHQgdGhvdWdodCBpcywgbGV0J3MgYWxzbyBmYWN0b3IgaW4gYENPTkZJR19DTUFgIGFuZCBgQ09ORklHX0hVR0VUTEJGU2AuIEkgbmVlZCB0byBlbnN1cmUgdGhleSBhcmUgYWxzbyBjb25zaWRlcmVkIHRvIGhhdmUgYSBjb21wcmVoZW5zaXZlIHBpY3R1cmUuIEFuZCwganVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgc2NhbiBmb3Igb3RoZXIgY2FsbGVycyBvZiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gTmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyByZWxhdGVkIHRvIHRoYXQgYWxsb2NhdGlvbiBwYXRoLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBkZXBlbmRlbmNpZXMgdGhhdCBJIGhhdmVuJ3QgYWNjb3VudGVkIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzcyMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6MTguODI4NTI0NTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDg1NTI2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTM2MD1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzY0LVxcbm1tL2h1Z2V0bGIuYzoxMzY1OlxcdGZvbGlvID0gaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKG9yZGVyLCBnZnBfbWFzaywgbmlkLCBub2RlbWFzayk7XFxubW0vaHVnZXRsYi5jLTEzNjYtXFx0aWYgKGZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuYz0yMT12b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5jLTI2LVxcbm1tL2h1Z2V0bGJfY21hLmM6Mjc6c3RydWN0IGZvbGlvICpodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG5tbS9odWdldGxiX2NtYS5jLTI4LVxcdFxcdGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKVxcbi0tXFxubW0vaHVnZXRsYl9jbWEuaD02PXZvaWQgaHVnZXRsYl9jbWFfZnJlZV9mcm96ZW5fZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vaHVnZXRsYl9jbWEuaDo3OnN0cnVjdCBmb2xpbyAqaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvKGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vaHVnZXRsYl9jbWEuaC04LVxcdFxcdFxcdFxcdCAgICAgIGludCBuaWQsIG5vZGVtYXNrX3QgKm5vZGVtYXNrKTtcXG4tLVxcbm1tL2h1Z2V0bGJfY21hLmg9MTY9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfY21hX2ZyZWVfZnJvemVuX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9odWdldGxiX2NtYS5oLTE5LVxcbm1tL2h1Z2V0bGJfY21hLmg6MjA6c3RhdGljIGlubGluZSBzdHJ1Y3QgZm9saW8gKmh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpbyhpbnQgb3JkZXIsXFxubW0vaHVnZXRsYl9jbWEuaC0yMS1cXHRcXHRnZnBfdCBnZnBfbWFzayxcXHRpbnQgbmlkLCBub2RlbWFza190ICpub2RlbWFzaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6MjAuOTc3MDg3NzA5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNzU0NTcwMTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVHJhY2luZyB0aGUgR2lnYW50aWMgRm9saW8gQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYWxsb2NhdGlvbiBvZiB0aGVzZSBnaWdhbnRpYyBmb2xpb3MuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCB0aGUgY29yZSBmdW5jdGlvbiBoZXJlIHNlZW1zIHRvIGJlIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLiBBbmQgSSBzZWUgdGhhdCBpdCdzIGNhbGxlZCBleGNsdXNpdmVseSBmcm9tIGBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLiBUaGF0IG5hcnJvd3MgZG93biB0aGUgcG9pbnQgb2Ygb3JpZ2luIHF1aXRlIHNpZ25pZmljYW50bHkuXG5cbk5vdywgYG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpb2AgZ2V0cyBjYWxsZWQgZnJvbSBhIGZldyBvdGhlciBmdW5jdGlvbnM6IGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCwgYGFsbG9jX3Bvb2xfaHVnZV9mb2xpb2AsIGFuZCBgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZWAuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkaWcgaW50byBgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZWAuIEl0IHNlZW1zIHRvIGJlIHRoZSBtb3N0IGFic3RyYWN0IG9mIHRoZSB0aHJlZS4gSXQgaXMgbGlrZWx5IGl0IGlzIHdoZXJlIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgYmVnaW5zLiBUaGlzIG1pZ2h0IGJlIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1ODQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6MjQuMzUyNTQ2NjE5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwODkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQwNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzQwNTpcXHRcXHRcXHRcXHRpZiAoIWFsbG9jX2Jvb3RtZW1faHVnZV9wYWdlKGgsIG5pZCkpXFxuMzQwNjpcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4zNDA3OlxcdFxcdFxcdH0gZWxzZSB7XFxuMzQwODpcXHRcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjM0MDk6XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCkgfCBfX0dGUF9USElTTk9ERTtcXG4zNDEwOlxcdFxcbjM0MTE6XFx0XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG4zNDEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xcbjM0MTM6XFx0XFx0XFx0XFx0aWYgKCFmb2xpbyBcXHUwMDI2XFx1MDAyNiAhbGlzdF9lbXB0eShcXHUwMDI2Zm9saW9fbGlzdCkgXFx1MDAyNlxcdTAwMjZcXG4zNDE0OlxcdFxcdFxcdFxcdCAgICBodWdldGxiX3ZtZW1tYXBfb3B0aW1pemFibGVfc2l6ZShoKSkge1xcbjM0MTU6XFx0XFx0XFx0XFx0XFx0cHJlcF9hbmRfYWRkX2FsbG9jYXRlZF9mb2xpb3MoaCwgXFx1MDAyNmZvbGlvX2xpc3QpO1xcbjM0MTY6XFx0XFx0XFx0XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmZvbGlvX2xpc3QpO1xcbjM0MTc6XFx0XFx0XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG4zNDE4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xcbjM0MTk6XFx0XFx0XFx0XFx0fVxcbjM0MjA6XFx0XFx0XFx0XFx0aWYgKCFmb2xpbylcXG4zNDIxOlxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjM0MjI6XFx0XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZmb2xpb19saXN0KTtcXG4zNDIzOlxcdFxcdFxcdH1cXG4zNDI0OlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNToyNC4zNTI4NTY5ODlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2Mzk4NDA0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCB3aXRoIHRoZSBib2xkZWQgaGVhZGVyIGFzIHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZWAncyBOb2RlIE1hc2sqKlxuXG5BbHJpZ2h0LCBzbyBgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZWAgaXMgcGFzc2luZyBgXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldYCBhcyB0aGUgYG5vZGVtYXNrYCBhcmd1bWVudC4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBzb21ldGhpbmcgaW4gbXkgbWluZC4gYFx1MDAyNm5vZGVfc3RhdGVzW05fTUVNT1JZXWAgZXNzZW50aWFsbHkgcmVwcmVzZW50cyAqYWxsKiBtZW1vcnkgbm9kZXMsIHJpZ2h0PyBUaGUgaW50ZW50aW9uIGhlcmUgaXMgbGlrZWx5IHRvIGFsbG9jYXRlIHRoZSBodWdlIHBhZ2VzIGZyb20gYW55IGF2YWlsYWJsZSBOVU1BIG5vZGUsIHRyZWF0aW5nIHRoZW0gYXMgaW50ZXJjaGFuZ2VhYmxlIGluIHRoaXMgY29udGV4dC4gQnV0IGl0J3Mgd29ydGggZG91YmxlLWNoZWNraW5nIGhvdyB0aGlzIGBub2RlbWFza2AgaXMgYWN0dWFsbHkgdXNlZCBkb3duc3RyZWFtLiBMZXQgbWUgc2VlLi4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaGFwcGVucyB0byB0aGlzIGBub2RlbWFza2AuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBpdCB3aWxsIGxpa2VseSBiZSB1c2VkIHRvIHJlc3RyaWN0IGFsbG9jYXRpb24gdG8gdGhvc2Ugbm9kZXMuXG5cbk9rYXksIGxldCdzIGRpdmUgZGVlcGVyLiBXaGVyZSBkb2VzIHRoaXMgYG5vZGVtYXNrYCBnZXQgdXNlZD8gVGhlIG5leHQgbG9naWNhbCBwbGFjZSB0byBsb29rIGlzIGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB3aGVyZSB0aGUgYWxsb2NhdGlvbiBhY3R1YWxseSBoYXBwZW5zLCBzbyB0aGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQncyB0aGUgcG9pbnQgd2hlcmUgdGhlIGBub2RlbWFza2AgaXMgcGFzc2VkIGluIGFzIGEgcmVzdHJpY3Rpb24sIHdoaWNoIHdpbGwgZWl0aGVyIGJlIHBhc3NlZCBvbiBkb3duIHRoZSBhbGxvY2F0aW9uIGNoYWluIG9yIGRpcmVjdGx5IHVzZWQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXRoZXIgdGhlIGFsbC1ub2RlcyBgbm9kZW1hc2tgIGFmZmVjdHMgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kuIFRoZSBkZXRhaWxzIG9mIGhvdyB0aGlzIGhhcHBlbnMgd2lsbCBkZXRlcm1pbmUgdGhlIGVmZmVjdGl2ZSBhbGxvY2F0aW9uIHN0cmF0ZWd5LCBhbmQgd2hldGhlciBpdCdzIHRoZSBtb3N0IGVmZmljaWVudCBmb3IgdGhlIHdvcmtsb2FkLiBMZXQncyBzZWUgaG93IGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBoYW5kbGVzIHRoaXMgYG5vZGVtYXNrYC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mjg0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNToyOC42MTY4NDM0OTlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2h1Z2V0bGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxODYzLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxODYzOlxcdHN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG4xODY0OlxcdFxcdFxcdGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBub2RlbWFza190ICpubWFzaylcXG4xODY1OlxcdHtcXG4xODY2OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuMTg2NzpcXHRcXG4xODY4OlxcdFxcdGZvbGlvID0gb25seV9hbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLCBuaWQsIG5tYXNrLCBOVUxMKTtcXG4xODY5OlxcdFxcdGlmIChmb2xpbylcXG4xODcwOlxcdFxcdFxcdGh1Z2V0bGJfdm1lbW1hcF9vcHRpbWl6ZV9mb2xpbyhoLCBmb2xpbyk7XFxuMTg3MTpcXHRcXHRyZXR1cm4gZm9saW87XFxuMTg3MjpcXHR9XFxuMTg3MzpcXHRcXG4xODc0OlxcdHZvaWQgcHJlcF9hbmRfYWRkX2FsbG9jYXRlZF9mb2xpb3Moc3RydWN0IGhzdGF0ZSAqaCxcXG4xODc1OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuMTg3NjpcXHR7XFxuMTg3NzpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbjE4Nzg6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgKnRtcF9mO1xcbjE4Nzk6XFx0XFxuMTg4MDpcXHRcXHQvKiBTZW5kIGxpc3QgZm9yIGJ1bGsgdm1lbW1hcCBvcHRpbWl6YXRpb24gcHJvY2Vzc2luZyAqL1xcbjE4ODE6XFx0XFx0aHVnZXRsYl92bWVtbWFwX29wdGltaXplX2ZvbGlvcyhoLCBmb2xpb19saXN0KTtcXG4xODgyOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNToyOC42MTcyODgyMzlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUxODAzNTA1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIEh1Z2VUTEIgRm9saW8gQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvYCBpcyB1c2luZyB0aGlzIGBubWFza2AgcGFyYW1ldGVyLiBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIExldCdzIHRyYWNlIHRoaXMgY2FsbCBhbmQgc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYG5tYXNrYCByZXByZXNlbnRzIGluIHRoaXMgY29udGV4dC4gSXQgc2VlbXMgbGlrZSBpdCBtdXN0IGluZmx1ZW5jZSB0aGUgc2VsZWN0aW9uIG9mIHRoZSBiYWNraW5nIHBvb2wsIG9yIHBvdGVudGlhbGx5IHRoZSBzcGVjaWZpYyBwYWdlcyB3aXRoaW4gYSBwb29sIHRoYXQgYXJlIGNvbnNpZGVyZWQuIE5vdywgbGV0J3Mgc3RlcCBvdmVyIHRvIGBhbGxvY19wb29sX2h1Z2VfZm9saW9gLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGBubWFza2AgdGhlcmU7IEkgZXhwZWN0IHRoYXQgaXQgd2lsbCBoYXZlIHNvbWUgaW1wYWN0IG9uIHRoZSBmaW5hbCBmb2xpbyBhbGxvY2F0aW9uLCBidXQgSSBuZWVkIHRvIGFzY2VydGFpbiB0aGUgc3BlY2lmaWNzLiBJIGFtIHZlcnkgaW50ZXJlc3RlZCB0byBzZWUgaG93IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBwb29sIGltcGFjdHMgYWxsb2NhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE1OjQzLjc5NzY0MTQ2OFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTgwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4OTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4OTY6XFx0c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfcG9vbF9odWdlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuMTg5NzpcXHRcXHRcXHRcXHRcXHRcXHRub2RlbWFza190ICpub2Rlc19hbGxvd2VkLFxcbjE4OTg6XFx0XFx0XFx0XFx0XFx0XFx0bm9kZW1hc2tfdCAqbm9kZV9hbGxvY19ub3JldHJ5LFxcbjE4OTk6XFx0XFx0XFx0XFx0XFx0XFx0aW50ICpuZXh0X25vZGUpXFxuMTkwMDpcXHR7XFxuMTkwMTpcXHRcXHRnZnBfdCBnZnBfbWFzayA9IGh0bGJfYWxsb2NfbWFzayhoKSB8IF9fR0ZQX1RISVNOT0RFO1xcbjE5MDI6XFx0XFx0aW50IG5yX25vZGVzLCBub2RlO1xcbjE5MDM6XFx0XFxuMTkwNDpcXHRcXHRmb3JfZWFjaF9ub2RlX21hc2tfdG9fYWxsb2MobmV4dF9ub2RlLCBucl9ub2Rlcywgbm9kZSwgbm9kZXNfYWxsb3dlZCkge1xcbjE5MDU6XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4xOTA2OlxcdFxcbjE5MDc6XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5vZGUsXFxuMTkwODpcXHRcXHRcXHRcXHRcXHRcXHRub2Rlc19hbGxvd2VkLCBub2RlX2FsbG9jX25vcmV0cnkpO1xcbjE5MDk6XFx0XFx0XFx0aWYgKGZvbGlvKVxcbjE5MTA6XFx0XFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbjE5MTE6XFx0XFx0fVxcbjE5MTI6XFx0XFxuMTkxMzpcXHRcXHRyZXR1cm4gTlVMTDtcXG4xOTE0OlxcdH1cXG4xOTE1OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNTo0My43OTc5NjE1MDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3NDk0NDk4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBGb2xpbyBBbGxvY2F0aW9uKipcblxuT2theSwgc28gYGFsbG9jX3Bvb2xfaHVnZV9mb2xpb2AgZ290IGNhbGxlZCwgYW5kIGl0IHBhc3NlZCBhbG9uZyBgbm9kZXNfYWxsb3dlZGAuIE5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGF0IGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgYGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLCBpcyBiZWluZyBpbnZva2VkLiBJJ20gZ29pbmcgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgdG8gZ2V0IGEgc2Vuc2Ugb2YgaG93IHRoZXNlIGh1Z2UgcGFnZSBmb2xpb3MgYXJlIGFjdHVhbGx5IGFsbG9jYXRlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSBpbiB0aGlzIGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjE1LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNTo0Ni40NzI5MDk5NjFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NjY3MzA3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTc5MT1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19idWRkeV9mcm96ZW5fZm9saW8oaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xODM1LVxcbm1tL2h1Z2V0bGIuYzoxODM2OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKm9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbm1tL2h1Z2V0bGIuYy0xODM3LVxcdFxcdGdmcF90IGdmcF9tYXNrLCBpbnQgbmlkLCBub2RlbWFza190ICpubWFzayxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xODYyLSAqL1xcbm1tL2h1Z2V0bGIuYzoxODYzOnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcXG5tbS9odWdldGxiLmMtMTg2NC1cXHRcXHRnZnBfdCBnZnBfbWFzaywgaW50IG5pZCwgbm9kZW1hc2tfdCAqbm1hc2spXFxuLS1cXG5tbS9odWdldGxiLmMtMTg2Ny1cXG5tbS9odWdldGxiLmM6MTg2ODpcXHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLCBubWFzaywgTlVMTCk7XFxubW0vaHVnZXRsYi5jLTE4NjktXFx0aWYgKGZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jPTE4OTY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfcG9vbF9odWdlX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMTkwNi1cXG5tbS9odWdldGxiLmM6MTkwNzpcXHRcXHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbm9kZSxcXG5tbS9odWdldGxiLmMtMTkwOC1cXHRcXHRcXHRcXHRcXHRub2Rlc19hbGxvd2VkLCBub2RlX2FsbG9jX25vcmV0cnkpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTIwNzY9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2Nfc3VycGx1c19odWdldGxiX2ZvbGlvKHN0cnVjdCBoc3RhdGUgKmgsXFxuLS1cXG5tbS9odWdldGxiLmMtMjA4OC1cXG5tbS9odWdldGxiLmM6MjA4OTpcXHRmb2xpbyA9IGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2spO1xcbm1tL2h1Z2V0bGIuYy0yMDkwLVxcdGlmICghZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmM9MjEyND1zdGF0aWMgc3RydWN0IGZvbGlvICphbGxvY19taWdyYXRlX2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9odWdldGxiLmMtMjEzMS1cXG5tbS9odWdldGxiLmM6MjEzMjpcXHRmb2xpbyA9IGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCwgbm1hc2spO1xcbm1tL2h1Z2V0bGIuYy0yMTMzLVxcdGlmICghZm9saW8pXFxuLS1cXG5tbS9odWdldGxiLmM9MjY0MT1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI2ODYtXFx0XFx0XFx0Z2ZwX21hc2sgPSBodGxiX2FsbG9jX21hc2soaCkgfCBfX0dGUF9USElTTk9ERTtcXG5tbS9odWdldGxiLmM6MjY4NzpcXHRcXHRcXHRuZXdfZm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLFxcbm1tL2h1Z2V0bGIuYy0yNjg4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG5pZCwgTlVMTCk7XFxuLS1cXG5tbS9odWdldGxiLmM9MzM5Nz1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXNfb25lbm9kZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkKVxcbi0tXFxubW0vaHVnZXRsYi5jLTM0MTAtXFxubW0vaHVnZXRsYi5jOjM0MTE6XFx0XFx0XFx0Zm9saW8gPSBvbmx5X2FsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssIG5pZCxcXG5tbS9odWdldGxiLmMtMzQxMi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2bm9kZV9zdGF0ZXNbTl9NRU1PUlldLCBOVUxMKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zNDE2LVxcdFxcdFxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZmb2xpb19saXN0KTtcXG5tbS9odWdldGxiLmM6MzQxNzpcXHRcXHRcXHRcXHRmb2xpbyA9IG9ubHlfYWxsb2NfZnJlc2hfaHVnZXRsYl9mb2xpbyhoLCBnZnBfbWFzaywgbmlkLFxcbm1tL2h1Z2V0bGIuYy0zNDE4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZub2RlX3N0YXRlc1tOX01FTU9SWV0sIE5VTEwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNTo0Ni44Mzk1ODg5MzJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY2MjA5NzAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW9gIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvYCBhbmQgSSBzZWUgc29tZXRoaW5nIHRoYXQncyBpbW1lZGlhdGVseSBwaXF1ZWQgbXkgaW50ZXJlc3QuIFNwZWNpZmljYWxseSwgdGhlIGZ1bmN0aW9uIHBhc3NlcyBgTlVMTGAgYXMgdGhlIGBubWFza2AgYXJndW1lbnQgdG8gYGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW9gLiBMZXQncyB0YWtlIGEgbG9vay4gXG5cbmBgYGNcblx0XHRcdG5ld19mb2xpbyA9IGFsbG9jX2ZyZXNoX2h1Z2V0bGJfZm9saW8oaCwgZ2ZwX21hc2ssXG5cdFx0XHRcdFx0XHRcdCAgICAgIG5pZCwgTlVMTCk7XG5gYGBcblxuQWgsIHJpZ2h0IHRoZXJlISBJdCdzIGNsZWFyIHRoYXQgdGhpcyBpcyB0aGUgc291cmNlIG9mIHRoZSBgTlVMTGAgbm9kZW1hc2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGlzIGJlaW5nIGRvbmUsIHdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgaGVyZSwgYW5kIGlmIGl0J3MgY29ycmVjdC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb250ZXh0IG9mIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AgdG8gc2VlIHdoYXQncyBkcml2aW5nIHRoaXMgZGVjaXNpb24gYW5kIGRldGVybWluZSB0aGUgaW1wbGljYXRpb25zLiBJJ2xsIHN0YXJ0IGJ5IGV4YW1pbmluZyB0aGF0IGZ1bmN0aW9uIG1vcmUgY2xvc2VseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3OTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6NTAuNTAxNjg4OTQ5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4Mzc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjY4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjY4MDpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4yNjgxOlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjY4MjpcXHRcXHR9IGVsc2Uge1xcbjI2ODM6XFx0XFx0XFx0aCA9IGZvbGlvX2hzdGF0ZShvbGRfZm9saW8pO1xcbjI2ODQ6XFx0XFx0XFx0aWYgKCFuZXdfZm9saW8pIHtcXG4yNjg1OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2aHVnZXRsYl9sb2NrKTtcXG4yNjg2OlxcdFxcdFxcdFxcdGdmcF9tYXNrID0gaHRsYl9hbGxvY19tYXNrKGgpIHwgX19HRlBfVEhJU05PREU7XFxuMjY4NzpcXHRcXHRcXHRcXHRuZXdfZm9saW8gPSBhbGxvY19mcmVzaF9odWdldGxiX2ZvbGlvKGgsIGdmcF9tYXNrLFxcbjI2ODg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgbmlkLCBOVUxMKTtcXG4yNjg5OlxcdFxcdFxcdFxcdGlmICghbmV3X2ZvbGlvKVxcbjI2OTA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjY5MTpcXHRcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjI2OTI6XFx0XFx0XFx0fVxcbjI2OTM6XFx0XFxuMjY5NDpcXHRcXHRcXHQvKlxcbjI2OTU6XFx0XFx0XFx0ICogT2ssIG9sZF9mb2xpbyBpcyBzdGlsbCBhIGdlbnVpbmUgZnJlZSBodWdlcGFnZS4gUmVtb3ZlIGl0IGZyb21cXG4yNjk2OlxcdFxcdFxcdCAqIHRoZSBmcmVlbGlzdCBhbmQgZGVjcmVhc2UgdGhlIGNvdW50ZXJzLiBUaGVzZSB3aWxsIGJlXFxuMjY5NzpcXHRcXHRcXHQgKiBpbmNyZW1lbnRlZCBhZ2FpbiB3aGVuIGNhbGxpbmcgYWNjb3VudF9uZXdfaHVnZXRsYl9mb2xpbygpXFxuMjY5ODpcXHRcXHRcXHQgKiBhbmQgZW5xdWV1ZV9odWdldGxiX2ZvbGlvKCkgZm9yIG5ld19mb2xpby4gVGhlIGNvdW50ZXJzIHdpbGxcXG4yNjk5OlxcdFxcdFxcdCAqIHJlbWFpbiBzdGFibGUgc2luY2UgdGhpcyBoYXBwZW5zIHVuZGVyIHRoZSBsb2NrLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNTo1MC41MDE5NzQ2MjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk4NTE0OTQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKk15IFBlcnNwZWN0aXZlIG9uIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AqKlxuXG5SaWdodCwgc28gYGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvYC4uLiB0aGF0IGZ1bmN0aW9uJ3Mgc2lnbmF0dXJlIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyBpbXBvcnRhbnQgaW4gaHVnZSBwYWdlIG1hbmFnZW1lbnQuIFRoZSBuYW1lIGl0c2VsZiBpcyBmYWlybHkgZGVzY3JpcHRpdmUsIGluZGljYXRpbmcgYSB0d28tcGFydCBvcGVyYXRpb24uIFwiQWxsb2NcIiBzdWdnZXN0cyBhbGxvY2F0aW5nIGEgaHVnZXRsYiBmb2xpbyAoYSBjb250aWd1b3VzIHJlZ2lvbiBvZiBtZW1vcnkgc3VpdGFibGUgZm9yIGEgbGFyZ2UgcGFnZSksIGFuZCBcImRpc3NvbHZlXCIgaW1wbGllcyB0ZWFyaW5nIGl0IGRvd24sIHdoaWNoIG11c3QgbWVhbiB3ZSBhcmUgbG9va2luZyBhdCBpc29sYXRpbmcgYSBzaW5nbGUgcGFnZSBpbiB0aGUgZm9saW8gb3IgbW92aW5nIGl0IGVsc2V3aGVyZS4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfcGFnZWAgaXMgdGhlIGtleS4gVGhhdCBmdW5jdGlvbiBjbGVhcmx5IG9yY2hlc3RyYXRlcyB0aGUgaXNvbGF0aW9uIG9yLCBwb3RlbnRpYWxseSwgdGhlIHRvdGFsIGRlY29uc3RydWN0aW9uIG9mIGEgaHVnZSBwYWdlLiBTbywgYGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvYCBpcyBsaWtlbHkgKnRoZSogd29ya2hvcnNlIOKAkyB0aGUgY29yZSBtZWNoYW5pc20gdGhhdCBlaXRoZXIgY2FydmVzIG91dCBhIHNpbmdsZSBwYWdlIGZyb20gYSBsYXJnZXIgYWxsb2NhdGlvbiwgcHJvYmFibHkgc28gdGhhdCBhIHN1YnNlcXVlbnQgYWxsb2NhdGlvbiBjYW4gYmUgbWFkZSwgcGVyaGFwcyB0byBwcmV2ZW50IGZyYWdtZW50YXRpb24gb3IgdG8gZmFjaWxpdGF0ZSBhIG1pZ3JhdGlvbi4gVGhlIGNvbnRleHQgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXN0IG9mIHRoZSBodWdlIHBhZ2UgaW5mcmFzdHJ1Y3R1cmUuIEFueSBlcnJvciBwYXRocyBhcmUgb2J2aW91c2x5IGdvaW5nIHRvIGJlIGltcG9ydGFudCB0byBzY3J1dGluaXplLCBiZWNhdXNlIG1lc3NpbmcgdXAgaHVnZSBwYWdlIGFsbG9jYXRpb24gb3IgZGVhbGxvY2F0aW9uIHdvdWxkIGJlIGEgcGVyZm9ybWFuY2Uga2lsbGVyLCBubyBkb3VidC4gVW5kZXJzdGFuZGluZyB0aGUgbG9ja2luZyBpbnZvbHZlZCBpbiBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX3BhZ2VgIGlzIGFsc28gY3JpdGljYWwsIHNpbmNlIGl0IHNob3VsZCBwcm92aWRlIHRoZSBwcm90ZWN0aW9uIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIGZvbGlvIHN0cnVjdHVyZS4gVGhpcyBsb29rcyBsaWtlIGEgcG90ZW50aWFsbHkgc2Vuc2l0aXZlIGFyZWEgZm9yIGNvbmN1cnJlbmN5IGJ1Z3MsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXMgYWNjZXNzaW5nIHRoZSBzYW1lIGh1Z2V0bGIgcmVnaW9uLCBvciBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIGR5bmFtaWMgY29uZmlndXJhdGlvbiBvZiBodWdlIHBhZ2VzLiBPdmVyYWxsLCB0aGUgcmVsYXRpb25zaGlwIGlzIHZlcnkgY2xlYXIgYW5kIHRoZSBpbnRlbnQgaXMgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIGlzIHByb2JhYmx5IGEgY2VudHJhbCBjb21wb25lbnQgZm9yIG1hbmFnaW5nIGxhcmdlIG1lbW9yeSByZWdpb25zIGFuZCBlbnN1cmluZyBlZmZpY2llbnQgcGFnZSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDkyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNTo1NC40ODcxMjczODFaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MTA4NjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MjU2MD12b2lkIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNjM0LS8qXFxubW0vaHVnZXRsYi5jOjI2MzU6ICogYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8gLSBBbGxvY2F0ZSBhIG5ldyBmb2xpbyBhbmQgZGlzc29sdmVcXG5tbS9odWdldGxiLmMtMjYzNi0gKiB0aGUgb2xkIG9uZVxcbi0tXFxubW0vaHVnZXRsYi5jLTI2NDAtICovXFxubW0vaHVnZXRsYi5jOjI2NDE6c3RhdGljIGludCBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgZm9saW8gKm9sZF9mb2xpbyxcXG5tbS9odWdldGxiLmMtMjY0Mi1cXHRcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZXRsYi5jPTI3Mjc9aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZXRsYi5jLTI3NDUtXFx0ZWxzZSBpZiAoIWZvbGlvX3JlZl9jb3VudChmb2xpbykpXFxubW0vaHVnZXRsYi5jOjI3NDY6XFx0XFx0cmV0ID0gYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW8oZm9saW8sIGxpc3QpO1xcbm1tL2h1Z2V0bGIuYy0yNzQ3LVxcbi0tXFxubW0vaHVnZXRsYi5jPTI3NTg9aW50IHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNzk3LVxcbm1tL2h1Z2V0bGIuYzoyNzk4OlxcdFxcdFxcdFxcdHJldCA9IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKGZvbGlvLCBcXHUwMDI2bGlzdCk7XFxubW0vaHVnZXRsYi5jLTI3OTktXFx0XFx0XFx0XFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTU6NTQuNTQ1MjQyMDQ2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MDM4MzgwMzM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIdWdlIFBhZ2UgQWxsb2NhdGlvbiBhbmQgRGlzc29sdXRpb24gZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gaHVnZSBwYWdlIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGZvbGlvIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGtlcm5lbC4gSXQgc2VlbXMgbGlrZSBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvYCBnZXRzIGNhbGxlZCBmcm9tIG11bHRpcGxlIHBsYWNlcywgaW5jbHVkaW5nIG1lbW9yeSBob3RwbHVnLCBDTUEsIGFuZCBtZW1vcnkgZmFpbHVyZSBzY2VuYXJpb3MuICBgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvc2AgaXMgbW9yZSBuYXJyb3dseSB0aWVkIHRvIG1lbW9yeSBob3RwbHVnLiBUaGlzIGhhcyBgV29ydGhGdXp6aW5nOiB0cnVlYCwgd2hpY2ggaXMgaW50ZXJlc3Rpbmcg4oCTIGluZGljYXRpbmcgdGhpcyBpcyBhbiBhcmVhIHdoZXJlIGZ1enppbmcgY291bGQgcG90ZW50aWFsbHkgdW5jb3ZlciBzb21lIHN1YnRsZSBpc3N1ZXMuXG5cblRoZSBjb3JlIGZ1bmN0aW9ucyBvZiBpbnRlcmVzdCBoZXJlLCB3aGljaCBzaG91bGQgYmUgdGhlIGZvY3VzIG9mIHNvbWUgdGFyZ2V0ZWQgZnV6emluZywgYXJlOiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCwgYGFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb2AsIGBhbGxvY19hbmRfZGlzc29sdmVfaHVnZXRsYl9mb2xpb2AsIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gLCBhbmQgYHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NgLiBJIHdpbGwgbWFrZSBhIG5vdGUgdG8gcHJpb3JpdGlzZSB0aGVzZSBmb3IgZnV6emluZy5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIGlmIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIGlzIHN0YXRpYyBvciBub3QuLi4gb2theSwgaXQncyBub3Qgc3RhdGljIGFuZCBpdCdzIGRlZmluZWQgaW4gYG1tL2h1Z2V0bGJfY21hLmNgLiBUaGlzIHRlbGxzIG1lIGl0IGlzIGNhbGxhYmxlIGZyb20gb3V0c2lkZSB0aGF0IGZpbGUuXG5cbk5vdywgbGV0J3MgcmV2aWV3IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBIVUdFVExCRlNgLCBgQ01BYCwgYENPTlRJR19BTExPQ2AsIGFuZCB0aGVuIGBBUkNIX0hBU19HSUdBTlRJQ19QQUdFYC4gVGhlIGluY2x1c2lvbiBvZiBgQVJDSF9IQVNfR0lHQU5USUNfUEFHRWAgaXMgYSBiaXQgdW51c3VhbC4gVGhpcyBpcyB0eXBpY2FsbHkgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZlYXR1cmUuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHRvIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgdXNlci1zZWxlY3RhYmxlIGNvbmZpZyBvciBzb21ldGhpbmcgaW1wbGljaXRseSBlbmFibGVkIGJhc2VkIG9uIHRoZSBhcmNoaXRlY3R1cmUuIEl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29uZmlndXJhdGlvbiBzcGFjZSB3aGVuIGNyYWZ0aW5nIGVmZmVjdGl2ZSBmdXp6aW5nIHN0cmF0ZWdpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzk5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE2OjEyLjU4MzYyNDI2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk1MjkyNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBBUkNIX0hBU19HSUdBTlRJQ19QQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9LY29uZmlnPTI4Mz1jb25maWcgSFVHRVRMQl9QTURfUEFHRV9UQUJMRV9TSEFSSU5HXFxuLS1cXG5mcy9LY29uZmlnLTI4Ni1cXG5mcy9LY29uZmlnOjI4Nzpjb25maWcgQVJDSF9IQVNfR0lHQU5USUNfUEFHRVxcbmZzL0tjb25maWctMjg4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTY6MTQuNTc4OTIxOTQ4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxODcwMzg4OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYEFSQ0hfSEFTX0dJR0FOVElDX1BBR0VgLiBJdCdzIGEgYm9vbGVhbiBvcHRpb24sIGJ1dCB0aGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IGl0J3MgKmFyY2gtc2VsZWN0ZWQqIGFuZCBkb2Vzbid0IGhhdmUgYSBkaXJlY3QgcHJvbXB0LiBUaGF0IG1lYW5zIHRoZSBhcmNoaXRlY3R1cmUgaXRzZWxmIGRlY2lkZXMgd2hldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90LiBNeSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB3ZSBzaG91bGRuJ3QgcmVhbGx5IGJvdGhlciBpbmNsdWRpbmcgaXQgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBzaW5jZSBpdCdzIHVsdGltYXRlbHkgdXAgdG8gdGhlIGFyY2hpdGVjdHVyZS4gT3IsIHdlICpjb3VsZCogaW5jbHVkZSBpdCwgYnV0IGl0IHdvdWxkIGVmZmVjdGl2ZWx5IGRvIG5vdGhpbmcgaWYgdGhlIGFyY2hpdGVjdHVyZSBkb2Vzbid0IGhhdmUgaXQgZW5hYmxlZCBpbnRyaW5zaWNhbGx5LiBJdCB3b3VsZCBqdXN0IGJlIG5vaXNlLlxuXG5Ob3csIGxldCdzIHN3aXRjaCBnZWFycyBhIGJpdC4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBDT05USUdfQUxMT0NgLiBJIHdvbmRlciBob3cgdGhhdCdzIHJlbGF0ZWQgdG8gYWxsIG9mIHRoaXMuIEkgYmV0IGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGUgcGh5c2ljYWwgbWVtb3J5IGFsbG9jYXRpb24uIExldCdzIHNlZSBob3cgaXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTM5LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTY6MjIuNzY1OTYyOTgzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg0MTQ5MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT05USUdfQUxMT0NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NzA5PWNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRVxcbi0tXFxubW0vS2NvbmZpZy03MTgtXFxubW0vS2NvbmZpZzo3MTk6Y29uZmlnIENPTlRJR19BTExPQ1xcbm1tL0tjb25maWctNzIwLVxcdGRlZl9ib29sIChNRU1PUllfSVNPTEFUSU9OIFxcdTAwMjZcXHUwMDI2IENPTVBBQ1RJT04pIHx8IENNQVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNjoyNC44NTAxMjM3MjRaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1ODMzNTcwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIExvZ2ljKipcblxuT2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBDT05USUdfQUxMT0NgIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMuIFNwZWNpZmljYWxseSwgaXQncyBkZWZpbmVkIGJ5IGVpdGhlciB0aGUgY29tYmluYXRpb24gb2YgYE1FTU9SWV9JU09MQVRJT05gIGFuZCBgQ09NUEFDVElPTmAsIG9yIGl0J3MgZGlyZWN0bHkgdGllZCB0byBgQ01BYC4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZDogaWYgYENNQWAgaXMgZW5hYmxlZCwgYENPTlRJR19BTExPQ2AgaXMgZW5hYmxlZC4gQSBjbGVhciBkZXBlbmRlbmN5LlxuXG5UaGVyZWZvcmUsIGxvb2tpbmcgYXQgd2hhdCdzIHNldCB0byBcInllc1wiIEkgc2VlIGBIVUdFVExCRlNgIGFuZCBgQ01BYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgY29udHJpYnV0aW5nIGZhY3RvcnMuXG5cbkJ1dCBJJ20gbm90IHN0b3BwaW5nIHRoZXJlLiBJIG5lZWQgdG8gdGhpbmsgYmlnZ2VyLiBJJ20gZ29pbmcgdG8gbG9vayBhdCBvdGhlciBjb25maWd1cmF0aW9ucy4gUGFydGljdWxhcmx5LCBJIG5lZWQgdG8gY2hlY2sgd2hldGhlciBgTUVNT1JZX0hPVFBMVUdgIG9yIGBNRU1PUllfRkFJTFVSRWAgYXJlIHNldCB0byB0cmlnZ2VyIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gLiBJdCBjb3VsZCBiZSB1c2VmdWwgZm9yIGZ1cnRoZXIgb3B0aW1pemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDUxNywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNjoyOS4xMDg0NjI2MDZaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMjMzODYyODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD02OTE9Ym9vbCBodWdldGxiX2Jvb3RtZW1fcGFnZV96b25lc192YWxpZChpbnQgbmlkLCBzdHJ1Y3QgaHVnZV9ib290bWVtX3BhZ2UgKm0pO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY5Mi1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo2OTM6aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC02OTQtaW50IHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xMDk4PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZvbGlvICpmaWxlbWFwX2xvY2tfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTEwMy1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDoxMTA0OnN0YXRpYyBpbmxpbmUgaW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMDUtXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz04NTU9aXNvbGF0ZV9taWdyYXRlcGFnZXNfYmxvY2soc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgbG93X3BmbixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy05ODktXFx0XFx0XFx0Zm9saW8gPSBwYWdlX2ZvbGlvKHBhZ2UpO1xcbm1tL2NvbXBhY3Rpb24uYzo5OTA6XFx0XFx0XFx0cmV0ID0gaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvKGZvbGlvLCBcXHUwMDI2Y2MtXFx1MDAzZW1pZ3JhdGVwYWdlcyk7XFxubW0vY29tcGFjdGlvbi5jLTk5MS1cXG5tbS9jb21wYWN0aW9uLmMtOTkyLVxcdFxcdFxcdC8qXFxubW0vY29tcGFjdGlvbi5jOjk5MzpcXHRcXHRcXHQgKiBGYWlsIGlzb2xhdGlvbiBpbiBjYXNlIGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbygpXFxubW0vY29tcGFjdGlvbi5jLTk5NC1cXHRcXHRcXHQgKiByZXBvcnRzIGFuIGVycm9yLiBJbiBjYXNlIG9mIC1FTk9NRU0sIGFib3J0IHJpZ2h0IGF3YXkuXFxuLS1cXG5tbS9odWdldGxiLmM9MjY0MT1zdGF0aWMgaW50IGFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvKHN0cnVjdCBmb2xpbyAqb2xkX2ZvbGlvLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI3MjYtXFxubW0vaHVnZXRsYi5jOjI3Mjc6aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbm1tL2h1Z2V0bGIuYy0yNzI4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMDE6MTY6MzEuMzMxODU1ODg3WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5OTY2NzAzMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKlRyYWNpbmcgdGhlIEh1Z2UgUGFnZSBQYXRoKipcblxuUmlnaHQsIHNvIGBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9gIOKAkyB0aGF0J3MgdGhlIGtleSBmdW5jdGlvbiB3ZSdyZSBjb25jZXJuZWQgd2l0aC4gQW5kIHRoZSBjbHVlIGhlcmUgaXMgdGhhdCBpdCdzIGNhbGxlZCBmcm9tIGBtbS9jb21wYWN0aW9uLmNgLiBJbW1lZGlhdGVseSwgdGhhdCB0ZWxscyBtZSB3ZSdyZSBsb29raW5nIGF0IHNvbWV0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBjb21wYWN0aW9uLCB3aGljaCBtZWFucyAqKkNPTVBBQ1RJT04qKiBpcyBkZWZpbml0ZWx5IGEgcmVsZXZhbnQgZmFjdG9yLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgYHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NgLiBUaGlzIHNvdW5kcyBsaWtlIGEgcHJpbWUgcGxhY2UgdG8gY29udGludWUgbXkgaW52ZXN0aWdhdGlvbi4gSSBuZWVkIHRvIGRldGVybWluZSBob3cgdGhlIHR3byByZWxhdGUgYW5kIGhvdyBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvYCBwbGF5cyBhIHBhcnQgaW4gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgcmVsYXRlZCB0byBodWdlIHBhZ2VzIGFuZCBjb21wYWN0aW9uLiBJIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzOTMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNjozNC4zMjg1Mjg2NjhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMDk3NjYwMDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NjkzPWludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6Njk0OmludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTY5NS12b2lkIHdhaXRfZm9yX2ZyZWVkX2h1Z2V0bGJfZm9saW9zKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9MTEwND1zdGF0aWMgaW5saW5lIGludCBpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMDktXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTExMDpzdGF0aWMgaW5saW5lIGludCByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTExMTEtXFx0XFx0dW5zaWduZWQgbG9uZyBlbmRfcGZuKVxcbi0tXFxubW0vaHVnZXRsYi5jPTI3Mjc9aW50IGlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubW0vaHVnZXRsYi5jLTI3NTEtLypcXG5tbS9odWdldGxiLmM6Mjc1MjogKiAgcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvcyAtIFJlcGxhY2UgZnJlZSBodWdlcGFnZSBmb2xpb3MgaW4gYSBnaXZlbiBwZm5cXG5tbS9odWdldGxiLmMtMjc1My0gKiAgcmFuZ2Ugd2l0aCBuZXcgZm9saW9zLlxcbi0tXFxubW0vaHVnZXRsYi5jLTI3NTctICovXFxubW0vaHVnZXRsYi5jOjI3NTg6aW50IHJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3ModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgZW5kX3BmbilcXG5tbS9odWdldGxiLmMtMjc1OS17XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzEwMT1pbnQgYWxsb2NfY29udGlnX2Zyb3plbl9yYW5nZV9ub3Byb2YodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzE3OC1cXHQgKiBidWRkeSBzeXN0ZW0uICBBZnRlciB0aGUgbWlncmF0aW9uIG9mIGluLXVzZSBodWdlIHBhZ2VzIGlzIGNvbXBsZXRlZCxcXG5tbS9wYWdlX2FsbG9jLmM6NzE3OTpcXHQgKiB3ZSB3aWxsIGludm9rZSByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zKCkgdG8gZW5zdXJlIHRoYXQgdGhlc2VcXG5tbS9wYWdlX2FsbG9jLmMtNzE4MC1cXHQgKiBodWdlcGFnZXMgYXJlIHByb3Blcmx5IHJlbGVhc2VkIHRvIHRoZSBidWRkeSBzeXN0ZW0uXFxubW0vcGFnZV9hbGxvYy5jLTcxODEtXFx0ICovXFxubW0vcGFnZV9hbGxvYy5jOjcxODI6XFx0cmV0ID0gcmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvcyhzdGFydCwgZW5kKTtcXG5tbS9wYWdlX2FsbG9jLmMtNzE4My1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QwMToxNjozNi41MzgzMDA0NzJaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI4MTAxMjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBhIFBvdGVudGlhbCBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgVnVsbmVyYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zYCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHdoYXQgc2VlbXMgbGlrZSBhbiBpbnRlcmVzdGluZyBjb2RlIHBhdGguIEl0J3MgY2FsbGVkIGZyb20gYGFsbG9jX2NvbnRpZ19mcm96ZW5fcmFuZ2Vfbm9wcm9mYCB3aXRoaW4gYG1tL3BhZ2VfYWxsb2MuY2AsIHdoaWNoIGlzIGEga2V5IGFyZWEgZm9yIGNvbnRpZ3VvdXMgbWVtb3J5IGFsbG9jYXRpb24uIFRoaXMsIGluIHR1cm4sIGlzIHBhcnQgb2YgYGFsbG9jX2NvbnRpZ19yYW5nZWAsIGEgZnVuY3Rpb24gZnVuZGFtZW50YWwgdG8gYm90aCBDTUEgKENvbnRpZ3VvdXMgTWVtb3J5IEFsbG9jYXRvcikgYW5kIG1lbW9yeSBob3RwbHVnZ2luZy4gVGhhdCBnaXZlcyB1cyBhIHByZXR0eSBnb29kIHNlbnNlIG9mIHRoZSBjb250ZXh0LlxuXG5HaXZlbiB0aGF0IGNvbnRleHQsIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnIG9wdGlvbnMgd291bGQgbG9naWNhbGx5IGJlIGBIVUdFVExCRlNgLCBgQ01BYCwgYENPTVBBQ1RJT05gLCBgTUVNT1JZX0hPVFBMVUdgLCBhbmQgYE1FTU9SWV9GQUlMVVJFYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgcHJlcmVxdWlzaXRlIGZlYXR1cmVzIGZvciB0aGUgY29kZSBpbiBxdWVzdGlvbiB0byBiZSBhY3RpdmUuXG5cbk5vdywgbGV0J3MgcmVmaW5lIHRoZSBzcGVjaWZpYyBzeW1ib2xzIHRvIGZvY3VzIG9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgZnVuY3Rpb25zIGludm9sdmVkIHRvIGFzc2VzcyB0aGUgcG90ZW50aWFsIGltcGFjdC4gSSdsbCBwdXQgYSBwaW4gb24gdGhlIGZvbGxvd2luZzogYGh1Z2V0bGJfY21hX2FsbG9jX2Zyb3plbl9mb2xpb2AsIGBhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9gLCBgYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW9gLCBgaXNvbGF0ZV9vcl9kaXNzb2x2ZV9odWdlX2ZvbGlvYCwgYW5kIGByZXBsYWNlX2ZyZWVfaHVnZXBhZ2VfZm9saW9zYCB3aGljaCBzZWVtIGNsb3NlbHkgcmVsYXRlZCB0byB0aGUgY29yZSBsb2dpYy5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGFwcGVhcnMgdG8gYmUgYSBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdpdGhpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYC4gVGhlIHZ1bG5lcmFiaWxpdHkgdHJpZ2dlcnMgd2hlbiBgbm9kZW1hc2tgIGlzIE5VTEwuIFRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gZ2lnYW50aWMgaHVnZXBhZ2UgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IGR1cmluZyB0aGUgcHJvY2VzcyBvZiBkaXNzb2x2aW5nIGFuZCByZXBsYWNpbmcgZnJlZSBodWdlcGFnZXMuIEl0IHNlZW1zIGxpa2VseSB0aGUgdHJpZ2dlciBpcyB3aGVuIGNvbXBhY3Rpb24gaXMgcnVubmluZywgQ01BIGlzIGFsbG9jYXRpbmcsIG9yIG1lbW9yeSBob3RwbHVnIGlzIG9wZXJhdGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRlZXAgd2l0aGluIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLlxuXG5DcnVjaWFsbHksIGNhbiB0aGlzIGJlIHJlYWNoZWQgZnJvbSB1c2Vyc3BhY2U/IENNQSBhbGxvY2F0aW9ucyBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gdXNlcnNwYWNlLCBlaXRoZXIgZGlyZWN0bHkgdGhyb3VnaCBodWdlcGFnZSBhbGxvY2F0aW9ucywgb3IgaW5kaXJlY3RseSB0aHJvdWdoIGludGVyYWN0aW9ucyB3aXRoIG1lbW9yeSBob3RwbHVnIG9yIGNvbXBhY3Rpb24sIHdoaWNoIHVzZXJzcGFjZSBjYW4gaW5pdGlhdGUuIFRoZXJlZm9yZSwgKnllcyosIHRoaXMgcGF0aCBpcyBpbmRlZWQgcmVhY2hhYmxlLCBhbmQgdGhhdCBzaWduaWZpY2FudGx5IGluY3JlYXNlcyB0aGUgcG90ZW50aWFsIHJpc2suIEdpdmVuIHRoaXMgaXMgYSByZWFjaGFibGUsIGZ1bmN0aW9uYWwgY2hhbmdlLCBmdXp6aW5nIHdvdWxkIGJlIGFuIGFwcHJvcHJpYXRlIG5leHQgc3RlcCBpbiB0aGUgdGVzdGluZyBtZXRob2RvbG9neS5cblxuSSdsbCBwcm9jZWVkIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIHRvIGZvcm1hbGl6ZSB0aGVzZSBmaW5kaW5ncyBhbmQgZG9jdW1lbnQgdGhlIHJlbGV2YW50IHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYyNzEsIk91dHB1dFRva2VucyI6MjA1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDAxOjE2OjQzLjgxOTMxNTI1MloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjIwMTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIkNNQVwiLFxuICAgIFwiQ09NUEFDVElPTlwiLFxuICAgIFwiTUVNT1JZX0hPVFBMVUdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9cIixcbiAgICBcImFsbG9jX2dpZ2FudGljX2Zyb3plbl9mb2xpb1wiLFxuICAgIFwiYWxsb2NfYW5kX2Rpc3NvbHZlX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcImlzb2xhdGVfb3JfZGlzc29sdmVfaHVnZV9mb2xpb1wiLFxuICAgIFwicmVwbGFjZV9mcmVlX2h1Z2VwYWdlX2ZvbGlvc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGBodWdldGxiX2NtYV9hbGxvY19mcm96ZW5fZm9saW9gIHdoZW4gYG5vZGVtYXNrYCBpcyBOVUxMLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgZ2lnYW50aWMgaHVnZXBhZ2UgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHdoZW4gZGlzc29sdmluZyBhbmQgcmVwbGFjaW5nIGZyZWUgaHVnZXBhZ2VzIChlLmcuLCBkdXJpbmcgY29tcGFjdGlvbiwgQ01BIGFsbG9jYXRpb24sIG9yIG1lbW9yeSBob3RwbHVnKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJDTUFcIixcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIk1FTU9SWV9IT1RQTFVHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvXCIsXG4gICAgXCJhbGxvY19naWdhbnRpY19mcm96ZW5fZm9saW9cIixcbiAgICBcImFsbG9jX2FuZF9kaXNzb2x2ZV9odWdldGxiX2ZvbGlvXCIsXG4gICAgXCJpc29sYXRlX29yX2Rpc3NvbHZlX2h1Z2VfZm9saW9cIixcbiAgICBcInJlcGxhY2VfZnJlZV9odWdlcGFnZV9mb2xpb3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBgaHVnZXRsYl9jbWFfYWxsb2NfZnJvemVuX2ZvbGlvYCB3aGVuIGBub2RlbWFza2AgaXMgTlVMTC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGdpZ2FudGljIGh1Z2VwYWdlIGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB3aGVuIGRpc3NvbHZpbmcgYW5kIHJlcGxhY2luZyBmcmVlIGh1Z2VwYWdlcyAoZS5nLiwgZHVyaW5nIGNvbXBhY3Rpb24sIENNQSBhbGxvY2F0aW9uLCBvciBtZW1vcnkgaG90cGx1ZykuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvl9gc[1] Phase: Succeeded StartedAt: 2026-07-03 01:16:55 +0000 UTC FinishedAt: 2026-07-03 01:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-03 01:16:55 +0000 UTC FinishedAt: 2026-07-03 01:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2] Phase: Succeeded StartedAt: 2026-07-03 01:16:55 +0000 UTC FinishedAt: 2026-07-03 05:28:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-03 01:16:55 +0000 UTC FinishedAt: 2026-07-03 05:28:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","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-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-03 01:16:55 +0000 UTC FinishedAt: 2026-07-03 01:17:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-03 01:16:55 +0000 UTC FinishedAt: 2026-07-03 01:17:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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-workflowvl9gc/series-workflowvl9gc-convert-artifact-1299096930/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-03 01:17:05 +0000 UTC FinishedAt: 2026-07-03 01:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-03 01:17:05 +0000 UTC FinishedAt: 2026-07-03 01:51:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a444265e-7dd8-4975-88ba-92bd116a2a60,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-workflowvl9gc/series-workflowvl9gc-convert-artifact-1299096930/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": "fbd3c41a-5a43-46f6-b920-c3d65afa4f6f", "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-workflowvl9gc/series-workflowvl9gc-build-action-1557789984/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-03 01:17:05 +0000 UTC FinishedAt: 2026-07-03 01:47:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a444265e-7dd8-4975-88ba-92bd116a2a60,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-workflowvl9gc/series-workflowvl9gc-convert-artifact-1299096930/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": "fbd3c41a-5a43-46f6-b920-c3d65afa4f6f", "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-workflowvl9gc/series-workflowvl9gc-build-action-1557789984/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-03 01:51:32 +0000 UTC FinishedAt: 2026-07-03 01:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-03 01:51:32 +0000 UTC FinishedAt: 2026-07-03 01:51:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-03 01:51:32 +0000 UTC FinishedAt: 2026-07-03 01:51:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-03 01:51:32 +0000 UTC FinishedAt: 2026-07-03 01:51:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","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-workflowvl9gc/series-workflowvl9gc-convert-artifact-4230281149/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-03 01:51:53 +0000 UTC FinishedAt: 2026-07-03 01:54:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-03 01:51:53 +0000 UTC FinishedAt: 2026-07-03 01:53:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fbd3c41a-5a43-46f6-b920-c3d65afa4f6f,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-workflowvl9gc/series-workflowvl9gc-build-action-1557789984/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-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-03 01:54:07 +0000 UTC FinishedAt: 2026-07-03 01:54:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-03 01:54:07 +0000 UTC FinishedAt: 2026-07-03 01:54:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-03 01:54:07 +0000 UTC FinishedAt: 2026-07-03 02:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-03 01:54:07 +0000 UTC FinishedAt: 2026-07-03 02:24:20 +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:*a444265e-7dd8-4975-88ba-92bd116a2a60,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-workflowvl9gc/series-workflowvl9gc-convert-artifact-4230281149/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": "5b00eddc-2feb-45a4-bd52-b58d398b837b", "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-workflowvl9gc/series-workflowvl9gc-build-action-1358141209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-03 01:54:07 +0000 UTC FinishedAt: 2026-07-03 02:24:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a444265e-7dd8-4975-88ba-92bd116a2a60,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-workflowvl9gc/series-workflowvl9gc-convert-artifact-4230281149/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": "5b00eddc-2feb-45a4-bd52-b58d398b837b", "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-workflowvl9gc/series-workflowvl9gc-build-action-1358141209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-03 02:24:20 +0000 UTC FinishedAt: 2026-07-03 02:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-03 02:24:20 +0000 UTC FinishedAt: 2026-07-03 02:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-03 02:24:20 +0000 UTC FinishedAt: 2026-07-03 02:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-03 02:24:20 +0000 UTC FinishedAt: 2026-07-03 02:26:25 +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:*5b00eddc-2feb-45a4-bd52-b58d398b837b,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-workflowvl9gc/series-workflowvl9gc-build-action-1358141209/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-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-03 02:26:35 +0000 UTC FinishedAt: 2026-07-03 05:28:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-03 02:26:35 +0000 UTC FinishedAt: 2026-07-03 05:28:00 +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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"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:*fbd3c41a-5a43-46f6-b920-c3d65afa4f6f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b00eddc-2feb-45a4-bd52-b58d398b837b,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-workflowvl9gc/series-workflowvl9gc-build-action-1557789984/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-workflowvl9gc/series-workflowvl9gc-build-action-1358141209/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-03 02:26:35 +0000 UTC FinishedAt: 2026-07-03 02:26:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-03 02:26:35 +0000 UTC FinishedAt: 2026-07-03 02:26:41 +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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"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-workflowvl9gc/series-workflowvl9gc-convert-artifact-2026715202/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-03 02:26:35 +0000 UTC FinishedAt: 2026-07-03 02:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-03 02:26:35 +0000 UTC FinishedAt: 2026-07-03 02:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-03 02:26:35 +0000 UTC FinishedAt: 2026-07-03 02:26:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-03 02:26:45 +0000 UTC FinishedAt: 2026-07-03 05:28:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvl9gc[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"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":["hugetlb_cma_alloc_frozen_folio","alloc_gigantic_frozen_folio","alloc_and_dissolve_hugetlb_folio","isolate_or_dissolve_huge_folio","replace_free_hugepage_folios"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"55558ff9d39dada178e584f0a3be18603622c9db","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","CMA","COMPACTION","MEMORY_HOTPLUG"],"series_id":"559dc7b0-9211-4995-b16e-473f10b959b7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-03 02:26:45 +0000 UTC FinishedAt: 2026-07-03 05:27:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fbd3c41a-5a43-46f6-b920-c3d65afa4f6f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*5b00eddc-2feb-45a4-bd52-b58d398b837b,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-workflowvl9gc/series-workflowvl9gc-build-action-1557789984/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-workflowvl9gc/series-workflowvl9gc-build-action-1358141209/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-workflowvl9gc/series-workflowvl9gc-convert-artifact-2026715202/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,}