Name: series-workflowr7k78 Phase: Succeeded StartedAt: 2026-07-21 09:56:22 +0000 UTC FinishedAt: 2026-07-21 13:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[0] Phase: Succeeded StartedAt: 2026-07-21 09:56:22 +0000 UTC FinishedAt: 2026-07-21 10:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[0].run-triage Phase: Succeeded StartedAt: 2026-07-21 09:56:22 +0000 UTC FinishedAt: 2026-07-21 10:19:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CONFIGFS_F_UVC", "USB_F_UVC", "USB_CONFIGFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CONFIGFS_F_UVC", "USB_F_UVC", "USB_CONFIGFS" ], "series_id": "0e375b85-e19f-4551-894e-49b5989abaad" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "uvcg_attach_configfs", "uvcg_config_remove_children", "uvc_alloc_inst" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DT05GSUdGU19GX1VWQyYjMzQ7LAogICAgJiMzNDtVU0JfRl9VVkMmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZjZ19hdHRhY2hfY29uZmlnZnMmIzM0OywKICAgICYjMzQ7dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuJiMzNDssCiAgICAmIzM0O3V2Y19hbGxvY19pbnN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIFVTQiBVVkMgZ2FkZ2V0IGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uIGJ5IHJlcGxhY2luZyBjb25maWdfZ3JvdXBfcHV0IHdpdGggdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIHBvdGVudGlhbCBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGggaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWJlOTFhMGNhODQzMmE2YzA1M2JmZDZkN2VmYTcxNzQ1Zjg1NDlhN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDEwOjE3OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuY1xuaW5kZXggNzBhMTQxNWVhNDAxNGYuLmRhMGZjODA4NGJiNjU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmNcbkBAIC0zODI5LDcgJiM0MzszODI5LDcgQEAgaW50IHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzKHN0cnVjdCBmX3V2Y19vcHRzICpvcHRzKVxuIFx0cmV0ID0gdXZjZ19jb25maWdfY3JlYXRlX2NoaWxkcmVuKFx1MDAyNm9wdHMtXHUwMDNlZnVuY19pbnN0Lmdyb3VwLFxuIFx0XHRcdFx0XHQgIFx1MDAyNnV2Y19mdW5jX3R5cGUpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Y29uZmlnX2dyb3VwX3B1dChcdTAwMjZvcHRzLVx1MDAzZWZ1bmNfaW5zdC5ncm91cCk7XG4mIzQzO1x0XHR1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4oXHUwMDI2b3B0cy1cdTAwM2VmdW5jX2luc3QuZ3JvdXApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DT05GSUdGU19GX1VWQyYjMzQ7LAogICAgJiMzNDtVU0JfRl9VVkMmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZjZ19hdHRhY2hfY29uZmlnZnMmIzM0OywKICAgICYjMzQ7dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuJiMzNDssCiAgICAmIzM0O3V2Y19hbGxvY19pbnN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIFVTQiBVVkMgZ2FkZ2V0IGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uIGJ5IHJlcGxhY2luZyBjb25maWdfZ3JvdXBfcHV0IHdpdGggdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIHBvdGVudGlhbCBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGggaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YmU5MWEwY2E4NDMyYTZjMDUzYmZkNmQ3ZWZhNzE3NDVmODU0OWE3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjEgMTA6MTc6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMKaW5kZXggNzBhMTQxNWVhNDAxNGYuLmRhMGZjODA4NGJiNjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jCkBAIC0zODI5LDcgJiM0MzszODI5LDcgQEAgaW50IHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzKHN0cnVjdCBmX3V2Y19vcHRzICpvcHRzKQogCXJldCA9IHV2Y2dfY29uZmlnX2NyZWF0ZV9jaGlsZHJlbigmYW1wO29wdHMtJmd0O2Z1bmNfaW5zdC5ncm91cCwKIAkJCQkJICAmYW1wO3V2Y19mdW5jX3R5cGUpOwogCWlmIChyZXQgJmx0OyAwKQotCQljb25maWdfZ3JvdXBfcHV0KCZhbXA7b3B0cy0mZ3Q7ZnVuY19pbnN0Lmdyb3VwKTsKJiM0MzsJCXV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbigmYW1wO29wdHMtJmd0O2Z1bmNfaW5zdC5ncm91cCk7CiAKIAlyZXR1cm4gcmV0OwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBHYWRnZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgaW4gdGhlIGB1dmNnX2F0dGFjaF9jb25maWdmc2AgZnVuY3Rpb24uIEkgc2VlIHRoYXQgYGNvbmZpZ19ncm91cF9wdXQoJmFtcDtvcHRzLSZndDtmdW5jX2luc3QuZ3JvdXApO2AgaGFzIGJlZW4gc3dhcHBlZCBvdXQgZm9yIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4oJmFtcDtvcHRzLSZndDtmdW5jX2luc3QuZ3JvdXApO2AuIEltbWVkaWF0ZWx5LCBteSBzcGlkZXktc2Vuc2UgdGluZ2xlczsgdGhpcyBzbWVsbHMgbGlrZSBhIGZpeCByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBDb25maWdGUyBmcmFtZXdvcmssIHBhcnRpY3VsYXJseSBhcm91bmQgZXJyb3IgaGFuZGxpbmcuCgpUaGUgb3JpZ2luYWwgY29kZSBsaWtlbHkgaGFkIGEgZmxhdyB0aGF0IGNvdWxkIGxlYWQgdG8gYSBsZWFrLCBhIHVzZS1hZnRlci1mcmVlLCBvciBhIHNpbWlsYXIga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSB3aGVuIGB1dmNnX2F0dGFjaF9jb25maWdmc2AgZmFpbHMgb3IgYmFpbHMgb3V0IGR1cmluZyBpdHMgZXhlY3V0aW9uLiBUaGUgbmV3IGZ1bmN0aW9uLCBgdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuYCwgaXMgYWxtb3N0IGNlcnRhaW5seSByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAgdGhlIENvbmZpZ0ZTIGdyb3VwJiMzOTtzIGNoaWxkcmVuIGJlZm9yZSB0aGUgZ3JvdXAgaXRzZWxmIGlzIHJlbGVhc2VkLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGEgKm11Y2gqIHNhZmVyIHdheSBvZiBoYW5kbGluZyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgoKTm93LCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBgdXZjZ19hdHRhY2hfY29uZmlnZnNgIGFuZCBgdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuYCB0byB1bmRlcnN0YW5kIHRoZSAqc3BlY2lmaWNzKiBvZiB0aGUgcG90ZW50aWFsIHByb2JsZW0gYW5kIGhvdyB0aGlzIGZpeCBhZGRyZXNzZXMgaXQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGhvdyB0aGUgQ29uZmlnRlMgZ3JvdXAgaXMgcG9wdWxhdGVkLCB3aGVyZSByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgYW5kIGhvdyB0aGUgZXJyb3IgcGF0aHMgaGFuZGxlIGZyZWVpbmcgdGhvc2UgcmVzb3VyY2VzLiBJIG5lZWQgdG8gY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMgYW5kIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzaWRlIGVmZmVjdHMuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2Y2dfYXR0YWNoX2NvbmZpZ2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYz0zODA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXZjZ19jb25maWdfZ3JvdXBfdHlwZSB1dmNfZnVuY190eXBlID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0zODIxLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jOjM4MjI6aW50IHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzKHN0cnVjdCBmX3V2Y19vcHRzICpvcHRzKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jLTM4MjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYC4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQsIGFzIGFsd2F5cywgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTtsbCBuZWVkIHRvIGZpbmQgZXZlcnkgcGxhY2UgaW4gdGhlIGNvZGUgd2hlcmUgYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYCBpcyBhY3R1YWxseSAqY2FsbGVkKi4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gcGllY2UgdG9nZXRoZXIgd2hhdCBpdCYjMzk7cyAqZG9pbmcqIGJ5IGFuYWx5emluZyB3aGF0IGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIGl0IGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhvc2UgY2FsbHMuIEkmIzM5O20gaG9waW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBnZXQgc2VhcmNoaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2Y2dfYXR0YWNoX2NvbmZpZ2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYz05MTI9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKnV2Y19hbGxvY19pbnN0KHZvaWQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmMtOTk4LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmM6OTk5Olx0cmV0ID0gdXZjZ19hdHRhY2hfY29uZmlnZnMob3B0cyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy0xMDAwLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYz0zODA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXZjZ19jb25maWdfZ3JvdXBfdHlwZSB1dmNfZnVuY190eXBlID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0zODIxLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jOjM4MjI6aW50IHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzKHN0cnVjdCBmX3V2Y19vcHRzICpvcHRzKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jLTM4MjMte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuaD0xODg9c3RhdGljIGlubGluZSBzdHJ1Y3QgdXZjZ19leHRlbnNpb24gKnRvX3V2Y2dfZXh0ZW5zaW9uKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmgtMTkyLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5oOjE5MzppbnQgdXZjZ19hdHRhY2hfY29uZmlnZnMoc3RydWN0IGZfdXZjX29wdHMgKm9wdHMpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5oLTE5NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjE2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBVVkMgR2FkZ2V0IEFsbG9jYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgbGVhZHMgbWUgdG8gYHV2Y19hbGxvY19pbnN0YCB3aXRoaW4gYGZfdXZjLmNgLiBUaGF0JiMzOTtzIHByZWNpc2VseSB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0aGUgVVZDIGdhZGdldCBpbnN0YW50aWF0aW9uIHRvIGtpY2sgb2ZmLiBUaGlzIHBvaW50cyBkaXJlY3RseSB0byB0aGUgVVNCIGdhZGdldCBVVkMgZnVuY3Rpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBhbGxvY2F0aW9uIGxvZ2ljLiBCZWZvcmUgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgZnVuY3Rpb24gaXRzZWxmLCB0aG91Z2gsIGl0JiMzOTtzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UgdG8gZXhhbWluZSB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBVU0IgZ2FkZ2V0IFVWQyBkcml2ZXIuIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmxhZ3MgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc2V0dGluZ3Mgb3IgZGVwZW5kZW5jaWVzIGF0IHBsYXkgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IGB1dmNfYWxsb2NfaW5zdGAgYmVoYXZlcy4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfQ09ORklHRlNfRl9VVkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ1OD1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfSElEXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDY3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDY4OmNvbmZpZyBVU0JfQ09ORklHRlNfRl9VVkNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ2OS1cdGJvb2wgXCYjMzQ7VVNCIFdlYmNhbSBmdW5jdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBzaXR1YXRpb24gbXlzZWxmOgoKKipVVkMgQ29uZmlndXJhdGlvbiBRdWFuZGFyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIFVWQyBpbXBsZW1lbnRhdGlvbi4uLiBJIG5lZWQgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHJpZ2h0LiBIYW5nIG9uIGEgc2Vjb25kLCBpcyBpdCBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCB0aGF0IEkmIzM5O20gc3VwcG9zZWQgdG8gYmUgdXNpbmcgaGVyZSBmb3IgdGhlIGNvbmZpZywgb3IgaXMgaXQgYFVTQl9GX1VWQ2A/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB1c2luZyB0aGUgY29ycmVjdCBkZWZpbmUgZm9yIHRoZSBWaWRlbyBDbGFzcyBjb25maWd1cmF0aW9uLCBvdGhlcndpc2UsIHRoaXMgd2hvbGUgdGhpbmcgaXMgZ29pbmcgdG8gZmFsbCBhcGFydC4gR290dGEgZG91YmxlLWNoZWNrIHRoZSBoZWFkZXJzLCB0aGUga2VybmVsIGRvY3VtZW50YXRpb24uLi4gSXQmIzM5O3MgYWxsIHRvbyBlYXN5IHRvIG1peCB0aGVzZSB1cC4gVGltZSB0byBjbGFyaWZ5IHdoaWNoIG9uZSBpcyB0aGUgY29ycmVjdCBmbGFnIHRvIHNldCB0byBlbmFibGUgdGhpcyBVVkMgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGRldmljZS4gTGV0JiMzOTtzIG5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhbmQgZ2V0IHRoaXMgc29ydGVkIG91dCByaWdodCBhd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0ZfVVZDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0yMDI9Y29uZmlnIFVTQl9GX1VBQzJcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yMDQtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoyMDU6Y29uZmlnIFVTQl9GX1VWQ1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjA2LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVVkMgQ29uZmlnRlMgQnVpbGQgUHJvY2VzcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdXZjX2NvbmZpZ2ZzLm9gIGlzIGJ1aWx0IHdpdGhpbiB0aGUgVVNCIGdhZGdldCBmdW5jdGlvbiBmcmFtZXdvcmsuIFRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGFzIGFsd2F5cywgaXMgdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoZSByZWxldmFudCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgaGVhZGluZyB0byBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlYC4gVGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBleHBsaWNpdCBidWlsZCBydWxlcyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHBvaW50IG1lIHRvd2FyZHMgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBhbmQgZGVwZW5kZW5jaWVzIGludm9sdmVkIGluIGNvbnN0cnVjdGluZyB0aGF0IG9iamVjdCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoZSBzb3VyY2UgY29kZSwgb3RoZXIgb2JqZWN0IGZpbGVzLCBhbmQgcHJvYmFibHkgaW5jbHVkZSBwYXRocyBzcGVjaWZpYyB0byB0aGUgVVZDIGdhZGdldCBmdW5jdGlvbmFsaXR5LiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYHV2Y19jb25maWdmcy5vYCBhbmQsIGZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGJhY2sgYW55IGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgYnVpbGQgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dmNfY29uZmlnZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlPTQyPW9iai0kKENPTkZJR19VU0JfRl9VQUMyKVx0JiM0Mzs9IHVzYl9mX3VhYzIub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjQzOnVzYl9mX3V2Yy15XHRcdFx0Oj0gZl91dmMubyB1dmNfcXVldWUubyB1dmNfdjRsMi5vIHV2Y192aWRlby5vIHV2Y19jb25maWdmcy5vXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGUtNDQtaWZuZXEgKCQoQ09ORklHX1RSQUNJTkcpLClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdDoKCioqSW52ZXN0aWdhdGluZyBVVkMgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgQ09ORklHX1VTQl9GX1VWQ2AgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24uIEJ1dCwgSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgYFVTQl9DT05GSUdGU19GX1VWQ2AganVzdCBpbiBjYXNlIHRoZXJlJiMzOTtzIHNvbWV0aGluZyByZWxldmFudCB0aGVyZS4gV2FpdCBhIHNlY29uZCwgdGhlIGRlcGVuZGVuY3kgdHJlZSBzZWVtcyB0byBiZSBzdHJhaWdodGZvcndhcmQ7IGB1c2JfZl91dmMteWAgaXMgZGlyZWN0bHkgYnVpbHQgd2hlbiBgQ09ORklHX1VTQl9GX1VWQ2AgaXMgc2V0LiBOb3csIHRvIGJlIHN1cmUsIEkgc2hvdWxkIHZlcmlmeSB0aGUgYnVpbGQgcnVsZXMuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB1cCBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgdXNiX2ZfdXZjYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIFVWQyBnYWRnZXQgZnVuY3Rpb24gaXMgY29uZmlndXJlZCBhbmQgYnVpbHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYl9mX3V2YyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU9NDI9b2JqLSQoQ09ORklHX1VTQl9GX1VBQzIpXHQmIzQzOz0gdXNiX2ZfdWFjMi5vXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU6NDM6dXNiX2ZfdXZjLXlcdFx0XHQ6PSBmX3V2Yy5vIHV2Y19xdWV1ZS5vIHV2Y192NGwyLm8gdXZjX3ZpZGVvLm8gdXZjX2NvbmZpZ2ZzLm9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZS00NC1pZm5lcSAoJChDT05GSUdfVFJBQ0lORyksKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTQ1LSAgICBDRkxBR1NfdXZjX3RyYWNlLm9cdFx0Oj0gLUkkKHNyYylcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZTo0NjogICAgdXNiX2ZfdXZjLXlcdFx0XHQmIzQzOz0gdXZjX3RyYWNlLm9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZS00Ny1lbmRpZlxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19VU0JfRl9VVkMpXHRcdCYjNDM7PSB1c2JfZl91dmMub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTQ5LXVzYl9mX21pZGkteVx0XHRcdDo9IGZfbWlkaS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4ODcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipVU0IgVVZDIENvbmZpZ3VyYXRpb24gLSBBIFF1aWNrIENoZWNrKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFVWQyBzdXBwb3J0IGluIFVTQi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgQ09ORklHX1VTQl9GX1VWQ2AgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24sIG5vIHF1ZXN0aW9uIGFib3V0IGl0LiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IGRyaXZlciB3ZSYjMzk7cmUgdXNpbmcsIHNvIGl0IG1ha2VzIHNlbnNlIHRoYXQgaXQgd291bGQgYmUgdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQuCgpCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCBhbHNvIGEgZGVwZW5kZW5jeT8gSSYjMzk7dmUgZ290IGEgbmlnZ2xpbmcgZmVlbGluZyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgYWJvdXQgY29uZmlnZnMgaW52b2x2ZWQgd2l0aCB0aGlzIHNldHVwLiBJdCYjMzk7cyBiZXN0IHRvIGNvbmZpcm0gdGhpcywgc28gbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlc2Ugc29ydHMgb2YgZGVwZW5kZW5jaWVzLCBzbyBhIHF1aWNrIGNoZWNrIHRoZXJlIHNob3VsZCBjbGFyaWZ5IHdoZXRoZXIgaXQgaXMgbmVlZGVkLiBUaGF0IHdpbGwgYmUgdGhlIGRldGVybWluaW5nIGZhY3Rvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VVNCX0NPTkZJR0ZTX0ZfVVZDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDU4PWNvbmZpZyBVU0JfQ09ORklHRlNfRl9ISURcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NjctXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0Njg6Y29uZmlnIFVTQl9DT05GSUdGU19GX1VWQ1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDY5LVx0Ym9vbCBcJiMzNDtVU0IgV2ViY2FtIGZ1bmN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEkmIzM5O20gbG9va2luZyBhdDoKCioqSW52ZXN0aWdhdGluZyB0aGUgTWVhbmluZyBvZiBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCoqCgpSaWdodCwgc28gSSYjMzk7bSBwcmVzZW50ZWQgd2l0aCB0aGlzIGBVU0JfQ09ORklHRlNfRl9VVkNgIGZsYWcgYW5kLCBpbnN0aW5jdGl2ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpzZWxlY3RzKi4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBJcyB0aGlzIGEgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBBIGJ1aWxkLXRpbWUgZmxhZz8gS25vd2luZyB0aGUgc3BlY2lmaWMgc3Vic3lzdGVtIHdvdWxkIGhlbHAgbmFycm93IGl0IGRvd24sIGJ1dCBsZXQmIzM5O3MgYXNzdW1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgVVNCIGNvbmZpZ2ZzLiBVVkMgaGludHMgYXQgVVNCIFZpZGVvIENsYXNzLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBjb25jZXJuZWQgd2l0aCB3ZWJjYW0gb3IgdmlkZW8gY2FwdHVyZSBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIHdpbGwgYmUgbGlua2VkIHRvIHN1cHBvcnRpbmcgdGhlIFVWQyBjbGFzcyB3aGVuIHVzaW5nIHRoZSBjb25maWdmcyBVU0IgZ2FkZ2V0LiBOb3csIEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgYW5kIHNlZSB3aGVyZSB0aGlzIGlzIGRlZmluZWQsIGFuZCB3aGF0IGVsc2UgaXQgdG9nZ2xlcy4gSXQgbGlrZWx5IGVuYWJsZXMgYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBmcmFtZXdvcmssIHByb2JhYmx5IGNyZWF0aW5nIHRoZSBuZWNlc3NhcnkgZW5kcG9pbnRzIGFuZCBkZXNjcmlwdG9ycy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbSYjMzk7cyByZXNvdXJjZSB1c2FnZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfQ09ORklHRlNfRl9VVkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz00NTg9Y29uZmlnIFVTQl9DT05GSUdGU19GX0hJRFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ2Ny1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjQ2ODpjb25maWcgVVNCX0NPTkZJR0ZTX0ZfVVZDXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NjktXHRib29sIFwmIzM0O1VTQiBXZWJjYW0gZnVuY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY3NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHByb2Nlc3NpbmcgdGhlIGRlc2NyaWJlZCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgNDY4LiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UsIHRoYXQgbGlrZWx5IG1hcmtzIGEgY3JpdGljYWwgYXJlYSB3aGVyZSBjZXJ0YWluIGNvcmUgZmVhdHVyZXMgb3IgYSBzcGVjaWZpYyBkcml2ZXImIzM5O3Mgc2V0dGluZ3MgYXJlIGRlZmluZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5IGluIHRoaXMgc2VjdGlvbiBvciBpbiB0aGUgc3Vycm91bmRpbmcgbGluZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGtleXdvcmRzIGxpa2UgJiMzNDtjb25maWcsJiMzNDsgJiMzNDt0cmlzdGF0ZSwmIzM0OyAmIzM0O2Jvb2wsJiMzNDsgYW5kIHNwZWNpZmljIGRldmljZSBuYW1lcyBvciBkZXNjcmlwdG9ycyB0byBxdWlja2x5IHBhcnNlIHdoYXQmIzM5O3MgYXZhaWxhYmxlIGFuZCBob3cgaXQmIzM5O3MgY29udHJvbGxlZC4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XHRkZXBlbmRzIG9uIFVTQl9DT05GSUdGU1xuIDQ2MTpcdFx0c2VsZWN0IFVTQl9GX0hJRFxuIDQ2MjpcdFx0aGVscFxuIDQ2MzpcdFx0ICBUaGUgSElEIGZ1bmN0aW9uIGRyaXZlciBwcm92aWRlcyBnZW5lcmljIGVtdWxhdGlvbiBvZiBVU0JcbiA0NjQ6XHRcdCAgSHVtYW4gSW50ZXJmYWNlIERldmljZXMgKEhJRCkuXG4gNDY1Olx0XG4gNDY2Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgRG9jdW1lbnRhdGlvbi91c2IvZ2FkZ2V0X2hpZC5yc3QuXG4gNDY3Olx0XG4gNDY4Olx0Y29uZmlnIFVTQl9DT05GSUdGU19GX1VWQ1xuIDQ2OTpcdFx0Ym9vbCBcJiMzNDtVU0IgV2ViY2FtIGZ1bmN0aW9uXCYjMzQ7XG4gNDcwOlx0XHRkZXBlbmRzIG9uIFVTQl9DT05GSUdGU1xuIDQ3MTpcdFx0ZGVwZW5kcyBvbiBWSURFT19ERVZcbiA0NzI6XHRcdGRlcGVuZHMgb24gVklERU9fREVWXG4gNDczOlx0XHRzZWxlY3QgVklERU9CVUYyX0RNQV9TR1xuIDQ3NDpcdFx0c2VsZWN0IFZJREVPQlVGMl9WTUFMTE9DXG4gNDc1Olx0XHRzZWxlY3QgVVNCX0ZfVVZDXG4gNDc2Olx0XHRoZWxwXG4gNDc3Olx0XHQgIFRoZSBXZWJjYW0gZnVuY3Rpb24gYWN0cyBhcyBhIGNvbXBvc2l0ZSBVU0IgQXVkaW8gYW5kIFZpZGVvIENsYXNzXG4gNDc4Olx0XHQgIGRldmljZS4gSXQgcHJvdmlkZXMgYSB1c2Vyc3BhY2UgQVBJIHRvIHByb2Nlc3MgVVZDIGNvbnRyb2wgcmVxdWVzdHNcbiA0Nzk6XHRcdCAgYW5kIHN0cmVhbSB2aWRlbyBkYXRhIHRvIHRoZSBob3N0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBVU0IgQ29uZmlndXJhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBVU0JfQ09ORklHRlNfRl9VVkNgIGFjdGl2YXRlcyBgVVNCX0ZfVVZDYCwgc28gZW5hYmxpbmcgYm90aCBpcyB0aGUgbG9naWNhbCBhcHByb2FjaC4gQnV0IGhhbmcgb24sIGBVU0JfQ09ORklHRlNfRl9VVkNgIGlzIGEgYm9vbGVhbiwgYW5kIGBVU0JfRl9VVkNgIGlzIHRyaXN0YXRlLiBSaWdodCwgc28gSSBjYW4ganVzdCBkZWZpbmUgYm90aCBvZiB0aGVtIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuIEhtbSwgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBVU0JfQ09ORklHRlNgIGlzIGVuYWJsZWQuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGBVU0JfQ09ORklHRlNfRl9VVkNgIHByb3Blcmx5IHNldHMgYFVTQl9GX1VWQ2AsIHllcywgaXQgZG9lcywgZ29vZC4KCk5vdywgdGhlIHBhdGNoIGl0c2VsZiBpcyBjaGFuZ2luZyB0aGUgd2F5IHdlIGhhbmRsZSB0aGUgZXJyb3IgY2FzZSBpbiBgdXZjZ19hdHRhY2hfY29uZmlnZnNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIGBjb25maWdfZ3JvdXBfcHV0YCB3aXRoIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYW4gZXJyb3IgcGF0aCwgYSBrZXkgYXJlYSBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgYW5kIHJpcGUgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgYXJlIGB1dmNnX2F0dGFjaF9jb25maWdmc2AsIGB1dmNfYWxsb2NfaW5zdGAsIGFuZCwgb2YgY291cnNlLCB0aGUgbmV3IGZ1bmN0aW9uIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gLiBMZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZXRhaWxlZCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYz0xNTY9c3RhdGljIGludCB1dmNnX2NvbmZpZ19jcmVhdGVfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqcGFyZW50LFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0xNzAtXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM6MTcxOnN0YXRpYyB2b2lkIHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbihzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cClcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0xNzIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0xNzYtXHRcdGxpc3RfZGVsKFx1MDAyNmNoaWxkLVx1MDAzZWdyb3VwX2VudHJ5KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYzoxNzc6XHRcdHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbihjaGlsZCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMTc4LVx0XHRjb25maWdfaXRlbV9wdXQoXHUwMDI2Y2hpbGQtXHUwMDNlY2dfaXRlbSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jPTM2MzU9c3RhdGljIHZvaWQgdXZjX2Z1bmNfaXRlbV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMzYzOC1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYzozNjM5Olx0dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuKHRvX2NvbmZpZ19ncm91cChpdGVtKSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMzY0MC1cdHVzYl9wdXRfZnVuY3Rpb25faW5zdGFuY2UoXHUwMDI2b3B0cy1cdTAwM2VmdW5jX2luc3QpO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYz0zODIyPWludCB1dmNnX2F0dGFjaF9jb25maWdmcyhzdHJ1Y3QgZl91dmNfb3B0cyAqb3B0cylcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMzgzMS1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM6MzgzMjpcdFx0dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuKFx1MDAyNm9wdHMtXHUwMDNlZnVuY19pbnN0Lmdyb3VwKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0zODMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzI0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipGb2N1c2luZyBvbiBDb25maWdGUyBSZW1vdmFsKioKCk9rYXksIHNvIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGludmVzdGlnYXRpb24uIFRoYXQgZmVlbHMgbGlrZSBhIHJlbGV2YW50IGZ1bmN0aW9uIHRvIGRpZyBpbnRvLgoKTm93LCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHN5c3RlbSwgSSBzaG91bGQgYWxzbyBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIGB1dmNnX2F0dGFjaF9jb25maWdmc2AgYW5kIGB1dmNfYWxsb2NfaW5zdGAuIExldCYjMzk7cyBzZWUgaG93IHRoZSBDb25maWdGUyBpcyBlc3RhYmxpc2hlZCBhbmQgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQgYWxvbmdzaWRlIHRoZSByZW1vdmFsIHByb2NlZHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVscHMgcmVmaW5lIG15IGZvY3VzIGZvciB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2Y19hbGxvY19pbnN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmM9OTA0PXN0YXRpYyB2b2lkIHV2Y19mcmVlX2luc3Qoc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZilcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy05MTEtXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYzo5MTI6c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKnV2Y19hbGxvY19pbnN0KHZvaWQpXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy05MTMte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jPTEwODM9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKnV2Y19hbGxvYyhzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpmaSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy0xMTcyLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmM6MTE3MzpERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUKHV2YywgdXZjX2FsbG9jX2luc3QsIHV2Y19hbGxvYyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy0xMTc0LU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtVU0IgVmlkZW8gQ2xhc3MgR2FkZ2V0IGRyaXZlclwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MDkKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogMjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBVVkMgR2FkZ2V0IEZ1bmN0aW9uIEluaXRpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIFVWQyBnYWRnZXQmIzM5O3MgaW5zdGFuY2UgdXNpbmcgYHV2Y19hbGxvY19pbnN0YC4gVGhpcyBmdW5jdGlvbiBpcyBkZWZpbml0ZWx5IHRpZWQgaW50byB0aGUgY29uZmlnZnMgc3lzdGVtIHdoZW4gYSBVVkMgZnVuY3Rpb24gaXMgY3JlYXRlZC4gSSBrbm93IHRoaXMgYmVjYXVzZSBvZiB0aGUgc3BlY2lmaWMgY29uZmlncyBtZW50aW9uZWQ6IGBVU0JfQ09ORklHRlNfRl9VVkNgLCBgVVNCX0ZfVVZDYCwgYW5kIGBVU0JfQ09ORklHRlNgLgoKQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBJJiMzOTttIGNoZWNraW5nIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgYFZJREVPX0RFVmAgaXMgYWxzbyByZXF1aXJlZCB3aGVuIHVzaW5nIGBVU0JfQ09ORklHRlNfRl9VVkNgIGFuZCBvZiBjb3Vyc2UsIGBVU0JfR0FER0VUYCBpcyB0aGUgY29yZSBmb3VuZGF0aW9uLgoKQmFzZWQgb24gdGhpcywgSSYjMzk7bSBnb2luZyB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZW5hYmxlZCBjb25maWd1cmF0aW9uczogYFVTQl9DT05GSUdGU19GX1VWQ2AsIGBVU0JfRl9VVkNgLCBhbmQgYFVTQl9DT05GSUdGU2AuIEkgYWxzbyBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGB1dmNnX2F0dGFjaF9jb25maWdmc2AsIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gLCBhbmQgZXNwZWNpYWxseSwgYHV2Y19hbGxvY19pbnN0YAoKVGhlIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUsIHJlcGxhY2luZyBgY29uZmlnX2dyb3VwX3B1dGAgd2l0aCBgdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuYCwgd2hpY2ggaW5kaWNhdGVzIGl0JiMzOTtzIGFkZHJlc3NpbmcgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCB3aXRoaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBVU0IgVVZDIGdhZGdldC4gSXQgc2VlbXMgdG8gYmUgcHJldmVudGluZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdCBub3cgYW5kIHRvIHByb2JlIHRoZSBsaW1pdHMgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DT05GSUdGU19GX1VWQyYjMzQ7LAogICAgJiMzNDtVU0JfRl9VVkMmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZjZ19hdHRhY2hfY29uZmlnZnMmIzM0OywKICAgICYjMzQ7dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuJiMzNDssCiAgICAmIzM0O3V2Y19hbGxvY19pbnN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIFVTQiBVVkMgZ2FkZ2V0IGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uIGJ5IHJlcGxhY2luZyBjb25maWdfZ3JvdXBfcHV0IHdpdGggdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIHBvdGVudGlhbCBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGggaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfQ09ORklHRlNfRl9VVkMmIzM0OywKICAgICYjMzQ7VVNCX0ZfVVZDJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3V2Y2dfYXR0YWNoX2NvbmZpZ2ZzJiMzNDssCiAgICAmIzM0O3V2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbiYjMzQ7LAogICAgJiMzNDt1dmNfYWxsb2NfaW5zdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBVU0IgVVZDIGdhZGdldCBmdW5jdGlvbiBpbml0aWFsaXphdGlvbiBieSByZXBsYWNpbmcgY29uZmlnX2dyb3VwX3B1dCB3aXRoIHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBwb3RlbnRpYWwgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBlcnJvciBwYXRoIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE3OjI0Ljc1MjY4ODYzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1ODQyMTU4NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9DT05GSUdGU19GX1VWQ1wiLFxuICAgIFwiVVNCX0ZfVVZDXCIsXG4gICAgXCJVU0JfQ09ORklHRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1dmNnX2F0dGFjaF9jb25maWdmc1wiLFxuICAgIFwidXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuXCIsXG4gICAgXCJ1dmNfYWxsb2NfaW5zdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIFVTQiBVVkMgZ2FkZ2V0IGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uIGJ5IHJlcGxhY2luZyBjb25maWdfZ3JvdXBfcHV0IHdpdGggdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIHBvdGVudGlhbCBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGggaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzoyNC43NTI3MjA5MTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NTY0MzUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDViZTkxYTBjYTg0MzJhNmMwNTNiZmQ2ZDdlZmE3MTc0NWY4NTQ5YTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMTA6MTc6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jXFxuaW5kZXggNzBhMTQxNWVhNDAxNGYuLmRhMGZjODA4NGJiNjU0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuY1xcbkBAIC0zODI5LDcgKzM4MjksNyBAQCBpbnQgdXZjZ19hdHRhY2hfY29uZmlnZnMoc3RydWN0IGZfdXZjX29wdHMgKm9wdHMpXFxuIFxcdHJldCA9IHV2Y2dfY29uZmlnX2NyZWF0ZV9jaGlsZHJlbihcXHUwMDI2b3B0cy1cXHUwMDNlZnVuY19pbnN0Lmdyb3VwLFxcbiBcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ1dmNfZnVuY190eXBlKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGNvbmZpZ19ncm91cF9wdXQoXFx1MDAyNm9wdHMtXFx1MDAzZWZ1bmNfaW5zdC5ncm91cCk7XFxuK1xcdFxcdHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbihcXHUwMDI2b3B0cy1cXHUwMDNlZnVuY19pbnN0Lmdyb3VwKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6MjUuNTEyODYzMzI0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODUwODE5NjY0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0NPTkZJR0ZTX0ZfVVZDXCIsXG4gICAgXCJVU0JfRl9VVkNcIixcbiAgICBcIlVTQl9DT05GSUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInV2Y2dfYXR0YWNoX2NvbmZpZ2ZzXCIsXG4gICAgXCJ1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5cIixcbiAgICBcInV2Y19hbGxvY19pbnN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiB0aGUgVVNCIFVWQyBnYWRnZXQgZnVuY3Rpb24gaW5pdGlhbGl6YXRpb24gYnkgcmVwbGFjaW5nIGNvbmZpZ19ncm91cF9wdXQgd2l0aCB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEgcG90ZW50aWFsIGxlYWsgb3IgdXNlLWFmdGVyLWZyZWUsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcGF0aCBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWJlOTFhMGNhODQzMmE2YzA1M2JmZDZkN2VmYTcxNzQ1Zjg1NDlhN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDEwOjE3OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jXG5pbmRleCA3MGExNDE1ZWE0MDE0Zi4uZGEwZmM4MDg0YmI2NTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmNcbisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuY1xuQEAgLTM4MjksNyArMzgyOSw3IEBAIGludCB1dmNnX2F0dGFjaF9jb25maWdmcyhzdHJ1Y3QgZl91dmNfb3B0cyAqb3B0cylcbiBcdHJldCA9IHV2Y2dfY29uZmlnX2NyZWF0ZV9jaGlsZHJlbihcdTAwMjZvcHRzLVx1MDAzZWZ1bmNfaW5zdC5ncm91cCxcbiBcdFx0XHRcdFx0ICBcdTAwMjZ1dmNfZnVuY190eXBlKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGNvbmZpZ19ncm91cF9wdXQoXHUwMDI2b3B0cy1cdTAwM2VmdW5jX2luc3QuZ3JvdXApO1xuK1x0XHR1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4oXHUwMDI2b3B0cy1cdTAwM2VmdW5jX2luc3QuZ3JvdXApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzoyNS41MTI4NjczMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY0NDg2ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBHYWRnZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgaW4gdGhlIGB1dmNnX2F0dGFjaF9jb25maWdmc2AgZnVuY3Rpb24uIEkgc2VlIHRoYXQgYGNvbmZpZ19ncm91cF9wdXQoXHUwMDI2b3B0cy1cdTAwM2VmdW5jX2luc3QuZ3JvdXApO2AgaGFzIGJlZW4gc3dhcHBlZCBvdXQgZm9yIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4oXHUwMDI2b3B0cy1cdTAwM2VmdW5jX2luc3QuZ3JvdXApO2AuIEltbWVkaWF0ZWx5LCBteSBzcGlkZXktc2Vuc2UgdGluZ2xlczsgdGhpcyBzbWVsbHMgbGlrZSBhIGZpeCByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBDb25maWdGUyBmcmFtZXdvcmssIHBhcnRpY3VsYXJseSBhcm91bmQgZXJyb3IgaGFuZGxpbmcuXG5cblRoZSBvcmlnaW5hbCBjb2RlIGxpa2VseSBoYWQgYSBmbGF3IHRoYXQgY291bGQgbGVhZCB0byBhIGxlYWssIGEgdXNlLWFmdGVyLWZyZWUsIG9yIGEgc2ltaWxhciBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdoZW4gYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYCBmYWlscyBvciBiYWlscyBvdXQgZHVyaW5nIGl0cyBleGVjdXRpb24uIFRoZSBuZXcgZnVuY3Rpb24sIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gLCBpcyBhbG1vc3QgY2VydGFpbmx5IHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCB0aGUgQ29uZmlnRlMgZ3JvdXAncyBjaGlsZHJlbiBiZWZvcmUgdGhlIGdyb3VwIGl0c2VsZiBpcyByZWxlYXNlZC4gVGhpcyBtZWFucyBpdCdzIGEgKm11Y2gqIHNhZmVyIHdheSBvZiBoYW5kbGluZyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLlxuXG5Ob3csIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGB1dmNnX2F0dGFjaF9jb25maWdmc2AgYW5kIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gIHRvIHVuZGVyc3RhbmQgdGhlICpzcGVjaWZpY3MqIG9mIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSBhbmQgaG93IHRoaXMgZml4IGFkZHJlc3NlcyBpdC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBob3cgdGhlIENvbmZpZ0ZTIGdyb3VwIGlzIHBvcHVsYXRlZCwgd2hlcmUgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQsIGFuZCBob3cgdGhlIGVycm9yIHBhdGhzIGhhbmRsZSBmcmVlaW5nIHRob3NlIHJlc291cmNlcy4gSSBuZWVkIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGFuZCBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBzaWRlIGVmZmVjdHMuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6MzAuMDc3MzYxNDUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NDczMTk2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dmNnX2F0dGFjaF9jb25maWdmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jPTM4MDg9c3RhdGljIGNvbnN0IHN0cnVjdCB1dmNnX2NvbmZpZ19ncm91cF90eXBlIHV2Y19mdW5jX3R5cGUgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMzgyMS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM6MzgyMjppbnQgdXZjZ19hdHRhY2hfY29uZmlnZnMoc3RydWN0IGZfdXZjX29wdHMgKm9wdHMpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jLTM4MjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzozMC40MjIxMDY5MjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTU5OTYzNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYCBGdW5jdGlvbiBDYWxsKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGB1dmNnX2F0dGFjaF9jb25maWdmc2AuIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0LCBhcyBhbHdheXMsIGlzIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdsbCBuZWVkIHRvIGZpbmQgZXZlcnkgcGxhY2UgaW4gdGhlIGNvZGUgd2hlcmUgYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYCBpcyBhY3R1YWxseSAqY2FsbGVkKi4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBwaWVjZSB0b2dldGhlciB3aGF0IGl0J3MgKmRvaW5nKiBieSBhbmFseXppbmcgd2hhdCBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byBpdCBhbmQgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhvc2UgY2FsbHMuIEknbSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGdldCBzZWFyY2hpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzozNi41ODIwNzQ0MjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4OTI0MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2Y2dfYXR0YWNoX2NvbmZpZ2ZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmM9OTEyPXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICp1dmNfYWxsb2NfaW5zdCh2b2lkKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmMtOTk4LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jOjk5OTpcXHRyZXQgPSB1dmNnX2F0dGFjaF9jb25maWdmcyhvcHRzKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy0xMDAwLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM9MzgwOD1zdGF0aWMgY29uc3Qgc3RydWN0IHV2Y2dfY29uZmlnX2dyb3VwX3R5cGUgdXZjX2Z1bmNfdHlwZSA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0zODIxLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYzozODIyOmludCB1dmNnX2F0dGFjaF9jb25maWdmcyhzdHJ1Y3QgZl91dmNfb3B0cyAqb3B0cylcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMzgyMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmg9MTg4PXN0YXRpYyBpbmxpbmUgc3RydWN0IHV2Y2dfZXh0ZW5zaW9uICp0b191dmNnX2V4dGVuc2lvbihzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmgtMTkyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuaDoxOTM6aW50IHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzKHN0cnVjdCBmX3V2Y19vcHRzICpvcHRzKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmgtMTk0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzozNi43NjEwMDg1MjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY1MTM2MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byB0aGUgVVZDIEdhZGdldCBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgbGVhZHMgbWUgdG8gYHV2Y19hbGxvY19pbnN0YCB3aXRoaW4gYGZfdXZjLmNgLiBUaGF0J3MgcHJlY2lzZWx5IHdoZXJlIEknZCBleHBlY3QgdGhlIFVWQyBnYWRnZXQgaW5zdGFudGlhdGlvbiB0byBraWNrIG9mZi4gVGhpcyBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIFVTQiBnYWRnZXQgVVZDIGZ1bmN0aW9uLCB3aGljaCBpcyBleGFjdGx5IHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCBhbGxvY2F0aW9uIGxvZ2ljLiBCZWZvcmUgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgZnVuY3Rpb24gaXRzZWxmLCB0aG91Z2gsIGl0J3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBleGFtaW5lIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIFVTQiBnYWRnZXQgVVZDIGRyaXZlci4gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZsYWdzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIHNldHRpbmdzIG9yIGRlcGVuZGVuY2llcyBhdCBwbGF5IHRoYXQgbWlnaHQgaW5mbHVlbmNlIGhvdyBgdXZjX2FsbG9jX2luc3RgIGJlaGF2ZXMuIFRoaXMgd2lsbCBwcm92aWRlIHNvbWUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE3OjQwLjQyNjE1MDI5NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDAwMjgxMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9DT05GSUdGU19GX1VWQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ1OD1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfSElEXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NjctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDY4OmNvbmZpZyBVU0JfQ09ORklHRlNfRl9VVkNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NjktXFx0Ym9vbCBcXFwiVVNCIFdlYmNhbSBmdW5jdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6NDAuNjI2MTg1NTQ5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ0NTU1NDAyNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBzaXR1YXRpb24gbXlzZWxmOlxuXG4qKlVWQyBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIFVWQyBpbXBsZW1lbnRhdGlvbi4uLiBJIG5lZWQgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHJpZ2h0LiBIYW5nIG9uIGEgc2Vjb25kLCBpcyBpdCBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCB0aGF0IEknbSBzdXBwb3NlZCB0byBiZSB1c2luZyBoZXJlIGZvciB0aGUgY29uZmlnLCBvciBpcyBpdCBgVVNCX0ZfVVZDYD8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdXNpbmcgdGhlIGNvcnJlY3QgZGVmaW5lIGZvciB0aGUgVmlkZW8gQ2xhc3MgY29uZmlndXJhdGlvbiwgb3RoZXJ3aXNlLCB0aGlzIHdob2xlIHRoaW5nIGlzIGdvaW5nIHRvIGZhbGwgYXBhcnQuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGUgaGVhZGVycywgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uLi4uIEl0J3MgYWxsIHRvbyBlYXN5IHRvIG1peCB0aGVzZSB1cC4gVGltZSB0byBjbGFyaWZ5IHdoaWNoIG9uZSBpcyB0aGUgY29ycmVjdCBmbGFnIHRvIHNldCB0byBlbmFibGUgdGhpcyBVVkMgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGRldmljZS4gTGV0J3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zIGFuZCBnZXQgdGhpcyBzb3J0ZWQgb3V0IHJpZ2h0IGF3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzo1NS4wODE3Mjk2MThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTkzNzI4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9GX1VWQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTIwMj1jb25maWcgVVNCX0ZfVUFDMlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjA0LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjIwNTpjb25maWcgVVNCX0ZfVVZDXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjA2LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE3OjU3LjE0MTExMzUxOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU1MDIyMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVVZDIENvbmZpZ0ZTIEJ1aWxkIFByb2Nlc3MqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB1dmNfY29uZmlnZnMub2AgaXMgYnVpbHQgd2l0aGluIHRoZSBVU0IgZ2FkZ2V0IGZ1bmN0aW9uIGZyYW1ld29yay4gVGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCwgYXMgYWx3YXlzLCBpcyB0aGUgYE1ha2VmaWxlYCB3aXRoaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGhlYWRpbmcgdG8gYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZWAuIFRoYXQgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZXhwbGljaXQgYnVpbGQgcnVsZXMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBwb2ludCBtZSB0b3dhcmRzIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgYW5kIGRlcGVuZGVuY2llcyBpbnZvbHZlZCBpbiBjb25zdHJ1Y3RpbmcgdGhhdCBvYmplY3QgZmlsZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoZSBzb3VyY2UgY29kZSwgb3RoZXIgb2JqZWN0IGZpbGVzLCBhbmQgcHJvYmFibHkgaW5jbHVkZSBwYXRocyBzcGVjaWZpYyB0byB0aGUgVVZDIGdhZGdldCBmdW5jdGlvbmFsaXR5LiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYHV2Y19jb25maWdmcy5vYCBhbmQsIGZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGJhY2sgYW55IGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgYnVpbGQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTg6MDAuNDk2MTQwODU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODY5NTg4NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZjX2NvbmZpZ2ZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU9NDI9b2JqLSQoQ09ORklHX1VTQl9GX1VBQzIpXFx0Kz0gdXNiX2ZfdWFjMi5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjQzOnVzYl9mX3V2Yy15XFx0XFx0XFx0Oj0gZl91dmMubyB1dmNfcXVldWUubyB1dmNfdjRsMi5vIHV2Y192aWRlby5vIHV2Y19jb25maWdmcy5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTQ0LWlmbmVxICgkKENPTkZJR19UUkFDSU5HKSwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjAxLjA4MzEwOTY5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDcyMjA1MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQ6XG5cbioqSW52ZXN0aWdhdGluZyBVVkMgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfVVNCX0ZfVVZDYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0LCBJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCBqdXN0IGluIGNhc2UgdGhlcmUncyBzb21ldGhpbmcgcmVsZXZhbnQgdGhlcmUuIFdhaXQgYSBzZWNvbmQsIHRoZSBkZXBlbmRlbmN5IHRyZWUgc2VlbXMgdG8gYmUgc3RyYWlnaHRmb3J3YXJkOyBgdXNiX2ZfdXZjLXlgIGlzIGRpcmVjdGx5IGJ1aWx0IHdoZW4gYENPTkZJR19VU0JfRl9VVkNgIGlzIHNldC4gTm93LCB0byBiZSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGJ1aWxkIHJ1bGVzLiBJJ2xsIG5lZWQgdG8gb3BlbiB1cCBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgdXNiX2ZfdXZjYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIFVWQyBnYWRnZXQgZnVuY3Rpb24gaXMgY29uZmlndXJlZCBhbmQgYnVpbHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODowOS4xNTUzMTkxMjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NTc5NDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2JfZl91dmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZT00Mj1vYmotJChDT05GSUdfVVNCX0ZfVUFDMilcXHQrPSB1c2JfZl91YWMyLm9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU6NDM6dXNiX2ZfdXZjLXlcXHRcXHRcXHQ6PSBmX3V2Yy5vIHV2Y19xdWV1ZS5vIHV2Y192NGwyLm8gdXZjX3ZpZGVvLm8gdXZjX2NvbmZpZ2ZzLm9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGUtNDQtaWZuZXEgKCQoQ09ORklHX1RSQUNJTkcpLClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGUtNDUtICAgIENGTEFHU191dmNfdHJhY2Uub1xcdFxcdDo9IC1JJChzcmMpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjQ2OiAgICB1c2JfZl91dmMteVxcdFxcdFxcdCs9IHV2Y190cmFjZS5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTQ3LWVuZGlmXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19VU0JfRl9VVkMpXFx0XFx0Kz0gdXNiX2ZfdXZjLm9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGUtNDktdXNiX2ZfbWlkaS15XFx0XFx0XFx0Oj0gZl9taWRpLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTg6MDkuODUxMTIzNzE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Njc4OTMzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKlVTQiBVVkMgQ29uZmlndXJhdGlvbiAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIFVWQyBzdXBwb3J0IGluIFVTQi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgQ09ORklHX1VTQl9GX1VWQ2AgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24sIG5vIHF1ZXN0aW9uIGFib3V0IGl0LiBUaGF0J3MgdGhlIHByaW1hcnkgZHJpdmVyIHdlJ3JlIHVzaW5nLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IGl0IHdvdWxkIGJlIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kLlxuXG5CdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCBhbHNvIGEgZGVwZW5kZW5jeT8gSSd2ZSBnb3QgYSBuaWdnbGluZyBmZWVsaW5nIHRoZXJlJ3Mgc29tZXRoaW5nIGFib3V0IGNvbmZpZ2ZzIGludm9sdmVkIHdpdGggdGhpcyBzZXR1cC4gSXQncyBiZXN0IHRvIGNvbmZpcm0gdGhpcywgc28gbGV0J3MgY3Jvc3MtcmVmZXJlbmNlIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZXNlIHNvcnRzIG9mIGRlcGVuZGVuY2llcywgc28gYSBxdWljayBjaGVjayB0aGVyZSBzaG91bGQgY2xhcmlmeSB3aGV0aGVyIGl0IGlzIG5lZWRlZC4gVGhhdCB3aWxsIGJlIHRoZSBkZXRlcm1pbmluZyBmYWN0b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODoxMy40MTkwMjE5NjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTMwMjU3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJVU0JfQ09ORklHRlNfRl9VVkNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDU4PWNvbmZpZyBVU0JfQ09ORklHRlNfRl9ISURcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ2Ny1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0Njg6Y29uZmlnIFVTQl9DT05GSUdGU19GX1VWQ1xcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ2OS1cXHRib29sIFxcXCJVU0IgV2ViY2FtIGZ1bmN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODoxMy41ODAzMzQyMjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1ODIxMTUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJ20gbG9va2luZyBhdDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNZWFuaW5nIG9mIGBVU0JfQ09ORklHRlNfRl9VVkNgKipcblxuUmlnaHQsIHNvIEknbSBwcmVzZW50ZWQgd2l0aCB0aGlzIGBVU0JfQ09ORklHRlNfRl9VVkNgIGZsYWcgYW5kLCBpbnN0aW5jdGl2ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpzZWxlY3RzKi4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgYSBkcml2ZXIgY29uZmlndXJhdGlvbiBvcHRpb24/IEEgYnVpbGQtdGltZSBmbGFnPyBLbm93aW5nIHRoZSBzcGVjaWZpYyBzdWJzeXN0ZW0gd291bGQgaGVscCBuYXJyb3cgaXQgZG93biwgYnV0IGxldCdzIGFzc3VtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIFVTQiBjb25maWdmcy4gVVZDIGhpbnRzIGF0IFVTQiBWaWRlbyBDbGFzcywgc28gaXQncyBwcm9iYWJseSBjb25jZXJuZWQgd2l0aCB3ZWJjYW0gb3IgdmlkZW8gY2FwdHVyZSBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIHdpbGwgYmUgbGlua2VkIHRvIHN1cHBvcnRpbmcgdGhlIFVWQyBjbGFzcyB3aGVuIHVzaW5nIHRoZSBjb25maWdmcyBVU0IgZ2FkZ2V0LiBOb3csIEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgYW5kIHNlZSB3aGVyZSB0aGlzIGlzIGRlZmluZWQsIGFuZCB3aGF0IGVsc2UgaXQgdG9nZ2xlcy4gSXQgbGlrZWx5IGVuYWJsZXMgYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBmcmFtZXdvcmssIHByb2JhYmx5IGNyZWF0aW5nIHRoZSBuZWNlc3NhcnkgZW5kcG9pbnRzIGFuZCBkZXNjcmlwdG9ycy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgc3lzdGVtJ3MgcmVzb3VyY2UgdXNhZ2UuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODoxNy4wMzg1NDg4MTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzUwODM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0NPTkZJR0ZTX0ZfVVZDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ1OD1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfSElEXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NjctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDY4OmNvbmZpZyBVU0JfQ09ORklHRlNfRl9VVkNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NjktXFx0Ym9vbCBcXFwiVVNCIFdlYmNhbSBmdW5jdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTg6MTcuMjc2MDY4MzM0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzg4OTcxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHByb2Nlc3NpbmcgdGhlIGRlc2NyaWJlZCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdgLiBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSA0NjguIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSwgdGhhdCBsaWtlbHkgbWFya3MgYSBjcml0aWNhbCBhcmVhIHdoZXJlIGNlcnRhaW4gY29yZSBmZWF0dXJlcyBvciBhIHNwZWNpZmljIGRyaXZlcidzIHNldHRpbmdzIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBhIHNwZWNpZmljIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eSBpbiB0aGlzIHNlY3Rpb24gb3IgaW4gdGhlIHN1cnJvdW5kaW5nIGxpbmVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGtleXdvcmRzIGxpa2UgXCJjb25maWcsXCIgXCJ0cmlzdGF0ZSxcIiBcImJvb2wsXCIgYW5kIHNwZWNpZmljIGRldmljZSBuYW1lcyBvciBkZXNjcmlwdG9ycyB0byBxdWlja2x5IHBhcnNlIHdoYXQncyBhdmFpbGFibGUgYW5kIGhvdyBpdCdzIGNvbnRyb2xsZWQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NzUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODoyMC44MTQ5NzEwMTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHRcXHRkZXBlbmRzIG9uIFVTQl9DT05GSUdGU1xcbiA0NjE6XFx0XFx0c2VsZWN0IFVTQl9GX0hJRFxcbiA0NjI6XFx0XFx0aGVscFxcbiA0NjM6XFx0XFx0ICBUaGUgSElEIGZ1bmN0aW9uIGRyaXZlciBwcm92aWRlcyBnZW5lcmljIGVtdWxhdGlvbiBvZiBVU0JcXG4gNDY0OlxcdFxcdCAgSHVtYW4gSW50ZXJmYWNlIERldmljZXMgKEhJRCkuXFxuIDQ2NTpcXHRcXG4gNDY2OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfaGlkLnJzdC5cXG4gNDY3OlxcdFxcbiA0Njg6XFx0Y29uZmlnIFVTQl9DT05GSUdGU19GX1VWQ1xcbiA0Njk6XFx0XFx0Ym9vbCBcXFwiVVNCIFdlYmNhbSBmdW5jdGlvblxcXCJcXG4gNDcwOlxcdFxcdGRlcGVuZHMgb24gVVNCX0NPTkZJR0ZTXFxuIDQ3MTpcXHRcXHRkZXBlbmRzIG9uIFZJREVPX0RFVlxcbiA0NzI6XFx0XFx0ZGVwZW5kcyBvbiBWSURFT19ERVZcXG4gNDczOlxcdFxcdHNlbGVjdCBWSURFT0JVRjJfRE1BX1NHXFxuIDQ3NDpcXHRcXHRzZWxlY3QgVklERU9CVUYyX1ZNQUxMT0NcXG4gNDc1OlxcdFxcdHNlbGVjdCBVU0JfRl9VVkNcXG4gNDc2OlxcdFxcdGhlbHBcXG4gNDc3OlxcdFxcdCAgVGhlIFdlYmNhbSBmdW5jdGlvbiBhY3RzIGFzIGEgY29tcG9zaXRlIFVTQiBBdWRpbyBhbmQgVmlkZW8gQ2xhc3NcXG4gNDc4OlxcdFxcdCAgZGV2aWNlLiBJdCBwcm92aWRlcyBhIHVzZXJzcGFjZSBBUEkgdG8gcHJvY2VzcyBVVkMgY29udHJvbCByZXF1ZXN0c1xcbiA0Nzk6XFx0XFx0ICBhbmQgc3RyZWFtIHZpZGVvIGRhdGEgdG8gdGhlIGhvc3QuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjIwLjgxNTIwMDcwMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTA1MDMwODc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVVNCIENvbmZpZ3VyYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYFVTQl9DT05GSUdGU19GX1VWQ2AgYWN0aXZhdGVzIGBVU0JfRl9VVkNgLCBzbyBlbmFibGluZyBib3RoIGlzIHRoZSBsb2dpY2FsIGFwcHJvYWNoLiBCdXQgaGFuZyBvbiwgYFVTQl9DT05GSUdGU19GX1VWQ2AgaXMgYSBib29sZWFuLCBhbmQgYFVTQl9GX1VWQ2AgaXMgdHJpc3RhdGUuIFJpZ2h0LCBzbyBJIGNhbiBqdXN0IGRlZmluZSBib3RoIG9mIHRoZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC4gSG1tLCBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYFVTQl9DT05GSUdGU2AgaXMgZW5hYmxlZC5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCBwcm9wZXJseSBzZXRzIGBVU0JfRl9VVkNgLCB5ZXMsIGl0IGRvZXMsIGdvb2QuXG5cbk5vdywgdGhlIHBhdGNoIGl0c2VsZiBpcyBjaGFuZ2luZyB0aGUgd2F5IHdlIGhhbmRsZSB0aGUgZXJyb3IgY2FzZSBpbiBgdXZjZ19hdHRhY2hfY29uZmlnZnNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIGBjb25maWdfZ3JvdXBfcHV0YCB3aXRoIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gLiBUaGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhbiBlcnJvciBwYXRoLCBhIGtleSBhcmVhIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBhbmQgcmlwZSBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGFyZSBgdXZjZ19hdHRhY2hfY29uZmlnZnNgLCBgdXZjX2FsbG9jX2luc3RgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIG5ldyBmdW5jdGlvbiBgdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuYC4gTGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gIHRvIG1ha2Ugc3VyZSBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGRldGFpbGVkIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTk2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTg6MzkuODY1NTE0NDY3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjQ4OTAzNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM9MTU2PXN0YXRpYyBpbnQgdXZjZ19jb25maWdfY3JlYXRlX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKnBhcmVudCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0xNzAtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jOjE3MTpzdGF0aWMgdm9pZCB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4oc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jLTE3Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMTc2LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZjaGlsZC1cXHUwMDNlZ3JvdXBfZW50cnkpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYzoxNzc6XFx0XFx0dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuKGNoaWxkKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMTc4LVxcdFxcdGNvbmZpZ19pdGVtX3B1dChcXHUwMDI2Y2hpbGQtXFx1MDAzZWNnX2l0ZW0pO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jPTM2MzU9c3RhdGljIHZvaWQgdXZjX2Z1bmNfaXRlbV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0zNjM4LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYzozNjM5OlxcdHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbih0b19jb25maWdfZ3JvdXAoaXRlbSkpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0zNjQwLVxcdHVzYl9wdXRfZnVuY3Rpb25faW5zdGFuY2UoXFx1MDAyNm9wdHMtXFx1MDAzZWZ1bmNfaW5zdCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM9MzgyMj1pbnQgdXZjZ19hdHRhY2hfY29uZmlnZnMoc3RydWN0IGZfdXZjX29wdHMgKm9wdHMpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMzgzMS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM6MzgzMjpcXHRcXHR1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4oXFx1MDAyNm9wdHMtXFx1MDAzZWZ1bmNfaW5zdC5ncm91cCk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jLTM4MzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjQwLjUzMDQxNTY0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQyNzkwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkZvY3VzaW5nIG9uIENvbmZpZ0ZTIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyBgdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuYCBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgcGFydGljdWxhciBpbnZlc3RpZ2F0aW9uLiBUaGF0IGZlZWxzIGxpa2UgYSByZWxldmFudCBmdW5jdGlvbiB0byBkaWcgaW50by5cblxuTm93LCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHN5c3RlbSwgSSBzaG91bGQgYWxzbyBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIGB1dmNnX2F0dGFjaF9jb25maWdmc2AgYW5kIGB1dmNfYWxsb2NfaW5zdGAuIExldCdzIHNlZSBob3cgdGhlIENvbmZpZ0ZTIGlzIGVzdGFibGlzaGVkIGFuZCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBhbG9uZ3NpZGUgdGhlIHJlbW92YWwgcHJvY2VkdXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZSBoZWxwcyByZWZpbmUgbXkgZm9jdXMgZm9yIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMyNCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjQzLjU3MzIxMDQ5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MjIyMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2Y19hbGxvY19pbnN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jPTkwND1zdGF0aWMgdm9pZCB1dmNfZnJlZV9pbnN0KHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmYpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy05MTEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmM6OTEyOnN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICp1dmNfYWxsb2NfaW5zdCh2b2lkKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jLTkxMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYz0xMDgzPXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICp1dmNfYWxsb2Moc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy0xMTcyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jOjExNzM6REVDTEFSRV9VU0JfRlVOQ1RJT05fSU5JVCh1dmMsIHV2Y19hbGxvY19pbnN0LCB1dmNfYWxsb2MpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jLTExNzQtTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJVU0IgVmlkZW8gQ2xhc3MgR2FkZ2V0IGRyaXZlclxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODo0My43NTA0NDYzOTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzMDI5NDY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVVZDIEdhZGdldCBGdW5jdGlvbiBJbml0aWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIHRoZSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBVVkMgZ2FkZ2V0J3MgaW5zdGFuY2UgdXNpbmcgYHV2Y19hbGxvY19pbnN0YC4gVGhpcyBmdW5jdGlvbiBpcyBkZWZpbml0ZWx5IHRpZWQgaW50byB0aGUgY29uZmlnZnMgc3lzdGVtIHdoZW4gYSBVVkMgZnVuY3Rpb24gaXMgY3JlYXRlZC4gSSBrbm93IHRoaXMgYmVjYXVzZSBvZiB0aGUgc3BlY2lmaWMgY29uZmlncyBtZW50aW9uZWQ6IGBVU0JfQ09ORklHRlNfRl9VVkNgLCBgVVNCX0ZfVVZDYCwgYW5kIGBVU0JfQ09ORklHRlNgLlxuXG5CZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEknbSBjaGVja2luZyBpZiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIGludm9sdmVkLiBJdCBsb29rcyBsaWtlIGBWSURFT19ERVZgIGlzIGFsc28gcmVxdWlyZWQgd2hlbiB1c2luZyBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCBhbmQgb2YgY291cnNlLCBgVVNCX0dBREdFVGAgaXMgdGhlIGNvcmUgZm91bmRhdGlvbi5cblxuQmFzZWQgb24gdGhpcywgSSdtIGdvaW5nIHRvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBlbmFibGVkIGNvbmZpZ3VyYXRpb25zOiBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCwgYFVTQl9GX1VWQ2AsIGFuZCBgVVNCX0NPTkZJR0ZTYC4gSSBhbHNvIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYCwgYHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbmAsIGFuZCBlc3BlY2lhbGx5LCBgdXZjX2FsbG9jX2luc3RgXG5cblRoZSBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lLCByZXBsYWNpbmcgYGNvbmZpZ19ncm91cF9wdXRgIHdpdGggYHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbmAsIHdoaWNoIGluZGljYXRlcyBpdCdzIGFkZHJlc3NpbmcgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCB3aXRoaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBVU0IgVVZDIGdhZGdldC4gSXQgc2VlbXMgdG8gYmUgcHJldmVudGluZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdCBub3cgYW5kIHRvIHByb2JlIHRoZSBsaW1pdHMgb2YgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgwOSwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTg6NTAuMjgwNzQ1MTI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0MDc4MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfQ09ORklHRlNfRl9VVkNcIixcbiAgICBcIlVTQl9GX1VWQ1wiLFxuICAgIFwiVVNCX0NPTkZJR0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXZjZ19hdHRhY2hfY29uZmlnZnNcIixcbiAgICBcInV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlblwiLFxuICAgIFwidXZjX2FsbG9jX2luc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBVU0IgVVZDIGdhZGdldCBmdW5jdGlvbiBpbml0aWFsaXphdGlvbiBieSByZXBsYWNpbmcgY29uZmlnX2dyb3VwX3B1dCB3aXRoIHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBwb3RlbnRpYWwgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBlcnJvciBwYXRoIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfQ09ORklHRlNfRl9VVkNcIixcbiAgICBcIlVTQl9GX1VWQ1wiLFxuICAgIFwiVVNCX0NPTkZJR0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXZjZ19hdHRhY2hfY29uZmlnZnNcIixcbiAgICBcInV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlblwiLFxuICAgIFwidXZjX2FsbG9jX2luc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBVU0IgVVZDIGdhZGdldCBmdW5jdGlvbiBpbml0aWFsaXphdGlvbiBieSByZXBsYWNpbmcgY29uZmlnX2dyb3VwX3B1dCB3aXRoIHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBwb3RlbnRpYWwgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBlcnJvciBwYXRoIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7k78[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-21 09:56:22 +0000 UTC FinishedAt: 2026-07-21 10:18:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CONFIGFS_F_UVC", "USB_F_UVC", "USB_CONFIGFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "a13c140cc289c0b7b3770bce5b3ad42ab35074aa", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_CONFIGFS_F_UVC", "USB_F_UVC", "USB_CONFIGFS" ], "series_id": "0e375b85-e19f-4551-894e-49b5989abaad" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "uvcg_attach_configfs", "uvcg_config_remove_children", "uvc_alloc_inst" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DT05GSUdGU19GX1VWQyYjMzQ7LAogICAgJiMzNDtVU0JfRl9VVkMmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZjZ19hdHRhY2hfY29uZmlnZnMmIzM0OywKICAgICYjMzQ7dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuJiMzNDssCiAgICAmIzM0O3V2Y19hbGxvY19pbnN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIFVTQiBVVkMgZ2FkZ2V0IGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uIGJ5IHJlcGxhY2luZyBjb25maWdfZ3JvdXBfcHV0IHdpdGggdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIHBvdGVudGlhbCBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGggaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWJlOTFhMGNhODQzMmE2YzA1M2JmZDZkN2VmYTcxNzQ1Zjg1NDlhN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDEwOjE3OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuY1xuaW5kZXggNzBhMTQxNWVhNDAxNGYuLmRhMGZjODA4NGJiNjU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmNcbkBAIC0zODI5LDcgJiM0MzszODI5LDcgQEAgaW50IHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzKHN0cnVjdCBmX3V2Y19vcHRzICpvcHRzKVxuIFx0cmV0ID0gdXZjZ19jb25maWdfY3JlYXRlX2NoaWxkcmVuKFx1MDAyNm9wdHMtXHUwMDNlZnVuY19pbnN0Lmdyb3VwLFxuIFx0XHRcdFx0XHQgIFx1MDAyNnV2Y19mdW5jX3R5cGUpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0Y29uZmlnX2dyb3VwX3B1dChcdTAwMjZvcHRzLVx1MDAzZWZ1bmNfaW5zdC5ncm91cCk7XG4mIzQzO1x0XHR1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4oXHUwMDI2b3B0cy1cdTAwM2VmdW5jX2luc3QuZ3JvdXApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DT05GSUdGU19GX1VWQyYjMzQ7LAogICAgJiMzNDtVU0JfRl9VVkMmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZjZ19hdHRhY2hfY29uZmlnZnMmIzM0OywKICAgICYjMzQ7dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuJiMzNDssCiAgICAmIzM0O3V2Y19hbGxvY19pbnN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIFVTQiBVVkMgZ2FkZ2V0IGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uIGJ5IHJlcGxhY2luZyBjb25maWdfZ3JvdXBfcHV0IHdpdGggdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIHBvdGVudGlhbCBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGggaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA1YmU5MWEwY2E4NDMyYTZjMDUzYmZkNmQ3ZWZhNzE3NDVmODU0OWE3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMjEgMTA6MTc6MjIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMKaW5kZXggNzBhMTQxNWVhNDAxNGYuLmRhMGZjODA4NGJiNjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jCkBAIC0zODI5LDcgJiM0MzszODI5LDcgQEAgaW50IHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzKHN0cnVjdCBmX3V2Y19vcHRzICpvcHRzKQogCXJldCA9IHV2Y2dfY29uZmlnX2NyZWF0ZV9jaGlsZHJlbigmYW1wO29wdHMtJmd0O2Z1bmNfaW5zdC5ncm91cCwKIAkJCQkJICAmYW1wO3V2Y19mdW5jX3R5cGUpOwogCWlmIChyZXQgJmx0OyAwKQotCQljb25maWdfZ3JvdXBfcHV0KCZhbXA7b3B0cy0mZ3Q7ZnVuY19pbnN0Lmdyb3VwKTsKJiM0MzsJCXV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbigmYW1wO29wdHMtJmd0O2Z1bmNfaW5zdC5ncm91cCk7CiAKIAlyZXR1cm4gcmV0OwogfQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTMwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBHYWRnZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jYC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgaW4gdGhlIGB1dmNnX2F0dGFjaF9jb25maWdmc2AgZnVuY3Rpb24uIEkgc2VlIHRoYXQgYGNvbmZpZ19ncm91cF9wdXQoJmFtcDtvcHRzLSZndDtmdW5jX2luc3QuZ3JvdXApO2AgaGFzIGJlZW4gc3dhcHBlZCBvdXQgZm9yIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4oJmFtcDtvcHRzLSZndDtmdW5jX2luc3QuZ3JvdXApO2AuIEltbWVkaWF0ZWx5LCBteSBzcGlkZXktc2Vuc2UgdGluZ2xlczsgdGhpcyBzbWVsbHMgbGlrZSBhIGZpeCByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBDb25maWdGUyBmcmFtZXdvcmssIHBhcnRpY3VsYXJseSBhcm91bmQgZXJyb3IgaGFuZGxpbmcuCgpUaGUgb3JpZ2luYWwgY29kZSBsaWtlbHkgaGFkIGEgZmxhdyB0aGF0IGNvdWxkIGxlYWQgdG8gYSBsZWFrLCBhIHVzZS1hZnRlci1mcmVlLCBvciBhIHNpbWlsYXIga2luZCBvZiBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSB3aGVuIGB1dmNnX2F0dGFjaF9jb25maWdmc2AgZmFpbHMgb3IgYmFpbHMgb3V0IGR1cmluZyBpdHMgZXhlY3V0aW9uLiBUaGUgbmV3IGZ1bmN0aW9uLCBgdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuYCwgaXMgYWxtb3N0IGNlcnRhaW5seSByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAgdGhlIENvbmZpZ0ZTIGdyb3VwJiMzOTtzIGNoaWxkcmVuIGJlZm9yZSB0aGUgZ3JvdXAgaXRzZWxmIGlzIHJlbGVhc2VkLiBUaGlzIG1lYW5zIGl0JiMzOTtzIGEgKm11Y2gqIHNhZmVyIHdheSBvZiBoYW5kbGluZyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgoKTm93LCBJIHJlYWxseSBuZWVkIHRvIGRyaWxsIGRvd24gaW50byBgdXZjZ19hdHRhY2hfY29uZmlnZnNgIGFuZCBgdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuYCB0byB1bmRlcnN0YW5kIHRoZSAqc3BlY2lmaWNzKiBvZiB0aGUgcG90ZW50aWFsIHByb2JsZW0gYW5kIGhvdyB0aGlzIGZpeCBhZGRyZXNzZXMgaXQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGhvdyB0aGUgQ29uZmlnRlMgZ3JvdXAgaXMgcG9wdWxhdGVkLCB3aGVyZSByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgYW5kIGhvdyB0aGUgZXJyb3IgcGF0aHMgaGFuZGxlIGZyZWVpbmcgdGhvc2UgcmVzb3VyY2VzLiBJIG5lZWQgdG8gY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMgYW5kIGVuc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzaWRlIGVmZmVjdHMuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2Y2dfYXR0YWNoX2NvbmZpZ2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYz0zODA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXZjZ19jb25maWdfZ3JvdXBfdHlwZSB1dmNfZnVuY190eXBlID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0zODIxLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jOjM4MjI6aW50IHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzKHN0cnVjdCBmX3V2Y19vcHRzICpvcHRzKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jLTM4MjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYCBGdW5jdGlvbiBDYWxsKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYC4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoYXQsIGFzIGFsd2F5cywgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLiBJJiMzOTtsbCBuZWVkIHRvIGZpbmQgZXZlcnkgcGxhY2UgaW4gdGhlIGNvZGUgd2hlcmUgYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYCBpcyBhY3R1YWxseSAqY2FsbGVkKi4gVGhhdCYjMzk7cyBteSBzdGFydGluZyBwb2ludC4gRnJvbSB0aGVyZSwgSSBjYW4gYmVnaW4gdG8gcGllY2UgdG9nZXRoZXIgd2hhdCBpdCYjMzk7cyAqZG9pbmcqIGJ5IGFuYWx5emluZyB3aGF0IGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIGl0IGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhcm91bmQgdGhvc2UgY2FsbHMuIEkmIzM5O20gaG9waW5nIHRoaXMgd2lsbCBpbGx1bWluYXRlIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGltZSB0byBnZXQgc2VhcmNoaW5nIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2Y2dfYXR0YWNoX2NvbmZpZ2ZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYz05MTI9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKnV2Y19hbGxvY19pbnN0KHZvaWQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmMtOTk4LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmM6OTk5Olx0cmV0ID0gdXZjZ19hdHRhY2hfY29uZmlnZnMob3B0cyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy0xMDAwLVx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYz0zODA4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXZjZ19jb25maWdfZ3JvdXBfdHlwZSB1dmNfZnVuY190eXBlID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0zODIxLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jOjM4MjI6aW50IHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzKHN0cnVjdCBmX3V2Y19vcHRzICpvcHRzKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jLTM4MjMte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuaD0xODg9c3RhdGljIGlubGluZSBzdHJ1Y3QgdXZjZ19leHRlbnNpb24gKnRvX3V2Y2dfZXh0ZW5zaW9uKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmgtMTkyLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5oOjE5MzppbnQgdXZjZ19hdHRhY2hfY29uZmlnZnMoc3RydWN0IGZfdXZjX29wdHMgKm9wdHMpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5oLTE5NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjE2CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBVVkMgR2FkZ2V0IEFsbG9jYXRpb24qKgoKQWxyaWdodCwgc28gdGhlIGNsdWUgbGVhZHMgbWUgdG8gYHV2Y19hbGxvY19pbnN0YCB3aXRoaW4gYGZfdXZjLmNgLiBUaGF0JiMzOTtzIHByZWNpc2VseSB3aGVyZSBJJiMzOTtkIGV4cGVjdCB0aGUgVVZDIGdhZGdldCBpbnN0YW50aWF0aW9uIHRvIGtpY2sgb2ZmLiBUaGlzIHBvaW50cyBkaXJlY3RseSB0byB0aGUgVVNCIGdhZGdldCBVVkMgZnVuY3Rpb24sIHdoaWNoIGlzIGV4YWN0bHkgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCBhbGxvY2F0aW9uIGxvZ2ljLiBCZWZvcmUgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgZnVuY3Rpb24gaXRzZWxmLCB0aG91Z2gsIGl0JiMzOTtzIGFsd2F5cyBhIGdvb2QgcHJhY3RpY2UgdG8gZXhhbWluZSB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgZ292ZXJuIHRoZSBVU0IgZ2FkZ2V0IFVWQyBkcml2ZXIuIEkmIzM5O2xsIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gZmxhZ3MgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc2V0dGluZ3Mgb3IgZGVwZW5kZW5jaWVzIGF0IHBsYXkgdGhhdCBtaWdodCBpbmZsdWVuY2UgaG93IGB1dmNfYWxsb2NfaW5zdGAgYmVoYXZlcy4gVGhpcyB3aWxsIHByb3ZpZGUgc29tZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfQ09ORklHRlNfRl9VVkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ1OD1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfSElEXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDY3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDY4OmNvbmZpZyBVU0JfQ09ORklHRlNfRl9VVkNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ2OS1cdGJvb2wgXCYjMzQ7VVNCIFdlYmNhbSBmdW5jdGlvblwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NzQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBzaXR1YXRpb24gbXlzZWxmOgoKKipVVkMgQ29uZmlndXJhdGlvbiBRdWFuZGFyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIFVWQyBpbXBsZW1lbnRhdGlvbi4uLiBJIG5lZWQgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHJpZ2h0LiBIYW5nIG9uIGEgc2Vjb25kLCBpcyBpdCBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCB0aGF0IEkmIzM5O20gc3VwcG9zZWQgdG8gYmUgdXNpbmcgaGVyZSBmb3IgdGhlIGNvbmZpZywgb3IgaXMgaXQgYFVTQl9GX1VWQ2A/IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSB1c2luZyB0aGUgY29ycmVjdCBkZWZpbmUgZm9yIHRoZSBWaWRlbyBDbGFzcyBjb25maWd1cmF0aW9uLCBvdGhlcndpc2UsIHRoaXMgd2hvbGUgdGhpbmcgaXMgZ29pbmcgdG8gZmFsbCBhcGFydC4gR290dGEgZG91YmxlLWNoZWNrIHRoZSBoZWFkZXJzLCB0aGUga2VybmVsIGRvY3VtZW50YXRpb24uLi4gSXQmIzM5O3MgYWxsIHRvbyBlYXN5IHRvIG1peCB0aGVzZSB1cC4gVGltZSB0byBjbGFyaWZ5IHdoaWNoIG9uZSBpcyB0aGUgY29ycmVjdCBmbGFnIHRvIHNldCB0byBlbmFibGUgdGhpcyBVVkMgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGRldmljZS4gTGV0JiMzOTtzIG5vdCBtYWtlIGFueSBhc3N1bXB0aW9ucyBhbmQgZ2V0IHRoaXMgc29ydGVkIG91dCByaWdodCBhd2F5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgVVNCX0ZfVVZDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz0yMDI9Y29uZmlnIFVTQl9GX1VBQzJcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0yMDQtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoyMDU6Y29uZmlnIFVTQl9GX1VWQ1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjA2LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyB0aGUgcm9sZSBvZiB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVVkMgQ29uZmlnRlMgQnVpbGQgUHJvY2VzcyoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgdXZjX2NvbmZpZ2ZzLm9gIGlzIGJ1aWx0IHdpdGhpbiB0aGUgVVNCIGdhZGdldCBmdW5jdGlvbiBmcmFtZXdvcmsuIFRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQsIGFzIGFsd2F5cywgaXMgdGhlIGBNYWtlZmlsZWAgd2l0aGluIHRoZSByZWxldmFudCBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSYjMzk7bGwgYmUgaGVhZGluZyB0byBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlYC4gVGhhdCBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBleHBsaWNpdCBidWlsZCBydWxlcyBvciwgYXQgdGhlIHZlcnkgbGVhc3QsIHBvaW50IG1lIHRvd2FyZHMgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBhbmQgZGVwZW5kZW5jaWVzIGludm9sdmVkIGluIGNvbnN0cnVjdGluZyB0aGF0IG9iamVjdCBmaWxlLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoZSBzb3VyY2UgY29kZSwgb3RoZXIgb2JqZWN0IGZpbGVzLCBhbmQgcHJvYmFibHkgaW5jbHVkZSBwYXRocyBzcGVjaWZpYyB0byB0aGUgVVZDIGdhZGdldCBmdW5jdGlvbmFsaXR5LiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYHV2Y19jb25maWdmcy5vYCBhbmQsIGZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGJhY2sgYW55IGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgYnVpbGQgaXNzdWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1dmNfY29uZmlnZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlPTQyPW9iai0kKENPTkZJR19VU0JfRl9VQUMyKVx0JiM0Mzs9IHVzYl9mX3VhYzIub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjQzOnVzYl9mX3V2Yy15XHRcdFx0Oj0gZl91dmMubyB1dmNfcXVldWUubyB1dmNfdjRsMi5vIHV2Y192aWRlby5vIHV2Y19jb25maWdmcy5vXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGUtNDQtaWZuZXEgKCQoQ09ORklHX1RSQUNJTkcpLClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMwMwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGJyZWFrZG93biBvZiB3aGF0IEkmIzM5O20gbG9va2luZyBhdDoKCioqSW52ZXN0aWdhdGluZyBVVkMgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgQ09ORklHX1VTQl9GX1VWQ2AgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24uIEJ1dCwgSSBzaG91bGQgYWxzbyBkb3VibGUtY2hlY2sgYFVTQl9DT05GSUdGU19GX1VWQ2AganVzdCBpbiBjYXNlIHRoZXJlJiMzOTtzIHNvbWV0aGluZyByZWxldmFudCB0aGVyZS4gV2FpdCBhIHNlY29uZCwgdGhlIGRlcGVuZGVuY3kgdHJlZSBzZWVtcyB0byBiZSBzdHJhaWdodGZvcndhcmQ7IGB1c2JfZl91dmMteWAgaXMgZGlyZWN0bHkgYnVpbHQgd2hlbiBgQ09ORklHX1VTQl9GX1VWQ2AgaXMgc2V0LiBOb3csIHRvIGJlIHN1cmUsIEkgc2hvdWxkIHZlcmlmeSB0aGUgYnVpbGQgcnVsZXMuIEkmIzM5O2xsIG5lZWQgdG8gb3BlbiB1cCBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgdXNiX2ZfdXZjYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIFVWQyBnYWRnZXQgZnVuY3Rpb24gaXMgY29uZmlndXJlZCBhbmQgYnVpbHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzYl9mX3V2YyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU9NDI9b2JqLSQoQ09ORklHX1VTQl9GX1VBQzIpXHQmIzQzOz0gdXNiX2ZfdWFjMi5vXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU6NDM6dXNiX2ZfdXZjLXlcdFx0XHQ6PSBmX3V2Yy5vIHV2Y19xdWV1ZS5vIHV2Y192NGwyLm8gdXZjX3ZpZGVvLm8gdXZjX2NvbmZpZ2ZzLm9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZS00NC1pZm5lcSAoJChDT05GSUdfVFJBQ0lORyksKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTQ1LSAgICBDRkxBR1NfdXZjX3RyYWNlLm9cdFx0Oj0gLUkkKHNyYylcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZTo0NjogICAgdXNiX2ZfdXZjLXlcdFx0XHQmIzQzOz0gdXZjX3RyYWNlLm9cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZS00Ny1lbmRpZlxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19VU0JfRl9VVkMpXHRcdCYjNDM7PSB1c2JfZl91dmMub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTQ5LXVzYl9mX21pZGkteVx0XHRcdDo9IGZfbWlkaS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4ODcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipVU0IgVVZDIENvbmZpZ3VyYXRpb24gLSBBIFF1aWNrIENoZWNrKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFVWQyBzdXBwb3J0IGluIFVTQi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgQ09ORklHX1VTQl9GX1VWQ2AgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24sIG5vIHF1ZXN0aW9uIGFib3V0IGl0LiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IGRyaXZlciB3ZSYjMzk7cmUgdXNpbmcsIHNvIGl0IG1ha2VzIHNlbnNlIHRoYXQgaXQgd291bGQgYmUgdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQuCgpCdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCBhbHNvIGEgZGVwZW5kZW5jeT8gSSYjMzk7dmUgZ290IGEgbmlnZ2xpbmcgZmVlbGluZyB0aGVyZSYjMzk7cyBzb21ldGhpbmcgYWJvdXQgY29uZmlnZnMgaW52b2x2ZWQgd2l0aCB0aGlzIHNldHVwLiBJdCYjMzk7cyBiZXN0IHRvIGNvbmZpcm0gdGhpcywgc28gbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlc2Ugc29ydHMgb2YgZGVwZW5kZW5jaWVzLCBzbyBhIHF1aWNrIGNoZWNrIHRoZXJlIHNob3VsZCBjbGFyaWZ5IHdoZXRoZXIgaXQgaXMgbmVlZGVkLiBUaGF0IHdpbGwgYmUgdGhlIGRldGVybWluaW5nIGZhY3Rvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7VVNCX0NPTkZJR0ZTX0ZfVVZDJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDU4PWNvbmZpZyBVU0JfQ09ORklHRlNfRl9ISURcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NjctXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0Njg6Y29uZmlnIFVTQl9DT05GSUdGU19GX1VWQ1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDY5LVx0Ym9vbCBcJiMzNDtVU0IgV2ViY2FtIGZ1bmN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNzcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB3aGF0IEkmIzM5O20gbG9va2luZyBhdDoKCioqSW52ZXN0aWdhdGluZyB0aGUgTWVhbmluZyBvZiBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCoqCgpSaWdodCwgc28gSSYjMzk7bSBwcmVzZW50ZWQgd2l0aCB0aGlzIGBVU0JfQ09ORklHRlNfRl9VVkNgIGZsYWcgYW5kLCBpbnN0aW5jdGl2ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpzZWxlY3RzKi4gV2hhdCYjMzk7cyB0aGUgY29udGV4dCBoZXJlPyBJcyB0aGlzIGEgZHJpdmVyIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBBIGJ1aWxkLXRpbWUgZmxhZz8gS25vd2luZyB0aGUgc3BlY2lmaWMgc3Vic3lzdGVtIHdvdWxkIGhlbHAgbmFycm93IGl0IGRvd24sIGJ1dCBsZXQmIzM5O3MgYXNzdW1lIHRoaXMgaXMgcmVsYXRlZCB0byB0aGUgVVNCIGNvbmZpZ2ZzLiBVVkMgaGludHMgYXQgVVNCIFZpZGVvIENsYXNzLCBzbyBpdCYjMzk7cyBwcm9iYWJseSBjb25jZXJuZWQgd2l0aCB3ZWJjYW0gb3IgdmlkZW8gY2FwdHVyZSBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIHdpbGwgYmUgbGlua2VkIHRvIHN1cHBvcnRpbmcgdGhlIFVWQyBjbGFzcyB3aGVuIHVzaW5nIHRoZSBjb25maWdmcyBVU0IgZ2FkZ2V0LiBOb3csIEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgYW5kIHNlZSB3aGVyZSB0aGlzIGlzIGRlZmluZWQsIGFuZCB3aGF0IGVsc2UgaXQgdG9nZ2xlcy4gSXQgbGlrZWx5IGVuYWJsZXMgYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBmcmFtZXdvcmssIHByb2JhYmx5IGNyZWF0aW5nIHRoZSBuZWNlc3NhcnkgZW5kcG9pbnRzIGFuZCBkZXNjcmlwdG9ycy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIGltcGxpY2F0aW9ucywgYW5kIGhvdyBpdCBpbXBhY3RzIHRoZSBvdmVyYWxsIHN5c3RlbSYjMzk7cyByZXNvdXJjZSB1c2FnZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfQ09ORklHRlNfRl9VVkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz00NTg9Y29uZmlnIFVTQl9DT05GSUdGU19GX0hJRFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ2Ny1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjQ2ODpjb25maWcgVVNCX0NPTkZJR0ZTX0ZfVVZDXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NjktXHRib29sIFwmIzM0O1VTQiBXZWJjYW0gZnVuY3Rpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY3NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHByb2Nlc3NpbmcgdGhlIGRlc2NyaWJlZCB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gYXJvdW5kIGxpbmUgNDY4LiBCYXNlZCBvbiBteSBleGlzdGluZyBrbm93bGVkZ2UsIHRoYXQgbGlrZWx5IG1hcmtzIGEgY3JpdGljYWwgYXJlYSB3aGVyZSBjZXJ0YWluIGNvcmUgZmVhdHVyZXMgb3IgYSBzcGVjaWZpYyBkcml2ZXImIzM5O3Mgc2V0dGluZ3MgYXJlIGRlZmluZWQuIEkgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5IGluIHRoaXMgc2VjdGlvbiBvciBpbiB0aGUgc3Vycm91bmRpbmcgbGluZXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGtleXdvcmRzIGxpa2UgJiMzNDtjb25maWcsJiMzNDsgJiMzNDt0cmlzdGF0ZSwmIzM0OyAmIzM0O2Jvb2wsJiMzNDsgYW5kIHNwZWNpZmljIGRldmljZSBuYW1lcyBvciBkZXNjcmlwdG9ycyB0byBxdWlja2x5IHBhcnNlIHdoYXQmIzM5O3MgYXZhaWxhYmxlIGFuZCBob3cgaXQmIzM5O3MgY29udHJvbGxlZC4gVGltZSB0byBnZXQgdG8gd29yay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDYwOlx0XHRkZXBlbmRzIG9uIFVTQl9DT05GSUdGU1xuIDQ2MTpcdFx0c2VsZWN0IFVTQl9GX0hJRFxuIDQ2MjpcdFx0aGVscFxuIDQ2MzpcdFx0ICBUaGUgSElEIGZ1bmN0aW9uIGRyaXZlciBwcm92aWRlcyBnZW5lcmljIGVtdWxhdGlvbiBvZiBVU0JcbiA0NjQ6XHRcdCAgSHVtYW4gSW50ZXJmYWNlIERldmljZXMgKEhJRCkuXG4gNDY1Olx0XG4gNDY2Olx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgRG9jdW1lbnRhdGlvbi91c2IvZ2FkZ2V0X2hpZC5yc3QuXG4gNDY3Olx0XG4gNDY4Olx0Y29uZmlnIFVTQl9DT05GSUdGU19GX1VWQ1xuIDQ2OTpcdFx0Ym9vbCBcJiMzNDtVU0IgV2ViY2FtIGZ1bmN0aW9uXCYjMzQ7XG4gNDcwOlx0XHRkZXBlbmRzIG9uIFVTQl9DT05GSUdGU1xuIDQ3MTpcdFx0ZGVwZW5kcyBvbiBWSURFT19ERVZcbiA0NzI6XHRcdGRlcGVuZHMgb24gVklERU9fREVWXG4gNDczOlx0XHRzZWxlY3QgVklERU9CVUYyX0RNQV9TR1xuIDQ3NDpcdFx0c2VsZWN0IFZJREVPQlVGMl9WTUFMTE9DXG4gNDc1Olx0XHRzZWxlY3QgVVNCX0ZfVVZDXG4gNDc2Olx0XHRoZWxwXG4gNDc3Olx0XHQgIFRoZSBXZWJjYW0gZnVuY3Rpb24gYWN0cyBhcyBhIGNvbXBvc2l0ZSBVU0IgQXVkaW8gYW5kIFZpZGVvIENsYXNzXG4gNDc4Olx0XHQgIGRldmljZS4gSXQgcHJvdmlkZXMgYSB1c2Vyc3BhY2UgQVBJIHRvIHByb2Nlc3MgVVZDIGNvbnRyb2wgcmVxdWVzdHNcbiA0Nzk6XHRcdCAgYW5kIHN0cmVhbSB2aWRlbyBkYXRhIHRvIHRoZSBob3N0LlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTk2CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBVU0IgQ29uZmlndXJhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIGBVU0JfQ09ORklHRlNfRl9VVkNgIGFjdGl2YXRlcyBgVVNCX0ZfVVZDYCwgc28gZW5hYmxpbmcgYm90aCBpcyB0aGUgbG9naWNhbCBhcHByb2FjaC4gQnV0IGhhbmcgb24sIGBVU0JfQ09ORklHRlNfRl9VVkNgIGlzIGEgYm9vbGVhbiwgYW5kIGBVU0JfRl9VVkNgIGlzIHRyaXN0YXRlLiBSaWdodCwgc28gSSBjYW4ganVzdCBkZWZpbmUgYm90aCBvZiB0aGVtIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuIEhtbSwgYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBVU0JfQ09ORklHRlNgIGlzIGVuYWJsZWQuCgpMZXQgbWUganVzdCBxdWlja2x5IHZlcmlmeSB0aGF0IGBVU0JfQ09ORklHRlNfRl9VVkNgIHByb3Blcmx5IHNldHMgYFVTQl9GX1VWQ2AsIHllcywgaXQgZG9lcywgZ29vZC4KCk5vdywgdGhlIHBhdGNoIGl0c2VsZiBpcyBjaGFuZ2luZyB0aGUgd2F5IHdlIGhhbmRsZSB0aGUgZXJyb3IgY2FzZSBpbiBgdXZjZ19hdHRhY2hfY29uZmlnZnNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIGBjb25maWdfZ3JvdXBfcHV0YCB3aXRoIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gLiBUaGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYW4gZXJyb3IgcGF0aCwgYSBrZXkgYXJlYSBmb3IgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcywgYW5kIHJpcGUgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgYXJlIGB1dmNnX2F0dGFjaF9jb25maWdmc2AsIGB1dmNfYWxsb2NfaW5zdGAsIGFuZCwgb2YgY291cnNlLCB0aGUgbmV3IGZ1bmN0aW9uIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gLiBMZXQmIzM5O3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gIHRvIG1ha2Ugc3VyZSBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBkZXRhaWxlZCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYz0xNTY9c3RhdGljIGludCB1dmNnX2NvbmZpZ19jcmVhdGVfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqcGFyZW50LFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0xNzAtXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM6MTcxOnN0YXRpYyB2b2lkIHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbihzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cClcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0xNzIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0xNzYtXHRcdGxpc3RfZGVsKFx1MDAyNmNoaWxkLVx1MDAzZWdyb3VwX2VudHJ5KTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYzoxNzc6XHRcdHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbihjaGlsZCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMTc4LVx0XHRjb25maWdfaXRlbV9wdXQoXHUwMDI2Y2hpbGQtXHUwMDNlY2dfaXRlbSk7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jPTM2MzU9c3RhdGljIHZvaWQgdXZjX2Z1bmNfaXRlbV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMzYzOC1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYzozNjM5Olx0dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuKHRvX2NvbmZpZ19ncm91cChpdGVtKSk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMzY0MC1cdHVzYl9wdXRfZnVuY3Rpb25faW5zdGFuY2UoXHUwMDI2b3B0cy1cdTAwM2VmdW5jX2luc3QpO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYz0zODIyPWludCB1dmNnX2F0dGFjaF9jb25maWdmcyhzdHJ1Y3QgZl91dmNfb3B0cyAqb3B0cylcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMzgzMS1cdGlmIChyZXQgXHUwMDNjIDApXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM6MzgzMjpcdFx0dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuKFx1MDAyNm9wdHMtXHUwMDNlZnVuY19pbnN0Lmdyb3VwKTtcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0zODMzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMSAxMDoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzI0CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipGb2N1c2luZyBvbiBDb25maWdGUyBSZW1vdmFsKioKCk9rYXksIHNvIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gIGxvb2tzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBwYXJ0aWN1bGFyIGludmVzdGlnYXRpb24uIFRoYXQgZmVlbHMgbGlrZSBhIHJlbGV2YW50IGZ1bmN0aW9uIHRvIGRpZyBpbnRvLgoKTm93LCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHN5c3RlbSwgSSBzaG91bGQgYWxzbyBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIGB1dmNnX2F0dGFjaF9jb25maWdmc2AgYW5kIGB1dmNfYWxsb2NfaW5zdGAuIExldCYjMzk7cyBzZWUgaG93IHRoZSBDb25maWdGUyBpcyBlc3RhYmxpc2hlZCBhbmQgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQgYWxvbmdzaWRlIHRoZSByZW1vdmFsIHByb2NlZHVyZS4gVW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUgaGVscHMgcmVmaW5lIG15IGZvY3VzIGZvciB0aGUgYW5hbHlzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3V2Y19hbGxvY19pbnN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmM9OTA0PXN0YXRpYyB2b2lkIHV2Y19mcmVlX2luc3Qoc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZilcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy05MTEtXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYzo5MTI6c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKnV2Y19hbGxvY19pbnN0KHZvaWQpXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy05MTMte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jPTEwODM9c3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb24gKnV2Y19hbGxvYyhzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpmaSlcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy0xMTcyLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmM6MTE3MzpERUNMQVJFX1VTQl9GVU5DVElPTl9JTklUKHV2YywgdXZjX2FsbG9jX2luc3QsIHV2Y19hbGxvYyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy0xMTc0LU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtVU0IgVmlkZW8gQ2xhc3MgR2FkZ2V0IGRyaXZlclwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIxIDEwOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MDkKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogMjQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBVVkMgR2FkZ2V0IEZ1bmN0aW9uIEluaXRpYWxpemF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggdGhlIGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIFVWQyBnYWRnZXQmIzM5O3MgaW5zdGFuY2UgdXNpbmcgYHV2Y19hbGxvY19pbnN0YC4gVGhpcyBmdW5jdGlvbiBpcyBkZWZpbml0ZWx5IHRpZWQgaW50byB0aGUgY29uZmlnZnMgc3lzdGVtIHdoZW4gYSBVVkMgZnVuY3Rpb24gaXMgY3JlYXRlZC4gSSBrbm93IHRoaXMgYmVjYXVzZSBvZiB0aGUgc3BlY2lmaWMgY29uZmlncyBtZW50aW9uZWQ6IGBVU0JfQ09ORklHRlNfRl9VVkNgLCBgVVNCX0ZfVVZDYCwgYW5kIGBVU0JfQ09ORklHRlNgLgoKQmVmb3JlIEkgZGlnIHRvbyBkZWVwLCBJJiMzOTttIGNoZWNraW5nIGlmIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgaW52b2x2ZWQuIEl0IGxvb2tzIGxpa2UgYFZJREVPX0RFVmAgaXMgYWxzbyByZXF1aXJlZCB3aGVuIHVzaW5nIGBVU0JfQ09ORklHRlNfRl9VVkNgIGFuZCBvZiBjb3Vyc2UsIGBVU0JfR0FER0VUYCBpcyB0aGUgY29yZSBmb3VuZGF0aW9uLgoKQmFzZWQgb24gdGhpcywgSSYjMzk7bSBnb2luZyB0byBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZW5hYmxlZCBjb25maWd1cmF0aW9uczogYFVTQl9DT05GSUdGU19GX1VWQ2AsIGBVU0JfRl9VVkNgLCBhbmQgYFVTQl9DT05GSUdGU2AuIEkgYWxzbyBuZWVkIHRvIGZvY3VzIG9uIHRoZXNlIHN5bWJvbHM6IGB1dmNnX2F0dGFjaF9jb25maWdmc2AsIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gLCBhbmQgZXNwZWNpYWxseSwgYHV2Y19hbGxvY19pbnN0YAoKVGhlIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGltcG9ydGFudCBvbmUsIHJlcGxhY2luZyBgY29uZmlnX2dyb3VwX3B1dGAgd2l0aCBgdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuYCwgd2hpY2ggaW5kaWNhdGVzIGl0JiMzOTtzIGFkZHJlc3NpbmcgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCB3aXRoaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBVU0IgVVZDIGdhZGdldC4gSXQgc2VlbXMgdG8gYmUgcHJldmVudGluZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdCBub3cgYW5kIHRvIHByb2JlIHRoZSBsaW1pdHMgb2YgdGhlIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjEgMTA6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9DT05GSUdGU19GX1VWQyYjMzQ7LAogICAgJiMzNDtVU0JfRl9VVkMmIzM0OywKICAgICYjMzQ7VVNCX0NPTkZJR0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dXZjZ19hdHRhY2hfY29uZmlnZnMmIzM0OywKICAgICYjMzQ7dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuJiMzNDssCiAgICAmIzM0O3V2Y19hbGxvY19pbnN0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIFVTQiBVVkMgZ2FkZ2V0IGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uIGJ5IHJlcGxhY2luZyBjb25maWdfZ3JvdXBfcHV0IHdpdGggdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIHBvdGVudGlhbCBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGggaXMgcm9idXN0LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfQ09ORklHRlNfRl9VVkMmIzM0OywKICAgICYjMzQ7VVNCX0ZfVVZDJiMzNDssCiAgICAmIzM0O1VTQl9DT05GSUdGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3V2Y2dfYXR0YWNoX2NvbmZpZ2ZzJiMzNDssCiAgICAmIzM0O3V2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbiYjMzQ7LAogICAgJiMzNDt1dmNfYWxsb2NfaW5zdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBVU0IgVVZDIGdhZGdldCBmdW5jdGlvbiBpbml0aWFsaXphdGlvbiBieSByZXBsYWNpbmcgY29uZmlnX2dyb3VwX3B1dCB3aXRoIHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBwb3RlbnRpYWwgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBlcnJvciBwYXRoIGlzIHJvYnVzdC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE3OjI0Ljc1MjY4ODYzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg1ODQyMTU4NjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9DT05GSUdGU19GX1VWQ1wiLFxuICAgIFwiVVNCX0ZfVVZDXCIsXG4gICAgXCJVU0JfQ09ORklHRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ1dmNnX2F0dGFjaF9jb25maWdmc1wiLFxuICAgIFwidXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuXCIsXG4gICAgXCJ1dmNfYWxsb2NfaW5zdFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGVycm9yIGhhbmRsaW5nIHBhdGggaW4gdGhlIFVTQiBVVkMgZ2FkZ2V0IGZ1bmN0aW9uIGluaXRpYWxpemF0aW9uIGJ5IHJlcGxhY2luZyBjb25maWdfZ3JvdXBfcHV0IHdpdGggdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBwcmV2ZW50cyBhIHBvdGVudGlhbCBsZWFrIG9yIHVzZS1hZnRlci1mcmVlLCBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGVycm9yIHBhdGggaXMgcm9idXN0LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzoyNC43NTI3MjA5MTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NTY0MzUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDViZTkxYTBjYTg0MzJhNmMwNTNiZmQ2ZDdlZmE3MTc0NWY4NTQ5YTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBKdWwgMjEgMTA6MTc6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jXFxuaW5kZXggNzBhMTQxNWVhNDAxNGYuLmRhMGZjODA4NGJiNjU0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuY1xcbkBAIC0zODI5LDcgKzM4MjksNyBAQCBpbnQgdXZjZ19hdHRhY2hfY29uZmlnZnMoc3RydWN0IGZfdXZjX29wdHMgKm9wdHMpXFxuIFxcdHJldCA9IHV2Y2dfY29uZmlnX2NyZWF0ZV9jaGlsZHJlbihcXHUwMDI2b3B0cy1cXHUwMDNlZnVuY19pbnN0Lmdyb3VwLFxcbiBcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZ1dmNfZnVuY190eXBlKTtcXG4gXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdGNvbmZpZ19ncm91cF9wdXQoXFx1MDAyNm9wdHMtXFx1MDAzZWZ1bmNfaW5zdC5ncm91cCk7XFxuK1xcdFxcdHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbihcXHUwMDI2b3B0cy1cXHUwMDNlZnVuY19pbnN0Lmdyb3VwKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6MjUuNTEyODYzMzI0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODUwODE5NjY0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0NPTkZJR0ZTX0ZfVVZDXCIsXG4gICAgXCJVU0JfRl9VVkNcIixcbiAgICBcIlVTQl9DT05GSUdGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInV2Y2dfYXR0YWNoX2NvbmZpZ2ZzXCIsXG4gICAgXCJ1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5cIixcbiAgICBcInV2Y19hbGxvY19pbnN0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCBpbiB0aGUgVVNCIFVWQyBnYWRnZXQgZnVuY3Rpb24gaW5pdGlhbGl6YXRpb24gYnkgcmVwbGFjaW5nIGNvbmZpZ19ncm91cF9wdXQgd2l0aCB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHByZXZlbnRzIGEgcG90ZW50aWFsIGxlYWsgb3IgdXNlLWFmdGVyLWZyZWUsIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgZXJyb3IgcGF0aCBpcyByb2J1c3QuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWJlOTFhMGNhODQzMmE2YzA1M2JmZDZkN2VmYTcxNzQ1Zjg1NDlhN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVsIDIxIDEwOjE3OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jXG5pbmRleCA3MGExNDE1ZWE0MDE0Zi4uZGEwZmM4MDg0YmI2NTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmNcbisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuY1xuQEAgLTM4MjksNyArMzgyOSw3IEBAIGludCB1dmNnX2F0dGFjaF9jb25maWdmcyhzdHJ1Y3QgZl91dmNfb3B0cyAqb3B0cylcbiBcdHJldCA9IHV2Y2dfY29uZmlnX2NyZWF0ZV9jaGlsZHJlbihcdTAwMjZvcHRzLVx1MDAzZWZ1bmNfaW5zdC5ncm91cCxcbiBcdFx0XHRcdFx0ICBcdTAwMjZ1dmNfZnVuY190eXBlKTtcbiBcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdGNvbmZpZ19ncm91cF9wdXQoXHUwMDI2b3B0cy1cdTAwM2VmdW5jX2luc3QuZ3JvdXApO1xuK1x0XHR1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4oXHUwMDI2b3B0cy1cdTAwM2VmdW5jX2luc3QuZ3JvdXApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzoyNS41MTI4NjczMzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY0NDg2ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBHYWRnZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuY2AuIEl0J3MgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbi4gVGhlIGtleSBjaGFuZ2UgaXMgaW4gdGhlIGB1dmNnX2F0dGFjaF9jb25maWdmc2AgZnVuY3Rpb24uIEkgc2VlIHRoYXQgYGNvbmZpZ19ncm91cF9wdXQoXHUwMDI2b3B0cy1cdTAwM2VmdW5jX2luc3QuZ3JvdXApO2AgaGFzIGJlZW4gc3dhcHBlZCBvdXQgZm9yIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4oXHUwMDI2b3B0cy1cdTAwM2VmdW5jX2luc3QuZ3JvdXApO2AuIEltbWVkaWF0ZWx5LCBteSBzcGlkZXktc2Vuc2UgdGluZ2xlczsgdGhpcyBzbWVsbHMgbGlrZSBhIGZpeCByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBDb25maWdGUyBmcmFtZXdvcmssIHBhcnRpY3VsYXJseSBhcm91bmQgZXJyb3IgaGFuZGxpbmcuXG5cblRoZSBvcmlnaW5hbCBjb2RlIGxpa2VseSBoYWQgYSBmbGF3IHRoYXQgY291bGQgbGVhZCB0byBhIGxlYWssIGEgdXNlLWFmdGVyLWZyZWUsIG9yIGEgc2ltaWxhciBraW5kIG9mIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlIHdoZW4gYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYCBmYWlscyBvciBiYWlscyBvdXQgZHVyaW5nIGl0cyBleGVjdXRpb24uIFRoZSBuZXcgZnVuY3Rpb24sIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gLCBpcyBhbG1vc3QgY2VydGFpbmx5IHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCB0aGUgQ29uZmlnRlMgZ3JvdXAncyBjaGlsZHJlbiBiZWZvcmUgdGhlIGdyb3VwIGl0c2VsZiBpcyByZWxlYXNlZC4gVGhpcyBtZWFucyBpdCdzIGEgKm11Y2gqIHNhZmVyIHdheSBvZiBoYW5kbGluZyBwb3RlbnRpYWwgZXJyb3JzIGR1cmluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLlxuXG5Ob3csIEkgcmVhbGx5IG5lZWQgdG8gZHJpbGwgZG93biBpbnRvIGB1dmNnX2F0dGFjaF9jb25maWdmc2AgYW5kIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gIHRvIHVuZGVyc3RhbmQgdGhlICpzcGVjaWZpY3MqIG9mIHRoZSBwb3RlbnRpYWwgcHJvYmxlbSBhbmQgaG93IHRoaXMgZml4IGFkZHJlc3NlcyBpdC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBob3cgdGhlIENvbmZpZ0ZTIGdyb3VwIGlzIHBvcHVsYXRlZCwgd2hlcmUgcmVzb3VyY2VzIGFyZSBhbGxvY2F0ZWQsIGFuZCBob3cgdGhlIGVycm9yIHBhdGhzIGhhbmRsZSBmcmVlaW5nIHRob3NlIHJlc291cmNlcy4gSSBuZWVkIHRvIGNvbmZpcm0gbXkgaW5pdGlhbCBoeXBvdGhlc2lzIGFuZCBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSBzaWRlIGVmZmVjdHMuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTMwLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6MzAuMDc3MzYxNDUzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NDczMTk2NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1dmNnX2F0dGFjaF9jb25maWdmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jPTM4MDg9c3RhdGljIGNvbnN0IHN0cnVjdCB1dmNnX2NvbmZpZ19ncm91cF90eXBlIHV2Y19mdW5jX3R5cGUgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMzgyMS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM6MzgyMjppbnQgdXZjZ19hdHRhY2hfY29uZmlnZnMoc3RydWN0IGZfdXZjX29wdHMgKm9wdHMpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jLTM4MjMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzozMC40MjIxMDY5MjlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTU5OTYzNTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYCBGdW5jdGlvbiBDYWxsKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGB1dmNnX2F0dGFjaF9jb25maWdmc2AuIFRoZSBiZXN0IHdheSB0byBkbyB0aGF0LCBhcyBhbHdheXMsIGlzIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdsbCBuZWVkIHRvIGZpbmQgZXZlcnkgcGxhY2UgaW4gdGhlIGNvZGUgd2hlcmUgYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYCBpcyBhY3R1YWxseSAqY2FsbGVkKi4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBGcm9tIHRoZXJlLCBJIGNhbiBiZWdpbiB0byBwaWVjZSB0b2dldGhlciB3aGF0IGl0J3MgKmRvaW5nKiBieSBhbmFseXppbmcgd2hhdCBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byBpdCBhbmQgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgdGhvc2UgY2FsbHMuIEknbSBob3BpbmcgdGhpcyB3aWxsIGlsbHVtaW5hdGUgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBUaW1lIHRvIGdldCBzZWFyY2hpbmchXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzozNi41ODIwNzQ0MjhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4OTI0MDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2Y2dfYXR0YWNoX2NvbmZpZ2ZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmM9OTEyPXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICp1dmNfYWxsb2NfaW5zdCh2b2lkKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmMtOTk4LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jOjk5OTpcXHRyZXQgPSB1dmNnX2F0dGFjaF9jb25maWdmcyhvcHRzKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy0xMDAwLVxcdGlmIChyZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM9MzgwOD1zdGF0aWMgY29uc3Qgc3RydWN0IHV2Y2dfY29uZmlnX2dyb3VwX3R5cGUgdXZjX2Z1bmNfdHlwZSA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0zODIxLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYzozODIyOmludCB1dmNnX2F0dGFjaF9jb25maWdmcyhzdHJ1Y3QgZl91dmNfb3B0cyAqb3B0cylcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMzgyMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmg9MTg4PXN0YXRpYyBpbmxpbmUgc3RydWN0IHV2Y2dfZXh0ZW5zaW9uICp0b191dmNnX2V4dGVuc2lvbihzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmgtMTkyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuaDoxOTM6aW50IHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzKHN0cnVjdCBmX3V2Y19vcHRzICpvcHRzKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmgtMTk0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzozNi43NjEwMDg1MjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjY1MTM2MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byB0aGUgVVZDIEdhZGdldCBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGNsdWUgbGVhZHMgbWUgdG8gYHV2Y19hbGxvY19pbnN0YCB3aXRoaW4gYGZfdXZjLmNgLiBUaGF0J3MgcHJlY2lzZWx5IHdoZXJlIEknZCBleHBlY3QgdGhlIFVWQyBnYWRnZXQgaW5zdGFudGlhdGlvbiB0byBraWNrIG9mZi4gVGhpcyBwb2ludHMgZGlyZWN0bHkgdG8gdGhlIFVTQiBnYWRnZXQgVVZDIGZ1bmN0aW9uLCB3aGljaCBpcyBleGFjdGx5IHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCBhbGxvY2F0aW9uIGxvZ2ljLiBCZWZvcmUgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgZnVuY3Rpb24gaXRzZWxmLCB0aG91Z2gsIGl0J3MgYWx3YXlzIGEgZ29vZCBwcmFjdGljZSB0byBleGFtaW5lIHRoZSBLY29uZmlnIG9wdGlvbnMgdGhhdCBnb3Zlcm4gdGhlIFVTQiBnYWRnZXQgVVZDIGRyaXZlci4gSSdsbCBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGZsYWdzIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIHNldHRpbmdzIG9yIGRlcGVuZGVuY2llcyBhdCBwbGF5IHRoYXQgbWlnaHQgaW5mbHVlbmNlIGhvdyBgdXZjX2FsbG9jX2luc3RgIGJlaGF2ZXMuIFRoaXMgd2lsbCBwcm92aWRlIHNvbWUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxNiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE3OjQwLjQyNjE1MDI5NloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDAwMjgxMjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9DT05GSUdGU19GX1VWQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ1OD1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfSElEXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NjctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDY4OmNvbmZpZyBVU0JfQ09ORklHRlNfRl9VVkNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NjktXFx0Ym9vbCBcXFwiVVNCIFdlYmNhbSBmdW5jdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTc6NDAuNjI2MTg1NTQ5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ0NTU1NDAyNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBzaXR1YXRpb24gbXlzZWxmOlxuXG4qKlVWQyBDb25maWd1cmF0aW9uIFF1YW5kYXJ5KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIFVWQyBpbXBsZW1lbnRhdGlvbi4uLiBJIG5lZWQgdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIHJpZ2h0LiBIYW5nIG9uIGEgc2Vjb25kLCBpcyBpdCBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCB0aGF0IEknbSBzdXBwb3NlZCB0byBiZSB1c2luZyBoZXJlIGZvciB0aGUgY29uZmlnLCBvciBpcyBpdCBgVVNCX0ZfVVZDYD8gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdXNpbmcgdGhlIGNvcnJlY3QgZGVmaW5lIGZvciB0aGUgVmlkZW8gQ2xhc3MgY29uZmlndXJhdGlvbiwgb3RoZXJ3aXNlLCB0aGlzIHdob2xlIHRoaW5nIGlzIGdvaW5nIHRvIGZhbGwgYXBhcnQuIEdvdHRhIGRvdWJsZS1jaGVjayB0aGUgaGVhZGVycywgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uLi4uIEl0J3MgYWxsIHRvbyBlYXN5IHRvIG1peCB0aGVzZSB1cC4gVGltZSB0byBjbGFyaWZ5IHdoaWNoIG9uZSBpcyB0aGUgY29ycmVjdCBmbGFnIHRvIHNldCB0byBlbmFibGUgdGhpcyBVVkMgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGRldmljZS4gTGV0J3Mgbm90IG1ha2UgYW55IGFzc3VtcHRpb25zIGFuZCBnZXQgdGhpcyBzb3J0ZWQgb3V0IHJpZ2h0IGF3YXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NzQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxNzo1NS4wODE3Mjk2MThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNTkzNzI4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9GX1VWQ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTIwMj1jb25maWcgVVNCX0ZfVUFDMlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjA0LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjIwNTpjb25maWcgVVNCX0ZfVVZDXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMjA2LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE3OjU3LjE0MTExMzUxOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzU1MDIyMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSByb2xlIG9mIHRoZSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVVZDIENvbmZpZ0ZTIEJ1aWxkIFByb2Nlc3MqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGB1dmNfY29uZmlnZnMub2AgaXMgYnVpbHQgd2l0aGluIHRoZSBVU0IgZ2FkZ2V0IGZ1bmN0aW9uIGZyYW1ld29yay4gVGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCwgYXMgYWx3YXlzLCBpcyB0aGUgYE1ha2VmaWxlYCB3aXRoaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeS4gU3BlY2lmaWNhbGx5LCBJJ2xsIGJlIGhlYWRpbmcgdG8gYGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZWAuIFRoYXQgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgZXhwbGljaXQgYnVpbGQgcnVsZXMgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBwb2ludCBtZSB0b3dhcmRzIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgYW5kIGRlcGVuZGVuY2llcyBpbnZvbHZlZCBpbiBjb25zdHJ1Y3RpbmcgdGhhdCBvYmplY3QgZmlsZS4gSSdtIGV4cGVjdGluZyB0byBzZWUgZGVwZW5kZW5jaWVzIG9uIHRoZSBzb3VyY2UgY29kZSwgb3RoZXIgb2JqZWN0IGZpbGVzLCBhbmQgcHJvYmFibHkgaW5jbHVkZSBwYXRocyBzcGVjaWZpYyB0byB0aGUgVVZDIGdhZGdldCBmdW5jdGlvbmFsaXR5LiBVbmRlcnN0YW5kaW5nIHRoaXMgTWFrZWZpbGUgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgYnVpbGQgcHJvY2VzcyBmb3IgYHV2Y19jb25maWdmcy5vYCBhbmQsIGZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGJhY2sgYW55IGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgYnVpbGQgaXNzdWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTA2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTg6MDAuNDk2MTQwODU3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODY5NTg4NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZjX2NvbmZpZ2ZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU9NDI9b2JqLSQoQ09ORklHX1VTQl9GX1VBQzIpXFx0Kz0gdXNiX2ZfdWFjMi5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjQzOnVzYl9mX3V2Yy15XFx0XFx0XFx0Oj0gZl91dmMubyB1dmNfcXVldWUubyB1dmNfdjRsMi5vIHV2Y192aWRlby5vIHV2Y19jb25maWdmcy5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTQ0LWlmbmVxICgkKENPTkZJR19UUkFDSU5HKSwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjAxLjA4MzEwOTY5OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDcyMjA1MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYnJlYWtkb3duIG9mIHdoYXQgSSdtIGxvb2tpbmcgYXQ6XG5cbioqSW52ZXN0aWdhdGluZyBVVkMgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfVVNCX0ZfVVZDYCBpcyB0aGUgY3J1Y2lhbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gQnV0LCBJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCBqdXN0IGluIGNhc2UgdGhlcmUncyBzb21ldGhpbmcgcmVsZXZhbnQgdGhlcmUuIFdhaXQgYSBzZWNvbmQsIHRoZSBkZXBlbmRlbmN5IHRyZWUgc2VlbXMgdG8gYmUgc3RyYWlnaHRmb3J3YXJkOyBgdXNiX2ZfdXZjLXlgIGlzIGRpcmVjdGx5IGJ1aWx0IHdoZW4gYENPTkZJR19VU0JfRl9VVkNgIGlzIHNldC4gTm93LCB0byBiZSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgdGhlIGJ1aWxkIHJ1bGVzLiBJJ2xsIG5lZWQgdG8gb3BlbiB1cCBgZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBgdXNiX2ZfdXZjYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIFVWQyBnYWRnZXQgZnVuY3Rpb24gaXMgY29uZmlndXJlZCBhbmQgYnVpbHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODowOS4xNTUzMTkxMjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NTc5NDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1c2JfZl91dmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9NYWtlZmlsZT00Mj1vYmotJChDT05GSUdfVVNCX0ZfVUFDMilcXHQrPSB1c2JfZl91YWMyLm9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGU6NDM6dXNiX2ZfdXZjLXlcXHRcXHRcXHQ6PSBmX3V2Yy5vIHV2Y19xdWV1ZS5vIHV2Y192NGwyLm8gdXZjX3ZpZGVvLm8gdXZjX2NvbmZpZ2ZzLm9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGUtNDQtaWZuZXEgKCQoQ09ORklHX1RSQUNJTkcpLClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGUtNDUtICAgIENGTEFHU191dmNfdHJhY2Uub1xcdFxcdDo9IC1JJChzcmMpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjQ2OiAgICB1c2JfZl91dmMteVxcdFxcdFxcdCs9IHV2Y190cmFjZS5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlLTQ3LWVuZGlmXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL01ha2VmaWxlOjQ4Om9iai0kKENPTkZJR19VU0JfRl9VVkMpXFx0XFx0Kz0gdXNiX2ZfdXZjLm9cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vTWFrZWZpbGUtNDktdXNiX2ZfbWlkaS15XFx0XFx0XFx0Oj0gZl9taWRpLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTg6MDkuODUxMTIzNzE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Njc4OTMzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKlVTQiBVVkMgQ29uZmlndXJhdGlvbiAtIEEgUXVpY2sgQ2hlY2sqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIFVWQyBzdXBwb3J0IGluIFVTQi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBgQ09ORklHX1VTQl9GX1VWQ2AgaXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbiBvcHRpb24sIG5vIHF1ZXN0aW9uIGFib3V0IGl0LiBUaGF0J3MgdGhlIHByaW1hcnkgZHJpdmVyIHdlJ3JlIHVzaW5nLCBzbyBpdCBtYWtlcyBzZW5zZSB0aGF0IGl0IHdvdWxkIGJlIHRoZSBmaXJzdCB0aGluZyBvbiBteSBtaW5kLlxuXG5CdXQgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCBhbHNvIGEgZGVwZW5kZW5jeT8gSSd2ZSBnb3QgYSBuaWdnbGluZyBmZWVsaW5nIHRoZXJlJ3Mgc29tZXRoaW5nIGFib3V0IGNvbmZpZ2ZzIGludm9sdmVkIHdpdGggdGhpcyBzZXR1cC4gSXQncyBiZXN0IHRvIGNvbmZpcm0gdGhpcywgc28gbGV0J3MgY3Jvc3MtcmVmZXJlbmNlIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgZGVmaW5pdGl2ZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZXNlIHNvcnRzIG9mIGRlcGVuZGVuY2llcywgc28gYSBxdWljayBjaGVjayB0aGVyZSBzaG91bGQgY2xhcmlmeSB3aGV0aGVyIGl0IGlzIG5lZWRlZC4gVGhhdCB3aWxsIGJlIHRoZSBkZXRlcm1pbmluZyBmYWN0b3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4ODcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODoxMy40MTkwMjE5NjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTMwMjU3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJVU0JfQ09ORklHRlNfRl9VVkNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDU4PWNvbmZpZyBVU0JfQ09ORklHRlNfRl9ISURcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ2Ny1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0Njg6Y29uZmlnIFVTQl9DT05GSUdGU19GX1VWQ1xcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTQ2OS1cXHRib29sIFxcXCJVU0IgV2ViY2FtIGZ1bmN0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODoxMy41ODAzMzQyMjhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1ODIxMTUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gd2hhdCBJJ20gbG9va2luZyBhdDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNZWFuaW5nIG9mIGBVU0JfQ09ORklHRlNfRl9VVkNgKipcblxuUmlnaHQsIHNvIEknbSBwcmVzZW50ZWQgd2l0aCB0aGlzIGBVU0JfQ09ORklHRlNfRl9VVkNgIGZsYWcgYW5kLCBpbnN0aW5jdGl2ZWx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpzZWxlY3RzKi4gV2hhdCdzIHRoZSBjb250ZXh0IGhlcmU/IElzIHRoaXMgYSBkcml2ZXIgY29uZmlndXJhdGlvbiBvcHRpb24/IEEgYnVpbGQtdGltZSBmbGFnPyBLbm93aW5nIHRoZSBzcGVjaWZpYyBzdWJzeXN0ZW0gd291bGQgaGVscCBuYXJyb3cgaXQgZG93biwgYnV0IGxldCdzIGFzc3VtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gdGhlIFVTQiBjb25maWdmcy4gVVZDIGhpbnRzIGF0IFVTQiBWaWRlbyBDbGFzcywgc28gaXQncyBwcm9iYWJseSBjb25jZXJuZWQgd2l0aCB3ZWJjYW0gb3IgdmlkZW8gY2FwdHVyZSBmdW5jdGlvbmFsaXR5LiBNeSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIHdpbGwgYmUgbGlua2VkIHRvIHN1cHBvcnRpbmcgdGhlIFVWQyBjbGFzcyB3aGVuIHVzaW5nIHRoZSBjb25maWdmcyBVU0IgZ2FkZ2V0LiBOb3csIEkgbmVlZCB0byBkZWx2ZSBkZWVwZXIgYW5kIHNlZSB3aGVyZSB0aGlzIGlzIGRlZmluZWQsIGFuZCB3aGF0IGVsc2UgaXQgdG9nZ2xlcy4gSXQgbGlrZWx5IGVuYWJsZXMgYSBzcGVjaWZpYyBzZXQgb2YgY29uZmlndXJhdGlvbnMgd2l0aGluIHRoZSBmcmFtZXdvcmssIHByb2JhYmx5IGNyZWF0aW5nIHRoZSBuZWNlc3NhcnkgZW5kcG9pbnRzIGFuZCBkZXNjcmlwdG9ycy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcywgaW1wbGljYXRpb25zLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIG92ZXJhbGwgc3lzdGVtJ3MgcmVzb3VyY2UgdXNhZ2UuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODoxNy4wMzg1NDg4MTZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzUwODM0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0NPTkZJR0ZTX0ZfVVZDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ1OD1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfSElEXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NjctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDY4OmNvbmZpZyBVU0JfQ09ORklHRlNfRl9VVkNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy00NjktXFx0Ym9vbCBcXFwiVVNCIFdlYmNhbSBmdW5jdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTg6MTcuMjc2MDY4MzM0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzg4OTcxNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHByb2Nlc3NpbmcgdGhlIGRlc2NyaWJlZCB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCBgZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdgLiBJJ20gZ29pbmcgdG8ganVtcCB0byBhcm91bmQgbGluZSA0NjguIEJhc2VkIG9uIG15IGV4aXN0aW5nIGtub3dsZWRnZSwgdGhhdCBsaWtlbHkgbWFya3MgYSBjcml0aWNhbCBhcmVhIHdoZXJlIGNlcnRhaW4gY29yZSBmZWF0dXJlcyBvciBhIHNwZWNpZmljIGRyaXZlcidzIHNldHRpbmdzIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBhIHNwZWNpZmljIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eSBpbiB0aGlzIHNlY3Rpb24gb3IgaW4gdGhlIHN1cnJvdW5kaW5nIGxpbmVzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGtleXdvcmRzIGxpa2UgXCJjb25maWcsXCIgXCJ0cmlzdGF0ZSxcIiBcImJvb2wsXCIgYW5kIHNwZWNpZmljIGRldmljZSBuYW1lcyBvciBkZXNjcmlwdG9ycyB0byBxdWlja2x5IHBhcnNlIHdoYXQncyBhdmFpbGFibGUgYW5kIGhvdyBpdCdzIGNvbnRyb2xsZWQuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2NzUsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODoyMC44MTQ5NzEwMTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ2MDpcXHRcXHRkZXBlbmRzIG9uIFVTQl9DT05GSUdGU1xcbiA0NjE6XFx0XFx0c2VsZWN0IFVTQl9GX0hJRFxcbiA0NjI6XFx0XFx0aGVscFxcbiA0NjM6XFx0XFx0ICBUaGUgSElEIGZ1bmN0aW9uIGRyaXZlciBwcm92aWRlcyBnZW5lcmljIGVtdWxhdGlvbiBvZiBVU0JcXG4gNDY0OlxcdFxcdCAgSHVtYW4gSW50ZXJmYWNlIERldmljZXMgKEhJRCkuXFxuIDQ2NTpcXHRcXG4gNDY2OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfaGlkLnJzdC5cXG4gNDY3OlxcdFxcbiA0Njg6XFx0Y29uZmlnIFVTQl9DT05GSUdGU19GX1VWQ1xcbiA0Njk6XFx0XFx0Ym9vbCBcXFwiVVNCIFdlYmNhbSBmdW5jdGlvblxcXCJcXG4gNDcwOlxcdFxcdGRlcGVuZHMgb24gVVNCX0NPTkZJR0ZTXFxuIDQ3MTpcXHRcXHRkZXBlbmRzIG9uIFZJREVPX0RFVlxcbiA0NzI6XFx0XFx0ZGVwZW5kcyBvbiBWSURFT19ERVZcXG4gNDczOlxcdFxcdHNlbGVjdCBWSURFT0JVRjJfRE1BX1NHXFxuIDQ3NDpcXHRcXHRzZWxlY3QgVklERU9CVUYyX1ZNQUxMT0NcXG4gNDc1OlxcdFxcdHNlbGVjdCBVU0JfRl9VVkNcXG4gNDc2OlxcdFxcdGhlbHBcXG4gNDc3OlxcdFxcdCAgVGhlIFdlYmNhbSBmdW5jdGlvbiBhY3RzIGFzIGEgY29tcG9zaXRlIFVTQiBBdWRpbyBhbmQgVmlkZW8gQ2xhc3NcXG4gNDc4OlxcdFxcdCAgZGV2aWNlLiBJdCBwcm92aWRlcyBhIHVzZXJzcGFjZSBBUEkgdG8gcHJvY2VzcyBVVkMgY29udHJvbCByZXF1ZXN0c1xcbiA0Nzk6XFx0XFx0ICBhbmQgc3RyZWFtIHZpZGVvIGRhdGEgdG8gdGhlIGhvc3QuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjIwLjgxNTIwMDcwMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTA1MDMwODc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVVNCIENvbmZpZ3VyYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYFVTQl9DT05GSUdGU19GX1VWQ2AgYWN0aXZhdGVzIGBVU0JfRl9VVkNgLCBzbyBlbmFibGluZyBib3RoIGlzIHRoZSBsb2dpY2FsIGFwcHJvYWNoLiBCdXQgaGFuZyBvbiwgYFVTQl9DT05GSUdGU19GX1VWQ2AgaXMgYSBib29sZWFuLCBhbmQgYFVTQl9GX1VWQ2AgaXMgdHJpc3RhdGUuIFJpZ2h0LCBzbyBJIGNhbiBqdXN0IGRlZmluZSBib3RoIG9mIHRoZW0gaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC4gSG1tLCBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYFVTQl9DT05GSUdGU2AgaXMgZW5hYmxlZC5cblxuTGV0IG1lIGp1c3QgcXVpY2tseSB2ZXJpZnkgdGhhdCBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCBwcm9wZXJseSBzZXRzIGBVU0JfRl9VVkNgLCB5ZXMsIGl0IGRvZXMsIGdvb2QuXG5cbk5vdywgdGhlIHBhdGNoIGl0c2VsZiBpcyBjaGFuZ2luZyB0aGUgd2F5IHdlIGhhbmRsZSB0aGUgZXJyb3IgY2FzZSBpbiBgdXZjZ19hdHRhY2hfY29uZmlnZnNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIGBjb25maWdfZ3JvdXBfcHV0YCB3aXRoIGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gLiBUaGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhbiBlcnJvciBwYXRoLCBhIGtleSBhcmVhIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLCBhbmQgcmlwZSBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGFyZSBgdXZjZ19hdHRhY2hfY29uZmlnZnNgLCBgdXZjX2FsbG9jX2luc3RgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIG5ldyBmdW5jdGlvbiBgdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuYC4gTGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IGB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW5gIHRvIG1ha2Ugc3VyZSBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGRldGFpbGVkIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTk2LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTg6MzkuODY1NTE0NDY3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjQ4OTAzNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM9MTU2PXN0YXRpYyBpbnQgdXZjZ19jb25maWdfY3JlYXRlX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKnBhcmVudCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0xNzAtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jOjE3MTpzdGF0aWMgdm9pZCB1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4oc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jLTE3Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMTc2LVxcdFxcdGxpc3RfZGVsKFxcdTAwMjZjaGlsZC1cXHUwMDNlZ3JvdXBfZW50cnkpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYzoxNzc6XFx0XFx0dXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuKGNoaWxkKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMTc4LVxcdFxcdGNvbmZpZ19pdGVtX3B1dChcXHUwMDI2Y2hpbGQtXFx1MDAzZWNnX2l0ZW0pO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jPTM2MzU9c3RhdGljIHZvaWQgdXZjX2Z1bmNfaXRlbV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0zNjM4LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYzozNjM5OlxcdHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbih0b19jb25maWdfZ3JvdXAoaXRlbSkpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi91dmNfY29uZmlnZnMuYy0zNjQwLVxcdHVzYl9wdXRfZnVuY3Rpb25faW5zdGFuY2UoXFx1MDAyNm9wdHMtXFx1MDAzZWZ1bmNfaW5zdCk7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM9MzgyMj1pbnQgdXZjZ19hdHRhY2hfY29uZmlnZnMoc3RydWN0IGZfdXZjX29wdHMgKm9wdHMpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmMtMzgzMS1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vdXZjX2NvbmZpZ2ZzLmM6MzgzMjpcXHRcXHR1dmNnX2NvbmZpZ19yZW1vdmVfY2hpbGRyZW4oXFx1MDAyNm9wdHMtXFx1MDAzZWZ1bmNfaW5zdC5ncm91cCk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL3V2Y19jb25maWdmcy5jLTM4MzMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjQwLjUzMDQxNTY0OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDQyNzkwNDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkZvY3VzaW5nIG9uIENvbmZpZ0ZTIFJlbW92YWwqKlxuXG5Pa2F5LCBzbyBgdXZjZ19jb25maWdfcmVtb3ZlX2NoaWxkcmVuYCBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMgcGFydGljdWxhciBpbnZlc3RpZ2F0aW9uLiBUaGF0IGZlZWxzIGxpa2UgYSByZWxldmFudCBmdW5jdGlvbiB0byBkaWcgaW50by5cblxuTm93LCB0byBnZXQgYSBicm9hZGVyIHZpZXcgb2YgdGhlIHN5c3RlbSwgSSBzaG91bGQgYWxzbyBjcm9zcy1yZWZlcmVuY2UgdGhhdCB3aXRoIGB1dmNnX2F0dGFjaF9jb25maWdmc2AgYW5kIGB1dmNfYWxsb2NfaW5zdGAuIExldCdzIHNlZSBob3cgdGhlIENvbmZpZ0ZTIGlzIGVzdGFibGlzaGVkIGFuZCByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBhbG9uZ3NpZGUgdGhlIHJlbW92YWwgcHJvY2VkdXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBiaWdnZXIgcGljdHVyZSBoZWxwcyByZWZpbmUgbXkgZm9jdXMgZm9yIHRoZSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMyNCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIxVDEwOjE4OjQzLjU3MzIxMDQ5OFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc3MjIyMzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInV2Y19hbGxvY19pbnN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jPTkwND1zdGF0aWMgdm9pZCB1dmNfZnJlZV9pbnN0KHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmYpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy05MTEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2Z1bmN0aW9uL2ZfdXZjLmM6OTEyOnN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICp1dmNfYWxsb2NfaW5zdCh2b2lkKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jLTkxMy17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYz0xMDgzPXN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uICp1dmNfYWxsb2Moc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSAqZmkpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl91dmMuYy0xMTcyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jOjExNzM6REVDTEFSRV9VU0JfRlVOQ1RJT05fSU5JVCh1dmMsIHV2Y19hbGxvY19pbnN0LCB1dmNfYWxsb2MpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX3V2Yy5jLTExNzQtTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJVU0IgVmlkZW8gQ2xhc3MgR2FkZ2V0IGRyaXZlclxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMVQxMDoxODo0My43NTA0NDYzOTlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzMDI5NDY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVVZDIEdhZGdldCBGdW5jdGlvbiBJbml0aWFsaXphdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgZGVhbGluZyB3aXRoIHRoZSBhbGxvY2F0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBVVkMgZ2FkZ2V0J3MgaW5zdGFuY2UgdXNpbmcgYHV2Y19hbGxvY19pbnN0YC4gVGhpcyBmdW5jdGlvbiBpcyBkZWZpbml0ZWx5IHRpZWQgaW50byB0aGUgY29uZmlnZnMgc3lzdGVtIHdoZW4gYSBVVkMgZnVuY3Rpb24gaXMgY3JlYXRlZC4gSSBrbm93IHRoaXMgYmVjYXVzZSBvZiB0aGUgc3BlY2lmaWMgY29uZmlncyBtZW50aW9uZWQ6IGBVU0JfQ09ORklHRlNfRl9VVkNgLCBgVVNCX0ZfVVZDYCwgYW5kIGBVU0JfQ09ORklHRlNgLlxuXG5CZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEknbSBjaGVja2luZyBpZiBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIGludm9sdmVkLiBJdCBsb29rcyBsaWtlIGBWSURFT19ERVZgIGlzIGFsc28gcmVxdWlyZWQgd2hlbiB1c2luZyBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCBhbmQgb2YgY291cnNlLCBgVVNCX0dBREdFVGAgaXMgdGhlIGNvcmUgZm91bmRhdGlvbi5cblxuQmFzZWQgb24gdGhpcywgSSdtIGdvaW5nIHRvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBlbmFibGVkIGNvbmZpZ3VyYXRpb25zOiBgVVNCX0NPTkZJR0ZTX0ZfVVZDYCwgYFVTQl9GX1VWQ2AsIGFuZCBgVVNCX0NPTkZJR0ZTYC4gSSBhbHNvIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYHV2Y2dfYXR0YWNoX2NvbmZpZ2ZzYCwgYHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbmAsIGFuZCBlc3BlY2lhbGx5LCBgdXZjX2FsbG9jX2luc3RgXG5cblRoZSBwYXRjaCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIHByZXR0eSBpbXBvcnRhbnQgb25lLCByZXBsYWNpbmcgYGNvbmZpZ19ncm91cF9wdXRgIHdpdGggYHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbmAsIHdoaWNoIGluZGljYXRlcyBpdCdzIGFkZHJlc3NpbmcgYW4gZXJyb3IgaGFuZGxpbmcgcGF0aCB3aXRoaW4gdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBVU0IgVVZDIGdhZGdldC4gSXQgc2VlbXMgdG8gYmUgcHJldmVudGluZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBvciBhIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZyB0byBlbnN1cmUgdGhlIGVycm9yIGhhbmRsaW5nIGlzIHJvYnVzdCBub3cgYW5kIHRvIHByb2JlIHRoZSBsaW1pdHMgb2YgdGhlIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgwOSwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjFUMTA6MTg6NTAuMjgwNzQ1MTI1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE0MDc4MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfQ09ORklHRlNfRl9VVkNcIixcbiAgICBcIlVTQl9GX1VWQ1wiLFxuICAgIFwiVVNCX0NPTkZJR0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXZjZ19hdHRhY2hfY29uZmlnZnNcIixcbiAgICBcInV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlblwiLFxuICAgIFwidXZjX2FsbG9jX2luc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBVU0IgVVZDIGdhZGdldCBmdW5jdGlvbiBpbml0aWFsaXphdGlvbiBieSByZXBsYWNpbmcgY29uZmlnX2dyb3VwX3B1dCB3aXRoIHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBwb3RlbnRpYWwgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBlcnJvciBwYXRoIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfQ09ORklHRlNfRl9VVkNcIixcbiAgICBcIlVTQl9GX1VWQ1wiLFxuICAgIFwiVVNCX0NPTkZJR0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidXZjZ19hdHRhY2hfY29uZmlnZnNcIixcbiAgICBcInV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlblwiLFxuICAgIFwidXZjX2FsbG9jX2luc3RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBlcnJvciBoYW5kbGluZyBwYXRoIGluIHRoZSBVU0IgVVZDIGdhZGdldCBmdW5jdGlvbiBpbml0aWFsaXphdGlvbiBieSByZXBsYWNpbmcgY29uZmlnX2dyb3VwX3B1dCB3aXRoIHV2Y2dfY29uZmlnX3JlbW92ZV9jaGlsZHJlbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgcHJldmVudHMgYSBwb3RlbnRpYWwgbGVhayBvciB1c2UtYWZ0ZXItZnJlZSwgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBlcnJvciBwYXRoIGlzIHJvYnVzdC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7k78[1] Phase: Succeeded StartedAt: 2026-07-21 10:19:13 +0000 UTC FinishedAt: 2026-07-21 10:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-21 10:19:13 +0000 UTC FinishedAt: 2026-07-21 10:19:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2] Phase: Succeeded StartedAt: 2026-07-21 10:19:13 +0000 UTC FinishedAt: 2026-07-21 13:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-21 10:19:13 +0000 UTC FinishedAt: 2026-07-21 13:21:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-21 10:19:13 +0000 UTC FinishedAt: 2026-07-21 10:19:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-21 10:19:13 +0000 UTC FinishedAt: 2026-07-21 10:19:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr7k78/series-workflowr7k78-convert-artifact-3909249250/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-21 10:19:36 +0000 UTC FinishedAt: 2026-07-21 11:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-21 10:19:36 +0000 UTC FinishedAt: 2026-07-21 11:06:25 +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:*9f4a8361-904e-41ec-b41a-5fd85dc67769,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-workflowr7k78/series-workflowr7k78-convert-artifact-3909249250/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": "5d58baf4-34aa-4221-b871-81b5797554a1", "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-workflowr7k78/series-workflowr7k78-build-action-4167942304/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-21 10:19:36 +0000 UTC FinishedAt: 2026-07-21 11:06:15 +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:*9f4a8361-904e-41ec-b41a-5fd85dc67769,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-workflowr7k78/series-workflowr7k78-convert-artifact-3909249250/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": "5d58baf4-34aa-4221-b871-81b5797554a1", "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-workflowr7k78/series-workflowr7k78-build-action-4167942304/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-21 11:06:25 +0000 UTC FinishedAt: 2026-07-21 11:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-21 11:06:25 +0000 UTC FinishedAt: 2026-07-21 11:06:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-21 11:06:25 +0000 UTC FinishedAt: 2026-07-21 11:06:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-21 11:06:25 +0000 UTC FinishedAt: 2026-07-21 11:06:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr7k78/series-workflowr7k78-convert-artifact-2267135549/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-21 11:06:35 +0000 UTC FinishedAt: 2026-07-21 11:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-21 11:06:35 +0000 UTC FinishedAt: 2026-07-21 11:08:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5d58baf4-34aa-4221-b871-81b5797554a1,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-workflowr7k78/series-workflowr7k78-build-action-4167942304/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-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-21 11:08:56 +0000 UTC FinishedAt: 2026-07-21 11:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-21 11:08:56 +0000 UTC FinishedAt: 2026-07-21 11:08:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-21 11:08:56 +0000 UTC FinishedAt: 2026-07-21 11:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-21 11:08:56 +0000 UTC FinishedAt: 2026-07-21 11:51:06 +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:*9f4a8361-904e-41ec-b41a-5fd85dc67769,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-workflowr7k78/series-workflowr7k78-convert-artifact-2267135549/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": "c9d30a00-0e20-4715-bea2-f53a93ee9503", "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-workflowr7k78/series-workflowr7k78-build-action-3689962905/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-21 11:08:56 +0000 UTC FinishedAt: 2026-07-21 11:50:24 +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:*9f4a8361-904e-41ec-b41a-5fd85dc67769,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-workflowr7k78/series-workflowr7k78-convert-artifact-2267135549/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": "c9d30a00-0e20-4715-bea2-f53a93ee9503", "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-workflowr7k78/series-workflowr7k78-build-action-3689962905/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-21 11:51:06 +0000 UTC FinishedAt: 2026-07-21 11:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-21 11:51:06 +0000 UTC FinishedAt: 2026-07-21 11:51:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-21 11:51:06 +0000 UTC FinishedAt: 2026-07-21 11:53:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-21 11:51:06 +0000 UTC FinishedAt: 2026-07-21 11:53:03 +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:*c9d30a00-0e20-4715-bea2-f53a93ee9503,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-workflowr7k78/series-workflowr7k78-build-action-3689962905/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-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-21 11:53:13 +0000 UTC FinishedAt: 2026-07-21 13:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-21 11:53:13 +0000 UTC FinishedAt: 2026-07-21 13:21:21 +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":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5d58baf4-34aa-4221-b871-81b5797554a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c9d30a00-0e20-4715-bea2-f53a93ee9503,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-workflowr7k78/series-workflowr7k78-build-action-4167942304/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-workflowr7k78/series-workflowr7k78-build-action-3689962905/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-21 11:53:13 +0000 UTC FinishedAt: 2026-07-21 11:53:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-21 11:53:13 +0000 UTC FinishedAt: 2026-07-21 11:53:18 +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":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr7k78/series-workflowr7k78-convert-artifact-2165889986/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-21 11:53:13 +0000 UTC FinishedAt: 2026-07-21 11:53:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-21 11:53:13 +0000 UTC FinishedAt: 2026-07-21 11:53:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-21 11:53:13 +0000 UTC FinishedAt: 2026-07-21 11:53:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-21 11:53:23 +0000 UTC FinishedAt: 2026-07-21 13:21:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr7k78[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["uvcg_attach_configfs","uvcg_config_remove_children","uvc_alloc_inst"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a13c140cc289c0b7b3770bce5b3ad42ab35074aa","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_CONFIGFS_F_UVC","USB_F_UVC","USB_CONFIGFS"],"series_id":"0e375b85-e19f-4551-894e-49b5989abaad","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-21 11:53:23 +0000 UTC FinishedAt: 2026-07-21 13:21:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5d58baf4-34aa-4221-b871-81b5797554a1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c9d30a00-0e20-4715-bea2-f53a93ee9503,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-workflowr7k78/series-workflowr7k78-build-action-4167942304/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-workflowr7k78/series-workflowr7k78-build-action-3689962905/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-workflowr7k78/series-workflowr7k78-convert-artifact-2165889986/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,}