Name: series-workflowmgttg Phase: Succeeded StartedAt: 2026-08-02 22:31:51 +0000 UTC FinishedAt: 2026-08-03 02:33:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[0] Phase: Succeeded StartedAt: 2026-08-02 22:31:51 +0000 UTC FinishedAt: 2026-08-02 22:35:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 22:31:51 +0000 UTC FinishedAt: 2026-08-02 22:35:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_GADGETFS", "USB_DUMMY_HCD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_GADGETFS", "USB_DUMMY_HCD" ], "series_id": "9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gadgetfs_unbind", "usb_gadget_unregister_driver" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDIyOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0dBREdFVEZTJiMzNDssCiAgICAmIzM0O1VTQl9EVU1NWV9IQ0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnYWRnZXRmc191bmJpbmQmIzM0OywKICAgICYjMzQ7dXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgZ2FkZ2V0ZnMgdW5iaW5kIHBhdGggYnkgZXhwbGljaXRseSBkZXF1ZXVpbmcgdGhlIGVuZHBvaW50IDAgcmVxdWVzdCBiZWZvcmUgZnJlZWluZyBpdC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB3aGVuIGNsb3NpbmcgdGhlIGdhZGdldGZzIGZpbGUgZGVzY3JpcHRvciwgd2hpY2ggdHJpZ2dlcnMgdGhlIHVuYmluZCBjYWxsYmFjay4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYjQzODhmMTVkMTIzMjRhYTczY2M1YzQ3ZTEzY2IzOGY1MTZmZDg5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAyMjozNDoxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbmluZGV4IGQ4N2E4YWI1MTUxMDcuLjM4YmNkZWFmZTcyOGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xuQEAgLTE2NTIsMTMgJiM0MzsxNjUyLDE2IEBAIGdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldClcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycSAoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuIFxuJiM0MztcdGlmIChkZXYtXHUwMDNlcmVxKSB7XG4mIzQzO1x0XHR1c2JfZXBfZGVxdWV1ZShnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbiYjNDM7XHRcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZ2FkZ2V0LVx1MDAzZWVwMCwgZGV2LVx1MDAzZXJlcSk7XG4mIzQzO1x0XHRkZXYtXHUwMDNlcmVxID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZGVzdHJveV9lcF9maWxlcyAoZGV2KTtcbiBcdGdhZGdldC1cdTAwM2VlcDAtXHUwMDNlZHJpdmVyX2RhdGEgPSBOVUxMO1xuIFx0c2V0X2dhZGdldF9kYXRhIChnYWRnZXQsIE5VTEwpO1xuIFxuLVx0Lyogd2UmIzM5O3ZlIGFscmVhZHkgYmVlbiBkaXNjb25uZWN0ZWQgLi4uIG5vIGkvbyBpcyBhY3RpdmUgKi9cbi1cdGlmIChkZXYtXHUwMDNlcmVxKVxuLVx0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0IChnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbiBcdERCRyAoZGV2LCBcJiMzNDslcyBkb25lXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRwdXRfZGV2IChkZXYpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0dBREdFVCYjMzQ7LAogICAgJiMzNDtVU0JfR0FER0VURlMmIzM0OywKICAgICYjMzQ7VVNCX0RVTU1ZX0hDRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhZGdldGZzX3VuYmluZCYjMzQ7LAogICAgJiMzNDt1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGlzc3VlIGluIHRoZSBnYWRnZXRmcyB1bmJpbmQgcGF0aCBieSBleHBsaWNpdGx5IGRlcXVldWluZyB0aGUgZW5kcG9pbnQgMCByZXF1ZXN0IGJlZm9yZSBmcmVlaW5nIGl0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHdoZW4gY2xvc2luZyB0aGUgZ2FkZ2V0ZnMgZmlsZSBkZXNjcmlwdG9yLCB3aGljaCB0cmlnZ2VycyB0aGUgdW5iaW5kIGNhbGxiYWNrLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFiNDM4OGYxNWQxMjMyNGFhNzNjYzVjNDdlMTNjYjM4ZjUxNmZkODkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDIyOjM0OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jCmluZGV4IGQ4N2E4YWI1MTUxMDcuLjM4YmNkZWFmZTcyOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMKQEAgLTE2NTIsMTMgJiM0MzsxNjUyLDE2IEBAIGdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKIAl9CiAJc3Bpbl91bmxvY2tfaXJxICgmYW1wO2Rldi0mZ3Q7bG9jayk7CiAKJiM0MzsJaWYgKGRldi0mZ3Q7cmVxKSB7CiYjNDM7CQl1c2JfZXBfZGVxdWV1ZShnYWRnZXQtJmd0O2VwMCwgZGV2LSZndDtyZXEpOwomIzQzOwkJdXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtJmd0O2VwMCwgZGV2LSZndDtyZXEpOwomIzQzOwkJZGV2LSZndDtyZXEgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiAJZGVzdHJveV9lcF9maWxlcyAoZGV2KTsKIAlnYWRnZXQtJmd0O2VwMC0mZ3Q7ZHJpdmVyX2RhdGEgPSBOVUxMOwogCXNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBOVUxMKTsKIAotCS8qIHdlJiMzOTt2ZSBhbHJlYWR5IGJlZW4gZGlzY29ubmVjdGVkIC4uLiBubyBpL28gaXMgYWN0aXZlICovCi0JaWYgKGRldi0mZ3Q7cmVxKQotCQl1c2JfZXBfZnJlZV9yZXF1ZXN0IChnYWRnZXQtJmd0O2VwMCwgZGV2LSZndDtyZXEpOwogCURCRyAoZGV2LCAmIzM0OyVzIGRvbmVcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJcHV0X2RldiAoZGV2KTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgR2FkZ2V0IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIGBnYWRnZXRmc191bmJpbmRgIGluIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluIGFuZCBzZWVzIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGV5JiMzOTtyZSBhZGRpbmcgYHVzYl9lcF9kZXF1ZXVlKGdhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSk7YCBiZWZvcmUgdGhlIGB1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSk7YCBjYWxsLCBhbmQgdGhlbiBudWxsaW5nIG91dCBgZGV2LSZndDtyZXFgLiBUaGlzIHNtZWxscyBsaWtlIGEgdGVhcmRvd24gcHJvY2VkdXJlIGZvciBhIFVTQiBnYWRnZXQgZHJpdmVyLCB3aGljaCBpcyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzIGFuZCBoYW5kbGluZyBncmFjZWZ1bCBkZXZpY2UgcmVtb3ZhbC4KCk5vdywgaG9sZCBvbi4gVGhlIGluc3RydWN0aW9ucyBzYXkgc29tZXRoaW5nIGFib3V0IHJldHVybmluZyAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmIGl0JiMzOTtzICpqdXN0KiBhIHRlYXJkb3duIGNhbGxiYWNrIGZvciBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCB0aGF0JiMzOTtzIG9ubHkgcnVuIGR1cmluZyBob3QtdW5wbHVnIG9yIHN5c2ZzIHVuYmluZC4gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLCBpcyBgZ2FkZ2V0ZnNfdW5iaW5kYCBvbmUgb2YgKnRob3NlKj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZmxpcCBiYWNrIHRvIHRoYXQgYGlub2RlLmNgIGZpbGUgYW5kIGNoZWNrIHRoZSBjb250ZXh0IGFyb3VuZCBgZ2FkZ2V0ZnNfdW5iaW5kYC4gSSBrbm93IHRoaXMga2luZCBvZiBhbmFseXNpcyBpcyB3aGF0IEkmIzM5O20gZ3JlYXQgYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnNfdW5iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjM5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTY0MDpnYWRnZXRmc191bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY0MS17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE2NzE9c3RhdGljIGludCBnYWRnZXRmc19iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3MDUtZW5vbWVtOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3MDY6XHRnYWRnZXRmc191bmJpbmQgKGdhZGdldCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTcwNy1cdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNzQ5PXN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ2FkZ2V0ZnNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzUxLVx0LmJpbmRcdFx0PSBnYWRnZXRmc19iaW5kLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3NTI6XHQudW5iaW5kXHRcdD0gZ2FkZ2V0ZnNfdW5iaW5kLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NTMtXHQuc2V0dXBcdFx0PSBnYWRnZXRmc19zZXR1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBnYWRnZXRmc191bmJpbmRgKioKCk9rYXksIHNvIGBnYWRnZXRmc191bmJpbmRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHRocm91Z2ggdGhlIGAudW5iaW5kYCBjYWxsYmFjaywgcGFydCBvZiB0aGUgYGdhZGdldGZzX2RyaXZlcmAuIEl0JiMzOTtzIGFsc28gdXNlZCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBnYWRnZXRmc19iaW5kYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBjbGFyaWZ5IHdoZW4gZXhhY3RseSB0aGlzIGZ1bmN0aW9uIGlzIHJ1bi4gSXMgaXQgbGltaXRlZCB0byBob3QtdW5wbHVnIHNjZW5hcmlvcywgb3IgZG9lcyBpdCBhbHNvIGhhbmRsZSB1bmJpbmRzIHRyaWdnZXJlZCB2aWEgc3lzZnM/CgpOb3csIGNvbnNpZGVyaW5nIFVTQiBnYWRnZXQgYXJjaGl0ZWN0dXJlLCB1bmJpbmRpbmcgY2FuIG9yaWdpbmF0ZSBmcm9tIHVucmVnaXN0ZXJpbmcgdGhlIGdhZGdldCBkcml2ZXIgaXRzZWxmLiBBbmQgdGhhdCBkcml2ZXIgdW5yZWdpc3RyYXRpb24gY2FuIGhhcHBlbiBpbiBhIGZldyBzY2VuYXJpb3M6IHdoZW4gYSBnYWRnZXRmcyBmaWxlIGlzIGNsb3NlZCwgb3Igd2hlbiBnYWRnZXRmcyBpcyB1bm1vdW50ZWQuIEkgbmVlZCB0byBjb25maXJtIGhvdyBgZ2FkZ2V0ZnNfZHJpdmVyYCBpcyByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQsIGJlY2F1c2UgdW5kZXJzdGFuZGluZyB0aG9zZSBwYXRod2F5cyBpcyBjcml0aWNhbCB0byBjb21wcmVoZW5kaW5nIGhvdyBgZ2FkZ2V0ZnNfdW5iaW5kYCBpcyBhY3R1YWxseSBpbnZva2VkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRyaXZlciBsaWZlY3ljbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnNfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xMTgwPWVwMF9mYXN5bmMgKGludCBmLCBzdHJ1Y3QgZmlsZSAqZmQsIGludCBvbilcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTE4Ny1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxMTg4OnN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ2FkZ2V0ZnNfZHJpdmVyO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTExODktXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTExOTE9ZGV2X3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTE5Ny1cdGlmIChkZXYtXHUwMDNlZ2FkZ2V0X3JlZ2lzdGVyZWQpIHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxMTk4Olx0XHR1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyIChcdTAwMjZnYWRnZXRmc19kcml2ZXIpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTExOTktXHRcdGRldi1cdTAwM2VnYWRnZXRfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNzI5PWdhZGdldGZzX3N1c3BlbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NDgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTc0OTpzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIGdhZGdldGZzX2RyaXZlciA9IHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzUwLVx0LmZ1bmN0aW9uXHQ9IChjaGFyICopIGRyaXZlcl9kZXNjLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xODA0PWRldl9jb25maWcgKHN0cnVjdCBmaWxlICpmZCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwdHIpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE4ODEtXHRpZiAoZGV2LVx1MDAzZWhzX2NvbmZpZylcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxODgyOlx0XHRnYWRnZXRmc19kcml2ZXIubWF4X3NwZWVkID0gVVNCX1NQRUVEX0hJR0g7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTg4My1cdGVsc2VcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxODg0Olx0XHRnYWRnZXRmc19kcml2ZXIubWF4X3NwZWVkID0gVVNCX1NQRUVEX0ZVTEw7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTg4NS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxODg2Olx0dmFsdWUgPSB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZnYWRnZXRmc19kcml2ZXIpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE4ODctXHRpZiAodmFsdWUgIT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHYWRnZXRmcyBEcml2ZXIgVW5yZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGdhZGdldGZzX2RyaXZlcmAgdW5yZWdpc3RyYXRpb24sIGFuZCBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSBgZGV2X3JlbGVhc2VgLCB3aGljaCBpcyB0aGUgZmlsZSByZWxlYXNlIGZ1bmN0aW9uIGZvciB0aGUgZ2FkZ2V0ZnMgZmlsZS4gVGhhdCBtZWFucyBgZ2FkZ2V0ZnNfdW5iaW5kYCBnZXRzIGV4ZWN1dGVkIHdoZW5ldmVyIGEgdXNlci1zcGFjZSBwcm9jZXNzIGNsb3NlcyB0aGUgZmlsZSBkZXNjcmlwdG9yLiBIbW0sIHRoYXQmIzM5O3Mgbm90IHdoYXQgSSBleHBlY3RlZC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdGVhcmRvd24gY2FsbGJhY2tzIGxpa2UgYC5yZW1vdmVgLCBgLnNodXRkb3duYCwgb3IgYHBjaV91bnJlZ2lzdGVyX2RyaXZlcmAg4oCTIHRoaW5ncyB0aGF0ICpzaG91bGQqIG9ubHkgaGFwcGVuIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyB1bmJpbmQgb3BlcmF0aW9ucy4gVGhpcyBpcyBkaWZmZXJlbnQ7IGl0JiMzOTtzIHRyaWdnZXJlZCBieSBhIHN0YW5kYXJkIGZpbGUgcmVsZWFzZSwgc29tZXRoaW5nIGNvbXBsZXRlbHkgcmVhY2hhYmxlIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uIGFuZCBlc3BlY2lhbGx5IGR1cmluZyBmdXp6aW5nLgoKUmlnaHQsIHNvIGB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyYCB3aWxsIGNhbGwgdGhlIGB1bmJpbmRgIGNhbGxiYWNrLiBPa2F5LCBub3cgSSYjMzk7bSB0aGlua2luZywgaXMgdGhpcyBgZ2FkZ2V0ZnNfdW5iaW5kYCBldmVuIHdvcnRoIGZ1enppbmc/IEl0ICppcyogYW4gdW5iaW5kIGNhbGxiYWNrLCBzbyBpdCYjMzk7cyBsaWtlbHkgc2Vuc2l0aXZlLgoKVGhpcyBwYXRjaCwgaXQgYWRkcyBgdXNiX2VwX2RlcXVldWUoZ2FkZ2V0LSZndDtlcDAsIGRldi0mZ3Q7cmVxKTtgIHRvIGZpeCBhIHJlcXVlc3QgYmVpbmcgZnJlZWQgd2hpbGUgaXQmIzM5O3Mgc3RpbGwgcXVldWVkLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBmaXggYW5kIGFkZHJlc3NlcyBhIHJlYWwgYnVnLCBncmVhdCEgSXMgaXQgZnV6emFibGU/IERlZmluaXRlbHkuIEl0JiMzOTtzIHRyaWdnZXJlZCBieSBjbG9zaW5nIHRoZSBnYWRnZXRmcyBmaWxlIGRlc2NyaXB0b3IsIGEgcGVyZmVjdGx5IG5vcm1hbCBhbmQgY29tbW9uIGFjdGlvbiBpbiBhbnkgZnV6emluZyBzZXR1cC4gSSBzaG91bGQgZmluZCB0aGUgY29uZmlnIG9wdGlvbnMgYW5kIHRyeSB0byBidWlsZCBhbmQgdGVzdCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfR0FER0VURlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0xOTA9Y29uZmlnIFVTQl9HX05DTVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMDUtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6MjA2OmNvbmZpZyBVU0JfR0FER0VURlNcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMDctXHR0cmlzdGF0ZSBcJiMzNDtHYWRnZXQgRmlsZXN5c3RlbVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NDUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFVTQl9HQURHRVRGU2A6CgoqKkludmVzdGlnYXRpbmcgVVNCX0dBREdFVEZTIERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFVTQl9HQURHRVRGU2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSB3aG9sZSBsYW5kc2NhcGUgb2Ygd2hhdCB0aGlzIG1vZHVsZSByZWxpZXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgYXJlIHJlcXVpcmVkIGZvciBgVVNCX0dBREdFVEZTYCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgY3JpdGljYWwgZm9yIG1ha2luZyBhbnkgY2hhbmdlcyBvciBkZWJ1Z2dpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gaXQuCgpGaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gaXRzIGluY2x1ZGUgZmlsZXMgYW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IgaXRzIGZ1bmN0aW9uYWxpdHkuIFdoYXQgaGVhZGVycyBkb2VzIGl0IHB1bGwgaW4/IFdoYXQgb3RoZXIgZGV2aWNlIGRyaXZlcnMgb3Igc3Vic3lzdGVtcyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIG9uIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgdG8gbG9jYXRlIGl0cyBzb3VyY2UgZmlsZXMgYW5kIGRvY3VtZW50YXRpb24uCgpUaGVuLCBJJiMzOTtsbCBleGFtaW5lIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBBcmUgdGhlcmUgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm1zIGl0JiMzOTtzIGRlc2lnbmVkIGZvcj8gQXJlIHRoZXJlIHNwZWNpZmljIFVTQiBjb250cm9sbGVyIGRyaXZlcnMgdGhhdCBpdCBpbnRlZ3JhdGVzIHdpdGg/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZyBvcHRpb25zIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgc2NvcGUuCgpJIG5lZWQgdG8gcXVpY2tseSBncmFzcCBpdHMgcm9sZS4gSXMgaXQgYSBVU0IgZ2FkZ2V0IGRyaXZlciBpdHNlbGY/IEEgY29yZSBpbmZyYXN0cnVjdHVyZSBjb21wb25lbnQgZm9yIGdhZGdldCBtb2RlPyBPciBzb21ldGhpbmcgaW4gYmV0d2Vlbj8gVGhhdCB3aWxsIGRpY3RhdGUgdGhlIGxldmVsIG9mIGRldGFpbCBJIG5lZWQgdG8gZ28gaW50by4gSSYjMzk7bSBhbHNvIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNvbmZsaWN0cywgaWYgYW55LiBEb2VzIGl0IHJlbHkgb24gc29tZXRoaW5nIHRoYXQgY291bGQgaW50ZXJmZXJlIHdpdGggb3RoZXIga2VybmVsIG1vZHVsZXM/CgpJIGFsc28gd2FudCB0byBsb29rIGZvciBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGxpa2UgdGhlIERvY3VtZW50YXRpb24vdXNiL2dhZGdldCBhbmQgRG9jdW1lbnRhdGlvbi91c2IgZGlyZWN0b3JpZXMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBhbmQgdG8gY3Jvc3MgY2hlY2sgbXkgb2JzZXJ2YXRpb25zLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93IGBVU0JfR0FER0VURlNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBVU0IgZ2FkZ2V0IGFyY2hpdGVjdHVyZS4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uIGZvciBhbnkgZnVydGhlciBhbmFseXNpcyBvciBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjA2Olx0Y29uZmlnIFVTQl9HQURHRVRGU1xuIDIwNzpcdFx0dHJpc3RhdGUgXCYjMzQ7R2FkZ2V0IEZpbGVzeXN0ZW1cJiMzNDtcbiAyMDg6XHRcdGhlbHBcbiAyMDk6XHRcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBmaWxlc3lzdGVtIGJhc2VkIEFQSSB0aGF0IGxldHMgdXNlciBtb2RlXG4gMjEwOlx0XHQgIHByb2dyYW1zIGltcGxlbWVudCBhIHNpbmdsZS1jb25maWd1cmF0aW9uIFVTQiBkZXZpY2UsIGluY2x1ZGluZ1xuIDIxMTpcdFx0ICBlbmRwb2ludCBJL08gYW5kIGNvbnRyb2wgcmVxdWVzdHMgdGhhdCBkb24mIzM5O3QgcmVsYXRlIHRvIGVudW1lcmF0aW9uLlxuIDIxMjpcdFx0ICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnlcbiAyMTM6XHRcdCAgdGhlIGhhcmR3YXJlIGFyZSBhdmFpbGFibGUsIHRocm91Z2ggcmVhZCgpIGFuZCB3cml0ZSgpIGNhbGxzLlxuIDIxNDpcdFxuIDIxNTpcdFx0ICBTYXkgXCYjMzQ7eVwmIzM0OyB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgXCYjMzQ7bVwmIzM0OyB0byBidWlsZCBhXG4gMjE2Olx0XHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFwmIzM0O2dhZGdldGZzXCYjMzQ7LlxuIDIxNzpcdFxuIDIxODpcdGNvbmZpZyBVU0JfRlVOQ1RJT05GU1xuIDIxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7RnVuY3Rpb24gRmlsZXN5c3RlbVwmIzM0O1xuIDIyMDpcdFx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcbiAyMjE6XHRcdHNlbGVjdCBVU0JfRl9GU1xuIDIyMjpcdFx0c2VsZWN0IFVTQl9GVU5DVElPTkZTX0dFTkVSSUMgaWYgIShVU0JfRlVOQ1RJT05GU19FVEggfHwgVVNCX0ZVTkNUSU9ORlNfUk5ESVMpXG4gMjIzOlx0XHRoZWxwXG4gMjI0Olx0XHQgIFRoZSBGdW5jdGlvbiBGaWxlc3lzdGVtIChGdW5jdGlvbkZTKSBsZXRzIG9uZSBjcmVhdGUgVVNCXG4gMjI1Olx0XHQgIGNvbXBvc2l0ZSBmdW5jdGlvbnMgaW4gdXNlciBzcGFjZSBpbiB0aGUgc2FtZSB3YXkgR2FkZ2V0RlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipOYXZpZ2F0aW5nIHRoZSBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYFVTQl9HQURHRVRGU2AgaGVyZS4gSSBrbm93IGl0JiMzOTtzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIFVTQiBnYWRnZXQgc3lzdGVtLiBSaWdodCwgYFVTQl9HQURHRVRgIGlzIHRoZSBwYXJlbnQsIHRoZSBvdmVyYXJjaGluZyBmcmFtZXdvcmsuIE5vdywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCBlbmFibGVzIG9yIGRpc2FibGVzIGBVU0JfR0FER0VURlNgLCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgbG9vayBhdCBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgc2hvdWxkIHJlc2lkZS4gQWgsIEkgc2VlIGl0ISBXaGlsZSB0aGVyZSBpc24mIzM5O3QgYSBkaXJlY3QgYGRlcGVuZHMgb25gIGNsYXVzZSBsaXN0ZWQgZm9yIGBVU0JfR0FER0VURlNgIGl0c2VsZiwgaXQmIzM5O3MgY2xlYXJseSBuZXN0ZWQgd2l0aGluIGFuIGBpZiBVU0JfR0FER0VUYCBibG9jay4gVGhlcmVmb3JlLCB0aGUgZ2FkZ2V0IGZlYXR1cmUgd2lsbCBiZSBlbmFibGVkLCB3aGVuIHRoZSBgVVNCX0dBREdFVGAgcGFyZW50IGlzIGFsc28gZW5hYmxlZC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZiBVU0JfR0FER0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg0OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gVVNCIGdhZGdldCBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGxlZ2FjeSBmcmFtZXdvcmsuIFRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaXMgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBsZWdhY3kgZ2FkZ2V0IGRyaXZlciBkaXJlY3RvcnkuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSwgYXMgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIGFuZCB0aGV5JiMzOTtsbCBnaXZlIG1lIGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiB0aGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhpcyBwYXJ0IG9mIHRoZSBVU0IgZ2FkZ2V0IHN1YnN5c3RlbS4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGZlYXR1cmVzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIHBvaW50cy4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIHNvbGlkIGdyb3VuZGluZyBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGFjdHVhbCBkcml2ZXIgY29kZSBpZiBuZWVkZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgR2FkZ2V0IHN1cHBvcnQgb24gYSBzeXN0ZW0gaW52b2x2ZXNcbiAgIDQ6XHQjICAgIChhKSBhIHBlcmlwaGVyYWwgY29udHJvbGxlciwgYW5kXG4gICA1Olx0IyAgICAoYikgdGhlIGdhZGdldCBkcml2ZXIgdXNpbmcgaXQuXG4gICA2Olx0I1xuICAgNzpcdCMgTk9URTogIEdhZGdldCBzdXBwb3J0ICoqIERPRVMgTk9UICoqIGRlcGVuZCBvbiBob3N0LXNpZGUgQ09ORklHX1VTQiAhIVxuICAgODpcdCNcbiAgIDk6XHQjICAtIEhvc3Qgc3lzdGVtcyAobGlrZSBQQ3MpIG5lZWQgQ09ORklHX1VTQiAod2l0aCBcJiMzNDtBXCYjMzQ7IGphY2tzKS5cbiAgMTA6XHQjICAtIFBlcmlwaGVyYWxzIChsaWtlIFBEQXMpIG5lZWQgQ09ORklHX1VTQl9HQURHRVQgKHdpdGggXCYjMzQ7QlwmIzM0OyBqYWNrcykuXG4gIDExOlx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxuICAxMjpcdCNcbiAgMTM6XHQjIFdpdGggaGVscCBmcm9tIGEgc3BlY2lhbCB0cmFuc2NlaXZlciBhbmQgYSBcJiMzNDtNaW5pLUFCXCYjMzQ7IGphY2ssIHN5c3RlbXMgd2l0aFxuICAxNDpcdCMgYm90aCBraW5kcyBvZiBjb250cm9sbGVyIGNhbiBhbHNvIHN1cHBvcnQgXCYjMzQ7VVNCIE9uLXRoZS1Hb1wmIzM0OyAoQ09ORklHX1VTQl9PVEcpLlxuICAxNTpcdCNcbiAgMTY6XHQjIEEgTGludXggXCYjMzQ7R2FkZ2V0IERyaXZlclwmIzM0OyB0YWxrcyB0byB0aGUgVVNCIFBlcmlwaGVyYWwgQ29udHJvbGxlclxuICAxNzpcdCMgZHJpdmVyIHRocm91Z2ggdGhlIGFic3RyYWN0IFwmIzM0O2dhZGdldFwmIzM0OyBBUEkuICBTb21lIG90aGVyIG9wZXJhdGluZ1xuICAxODpcdCMgc3lzdGVtcyBjYWxsIHRoZXNlIFwmIzM0O2NsaWVudFwmIzM0OyBkcml2ZXJzLCBvZiB3aGljaCBcJiMzNDtjbGFzcyBkcml2ZXJzXCYjMzQ7XG4gIDE5Olx0IyBhcmUgYSBzdWJzZXQgKGltcGxlbWVudGluZyBhIFVTQiBkZXZpY2UgY2xhc3Mgc3BlY2lmaWNhdGlvbikuXG4gIDIwOlx0IyBBIGdhZGdldCBkcml2ZXIgaW1wbGVtZW50cyBvbmUgb3IgbW9yZSBVU0IgZnVuY3Rpb25zIHVzaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSwgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCB0byBgZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgKmtub3cqIHRoZSBoZWFydCBvZiB0aGUgVVNCIGdhZGdldCBkcml2ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgZm91bmQuIFRoaXMgaXMgd2hlcmUgSSBjYW4gZXhwZWN0IHRvIGZpbmQgYWxsIHRoZSBtZW51IGVudHJpZXMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kLCBjb25maWd1cmUsIGFuZCB0cm91Ymxlc2hvb3QgdGhlIGdhZGdldCBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIGRlY2lkaW5nIHdoYXQgVVNCIGdhZGdldCBmZWF0dXJlcyBhcmUgYnVpbHQgaW50byB0aGUga2VybmVsLCBidWlsdCBhcyBtb2R1bGVzLCBvciBjb21wbGV0ZWx5IGRpc2FibGVkLiBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyBteXNlbGYgdG8gbmF2aWdhdGUgdGhlIHN0cnVjdHVyZSwgbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IGBjb25maWdgIG9wdGlvbnMgZm9yIHRoaW5ncyBsaWtlIHNwZWNpZmljIGdhZGdldCBmdW5jdGlvbnMgKGUuZy4sIG1hc3Mgc3RvcmFnZSwgbmV0d29yaywgYXVkaW8pLCBjb21wb3NpdGUgZGV2aWNlcywgYW5kIGFueSBvdGhlciByZWxldmFudCBwZXJpcGhlcmFscy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGNvbmZsaWN0cyB0b28sIGFuZCBkZXBlbmRlbmNpZXMgdG8gc2VlIGhvdyBmZWF0dXJlcyBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgR2FkZ2V0IHN1cHBvcnQgb24gYSBzeXN0ZW0gaW52b2x2ZXNcbiAgIDQ6XHQjICAgIChhKSBhIHBlcmlwaGVyYWwgY29udHJvbGxlciwgYW5kXG4gICA1Olx0IyAgICAoYikgdGhlIGdhZGdldCBkcml2ZXIgdXNpbmcgaXQuXG4gICA2Olx0I1xuICAgNzpcdCMgTk9URTogIEdhZGdldCBzdXBwb3J0ICoqIERPRVMgTk9UICoqIGRlcGVuZCBvbiBob3N0LXNpZGUgQ09ORklHX1VTQiAhIVxuICAgODpcdCNcbiAgIDk6XHQjICAtIEhvc3Qgc3lzdGVtcyAobGlrZSBQQ3MpIG5lZWQgQ09ORklHX1VTQiAod2l0aCBcJiMzNDtBXCYjMzQ7IGphY2tzKS5cbiAgMTA6XHQjICAtIFBlcmlwaGVyYWxzIChsaWtlIFBEQXMpIG5lZWQgQ09ORklHX1VTQl9HQURHRVQgKHdpdGggXCYjMzQ7QlwmIzM0OyBqYWNrcykuXG4gIDExOlx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxuICAxMjpcdCNcbiAgMTM6XHQjIFdpdGggaGVscCBmcm9tIGEgc3BlY2lhbCB0cmFuc2NlaXZlciBhbmQgYSBcJiMzNDtNaW5pLUFCXCYjMzQ7IGphY2ssIHN5c3RlbXMgd2l0aFxuICAxNDpcdCMgYm90aCBraW5kcyBvZiBjb250cm9sbGVyIGNhbiBhbHNvIHN1cHBvcnQgXCYjMzQ7VVNCIE9uLXRoZS1Hb1wmIzM0OyAoQ09ORklHX1VTQl9PVEcpLlxuICAxNTpcdCNcbiAgMTY6XHRcbiAgMTc6XHRtZW51Y29uZmlnIFVTQl9HQURHRVRcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBHYWRnZXQgU3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0c2VsZWN0IFVTQl9DT01NT05cbiAgMjA6XHRcdHNlbGVjdCBOTFNcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgIFVTQiBpcyBhIGhvc3QvZGV2aWNlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgaG9zdCAoc3VjaCBhcyBhXG4gIDIzOlx0XHQgICBQQykgY29udHJvbGxpbmcgdXAgdG8gMTI3IHBlcmlwaGVyYWwgZGV2aWNlcy5cbiAgMjQ6XHRcdCAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDpcbiAgMjU6XHRcdCAgIHlvdSBjYW4mIzM5O3QgY29ubmVjdCBhIFwmIzM0O3RvLXRoZS1ob3N0XCYjMzQ7IGNvbm5lY3RvciB0byBhIHBlcmlwaGVyYWwuXG4gIDI2Olx0XG4gIDI3Olx0XHQgICBMaW51eCBjYW4gcnVuIGluIHRoZSBob3N0LCBvciBpbiB0aGUgcGVyaXBoZXJhbC4gIEluIGJvdGggY2FzZXNcbiAgMjg6XHRcdCAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmVcbiAgMjk6XHRcdCAgIHRhbGtpbmcgdG8gaXQuICBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBvZnRlbiBkaXNjcmV0ZSBzaWxpY29uLFxuICAzMDpcdFx0ICAgb3IgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgQ1BVIGluIGEgbWljcm9jb250cm9sbGVyLiAgVGhlIG1vcmVcbiAgMzE6XHRcdCAgIGZhbWlsaWFyIGhvc3Qgc2lkZSBjb250cm9sbGVycyBoYXZlIG5hbWVzIGxpa2UgXCYjMzQ7RUhDSVwmIzM0OywgXCYjMzQ7T0hDSVwmIzM0OyxcbiAgMzI6XHRcdCAgIG9yIFwmIzM0O1VIQ0lcJiMzNDssIGFuZCBhcmUgdXN1YWxseSBpbnRlZ3JhdGVkIGludG8gc291dGhicmlkZ2VzIG9uIFBDXG4gIDMzOlx0XHQgICBtb3RoZXJib2FyZHMuXG4gIDM0Olx0XG4gIDM1Olx0XHQgICBFbmFibGUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gTGludXggaW5zaWRlXG4gIDM2Olx0XHQgICBhIFVTQiBwZXJpcGhlcmFsIGRldmljZS4gIENvbmZpZ3VyZSBvbmUgaGFyZHdhcmUgZHJpdmVyIGZvciB5b3VyXG4gIDM3Olx0XHQgICBwZXJpcGhlcmFsL2RldmljZSBzaWRlIGJ1cyBjb250cm9sbGVyLCBhbmQgYSBcJiMzNDtnYWRnZXQgZHJpdmVyXCYjMzQ7IGZvclxuICAzODpcdFx0ICAgeW91ciBwZXJpcGhlcmFsIHByb3RvY29sLiAgKElmIHlvdSB1c2UgbW9kdWxhciBnYWRnZXQgZHJpdmVycyxcbiAgMzk6XHRcdCAgIHlvdSBtYXkgY29uZmlndXJlIG1vcmUgdGhhbiBvbmUuKVxuICA0MDpcdFxuICA0MTpcdFx0ICAgSWYgaW4gZG91YnQsIHNheSBcJiMzNDtOXCYjMzQ7IGFuZCBkb24mIzM5O3QgZW5hYmxlIHRoZXNlIGRyaXZlcnM7IG1vc3QgcGVvcGxlXG4gIDQyOlx0XHQgICBkb24mIzM5O3QgaGF2ZSB0aGlzIGtpbmQgb2YgaGFyZHdhcmUgKGV4Y2VwdCBtYXliZSBpbnNpZGUgTGludXggUERBcykuXG4gIDQzOlx0XG4gIDQ0Olx0XHQgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy9nYWRnZXRcdTAwM2UgYW5kXG4gIDQ1Olx0XHQgICB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gZm9yIHRoaXMgQVBJLlxuICA0NjpcdFxuICA0NzpcdGlmIFVTQl9HQURHRVRcbiAgNDg6XHRcbiAgNDk6XHRjb25maWcgVVNCX0dBREdFVF9ERUJVR1xuICA1MDpcdFx0Ym9vbCBcJiMzNDtEZWJ1Z2dpbmcgbWVzc2FnZXMgKERFVkVMT1BNRU5UKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgVVNCIEdhZGdldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgVVNCIGdhZGdldCBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGVzc2VudGlhbHMgZW5hYmxlZDogYFVTQl9HQURHRVRgIGFuZCBgVVNCX0dBREdFVEZTYC4gVGhvc2UgYXJlIHRoZSBjb3JlIGNvbmZpZ3MgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlLiBOb3csIGZvciB0ZXN0aW5nLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCwgYFVTQl9EVU1NWV9IQ0RgIGlzIHVzdWFsbHkgbmVjZXNzYXJ5IHRvIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBob3N0IGNvbnRyb2xsZXIuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYFVTQl9EVU1NWV9IQ0RgIG9wdGlvbiBpcyBhY3R1YWxseSBhdmFpbGFibGUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O2xsIGNoZWNrIGluIHRoZSBjb25maWd1cmF0aW9uIG1lbnUuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gYXZvaWQgd2FzdGluZyB0aW1lIGRlYnVnZ2luZyBpc3N1ZXMgdGhhdCBzdGVtIGZyb20gYSBtaXNzaW5nIGR1bW15IGhvc3QgY29udHJvbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9EVU1NWV9IQ0QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnPTQyMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jZG5zMi9LY29uZmlnXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnLTQyNy1cbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZzo0Mjg6Y29uZmlnIFVTQl9EVU1NWV9IQ0RcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZy00MjktXHR0cmlzdGF0ZSBcJiMzNDtEdW1teSBIQ0QgKERFVkVMT1BNRU5UKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODYxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVU0IgR2FkZ2V0IEZyYW1ld29yayoqCgpPa2F5LCBzbyBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGUgVVNCIGdhZGdldCBmcmFtZXdvcmssIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGBVU0JfRFVNTVlfSENEYCBpcyB0aGUgZHVtbXkgSENEIGltcGxlbWVudGF0aW9uIHVzZWQgc3BlY2lmaWNhbGx5IGZvciB0ZXN0aW5nIGdhZGdldHMuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBhcm91bmQgdGhlIGBnYWRnZXRmc191bmJpbmRgIGZ1bmN0aW9uLiBJICp0aGluayogdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBwb2ludCwgdGhlIHN5bWJvbCB0aGF0IHRyaWdnZXJzIHRoZSB1bmJpbmRpbmcgcHJvY2Vzcy4gTm93LCBhIHNsaWdodCB3cmlua2xlLi4uIGlzbiYjMzk7dCBgZ2FkZ2V0ZnNfdW5iaW5kYCBkZWNsYXJlZCBhcyBgc3RhdGljYD8gVGhhdCBjb3VsZCBjb21wbGljYXRlIHRoaW5ncyBpZiBJJiMzOTttIHRyeWluZyB0bywgc2F5LCBkaXJlY3RseSBjYWxsIGl0IGZyb20gZWxzZXdoZXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBzb3VyY2UgY29kZSBhZ2FpbiB0byB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZy4gSSYjMzk7bGwgaGVhZCBiYWNrIHRvIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnNfdW5iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjM5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTY0MDpnYWRnZXRmc191bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY0MS17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE2NzE9c3RhdGljIGludCBnYWRnZXRmc19iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3MDUtZW5vbWVtOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3MDY6XHRnYWRnZXRmc191bmJpbmQgKGdhZGdldCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTcwNy1cdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNzQ5PXN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ2FkZ2V0ZnNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzUxLVx0LmJpbmRcdFx0PSBnYWRnZXRmc19iaW5kLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3NTI6XHQudW5iaW5kXHRcdD0gZ2FkZ2V0ZnNfdW5iaW5kLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NTMtXHQuc2V0dXBcdFx0PSBnYWRnZXRmc19zZXR1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ2MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyB0aGUgYGdhZGdldGZzX3VuYmluZGAgRnVuY3Rpb24qKgoKT2theSwgc28gdGhlIHByb21wdCBpcyB1cmdpbmcgdXMgdG8gbGVhbiB0b3dhcmRzIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeSBwb2ludHMgcmF0aGVyIHRoYW4gaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBnb2FsLCBJJiMzOTttIGFzc3VtaW5nLCBpcyBiZXR0ZXIgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBmdXR1cmUgbW9kaWZpY2F0aW9ucyBvciBleHRlbnNpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYWJvdXQgYGdhZGdldGZzX3VuYmluZGAuIEkga25vdyBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCYjMzk7cyBhY3R1YWxseSBpbmxpbmVkLiBJdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgYC51bmJpbmQgPSBnYWRnZXRmc191bmJpbmRgLCB3aGljaCAqc2hvdWxkKiBtZWFuIGl0ICpjYW5ub3QqIGJlIGZ1bGx5IGlubGluZWQgYmVjYXVzZSBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbi4gVGhhdCBhbHNvIG1lYW5zIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIGl0JiMzOTtzIG5vdCBhIGNvbXBsZXRlIGlubGluZSBzaXR1YXRpb24uCgpIb3dldmVyLCBpZiB3ZSB0cnVseSB3YW50IHRvIGNyZWF0ZSBhICpub24tc3RhdGljKiBlbnRyeSBwb2ludCwgd2UgY291bGQgdXNlIGFuIGV4aXN0aW5nIGZ1bmN0aW9uLiBMZXQmIzM5O3MgbG9vayBhdCBgZGV2X3JlbGVhc2VgIGFzIGEgcG9zc2libGUgYWx0ZXJuYXRpdmUgb3IgYGRldl9jb25maWdgLiBMZXQgbWUgZ28gY2hlY2sgYGRldl9yZWxlYXNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTExOTA9c3RhdGljIGludFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjExOTE6ZGV2X3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xMTkyLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTkzND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTk0MS1cdC51bmxvY2tlZF9pb2N0bCA9IGdhZGdldF9kZXZfaW9jdGwsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTk0MjpcdC5yZWxlYXNlID1cdGRldl9yZWxlYXNlLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5NDMtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA0MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIERyaXZlciBVbnJlZ2lzdHJhdGlvbiBpbiB0aGUgVVNCIEdhZGdldCBTdWJzeXN0ZW0qKgoKQWxyaWdodCwgc28gYGRldl9yZWxlYXNlYCBpcywgb2YgY291cnNlLCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IG5vdywgbXkgbWluZCYjMzk7cyBqdW1wZWQgdG8gYSByZWxhdGVkIGZ1bmN0aW9uLCBgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcmAuIFdoZXJlIGlzICp0aGF0KiBkZWZpbmVkPyBBaCwgcmlnaHQsIGluIGBkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuY2AuIE9rYXksIGdvb2QuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyYCBub3cuIExldCYjMzk7cyBzZWUgaG93IHRoZSBkcml2ZXIgdW5yZWdpc3RyYXRpb24gaXMgaGFuZGxlZCBpbiB0aGF0IGNvcmUgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGF0IGZ1bmN0aW9uLCB0aGUgc3RhdGljIGBkZXZfcmVsZWFzZWAgYW5kIHRoZSB3aG9sZSBnYWRnZXQgZHJpdmVyIGxpZmVjeWNsZS4gVGhpcyBtYXkgZ2l2ZSBtZSBzb21lIGluc2lnaHQgdG8gdGhlIHN0YXRpYyBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jPTE3Nzc9RVhQT1JUX1NZTUJPTF9HUEwodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXJfb3duZXIpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmMtMTc3OC1cbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jOjE3Nzk6aW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYy0xNzgwLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYy0xNzg2LX1cbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jOjE3ODc6RVhQT1JUX1NZTUJPTF9HUEwodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYy0xNzg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTIyCgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDQzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdhZGdldEZTIFVuYmluZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgZ2FkZ2V0ZnNfdW5iaW5kYCBmdW5jdGlvbiwgYW5kIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIGl0LiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIGFib3V0IGVudHJ5IHBvaW50cywgYW5kIGB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyYCBzZWVtZWQgbGlrZSBhIGdvb2QsIG5vbi1zdGF0aWMgb3B0aW9uLiBJIHdhcyBhbHNvIGNvbnNpZGVyaW5nIGB1c2JfZXBfZGVxdWV1ZWAgYW5kIGB1c2JfZXBfZnJlZV9yZXF1ZXN0YCwgYXMgdGhleSYjMzk7cmUgY2xlYXJseSBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2Nlc3MuIFRoZW4gSSByZWFsaXplZCBgZ2FkZ2V0ZnNfdW5iaW5kYCwgZXZlbiB0aG91Z2ggaXQgKmlzKiBzdGF0aWMsIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQmIzM5O2xsIHNob3cgdXAgaW4gc3RhY2sgdHJhY2VzLCBzbyBpbmNsdWRpbmcgaXQgaXMgcGVyZmVjdGx5IGFjY2VwdGFibGUuCgpJJiMzOTt2ZSBkZWNpZGVkIHRvIGluY2x1ZGUgYHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXJgIGFuZCBgZ2FkZ2V0ZnNfdW5iaW5kYC4KCk5vdywgbGV0IG1lIHJldmlldyB0aGUgcHJvcG9zZWQgcGF0Y2ggYWdhaW4uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIGNyaXRpY2FsIGlzc3VlIGhlcmUsIHByZXZlbnRpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGEgc2ltaWxhciBtZW1vcnkgcHJvYmxlbS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgZGVxdWV1aW5nIHRoZSByZXF1ZXN0IGJlZm9yZSBpdCYjMzk7cyBmcmVlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoaXMgcGF0aCBpcyByZWFjaGFibGUgdGhyb3VnaCBgZGV2X3JlbGVhc2VgLCB3aGljaCBjYWxscyBgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcmAsIGFuZCBmaW5hbGx5LCBgZ2FkZ2V0ZnNfdW5iaW5kYC4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBVU0JfR0FER0VUYCwgYFVTQl9HQURHRVRGU2AsIGFuZCBgVVNCX0RVTU1ZX0hDRGAsIHdoaWNoIHdpbGwgbGlrZWx5IGJlIGltcG9ydGFudCBmb3IgdGVzdGluZy4gSSYjMzk7bSBzYXRpc2ZpZWQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7LAogICAgJiMzNDtVU0JfRFVNTVlfSENEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0ZnNfdW5iaW5kJiMzNDssCiAgICAmIzM0O3VzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgaW4gdGhlIGdhZGdldGZzIHVuYmluZCBwYXRoIGJ5IGV4cGxpY2l0bHkgZGVxdWV1aW5nIHRoZSBlbmRwb2ludCAwIHJlcXVlc3QgYmVmb3JlIGZyZWVpbmcgaXQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugd2hlbiBjbG9zaW5nIHRoZSBnYWRnZXRmcyBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoIHRyaWdnZXJzIHRoZSB1bmJpbmQgY2FsbGJhY2suIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7LAogICAgJiMzNDtVU0JfRFVNTVlfSENEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0ZnNfdW5iaW5kJiMzNDssCiAgICAmIzM0O3VzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgaW4gdGhlIGdhZGdldGZzIHVuYmluZCBwYXRoIGJ5IGV4cGxpY2l0bHkgZGVxdWV1aW5nIHRoZSBlbmRwb2ludCAwIHJlcXVlc3QgYmVmb3JlIGZyZWVpbmcgaXQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugd2hlbiBjbG9zaW5nIHRoZSBnYWRnZXRmcyBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoIHRyaWdnZXJzIHRoZSB1bmJpbmQgY2FsbGJhY2suIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MTIuMzU3OTY2MTQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0ODMxNjM5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0dBREdFVEZTXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2FkZ2V0ZnNfdW5iaW5kXCIsXG4gICAgXCJ1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgaW4gdGhlIGdhZGdldGZzIHVuYmluZCBwYXRoIGJ5IGV4cGxpY2l0bHkgZGVxdWV1aW5nIHRoZSBlbmRwb2ludCAwIHJlcXVlc3QgYmVmb3JlIGZyZWVpbmcgaXQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugd2hlbiBjbG9zaW5nIHRoZSBnYWRnZXRmcyBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoIHRyaWdnZXJzIHRoZSB1bmJpbmQgY2FsbGJhY2suIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDoxMi4zNTc5NzUzNzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODIzMjAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFiNDM4OGYxNWQxMjMyNGFhNzNjYzVjNDdlMTNjYjM4ZjUxNmZkODlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAyMjozNDoxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcXG5pbmRleCBkODdhOGFiNTE1MTA3Li4zOGJjZGVhZmU3MjhiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xcbkBAIC0xNjUyLDEzICsxNjUyLDE2IEBAIGdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldClcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9ja19pcnEgKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbiBcXG4rXFx0aWYgKGRldi1cXHUwMDNlcmVxKSB7XFxuK1xcdFxcdHVzYl9lcF9kZXF1ZXVlKGdhZGdldC1cXHUwMDNlZXAwLCBkZXYtXFx1MDAzZXJlcSk7XFxuK1xcdFxcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZ2FkZ2V0LVxcdTAwM2VlcDAsIGRldi1cXHUwMDNlcmVxKTtcXG4rXFx0XFx0ZGV2LVxcdTAwM2VyZXEgPSBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRkZXN0cm95X2VwX2ZpbGVzIChkZXYpO1xcbiBcXHRnYWRnZXQtXFx1MDAzZWVwMC1cXHUwMDNlZHJpdmVyX2RhdGEgPSBOVUxMO1xcbiBcXHRzZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCwgTlVMTCk7XFxuIFxcbi1cXHQvKiB3ZSd2ZSBhbHJlYWR5IGJlZW4gZGlzY29ubmVjdGVkIC4uLiBubyBpL28gaXMgYWN0aXZlICovXFxuLVxcdGlmIChkZXYtXFx1MDAzZXJlcSlcXG4tXFx0XFx0dXNiX2VwX2ZyZWVfcmVxdWVzdCAoZ2FkZ2V0LVxcdTAwM2VlcDAsIGRldi1cXHUwMDNlcmVxKTtcXG4gXFx0REJHIChkZXYsIFxcXCIlcyBkb25lXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdHB1dF9kZXYgKGRldik7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MTIuODg3MzIxMTMxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTY5NTM3OTgzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0dBREdFVEZTXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2FkZ2V0ZnNfdW5iaW5kXCIsXG4gICAgXCJ1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgaW4gdGhlIGdhZGdldGZzIHVuYmluZCBwYXRoIGJ5IGV4cGxpY2l0bHkgZGVxdWV1aW5nIHRoZSBlbmRwb2ludCAwIHJlcXVlc3QgYmVmb3JlIGZyZWVpbmcgaXQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugd2hlbiBjbG9zaW5nIHRoZSBnYWRnZXRmcyBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoIHRyaWdnZXJzIHRoZSB1bmJpbmQgY2FsbGJhY2suIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYjQzODhmMTVkMTIzMjRhYTczY2M1YzQ3ZTEzY2IzOGY1MTZmZDg5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAyMjozNDoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xuaW5kZXggZDg3YThhYjUxNTEwNy4uMzhiY2RlYWZlNzI4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG5AQCAtMTY1MiwxMyArMTY1MiwxNiBAQCBnYWRnZXRmc191bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXG4gXHR9XG4gXHRzcGluX3VubG9ja19pcnEgKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbiBcbitcdGlmIChkZXYtXHUwMDNlcmVxKSB7XG4rXHRcdHVzYl9lcF9kZXF1ZXVlKGdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuK1x0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuK1x0XHRkZXYtXHUwMDNlcmVxID0gTlVMTDtcbitcdH1cbitcbiBcdGRlc3Ryb3lfZXBfZmlsZXMgKGRldik7XG4gXHRnYWRnZXQtXHUwMDNlZXAwLVx1MDAzZWRyaXZlcl9kYXRhID0gTlVMTDtcbiBcdHNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBOVUxMKTtcbiBcbi1cdC8qIHdlJ3ZlIGFscmVhZHkgYmVlbiBkaXNjb25uZWN0ZWQgLi4uIG5vIGkvbyBpcyBhY3RpdmUgKi9cbi1cdGlmIChkZXYtXHUwMDNlcmVxKVxuLVx0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0IChnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbiBcdERCRyAoZGV2LCBcIiVzIGRvbmVcXG5cIiwgX19mdW5jX18pO1xuIFx0cHV0X2RldiAoZGV2KTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDoxMi44ODczMjMzNjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njk4NjEyMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBHYWRnZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgdHdlYWtpbmcgYGdhZGdldGZzX3VuYmluZGAgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY2AuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgYnJhaW4ga2lja3MgaW4gYW5kIHNlZXMgd2hhdCdzIGhhcHBlbmluZy4gVGhleSdyZSBhZGRpbmcgYHVzYl9lcF9kZXF1ZXVlKGdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO2AgYmVmb3JlIHRoZSBgdXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtgIGNhbGwsIGFuZCB0aGVuIG51bGxpbmcgb3V0IGBkZXYtXHUwMDNlcmVxYC4gVGhpcyBzbWVsbHMgbGlrZSBhIHRlYXJkb3duIHByb2NlZHVyZSBmb3IgYSBVU0IgZ2FkZ2V0IGRyaXZlciwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyByZXNvdXJjZSBsZWFrcyBhbmQgaGFuZGxpbmcgZ3JhY2VmdWwgZGV2aWNlIHJlbW92YWwuXG5cbk5vdywgaG9sZCBvbi4gVGhlIGluc3RydWN0aW9ucyBzYXkgc29tZXRoaW5nIGFib3V0IHJldHVybmluZyBcIldvcnRoRnV6emluZz1mYWxzZVwiIGlmIGl0J3MgKmp1c3QqIGEgdGVhcmRvd24gY2FsbGJhY2sgZm9yIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRoYXQncyBvbmx5IHJ1biBkdXJpbmcgaG90LXVucGx1ZyBvciBzeXNmcyB1bmJpbmQuIFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLCBpcyBgZ2FkZ2V0ZnNfdW5iaW5kYCBvbmUgb2YgKnRob3NlKj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBmbGlwIGJhY2sgdG8gdGhhdCBgaW5vZGUuY2AgZmlsZSBhbmQgY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGBnYWRnZXRmc191bmJpbmRgLiBJIGtub3cgdGhpcyBraW5kIG9mIGFuYWx5c2lzIGlzIHdoYXQgSSdtIGdyZWF0IGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MTcuNTg1OTQwNjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5NTIzNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2FkZ2V0ZnNfdW5iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTYzOT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjQwOmdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY0MS17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTY3MT1zdGF0aWMgaW50IGdhZGdldGZzX2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzA1LWVub21lbTpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTcwNjpcXHRnYWRnZXRmc191bmJpbmQgKGdhZGdldCk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3MDctXFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTc0OT1zdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIGdhZGdldGZzX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzUxLVxcdC5iaW5kXFx0XFx0PSBnYWRnZXRmc19iaW5kLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNzUyOlxcdC51bmJpbmRcXHRcXHQ9IGdhZGdldGZzX3VuYmluZCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTc1My1cXHQuc2V0dXBcXHRcXHQ9IGdhZGdldGZzX3NldHVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDoxNy42NTc5MDAxMDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI3NjMwODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBnYWRnZXRmc191bmJpbmRgKipcblxuT2theSwgc28gYGdhZGdldGZzX3VuYmluZGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgdGhyb3VnaCB0aGUgYC51bmJpbmRgIGNhbGxiYWNrLCBwYXJ0IG9mIHRoZSBgZ2FkZ2V0ZnNfZHJpdmVyYC4gSXQncyBhbHNvIHVzZWQgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgZ2FkZ2V0ZnNfYmluZGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gY2xhcmlmeSB3aGVuIGV4YWN0bHkgdGhpcyBmdW5jdGlvbiBpcyBydW4uIElzIGl0IGxpbWl0ZWQgdG8gaG90LXVucGx1ZyBzY2VuYXJpb3MsIG9yIGRvZXMgaXQgYWxzbyBoYW5kbGUgdW5iaW5kcyB0cmlnZ2VyZWQgdmlhIHN5c2ZzP1xuXG5Ob3csIGNvbnNpZGVyaW5nIFVTQiBnYWRnZXQgYXJjaGl0ZWN0dXJlLCB1bmJpbmRpbmcgY2FuIG9yaWdpbmF0ZSBmcm9tIHVucmVnaXN0ZXJpbmcgdGhlIGdhZGdldCBkcml2ZXIgaXRzZWxmLiBBbmQgdGhhdCBkcml2ZXIgdW5yZWdpc3RyYXRpb24gY2FuIGhhcHBlbiBpbiBhIGZldyBzY2VuYXJpb3M6IHdoZW4gYSBnYWRnZXRmcyBmaWxlIGlzIGNsb3NlZCwgb3Igd2hlbiBnYWRnZXRmcyBpcyB1bm1vdW50ZWQuIEkgbmVlZCB0byBjb25maXJtIGhvdyBgZ2FkZ2V0ZnNfZHJpdmVyYCBpcyByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQsIGJlY2F1c2UgdW5kZXJzdGFuZGluZyB0aG9zZSBwYXRod2F5cyBpcyBjcml0aWNhbCB0byBjb21wcmVoZW5kaW5nIGhvdyBgZ2FkZ2V0ZnNfdW5iaW5kYCBpcyBhY3R1YWxseSBpbnZva2VkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRyaXZlciBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MjEuNjg1NTMzOTE5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMzg0NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldGZzX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTExODA9ZXAwX2Zhc3luYyAoaW50IGYsIHN0cnVjdCBmaWxlICpmZCwgaW50IG9uKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTExODctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjExODg6c3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBnYWRnZXRmc19kcml2ZXI7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTExODktXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTE5MT1kZXZfcmVsZWFzZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTExOTctXFx0aWYgKGRldi1cXHUwMDNlZ2FkZ2V0X3JlZ2lzdGVyZWQpIHtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTE5ODpcXHRcXHR1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyIChcXHUwMDI2Z2FkZ2V0ZnNfZHJpdmVyKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTE5OS1cXHRcXHRkZXYtXFx1MDAzZWdhZGdldF9yZWdpc3RlcmVkID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTcyOT1nYWRnZXRmc19zdXNwZW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NDgtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3NDk6c3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBnYWRnZXRmc19kcml2ZXIgPSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NTAtXFx0LmZ1bmN0aW9uXFx0PSAoY2hhciAqKSBkcml2ZXJfZGVzYyxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xODA0PWRldl9jb25maWcgKHN0cnVjdCBmaWxlICpmZCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwdHIpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTg4MS1cXHRpZiAoZGV2LVxcdTAwM2Voc19jb25maWcpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE4ODI6XFx0XFx0Z2FkZ2V0ZnNfZHJpdmVyLm1heF9zcGVlZCA9IFVTQl9TUEVFRF9ISUdIO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xODgzLVxcdGVsc2VcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTg4NDpcXHRcXHRnYWRnZXRmc19kcml2ZXIubWF4X3NwZWVkID0gVVNCX1NQRUVEX0ZVTEw7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE4ODUtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE4ODY6XFx0dmFsdWUgPSB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2Z2FkZ2V0ZnNfZHJpdmVyKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTg4Ny1cXHRpZiAodmFsdWUgIT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDoyMS43NTg5MjM3MzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODkyOTAxODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR2FkZ2V0ZnMgRHJpdmVyIFVucmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZ2FkZ2V0ZnNfZHJpdmVyYCB1bnJlZ2lzdHJhdGlvbiwgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYGRldl9yZWxlYXNlYCwgd2hpY2ggaXMgdGhlIGZpbGUgcmVsZWFzZSBmdW5jdGlvbiBmb3IgdGhlIGdhZGdldGZzIGZpbGUuIFRoYXQgbWVhbnMgYGdhZGdldGZzX3VuYmluZGAgZ2V0cyBleGVjdXRlZCB3aGVuZXZlciBhIHVzZXItc3BhY2UgcHJvY2VzcyBjbG9zZXMgdGhlIGZpbGUgZGVzY3JpcHRvci4gSG1tLCB0aGF0J3Mgbm90IHdoYXQgSSBleHBlY3RlZC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdGVhcmRvd24gY2FsbGJhY2tzIGxpa2UgYC5yZW1vdmVgLCBgLnNodXRkb3duYCwgb3IgYHBjaV91bnJlZ2lzdGVyX2RyaXZlcmAg4oCTIHRoaW5ncyB0aGF0ICpzaG91bGQqIG9ubHkgaGFwcGVuIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyB1bmJpbmQgb3BlcmF0aW9ucy4gVGhpcyBpcyBkaWZmZXJlbnQ7IGl0J3MgdHJpZ2dlcmVkIGJ5IGEgc3RhbmRhcmQgZmlsZSByZWxlYXNlLCBzb21ldGhpbmcgY29tcGxldGVseSByZWFjaGFibGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gYW5kIGVzcGVjaWFsbHkgZHVyaW5nIGZ1enppbmcuXG5cblJpZ2h0LCBzbyBgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcmAgd2lsbCBjYWxsIHRoZSBgdW5iaW5kYCBjYWxsYmFjay4gT2theSwgbm93IEknbSB0aGlua2luZywgaXMgdGhpcyBgZ2FkZ2V0ZnNfdW5iaW5kYCBldmVuIHdvcnRoIGZ1enppbmc/IEl0ICppcyogYW4gdW5iaW5kIGNhbGxiYWNrLCBzbyBpdCdzIGxpa2VseSBzZW5zaXRpdmUuXG5cblRoaXMgcGF0Y2gsIGl0IGFkZHMgYHVzYl9lcF9kZXF1ZXVlKGdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO2AgdG8gZml4IGEgcmVxdWVzdCBiZWluZyBmcmVlZCB3aGlsZSBpdCdzIHN0aWxsIHF1ZXVlZC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgZml4IGFuZCBhZGRyZXNzZXMgYSByZWFsIGJ1ZywgZ3JlYXQhIElzIGl0IGZ1enphYmxlPyBEZWZpbml0ZWx5LiBJdCdzIHRyaWdnZXJlZCBieSBjbG9zaW5nIHRoZSBnYWRnZXRmcyBmaWxlIGRlc2NyaXB0b3IsIGEgcGVyZmVjdGx5IG5vcm1hbCBhbmQgY29tbW9uIGFjdGlvbiBpbiBhbnkgZnV6emluZyBzZXR1cC4gSSBzaG91bGQgZmluZCB0aGUgY29uZmlnIG9wdGlvbnMgYW5kIHRyeSB0byBidWlsZCBhbmQgdGVzdCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTg0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIyOjM0OjI4LjY1MTgyOTMwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM1MDI4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9HQURHRVRGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0xOTA9Y29uZmlnIFVTQl9HX05DTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6MjA2OmNvbmZpZyBVU0JfR0FER0VURlNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA3LVxcdHRyaXN0YXRlIFxcXCJHYWRnZXQgRmlsZXN5c3RlbVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MjguNzU1MzM1OTM5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NTk5Nzg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBgVVNCX0dBREdFVEZTYDpcblxuKipJbnZlc3RpZ2F0aW5nIFVTQl9HQURHRVRGUyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFVTQl9HQURHRVRGU2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSB3aG9sZSBsYW5kc2NhcGUgb2Ygd2hhdCB0aGlzIG1vZHVsZSByZWxpZXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgYXJlIHJlcXVpcmVkIGZvciBgVVNCX0dBREdFVEZTYCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgY3JpdGljYWwgZm9yIG1ha2luZyBhbnkgY2hhbmdlcyBvciBkZWJ1Z2dpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gaXQuXG5cbkZpcnN0LCBJJ2xsIG5lZWQgdG8gbG9vayBpbnRvIGl0cyBpbmNsdWRlIGZpbGVzIGFuZCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBuZWNlc3NhcnkgZm9yIGl0cyBmdW5jdGlvbmFsaXR5LiBXaGF0IGhlYWRlcnMgZG9lcyBpdCBwdWxsIGluPyBXaGF0IG90aGVyIGRldmljZSBkcml2ZXJzIG9yIHN1YnN5c3RlbXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIG9uIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgdG8gbG9jYXRlIGl0cyBzb3VyY2UgZmlsZXMgYW5kIGRvY3VtZW50YXRpb24uXG5cblRoZW4sIEknbGwgZXhhbWluZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gQXJlIHRoZXJlIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtcyBpdCdzIGRlc2lnbmVkIGZvcj8gQXJlIHRoZXJlIHNwZWNpZmljIFVTQiBjb250cm9sbGVyIGRyaXZlcnMgdGhhdCBpdCBpbnRlZ3JhdGVzIHdpdGg/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZyBvcHRpb25zIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgc2NvcGUuXG5cbkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGl0cyByb2xlLiBJcyBpdCBhIFVTQiBnYWRnZXQgZHJpdmVyIGl0c2VsZj8gQSBjb3JlIGluZnJhc3RydWN0dXJlIGNvbXBvbmVudCBmb3IgZ2FkZ2V0IG1vZGU/IE9yIHNvbWV0aGluZyBpbiBiZXR3ZWVuPyBUaGF0IHdpbGwgZGljdGF0ZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIEkgbmVlZCB0byBnbyBpbnRvLiBJJ20gYWxzbyBtaW5kZnVsIG9mIHBvdGVudGlhbCBjb25mbGljdHMsIGlmIGFueS4gRG9lcyBpdCByZWx5IG9uIHNvbWV0aGluZyB0aGF0IGNvdWxkIGludGVyZmVyZSB3aXRoIG90aGVyIGtlcm5lbCBtb2R1bGVzP1xuXG5JIGFsc28gd2FudCB0byBsb29rIGZvciBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGxpa2UgdGhlIERvY3VtZW50YXRpb24vdXNiL2dhZGdldCBhbmQgRG9jdW1lbnRhdGlvbi91c2IgZGlyZWN0b3JpZXMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBhbmQgdG8gY3Jvc3MgY2hlY2sgbXkgb2JzZXJ2YXRpb25zLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93IGBVU0JfR0FER0VURlNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBVU0IgZ2FkZ2V0IGFyY2hpdGVjdHVyZS4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uIGZvciBhbnkgZnVydGhlciBhbmFseXNpcyBvciBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzQ1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MzIuODIxMzM3ODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDY6XFx0Y29uZmlnIFVTQl9HQURHRVRGU1xcbiAyMDc6XFx0XFx0dHJpc3RhdGUgXFxcIkdhZGdldCBGaWxlc3lzdGVtXFxcIlxcbiAyMDg6XFx0XFx0aGVscFxcbiAyMDk6XFx0XFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGZpbGVzeXN0ZW0gYmFzZWQgQVBJIHRoYXQgbGV0cyB1c2VyIG1vZGVcXG4gMjEwOlxcdFxcdCAgcHJvZ3JhbXMgaW1wbGVtZW50IGEgc2luZ2xlLWNvbmZpZ3VyYXRpb24gVVNCIGRldmljZSwgaW5jbHVkaW5nXFxuIDIxMTpcXHRcXHQgIGVuZHBvaW50IEkvTyBhbmQgY29udHJvbCByZXF1ZXN0cyB0aGF0IGRvbid0IHJlbGF0ZSB0byBlbnVtZXJhdGlvbi5cXG4gMjEyOlxcdFxcdCAgQWxsIGVuZHBvaW50cywgdHJhbnNmZXIgc3BlZWRzLCBhbmQgdHJhbnNmZXIgdHlwZXMgc3VwcG9ydGVkIGJ5XFxuIDIxMzpcXHRcXHQgIHRoZSBoYXJkd2FyZSBhcmUgYXZhaWxhYmxlLCB0aHJvdWdoIHJlYWQoKSBhbmQgd3JpdGUoKSBjYWxscy5cXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcbiAyMTY6XFx0XFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcXFwiZ2FkZ2V0ZnNcXFwiLlxcbiAyMTc6XFx0XFxuIDIxODpcXHRjb25maWcgVVNCX0ZVTkNUSU9ORlNcXG4gMjE5OlxcdFxcdHRyaXN0YXRlIFxcXCJGdW5jdGlvbiBGaWxlc3lzdGVtXFxcIlxcbiAyMjA6XFx0XFx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcXG4gMjIxOlxcdFxcdHNlbGVjdCBVU0JfRl9GU1xcbiAyMjI6XFx0XFx0c2VsZWN0IFVTQl9GVU5DVElPTkZTX0dFTkVSSUMgaWYgIShVU0JfRlVOQ1RJT05GU19FVEggfHwgVVNCX0ZVTkNUSU9ORlNfUk5ESVMpXFxuIDIyMzpcXHRcXHRoZWxwXFxuIDIyNDpcXHRcXHQgIFRoZSBGdW5jdGlvbiBGaWxlc3lzdGVtIChGdW5jdGlvbkZTKSBsZXRzIG9uZSBjcmVhdGUgVVNCXFxuIDIyNTpcXHRcXHQgIGNvbXBvc2l0ZSBmdW5jdGlvbnMgaW4gdXNlciBzcGFjZSBpbiB0aGUgc2FtZSB3YXkgR2FkZ2V0RlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MzIuODIxNDgwMDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MzkyOTU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gYFVTQl9HQURHRVRGU2AgaGVyZS4gSSBrbm93IGl0J3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgVVNCIGdhZGdldCBzeXN0ZW0uIFJpZ2h0LCBgVVNCX0dBREdFVGAgaXMgdGhlIHBhcmVudCwgdGhlIG92ZXJhcmNoaW5nIGZyYW1ld29yay4gTm93LCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYFVTQl9HQURHRVRGU2AsIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBsb29rIGF0IGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIHNob3VsZCByZXNpZGUuIEFoLCBJIHNlZSBpdCEgV2hpbGUgdGhlcmUgaXNuJ3QgYSBkaXJlY3QgYGRlcGVuZHMgb25gIGNsYXVzZSBsaXN0ZWQgZm9yIGBVU0JfR0FER0VURlNgIGl0c2VsZiwgaXQncyBjbGVhcmx5IG5lc3RlZCB3aXRoaW4gYW4gYGlmIFVTQl9HQURHRVRgIGJsb2NrLiBUaGVyZWZvcmUsIHRoZSBnYWRnZXQgZmVhdHVyZSB3aWxsIGJlIGVuYWJsZWQsIHdoZW4gdGhlIGBVU0JfR0FER0VUYCBwYXJlbnQgaXMgYWxzbyBlbmFibGVkLiBNYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTA3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDozNi42MDU0MTI5NDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzU2MTk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZiBVU0JfR0FER0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MzYuNjYyNzgwMzQ1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NzQwMDkwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byBVU0IgZ2FkZ2V0IGRyaXZlcnMsIHNwZWNpZmljYWxseSBpbiB0aGUgbGVnYWN5IGZyYW1ld29yay4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyB0byBsb29rIGlzIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgbGVnYWN5IGdhZGdldCBkcml2ZXIgZGlyZWN0b3J5LiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUsIGFzIEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBhbmQgdGhleSdsbCBnaXZlIG1lIGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiB0aGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhpcyBwYXJ0IG9mIHRoZSBVU0IgZ2FkZ2V0IHN1YnN5c3RlbS4gSG9wZWZ1bGx5LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBncmFzcCB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgYW5kIHRoZWlyIGNvbmZpZ3VyYXRpb24gcG9pbnRzLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgc29saWQgZ3JvdW5kaW5nIGJlZm9yZSBJIGRpdmUgaW50byB0aGUgYWN0dWFsIGRyaXZlciBjb2RlIGlmIG5lZWRlZC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MzkuNTM2NzkyNDgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVTQiBHYWRnZXQgc3VwcG9ydCBvbiBhIHN5c3RlbSBpbnZvbHZlc1xcbiAgIDQ6XFx0IyAgICAoYSkgYSBwZXJpcGhlcmFsIGNvbnRyb2xsZXIsIGFuZFxcbiAgIDU6XFx0IyAgICAoYikgdGhlIGdhZGdldCBkcml2ZXIgdXNpbmcgaXQuXFxuICAgNjpcXHQjXFxuICAgNzpcXHQjIE5PVEU6ICBHYWRnZXQgc3VwcG9ydCAqKiBET0VTIE5PVCAqKiBkZXBlbmQgb24gaG9zdC1zaWRlIENPTkZJR19VU0IgISFcXG4gICA4OlxcdCNcXG4gICA5OlxcdCMgIC0gSG9zdCBzeXN0ZW1zIChsaWtlIFBDcykgbmVlZCBDT05GSUdfVVNCICh3aXRoIFxcXCJBXFxcIiBqYWNrcykuXFxuICAxMDpcXHQjICAtIFBlcmlwaGVyYWxzIChsaWtlIFBEQXMpIG5lZWQgQ09ORklHX1VTQl9HQURHRVQgKHdpdGggXFxcIkJcXFwiIGphY2tzKS5cXG4gIDExOlxcdCMgIC0gU29tZSBzeXN0ZW1zIGhhdmUgYm90aCBraW5kcyBvZiBjb250cm9sbGVycy5cXG4gIDEyOlxcdCNcXG4gIDEzOlxcdCMgV2l0aCBoZWxwIGZyb20gYSBzcGVjaWFsIHRyYW5zY2VpdmVyIGFuZCBhIFxcXCJNaW5pLUFCXFxcIiBqYWNrLCBzeXN0ZW1zIHdpdGhcXG4gIDE0OlxcdCMgYm90aCBraW5kcyBvZiBjb250cm9sbGVyIGNhbiBhbHNvIHN1cHBvcnQgXFxcIlVTQiBPbi10aGUtR29cXFwiIChDT05GSUdfVVNCX09URykuXFxuICAxNTpcXHQjXFxuICAxNjpcXHQjIEEgTGludXggXFxcIkdhZGdldCBEcml2ZXJcXFwiIHRhbGtzIHRvIHRoZSBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyXFxuICAxNzpcXHQjIGRyaXZlciB0aHJvdWdoIHRoZSBhYnN0cmFjdCBcXFwiZ2FkZ2V0XFxcIiBBUEkuICBTb21lIG90aGVyIG9wZXJhdGluZ1xcbiAgMTg6XFx0IyBzeXN0ZW1zIGNhbGwgdGhlc2UgXFxcImNsaWVudFxcXCIgZHJpdmVycywgb2Ygd2hpY2ggXFxcImNsYXNzIGRyaXZlcnNcXFwiXFxuICAxOTpcXHQjIGFyZSBhIHN1YnNldCAoaW1wbGVtZW50aW5nIGEgVVNCIGRldmljZSBjbGFzcyBzcGVjaWZpY2F0aW9uKS5cXG4gIDIwOlxcdCMgQSBnYWRnZXQgZHJpdmVyIGltcGxlbWVudHMgb25lIG9yIG1vcmUgVVNCIGZ1bmN0aW9ucyB1c2luZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDozOS41MzY5Mjc4NzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk2MTU4NDMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSwgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgKmtub3cqIHRoZSBoZWFydCBvZiB0aGUgVVNCIGdhZGdldCBkcml2ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgZm91bmQuIFRoaXMgaXMgd2hlcmUgSSBjYW4gZXhwZWN0IHRvIGZpbmQgYWxsIHRoZSBtZW51IGVudHJpZXMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kLCBjb25maWd1cmUsIGFuZCB0cm91Ymxlc2hvb3QgdGhlIGdhZGdldCBmdW5jdGlvbmFsaXR5LiBJdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVjaWRpbmcgd2hhdCBVU0IgZ2FkZ2V0IGZlYXR1cmVzIGFyZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIGJ1aWx0IGFzIG1vZHVsZXMsIG9yIGNvbXBsZXRlbHkgZGlzYWJsZWQuIEknbSBtZW50YWxseSBwcmVwYXJpbmcgbXlzZWxmIHRvIG5hdmlnYXRlIHRoZSBzdHJ1Y3R1cmUsIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBgY29uZmlnYCBvcHRpb25zIGZvciB0aGluZ3MgbGlrZSBzcGVjaWZpYyBnYWRnZXQgZnVuY3Rpb25zIChlLmcuLCBtYXNzIHN0b3JhZ2UsIG5ldHdvcmssIGF1ZGlvKSwgY29tcG9zaXRlIGRldmljZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgcGVyaXBoZXJhbHMuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGNvbmZsaWN0cyB0b28sIGFuZCBkZXBlbmRlbmNpZXMgdG8gc2VlIGhvdyBmZWF0dXJlcyBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6NDYuNDk4NTE0ODg3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIEdhZGdldCBzdXBwb3J0IG9uIGEgc3lzdGVtIGludm9sdmVzXFxuICAgNDpcXHQjICAgIChhKSBhIHBlcmlwaGVyYWwgY29udHJvbGxlciwgYW5kXFxuICAgNTpcXHQjICAgIChiKSB0aGUgZ2FkZ2V0IGRyaXZlciB1c2luZyBpdC5cXG4gICA2OlxcdCNcXG4gICA3OlxcdCMgTk9URTogIEdhZGdldCBzdXBwb3J0ICoqIERPRVMgTk9UICoqIGRlcGVuZCBvbiBob3N0LXNpZGUgQ09ORklHX1VTQiAhIVxcbiAgIDg6XFx0I1xcbiAgIDk6XFx0IyAgLSBIb3N0IHN5c3RlbXMgKGxpa2UgUENzKSBuZWVkIENPTkZJR19VU0IgKHdpdGggXFxcIkFcXFwiIGphY2tzKS5cXG4gIDEwOlxcdCMgIC0gUGVyaXBoZXJhbHMgKGxpa2UgUERBcykgbmVlZCBDT05GSUdfVVNCX0dBREdFVCAod2l0aCBcXFwiQlxcXCIgamFja3MpLlxcbiAgMTE6XFx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxcbiAgMTI6XFx0I1xcbiAgMTM6XFx0IyBXaXRoIGhlbHAgZnJvbSBhIHNwZWNpYWwgdHJhbnNjZWl2ZXIgYW5kIGEgXFxcIk1pbmktQUJcXFwiIGphY2ssIHN5c3RlbXMgd2l0aFxcbiAgMTQ6XFx0IyBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXIgY2FuIGFsc28gc3VwcG9ydCBcXFwiVVNCIE9uLXRoZS1Hb1xcXCIgKENPTkZJR19VU0JfT1RHKS5cXG4gIDE1OlxcdCNcXG4gIDE2OlxcdFxcbiAgMTc6XFx0bWVudWNvbmZpZyBVU0JfR0FER0VUXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIEdhZGdldCBTdXBwb3J0XFxcIlxcbiAgMTk6XFx0XFx0c2VsZWN0IFVTQl9DT01NT05cXG4gIDIwOlxcdFxcdHNlbGVjdCBOTFNcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgIFVTQiBpcyBhIGhvc3QvZGV2aWNlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgaG9zdCAoc3VjaCBhcyBhXFxuICAyMzpcXHRcXHQgICBQQykgY29udHJvbGxpbmcgdXAgdG8gMTI3IHBlcmlwaGVyYWwgZGV2aWNlcy5cXG4gIDI0OlxcdFxcdCAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDpcXG4gIDI1OlxcdFxcdCAgIHlvdSBjYW4ndCBjb25uZWN0IGEgXFxcInRvLXRoZS1ob3N0XFxcIiBjb25uZWN0b3IgdG8gYSBwZXJpcGhlcmFsLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgICBMaW51eCBjYW4gcnVuIGluIHRoZSBob3N0LCBvciBpbiB0aGUgcGVyaXBoZXJhbC4gIEluIGJvdGggY2FzZXNcXG4gIDI4OlxcdFxcdCAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmVcXG4gIDI5OlxcdFxcdCAgIHRhbGtpbmcgdG8gaXQuICBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBvZnRlbiBkaXNjcmV0ZSBzaWxpY29uLFxcbiAgMzA6XFx0XFx0ICAgb3IgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgQ1BVIGluIGEgbWljcm9jb250cm9sbGVyLiAgVGhlIG1vcmVcXG4gIDMxOlxcdFxcdCAgIGZhbWlsaWFyIGhvc3Qgc2lkZSBjb250cm9sbGVycyBoYXZlIG5hbWVzIGxpa2UgXFxcIkVIQ0lcXFwiLCBcXFwiT0hDSVxcXCIsXFxuICAzMjpcXHRcXHQgICBvciBcXFwiVUhDSVxcXCIsIGFuZCBhcmUgdXN1YWxseSBpbnRlZ3JhdGVkIGludG8gc291dGhicmlkZ2VzIG9uIFBDXFxuICAzMzpcXHRcXHQgICBtb3RoZXJib2FyZHMuXFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdCAgIEVuYWJsZSB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBMaW51eCBpbnNpZGVcXG4gIDM2OlxcdFxcdCAgIGEgVVNCIHBlcmlwaGVyYWwgZGV2aWNlLiAgQ29uZmlndXJlIG9uZSBoYXJkd2FyZSBkcml2ZXIgZm9yIHlvdXJcXG4gIDM3OlxcdFxcdCAgIHBlcmlwaGVyYWwvZGV2aWNlIHNpZGUgYnVzIGNvbnRyb2xsZXIsIGFuZCBhIFxcXCJnYWRnZXQgZHJpdmVyXFxcIiBmb3JcXG4gIDM4OlxcdFxcdCAgIHlvdXIgcGVyaXBoZXJhbCBwcm90b2NvbC4gIChJZiB5b3UgdXNlIG1vZHVsYXIgZ2FkZ2V0IGRyaXZlcnMsXFxuICAzOTpcXHRcXHQgICB5b3UgbWF5IGNvbmZpZ3VyZSBtb3JlIHRoYW4gb25lLilcXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0ICAgSWYgaW4gZG91YnQsIHNheSBcXFwiTlxcXCIgYW5kIGRvbid0IGVuYWJsZSB0aGVzZSBkcml2ZXJzOyBtb3N0IHBlb3BsZVxcbiAgNDI6XFx0XFx0ICAgZG9uJ3QgaGF2ZSB0aGlzIGtpbmQgb2YgaGFyZHdhcmUgKGV4Y2VwdCBtYXliZSBpbnNpZGUgTGludXggUERBcykuXFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdCAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgXFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy9nYWRnZXRcXHUwMDNlIGFuZFxcbiAgNDU6XFx0XFx0ICAgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGZvciB0aGlzIEFQSS5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0aWYgVVNCX0dBREdFVFxcbiAgNDg6XFx0XFxuICA0OTpcXHRjb25maWcgVVNCX0dBREdFVF9ERUJVR1xcbiAgNTA6XFx0XFx0Ym9vbCBcXFwiRGVidWdnaW5nIG1lc3NhZ2VzIChERVZFTE9QTUVOVClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIyOjM0OjQ2LjQ5ODY5NjEwN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE5MTc3MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIFVTQiBHYWRnZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoZSBlc3NlbnRpYWxzIGVuYWJsZWQ6IGBVU0JfR0FER0VUYCBhbmQgYFVTQl9HQURHRVRGU2AuIFRob3NlIGFyZSB0aGUgY29yZSBjb25maWdzIEknbSBleHBlY3RpbmcgdG8gc2VlLiBOb3csIGZvciB0ZXN0aW5nLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCwgYFVTQl9EVU1NWV9IQ0RgIGlzIHVzdWFsbHkgbmVjZXNzYXJ5IHRvIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBob3N0IGNvbnRyb2xsZXIuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZSBgVVNCX0RVTU1ZX0hDRGAgb3B0aW9uIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJJ2xsIGNoZWNrIGluIHRoZSBjb25maWd1cmF0aW9uIG1lbnUuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gYXZvaWQgd2FzdGluZyB0aW1lIGRlYnVnZ2luZyBpc3N1ZXMgdGhhdCBzdGVtIGZyb20gYSBtaXNzaW5nIGR1bW15IGhvc3QgY29udHJvbGxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6NTAuMjE3ODc2MjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTAyOTY0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0RVTU1ZX0hDRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnPTQyMj1zb3VyY2UgXFxcImRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY2RuczIvS2NvbmZpZ1xcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZy00MjctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnOjQyODpjb25maWcgVVNCX0RVTU1ZX0hDRFxcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZy00MjktXFx0dHJpc3RhdGUgXFxcIkR1bW15IEhDRCAoREVWRUxPUE1FTlQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDo1MC4zMzg5MTU2MjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5NDEyMDMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQiBHYWRnZXQgRnJhbWV3b3JrKipcblxuT2theSwgc28gSSdtIHdvcmtpbmcgd2l0aCB0aGUgVVNCIGdhZGdldCBmcmFtZXdvcmssIGFuZCBJJ20gcHJldHR5IHN1cmUgYFVTQl9EVU1NWV9IQ0RgIGlzIHRoZSBkdW1teSBIQ0QgaW1wbGVtZW50YXRpb24gdXNlZCBzcGVjaWZpY2FsbHkgZm9yIHRlc3RpbmcgZ2FkZ2V0cy4gTXkgaW1tZWRpYXRlIGZvY3VzIG5lZWRzIHRvIGJlIGFyb3VuZCB0aGUgYGdhZGdldGZzX3VuYmluZGAgZnVuY3Rpb24uIEkgKnRoaW5rKiB0aGF0J3MgdGhlIGNlbnRyYWwgcG9pbnQsIHRoZSBzeW1ib2wgdGhhdCB0cmlnZ2VycyB0aGUgdW5iaW5kaW5nIHByb2Nlc3MuIE5vdywgYSBzbGlnaHQgd3JpbmtsZS4uLiBpc24ndCBgZ2FkZ2V0ZnNfdW5iaW5kYCBkZWNsYXJlZCBhcyBgc3RhdGljYD8gVGhhdCBjb3VsZCBjb21wbGljYXRlIHRoaW5ncyBpZiBJJ20gdHJ5aW5nIHRvLCBzYXksIGRpcmVjdGx5IGNhbGwgaXQgZnJvbSBlbHNld2hlcmUuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGFnYWluIHRvIHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nLiBJJ2xsIGhlYWQgYmFjayB0byBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jYCB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDo1NC4yMzMwMzkxNjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDc5Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldGZzX3VuYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE2Mzk9c3RhdGljIHZvaWRcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTY0MDpnYWRnZXRmc191bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2NDEte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE2NzE9c3RhdGljIGludCBnYWRnZXRmc19iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTcwNS1lbm9tZW06XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3MDY6XFx0Z2FkZ2V0ZnNfdW5iaW5kIChnYWRnZXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzA3LVxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE3NDk9c3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBnYWRnZXRmc19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTc1MS1cXHQuYmluZFxcdFxcdD0gZ2FkZ2V0ZnNfYmluZCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTc1MjpcXHQudW5iaW5kXFx0XFx0PSBnYWRnZXRmc191bmJpbmQsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NTMtXFx0LnNldHVwXFx0XFx0PSBnYWRnZXRmc19zZXR1cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6NTQuMjg4NTI1MTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNjg3NTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyB0aGUgYGdhZGdldGZzX3VuYmluZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHVyZ2luZyB1cyB0byBsZWFuIHRvd2FyZHMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cyByYXRoZXIgdGhhbiBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGdvYWwsIEknbSBhc3N1bWluZywgaXMgYmV0dGVyIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgZnV0dXJlIG1vZGlmaWNhdGlvbnMgb3IgZXh0ZW5zaW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IGBnYWRnZXRmc191bmJpbmRgLiBJIGtub3cgaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCdzIGFjdHVhbGx5IGlubGluZWQuIEl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGAudW5iaW5kID0gZ2FkZ2V0ZnNfdW5iaW5kYCwgd2hpY2ggKnNob3VsZCogbWVhbiBpdCAqY2Fubm90KiBiZSBmdWxseSBpbmxpbmVkIGJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4uIFRoYXQgYWxzbyBtZWFucyBpdCAqd2lsbCogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLCBzbyBpdCdzIG5vdCBhIGNvbXBsZXRlIGlubGluZSBzaXR1YXRpb24uXG5cbkhvd2V2ZXIsIGlmIHdlIHRydWx5IHdhbnQgdG8gY3JlYXRlIGEgKm5vbi1zdGF0aWMqIGVudHJ5IHBvaW50LCB3ZSBjb3VsZCB1c2UgYW4gZXhpc3RpbmcgZnVuY3Rpb24uIExldCdzIGxvb2sgYXQgYGRldl9yZWxlYXNlYCBhcyBhIHBvc3NpYmxlIGFsdGVybmF0aXZlIG9yIGBkZXZfY29uZmlnYC4gTGV0IG1lIGdvIGNoZWNrIGBkZXZfcmVsZWFzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6NTguNDI1NDAzMzQ3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM1ODMwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xMTkwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTE5MTpkZXZfcmVsZWFzZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xMTkyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwMF9vcGVyYXRpb25zID0ge1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5NDEtXFx0LnVubG9ja2VkX2lvY3RsID0gZ2FkZ2V0X2Rldl9pb2N0bCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTk0MjpcXHQucmVsZWFzZSA9XFx0ZGV2X3JlbGVhc2UsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5NDMtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6NTguNzQ4OTkyMzQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzk3NzIzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIERyaXZlciBVbnJlZ2lzdHJhdGlvbiBpbiB0aGUgVVNCIEdhZGdldCBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyBgZGV2X3JlbGVhc2VgIGlzLCBvZiBjb3Vyc2UsIHN0YXRpYy4gVGhhdCdzIGEgZ2l2ZW4uIEJ1dCBub3csIG15IG1pbmQncyBqdW1wZWQgdG8gYSByZWxhdGVkIGZ1bmN0aW9uLCBgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcmAuIFdoZXJlIGlzICp0aGF0KiBkZWZpbmVkPyBBaCwgcmlnaHQsIGluIGBkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuY2AuIE9rYXksIGdvb2QuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXJgIG5vdy4gTGV0J3Mgc2VlIGhvdyB0aGUgZHJpdmVyIHVucmVnaXN0cmF0aW9uIGlzIGhhbmRsZWQgaW4gdGhhdCBjb3JlIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBmdW5jdGlvbiwgdGhlIHN0YXRpYyBgZGV2X3JlbGVhc2VgIGFuZCB0aGUgd2hvbGUgZ2FkZ2V0IGRyaXZlciBsaWZlY3ljbGUuIFRoaXMgbWF5IGdpdmUgbWUgc29tZSBpbnNpZ2h0IHRvIHRoZSBzdGF0aWMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNTowMi4wODg3NjkyMDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMDQwNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmM9MTc3Nz1FWFBPUlRfU1lNQk9MX0dQTCh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcl9vd25lcik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmMtMTc3OC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYzoxNzc5OmludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKVxcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jLTE3ODAte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmMtMTc4Ni19XFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmM6MTc4NzpFWFBPUlRfU1lNQk9MX0dQTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYy0xNzg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNTowMi4xNTE4MTM5NDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUyOTY0MTExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdhZGdldEZTIFVuYmluZCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgYGdhZGdldGZzX3VuYmluZGAgZnVuY3Rpb24sIGFuZCBJIHRoaW5rIEkndmUgZ290IGEgaGFuZGxlIG9uIGl0LiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIGFib3V0IGVudHJ5IHBvaW50cywgYW5kIGB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyYCBzZWVtZWQgbGlrZSBhIGdvb2QsIG5vbi1zdGF0aWMgb3B0aW9uLiBJIHdhcyBhbHNvIGNvbnNpZGVyaW5nIGB1c2JfZXBfZGVxdWV1ZWAgYW5kIGB1c2JfZXBfZnJlZV9yZXF1ZXN0YCwgYXMgdGhleSdyZSBjbGVhcmx5IHBhcnQgb2YgdGhlIGNsZWFudXAgcHJvY2Vzcy4gVGhlbiBJIHJlYWxpemVkIGBnYWRnZXRmc191bmJpbmRgLCBldmVuIHRob3VnaCBpdCAqaXMqIHN0YXRpYywgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCB3b24ndCBiZSBpbmxpbmVkLiBUaGF0IG1lYW5zIGl0J2xsIHNob3cgdXAgaW4gc3RhY2sgdHJhY2VzLCBzbyBpbmNsdWRpbmcgaXQgaXMgcGVyZmVjdGx5IGFjY2VwdGFibGUuXG5cbkkndmUgZGVjaWRlZCB0byBpbmNsdWRlIGB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyYCBhbmQgYGdhZGdldGZzX3VuYmluZGAuXG5cbk5vdywgbGV0IG1lIHJldmlldyB0aGUgcHJvcG9zZWQgcGF0Y2ggYWdhaW4uIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgY3JpdGljYWwgaXNzdWUgaGVyZSwgcHJldmVudGluZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgYSBzaW1pbGFyIG1lbW9yeSBwcm9ibGVtLiBJdCdzIGVzc2VudGlhbGx5IGRlcXVldWluZyB0aGUgcmVxdWVzdCBiZWZvcmUgaXQncyBmcmVlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoaXMgcGF0aCBpcyByZWFjaGFibGUgdGhyb3VnaCBgZGV2X3JlbGVhc2VgLCB3aGljaCBjYWxscyBgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcmAsIGFuZCBmaW5hbGx5LCBgZ2FkZ2V0ZnNfdW5iaW5kYC4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBVU0JfR0FER0VUYCwgYFVTQl9HQURHRVRGU2AsIGFuZCBgVVNCX0RVTU1ZX0hDRGAsIHdoaWNoIHdpbGwgbGlrZWx5IGJlIGltcG9ydGFudCBmb3IgdGVzdGluZy4gSSdtIHNhdGlzZmllZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTIyLCJPdXRwdXRUb2tlbnMiOjEzNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNTowOS42ODE0NTg2MzlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk2NTczNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9HQURHRVRGU1wiLFxuICAgIFwiVVNCX0RVTU1ZX0hDRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhZGdldGZzX3VuYmluZFwiLFxuICAgIFwidXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGlzc3VlIGluIHRoZSBnYWRnZXRmcyB1bmJpbmQgcGF0aCBieSBleHBsaWNpdGx5IGRlcXVldWluZyB0aGUgZW5kcG9pbnQgMCByZXF1ZXN0IGJlZm9yZSBmcmVlaW5nIGl0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHdoZW4gY2xvc2luZyB0aGUgZ2FkZ2V0ZnMgZmlsZSBkZXNjcmlwdG9yLCB3aGljaCB0cmlnZ2VycyB0aGUgdW5iaW5kIGNhbGxiYWNrLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JfR0FER0VURlNcIixcbiAgICBcIlVTQl9EVU1NWV9IQ0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnYWRnZXRmc191bmJpbmRcIixcbiAgICBcInVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgZ2FkZ2V0ZnMgdW5iaW5kIHBhdGggYnkgZXhwbGljaXRseSBkZXF1ZXVpbmcgdGhlIGVuZHBvaW50IDAgcmVxdWVzdCBiZWZvcmUgZnJlZWluZyBpdC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB3aGVuIGNsb3NpbmcgdGhlIGdhZGdldGZzIGZpbGUgZGVzY3JpcHRvciwgd2hpY2ggdHJpZ2dlcnMgdGhlIHVuYmluZCBjYWxsYmFjay4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgttg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 22:31:51 +0000 UTC FinishedAt: 2026-08-02 22:35:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_GADGETFS", "USB_DUMMY_HCD" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "f5098b6bae761e346ebcd9da7f95622c04733cff", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_GADGETFS", "USB_DUMMY_HCD" ], "series_id": "9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "gadgetfs_unbind", "usb_gadget_unregister_driver" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDIyOjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0dBREdFVEZTJiMzNDssCiAgICAmIzM0O1VTQl9EVU1NWV9IQ0QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnYWRnZXRmc191bmJpbmQmIzM0OywKICAgICYjMzQ7dXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgZ2FkZ2V0ZnMgdW5iaW5kIHBhdGggYnkgZXhwbGljaXRseSBkZXF1ZXVpbmcgdGhlIGVuZHBvaW50IDAgcmVxdWVzdCBiZWZvcmUgZnJlZWluZyBpdC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB3aGVuIGNsb3NpbmcgdGhlIGdhZGdldGZzIGZpbGUgZGVzY3JpcHRvciwgd2hpY2ggdHJpZ2dlcnMgdGhlIHVuYmluZCBjYWxsYmFjay4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYjQzODhmMTVkMTIzMjRhYTczY2M1YzQ3ZTEzY2IzOGY1MTZmZDg5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAyMjozNDoxMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbmluZGV4IGQ4N2E4YWI1MTUxMDcuLjM4YmNkZWFmZTcyOGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xuQEAgLTE2NTIsMTMgJiM0MzsxNjUyLDE2IEBAIGdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldClcbiBcdH1cbiBcdHNwaW5fdW5sb2NrX2lycSAoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuIFxuJiM0MztcdGlmIChkZXYtXHUwMDNlcmVxKSB7XG4mIzQzO1x0XHR1c2JfZXBfZGVxdWV1ZShnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbiYjNDM7XHRcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZ2FkZ2V0LVx1MDAzZWVwMCwgZGV2LVx1MDAzZXJlcSk7XG4mIzQzO1x0XHRkZXYtXHUwMDNlcmVxID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0ZGVzdHJveV9lcF9maWxlcyAoZGV2KTtcbiBcdGdhZGdldC1cdTAwM2VlcDAtXHUwMDNlZHJpdmVyX2RhdGEgPSBOVUxMO1xuIFx0c2V0X2dhZGdldF9kYXRhIChnYWRnZXQsIE5VTEwpO1xuIFxuLVx0Lyogd2UmIzM5O3ZlIGFscmVhZHkgYmVlbiBkaXNjb25uZWN0ZWQgLi4uIG5vIGkvbyBpcyBhY3RpdmUgKi9cbi1cdGlmIChkZXYtXHUwMDNlcmVxKVxuLVx0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0IChnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbiBcdERCRyAoZGV2LCBcJiMzNDslcyBkb25lXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4gXHRwdXRfZGV2IChkZXYpO1xuIH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0dBREdFVCYjMzQ7LAogICAgJiMzNDtVU0JfR0FER0VURlMmIzM0OywKICAgICYjMzQ7VVNCX0RVTU1ZX0hDRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhZGdldGZzX3VuYmluZCYjMzQ7LAogICAgJiMzNDt1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGlzc3VlIGluIHRoZSBnYWRnZXRmcyB1bmJpbmQgcGF0aCBieSBleHBsaWNpdGx5IGRlcXVldWluZyB0aGUgZW5kcG9pbnQgMCByZXF1ZXN0IGJlZm9yZSBmcmVlaW5nIGl0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHdoZW4gY2xvc2luZyB0aGUgZ2FkZ2V0ZnMgZmlsZSBkZXNjcmlwdG9yLCB3aGljaCB0cmlnZ2VycyB0aGUgdW5iaW5kIGNhbGxiYWNrLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFiNDM4OGYxNWQxMjMyNGFhNzNjYzVjNDdlMTNjYjM4ZjUxNmZkODkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyIDIyOjM0OjExIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jCmluZGV4IGQ4N2E4YWI1MTUxMDcuLjM4YmNkZWFmZTcyOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMKQEAgLTE2NTIsMTMgJiM0MzsxNjUyLDE2IEBAIGdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKIAl9CiAJc3Bpbl91bmxvY2tfaXJxICgmYW1wO2Rldi0mZ3Q7bG9jayk7CiAKJiM0MzsJaWYgKGRldi0mZ3Q7cmVxKSB7CiYjNDM7CQl1c2JfZXBfZGVxdWV1ZShnYWRnZXQtJmd0O2VwMCwgZGV2LSZndDtyZXEpOwomIzQzOwkJdXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtJmd0O2VwMCwgZGV2LSZndDtyZXEpOwomIzQzOwkJZGV2LSZndDtyZXEgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiAJZGVzdHJveV9lcF9maWxlcyAoZGV2KTsKIAlnYWRnZXQtJmd0O2VwMC0mZ3Q7ZHJpdmVyX2RhdGEgPSBOVUxMOwogCXNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBOVUxMKTsKIAotCS8qIHdlJiMzOTt2ZSBhbHJlYWR5IGJlZW4gZGlzY29ubmVjdGVkIC4uLiBubyBpL28gaXMgYWN0aXZlICovCi0JaWYgKGRldi0mZ3Q7cmVxKQotCQl1c2JfZXBfZnJlZV9yZXF1ZXN0IChnYWRnZXQtJmd0O2VwMCwgZGV2LSZndDtyZXEpOwogCURCRyAoZGV2LCAmIzM0OyVzIGRvbmVcbiYjMzQ7LCBfX2Z1bmNfXyk7CiAJcHV0X2RldiAoZGV2KTsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgR2FkZ2V0IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0JiMzOTtzIHR3ZWFraW5nIGBnYWRnZXRmc191bmJpbmRgIGluIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgLiBJbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGJyYWluIGtpY2tzIGluIGFuZCBzZWVzIHdoYXQmIzM5O3MgaGFwcGVuaW5nLiBUaGV5JiMzOTtyZSBhZGRpbmcgYHVzYl9lcF9kZXF1ZXVlKGdhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSk7YCBiZWZvcmUgdGhlIGB1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC0mZ3Q7ZXAwLCBkZXYtJmd0O3JlcSk7YCBjYWxsLCBhbmQgdGhlbiBudWxsaW5nIG91dCBgZGV2LSZndDtyZXFgLiBUaGlzIHNtZWxscyBsaWtlIGEgdGVhcmRvd24gcHJvY2VkdXJlIGZvciBhIFVTQiBnYWRnZXQgZHJpdmVyLCB3aGljaCBpcyBjcnVjaWFsIGZvciBwcmV2ZW50aW5nIHJlc291cmNlIGxlYWtzIGFuZCBoYW5kbGluZyBncmFjZWZ1bCBkZXZpY2UgcmVtb3ZhbC4KCk5vdywgaG9sZCBvbi4gVGhlIGluc3RydWN0aW9ucyBzYXkgc29tZXRoaW5nIGFib3V0IHJldHVybmluZyAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGlmIGl0JiMzOTtzICpqdXN0KiBhIHRlYXJkb3duIGNhbGxiYWNrIGZvciBgLnJlbW92ZWAsIGAuc2h1dGRvd25gLCBvciBgcGNpX3VucmVnaXN0ZXJfZHJpdmVyYCB0aGF0JiMzOTtzIG9ubHkgcnVuIGR1cmluZyBob3QtdW5wbHVnIG9yIHN5c2ZzIHVuYmluZC4gVGhhdCYjMzk7cyB0aGUga2V5IHF1ZXN0aW9uLCBpcyBgZ2FkZ2V0ZnNfdW5iaW5kYCBvbmUgb2YgKnRob3NlKj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZmxpcCBiYWNrIHRvIHRoYXQgYGlub2RlLmNgIGZpbGUgYW5kIGNoZWNrIHRoZSBjb250ZXh0IGFyb3VuZCBgZ2FkZ2V0ZnNfdW5iaW5kYC4gSSBrbm93IHRoaXMga2luZCBvZiBhbmFseXNpcyBpcyB3aGF0IEkmIzM5O20gZ3JlYXQgYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnNfdW5iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjM5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTY0MDpnYWRnZXRmc191bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY0MS17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE2NzE9c3RhdGljIGludCBnYWRnZXRmc19iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3MDUtZW5vbWVtOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3MDY6XHRnYWRnZXRmc191bmJpbmQgKGdhZGdldCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTcwNy1cdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNzQ5PXN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ2FkZ2V0ZnNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzUxLVx0LmJpbmRcdFx0PSBnYWRnZXRmc19iaW5kLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3NTI6XHQudW5iaW5kXHRcdD0gZ2FkZ2V0ZnNfdW5iaW5kLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NTMtXHQuc2V0dXBcdFx0PSBnYWRnZXRmc19zZXR1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBnYWRnZXRmc191bmJpbmRgKioKCk9rYXksIHNvIGBnYWRnZXRmc191bmJpbmRgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIHRocm91Z2ggdGhlIGAudW5iaW5kYCBjYWxsYmFjaywgcGFydCBvZiB0aGUgYGdhZGdldGZzX2RyaXZlcmAuIEl0JiMzOTtzIGFsc28gdXNlZCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBnYWRnZXRmc19iaW5kYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgbmVlZCB0byBjbGFyaWZ5IHdoZW4gZXhhY3RseSB0aGlzIGZ1bmN0aW9uIGlzIHJ1bi4gSXMgaXQgbGltaXRlZCB0byBob3QtdW5wbHVnIHNjZW5hcmlvcywgb3IgZG9lcyBpdCBhbHNvIGhhbmRsZSB1bmJpbmRzIHRyaWdnZXJlZCB2aWEgc3lzZnM/CgpOb3csIGNvbnNpZGVyaW5nIFVTQiBnYWRnZXQgYXJjaGl0ZWN0dXJlLCB1bmJpbmRpbmcgY2FuIG9yaWdpbmF0ZSBmcm9tIHVucmVnaXN0ZXJpbmcgdGhlIGdhZGdldCBkcml2ZXIgaXRzZWxmLiBBbmQgdGhhdCBkcml2ZXIgdW5yZWdpc3RyYXRpb24gY2FuIGhhcHBlbiBpbiBhIGZldyBzY2VuYXJpb3M6IHdoZW4gYSBnYWRnZXRmcyBmaWxlIGlzIGNsb3NlZCwgb3Igd2hlbiBnYWRnZXRmcyBpcyB1bm1vdW50ZWQuIEkgbmVlZCB0byBjb25maXJtIGhvdyBgZ2FkZ2V0ZnNfZHJpdmVyYCBpcyByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQsIGJlY2F1c2UgdW5kZXJzdGFuZGluZyB0aG9zZSBwYXRod2F5cyBpcyBjcml0aWNhbCB0byBjb21wcmVoZW5kaW5nIGhvdyBgZ2FkZ2V0ZnNfdW5iaW5kYCBpcyBhY3R1YWxseSBpbnZva2VkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRyaXZlciBsaWZlY3ljbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnNfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xMTgwPWVwMF9mYXN5bmMgKGludCBmLCBzdHJ1Y3QgZmlsZSAqZmQsIGludCBvbilcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTE4Ny1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxMTg4OnN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ2FkZ2V0ZnNfZHJpdmVyO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTExODktXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTExOTE9ZGV2X3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTE5Ny1cdGlmIChkZXYtXHUwMDNlZ2FkZ2V0X3JlZ2lzdGVyZWQpIHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxMTk4Olx0XHR1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyIChcdTAwMjZnYWRnZXRmc19kcml2ZXIpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTExOTktXHRcdGRldi1cdTAwM2VnYWRnZXRfcmVnaXN0ZXJlZCA9IGZhbHNlO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNzI5PWdhZGdldGZzX3N1c3BlbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NDgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTc0OTpzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIGdhZGdldGZzX2RyaXZlciA9IHtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzUwLVx0LmZ1bmN0aW9uXHQ9IChjaGFyICopIGRyaXZlcl9kZXNjLFxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xODA0PWRldl9jb25maWcgKHN0cnVjdCBmaWxlICpmZCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwdHIpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE4ODEtXHRpZiAoZGV2LVx1MDAzZWhzX2NvbmZpZylcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxODgyOlx0XHRnYWRnZXRmc19kcml2ZXIubWF4X3NwZWVkID0gVVNCX1NQRUVEX0hJR0g7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTg4My1cdGVsc2VcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxODg0Olx0XHRnYWRnZXRmc19kcml2ZXIubWF4X3NwZWVkID0gVVNCX1NQRUVEX0ZVTEw7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTg4NS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxODg2Olx0dmFsdWUgPSB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZnYWRnZXRmc19kcml2ZXIpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE4ODctXHRpZiAodmFsdWUgIT0gMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5ODQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBHYWRnZXRmcyBEcml2ZXIgVW5yZWdpc3RyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGdhZGdldGZzX2RyaXZlcmAgdW5yZWdpc3RyYXRpb24sIGFuZCBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSBgZGV2X3JlbGVhc2VgLCB3aGljaCBpcyB0aGUgZmlsZSByZWxlYXNlIGZ1bmN0aW9uIGZvciB0aGUgZ2FkZ2V0ZnMgZmlsZS4gVGhhdCBtZWFucyBgZ2FkZ2V0ZnNfdW5iaW5kYCBnZXRzIGV4ZWN1dGVkIHdoZW5ldmVyIGEgdXNlci1zcGFjZSBwcm9jZXNzIGNsb3NlcyB0aGUgZmlsZSBkZXNjcmlwdG9yLiBIbW0sIHRoYXQmIzM5O3Mgbm90IHdoYXQgSSBleHBlY3RlZC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdGVhcmRvd24gY2FsbGJhY2tzIGxpa2UgYC5yZW1vdmVgLCBgLnNodXRkb3duYCwgb3IgYHBjaV91bnJlZ2lzdGVyX2RyaXZlcmAg4oCTIHRoaW5ncyB0aGF0ICpzaG91bGQqIG9ubHkgaGFwcGVuIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyB1bmJpbmQgb3BlcmF0aW9ucy4gVGhpcyBpcyBkaWZmZXJlbnQ7IGl0JiMzOTtzIHRyaWdnZXJlZCBieSBhIHN0YW5kYXJkIGZpbGUgcmVsZWFzZSwgc29tZXRoaW5nIGNvbXBsZXRlbHkgcmVhY2hhYmxlIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uIGFuZCBlc3BlY2lhbGx5IGR1cmluZyBmdXp6aW5nLgoKUmlnaHQsIHNvIGB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyYCB3aWxsIGNhbGwgdGhlIGB1bmJpbmRgIGNhbGxiYWNrLiBPa2F5LCBub3cgSSYjMzk7bSB0aGlua2luZywgaXMgdGhpcyBgZ2FkZ2V0ZnNfdW5iaW5kYCBldmVuIHdvcnRoIGZ1enppbmc/IEl0ICppcyogYW4gdW5iaW5kIGNhbGxiYWNrLCBzbyBpdCYjMzk7cyBsaWtlbHkgc2Vuc2l0aXZlLgoKVGhpcyBwYXRjaCwgaXQgYWRkcyBgdXNiX2VwX2RlcXVldWUoZ2FkZ2V0LSZndDtlcDAsIGRldi0mZ3Q7cmVxKTtgIHRvIGZpeCBhIHJlcXVlc3QgYmVpbmcgZnJlZWQgd2hpbGUgaXQmIzM5O3Mgc3RpbGwgcXVldWVkLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBmaXggYW5kIGFkZHJlc3NlcyBhIHJlYWwgYnVnLCBncmVhdCEgSXMgaXQgZnV6emFibGU/IERlZmluaXRlbHkuIEl0JiMzOTtzIHRyaWdnZXJlZCBieSBjbG9zaW5nIHRoZSBnYWRnZXRmcyBmaWxlIGRlc2NyaXB0b3IsIGEgcGVyZmVjdGx5IG5vcm1hbCBhbmQgY29tbW9uIGFjdGlvbiBpbiBhbnkgZnV6emluZyBzZXR1cC4gSSBzaG91bGQgZmluZCB0aGUgY29uZmlnIG9wdGlvbnMgYW5kIHRyeSB0byBidWlsZCBhbmQgdGVzdCB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIyOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfR0FER0VURlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0xOTA9Y29uZmlnIFVTQl9HX05DTVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMDUtXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6MjA2OmNvbmZpZyBVU0JfR0FER0VURlNcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMDctXHR0cmlzdGF0ZSBcJiMzNDtHYWRnZXQgRmlsZXN5c3RlbVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3NDUKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFVTQl9HQURHRVRGU2A6CgoqKkludmVzdGlnYXRpbmcgVVNCX0dBREdFVEZTIERlcGVuZGVuY2llcyoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFVTQl9HQURHRVRGU2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSB3aG9sZSBsYW5kc2NhcGUgb2Ygd2hhdCB0aGlzIG1vZHVsZSByZWxpZXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgYXJlIHJlcXVpcmVkIGZvciBgVVNCX0dBREdFVEZTYCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgY3JpdGljYWwgZm9yIG1ha2luZyBhbnkgY2hhbmdlcyBvciBkZWJ1Z2dpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gaXQuCgpGaXJzdCwgSSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gaXRzIGluY2x1ZGUgZmlsZXMgYW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgYXJlIG5lY2Vzc2FyeSBmb3IgaXRzIGZ1bmN0aW9uYWxpdHkuIFdoYXQgaGVhZGVycyBkb2VzIGl0IHB1bGwgaW4/IFdoYXQgb3RoZXIgZGV2aWNlIGRyaXZlcnMgb3Igc3Vic3lzdGVtcyBkb2VzIGl0IGludGVyYWN0IHdpdGg/IEkmIzM5O2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIG9uIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgdG8gbG9jYXRlIGl0cyBzb3VyY2UgZmlsZXMgYW5kIGRvY3VtZW50YXRpb24uCgpUaGVuLCBJJiMzOTtsbCBleGFtaW5lIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBBcmUgdGhlcmUgc3BlY2lmaWMgaGFyZHdhcmUgcGxhdGZvcm1zIGl0JiMzOTtzIGRlc2lnbmVkIGZvcj8gQXJlIHRoZXJlIHNwZWNpZmljIFVTQiBjb250cm9sbGVyIGRyaXZlcnMgdGhhdCBpdCBpbnRlZ3JhdGVzIHdpdGg/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZyBvcHRpb25zIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgc2NvcGUuCgpJIG5lZWQgdG8gcXVpY2tseSBncmFzcCBpdHMgcm9sZS4gSXMgaXQgYSBVU0IgZ2FkZ2V0IGRyaXZlciBpdHNlbGY/IEEgY29yZSBpbmZyYXN0cnVjdHVyZSBjb21wb25lbnQgZm9yIGdhZGdldCBtb2RlPyBPciBzb21ldGhpbmcgaW4gYmV0d2Vlbj8gVGhhdCB3aWxsIGRpY3RhdGUgdGhlIGxldmVsIG9mIGRldGFpbCBJIG5lZWQgdG8gZ28gaW50by4gSSYjMzk7bSBhbHNvIG1pbmRmdWwgb2YgcG90ZW50aWFsIGNvbmZsaWN0cywgaWYgYW55LiBEb2VzIGl0IHJlbHkgb24gc29tZXRoaW5nIHRoYXQgY291bGQgaW50ZXJmZXJlIHdpdGggb3RoZXIga2VybmVsIG1vZHVsZXM/CgpJIGFsc28gd2FudCB0byBsb29rIGZvciBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGxpa2UgdGhlIERvY3VtZW50YXRpb24vdXNiL2dhZGdldCBhbmQgRG9jdW1lbnRhdGlvbi91c2IgZGlyZWN0b3JpZXMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBhbmQgdG8gY3Jvc3MgY2hlY2sgbXkgb2JzZXJ2YXRpb25zLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93IGBVU0JfR0FER0VURlNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBVU0IgZ2FkZ2V0IGFyY2hpdGVjdHVyZS4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uIGZvciBhbnkgZnVydGhlciBhbmFseXNpcyBvciBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjA2Olx0Y29uZmlnIFVTQl9HQURHRVRGU1xuIDIwNzpcdFx0dHJpc3RhdGUgXCYjMzQ7R2FkZ2V0IEZpbGVzeXN0ZW1cJiMzNDtcbiAyMDg6XHRcdGhlbHBcbiAyMDk6XHRcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBmaWxlc3lzdGVtIGJhc2VkIEFQSSB0aGF0IGxldHMgdXNlciBtb2RlXG4gMjEwOlx0XHQgIHByb2dyYW1zIGltcGxlbWVudCBhIHNpbmdsZS1jb25maWd1cmF0aW9uIFVTQiBkZXZpY2UsIGluY2x1ZGluZ1xuIDIxMTpcdFx0ICBlbmRwb2ludCBJL08gYW5kIGNvbnRyb2wgcmVxdWVzdHMgdGhhdCBkb24mIzM5O3QgcmVsYXRlIHRvIGVudW1lcmF0aW9uLlxuIDIxMjpcdFx0ICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnlcbiAyMTM6XHRcdCAgdGhlIGhhcmR3YXJlIGFyZSBhdmFpbGFibGUsIHRocm91Z2ggcmVhZCgpIGFuZCB3cml0ZSgpIGNhbGxzLlxuIDIxNDpcdFxuIDIxNTpcdFx0ICBTYXkgXCYjMzQ7eVwmIzM0OyB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgXCYjMzQ7bVwmIzM0OyB0byBidWlsZCBhXG4gMjE2Olx0XHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFwmIzM0O2dhZGdldGZzXCYjMzQ7LlxuIDIxNzpcdFxuIDIxODpcdGNvbmZpZyBVU0JfRlVOQ1RJT05GU1xuIDIxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7RnVuY3Rpb24gRmlsZXN5c3RlbVwmIzM0O1xuIDIyMDpcdFx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcbiAyMjE6XHRcdHNlbGVjdCBVU0JfRl9GU1xuIDIyMjpcdFx0c2VsZWN0IFVTQl9GVU5DVElPTkZTX0dFTkVSSUMgaWYgIShVU0JfRlVOQ1RJT05GU19FVEggfHwgVVNCX0ZVTkNUSU9ORlNfUk5ESVMpXG4gMjIzOlx0XHRoZWxwXG4gMjI0Olx0XHQgIFRoZSBGdW5jdGlvbiBGaWxlc3lzdGVtIChGdW5jdGlvbkZTKSBsZXRzIG9uZSBjcmVhdGUgVVNCXG4gMjI1Olx0XHQgIGNvbXBvc2l0ZSBmdW5jdGlvbnMgaW4gdXNlciBzcGFjZSBpbiB0aGUgc2FtZSB3YXkgR2FkZ2V0RlNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTUwNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipOYXZpZ2F0aW5nIHRoZSBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gYFVTQl9HQURHRVRGU2AgaGVyZS4gSSBrbm93IGl0JiMzOTtzIGEgY29uZmlndXJhdGlvbiBvcHRpb24sIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoZSBicm9hZGVyIFVTQiBnYWRnZXQgc3lzdGVtLiBSaWdodCwgYFVTQl9HQURHRVRgIGlzIHRoZSBwYXJlbnQsIHRoZSBvdmVyYXJjaGluZyBmcmFtZXdvcmsuIE5vdywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgd2hhdCBlbmFibGVzIG9yIGRpc2FibGVzIGBVU0JfR0FER0VURlNgLCBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRlcGVuZGVuY2llcy4gSSBzaG91bGQgbG9vayBhdCBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgc2hvdWxkIHJlc2lkZS4gQWgsIEkgc2VlIGl0ISBXaGlsZSB0aGVyZSBpc24mIzM5O3QgYSBkaXJlY3QgYGRlcGVuZHMgb25gIGNsYXVzZSBsaXN0ZWQgZm9yIGBVU0JfR0FER0VURlNgIGl0c2VsZiwgaXQmIzM5O3MgY2xlYXJseSBuZXN0ZWQgd2l0aGluIGFuIGBpZiBVU0JfR0FER0VUYCBibG9jay4gVGhlcmVmb3JlLCB0aGUgZ2FkZ2V0IGZlYXR1cmUgd2lsbCBiZSBlbmFibGVkLCB3aGVuIHRoZSBgVVNCX0dBREdFVGAgcGFyZW50IGlzIGFsc28gZW5hYmxlZC4gTWFrZXMgcGVyZmVjdCBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpZiBVU0JfR0FER0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg0OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gVVNCIGdhZGdldCBkcml2ZXJzLCBzcGVjaWZpY2FsbHkgaW4gdGhlIGxlZ2FjeSBmcmFtZXdvcmsuIFRoZSBmaXJzdCBwbGFjZSBJJiMzOTttIGdvaW5nIHRvIGxvb2sgaXMgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBsZWdhY3kgZ2FkZ2V0IGRyaXZlciBkaXJlY3RvcnkuIFRoaXMgaXMgc3RhbmRhcmQgb3BlcmF0aW5nIHByb2NlZHVyZSwgYXMgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0sIGFuZCB0aGV5JiMzOTtsbCBnaXZlIG1lIGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiB0aGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhpcyBwYXJ0IG9mIHRoZSBVU0IgZ2FkZ2V0IHN1YnN5c3RlbS4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgZ3Jhc3AgdGhlIHJlbGV2YW50IGZlYXR1cmVzIGFuZCB0aGVpciBjb25maWd1cmF0aW9uIHBvaW50cy4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIHNvbGlkIGdyb3VuZGluZyBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGFjdHVhbCBkcml2ZXIgY29kZSBpZiBuZWVkZWQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgR2FkZ2V0IHN1cHBvcnQgb24gYSBzeXN0ZW0gaW52b2x2ZXNcbiAgIDQ6XHQjICAgIChhKSBhIHBlcmlwaGVyYWwgY29udHJvbGxlciwgYW5kXG4gICA1Olx0IyAgICAoYikgdGhlIGdhZGdldCBkcml2ZXIgdXNpbmcgaXQuXG4gICA2Olx0I1xuICAgNzpcdCMgTk9URTogIEdhZGdldCBzdXBwb3J0ICoqIERPRVMgTk9UICoqIGRlcGVuZCBvbiBob3N0LXNpZGUgQ09ORklHX1VTQiAhIVxuICAgODpcdCNcbiAgIDk6XHQjICAtIEhvc3Qgc3lzdGVtcyAobGlrZSBQQ3MpIG5lZWQgQ09ORklHX1VTQiAod2l0aCBcJiMzNDtBXCYjMzQ7IGphY2tzKS5cbiAgMTA6XHQjICAtIFBlcmlwaGVyYWxzIChsaWtlIFBEQXMpIG5lZWQgQ09ORklHX1VTQl9HQURHRVQgKHdpdGggXCYjMzQ7QlwmIzM0OyBqYWNrcykuXG4gIDExOlx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxuICAxMjpcdCNcbiAgMTM6XHQjIFdpdGggaGVscCBmcm9tIGEgc3BlY2lhbCB0cmFuc2NlaXZlciBhbmQgYSBcJiMzNDtNaW5pLUFCXCYjMzQ7IGphY2ssIHN5c3RlbXMgd2l0aFxuICAxNDpcdCMgYm90aCBraW5kcyBvZiBjb250cm9sbGVyIGNhbiBhbHNvIHN1cHBvcnQgXCYjMzQ7VVNCIE9uLXRoZS1Hb1wmIzM0OyAoQ09ORklHX1VTQl9PVEcpLlxuICAxNTpcdCNcbiAgMTY6XHQjIEEgTGludXggXCYjMzQ7R2FkZ2V0IERyaXZlclwmIzM0OyB0YWxrcyB0byB0aGUgVVNCIFBlcmlwaGVyYWwgQ29udHJvbGxlclxuICAxNzpcdCMgZHJpdmVyIHRocm91Z2ggdGhlIGFic3RyYWN0IFwmIzM0O2dhZGdldFwmIzM0OyBBUEkuICBTb21lIG90aGVyIG9wZXJhdGluZ1xuICAxODpcdCMgc3lzdGVtcyBjYWxsIHRoZXNlIFwmIzM0O2NsaWVudFwmIzM0OyBkcml2ZXJzLCBvZiB3aGljaCBcJiMzNDtjbGFzcyBkcml2ZXJzXCYjMzQ7XG4gIDE5Olx0IyBhcmUgYSBzdWJzZXQgKGltcGxlbWVudGluZyBhIFVTQiBkZXZpY2UgY2xhc3Mgc3BlY2lmaWNhdGlvbikuXG4gIDIwOlx0IyBBIGdhZGdldCBkcml2ZXIgaW1wbGVtZW50cyBvbmUgb3IgbW9yZSBVU0IgZnVuY3Rpb25zIHVzaW5nXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIyOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0MjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSwgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgaW5zdGluY3QgaXMgdG8gaGVhZCBzdHJhaWdodCB0byBgZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgKmtub3cqIHRoZSBoZWFydCBvZiB0aGUgVVNCIGdhZGdldCBkcml2ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgZm91bmQuIFRoaXMgaXMgd2hlcmUgSSBjYW4gZXhwZWN0IHRvIGZpbmQgYWxsIHRoZSBtZW51IGVudHJpZXMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kLCBjb25maWd1cmUsIGFuZCB0cm91Ymxlc2hvb3QgdGhlIGdhZGdldCBmdW5jdGlvbmFsaXR5LiBJdCYjMzk7cyB0aGUgY2VudHJhbCBodWIgZm9yIGRlY2lkaW5nIHdoYXQgVVNCIGdhZGdldCBmZWF0dXJlcyBhcmUgYnVpbHQgaW50byB0aGUga2VybmVsLCBidWlsdCBhcyBtb2R1bGVzLCBvciBjb21wbGV0ZWx5IGRpc2FibGVkLiBJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyBteXNlbGYgdG8gbmF2aWdhdGUgdGhlIHN0cnVjdHVyZSwgbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IGBjb25maWdgIG9wdGlvbnMgZm9yIHRoaW5ncyBsaWtlIHNwZWNpZmljIGdhZGdldCBmdW5jdGlvbnMgKGUuZy4sIG1hc3Mgc3RvcmFnZSwgbmV0d29yaywgYXVkaW8pLCBjb21wb3NpdGUgZGV2aWNlcywgYW5kIGFueSBvdGhlciByZWxldmFudCBwZXJpcGhlcmFscy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGNvbmZsaWN0cyB0b28sIGFuZCBkZXBlbmRlbmNpZXMgdG8gc2VlIGhvdyBmZWF0dXJlcyBpbnRlcmFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQjXG4gICAzOlx0IyBVU0IgR2FkZ2V0IHN1cHBvcnQgb24gYSBzeXN0ZW0gaW52b2x2ZXNcbiAgIDQ6XHQjICAgIChhKSBhIHBlcmlwaGVyYWwgY29udHJvbGxlciwgYW5kXG4gICA1Olx0IyAgICAoYikgdGhlIGdhZGdldCBkcml2ZXIgdXNpbmcgaXQuXG4gICA2Olx0I1xuICAgNzpcdCMgTk9URTogIEdhZGdldCBzdXBwb3J0ICoqIERPRVMgTk9UICoqIGRlcGVuZCBvbiBob3N0LXNpZGUgQ09ORklHX1VTQiAhIVxuICAgODpcdCNcbiAgIDk6XHQjICAtIEhvc3Qgc3lzdGVtcyAobGlrZSBQQ3MpIG5lZWQgQ09ORklHX1VTQiAod2l0aCBcJiMzNDtBXCYjMzQ7IGphY2tzKS5cbiAgMTA6XHQjICAtIFBlcmlwaGVyYWxzIChsaWtlIFBEQXMpIG5lZWQgQ09ORklHX1VTQl9HQURHRVQgKHdpdGggXCYjMzQ7QlwmIzM0OyBqYWNrcykuXG4gIDExOlx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxuICAxMjpcdCNcbiAgMTM6XHQjIFdpdGggaGVscCBmcm9tIGEgc3BlY2lhbCB0cmFuc2NlaXZlciBhbmQgYSBcJiMzNDtNaW5pLUFCXCYjMzQ7IGphY2ssIHN5c3RlbXMgd2l0aFxuICAxNDpcdCMgYm90aCBraW5kcyBvZiBjb250cm9sbGVyIGNhbiBhbHNvIHN1cHBvcnQgXCYjMzQ7VVNCIE9uLXRoZS1Hb1wmIzM0OyAoQ09ORklHX1VTQl9PVEcpLlxuICAxNTpcdCNcbiAgMTY6XHRcbiAgMTc6XHRtZW51Y29uZmlnIFVTQl9HQURHRVRcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBHYWRnZXQgU3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0c2VsZWN0IFVTQl9DT01NT05cbiAgMjA6XHRcdHNlbGVjdCBOTFNcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgIFVTQiBpcyBhIGhvc3QvZGV2aWNlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgaG9zdCAoc3VjaCBhcyBhXG4gIDIzOlx0XHQgICBQQykgY29udHJvbGxpbmcgdXAgdG8gMTI3IHBlcmlwaGVyYWwgZGV2aWNlcy5cbiAgMjQ6XHRcdCAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDpcbiAgMjU6XHRcdCAgIHlvdSBjYW4mIzM5O3QgY29ubmVjdCBhIFwmIzM0O3RvLXRoZS1ob3N0XCYjMzQ7IGNvbm5lY3RvciB0byBhIHBlcmlwaGVyYWwuXG4gIDI2Olx0XG4gIDI3Olx0XHQgICBMaW51eCBjYW4gcnVuIGluIHRoZSBob3N0LCBvciBpbiB0aGUgcGVyaXBoZXJhbC4gIEluIGJvdGggY2FzZXNcbiAgMjg6XHRcdCAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmVcbiAgMjk6XHRcdCAgIHRhbGtpbmcgdG8gaXQuICBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBvZnRlbiBkaXNjcmV0ZSBzaWxpY29uLFxuICAzMDpcdFx0ICAgb3IgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgQ1BVIGluIGEgbWljcm9jb250cm9sbGVyLiAgVGhlIG1vcmVcbiAgMzE6XHRcdCAgIGZhbWlsaWFyIGhvc3Qgc2lkZSBjb250cm9sbGVycyBoYXZlIG5hbWVzIGxpa2UgXCYjMzQ7RUhDSVwmIzM0OywgXCYjMzQ7T0hDSVwmIzM0OyxcbiAgMzI6XHRcdCAgIG9yIFwmIzM0O1VIQ0lcJiMzNDssIGFuZCBhcmUgdXN1YWxseSBpbnRlZ3JhdGVkIGludG8gc291dGhicmlkZ2VzIG9uIFBDXG4gIDMzOlx0XHQgICBtb3RoZXJib2FyZHMuXG4gIDM0Olx0XG4gIDM1Olx0XHQgICBFbmFibGUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gTGludXggaW5zaWRlXG4gIDM2Olx0XHQgICBhIFVTQiBwZXJpcGhlcmFsIGRldmljZS4gIENvbmZpZ3VyZSBvbmUgaGFyZHdhcmUgZHJpdmVyIGZvciB5b3VyXG4gIDM3Olx0XHQgICBwZXJpcGhlcmFsL2RldmljZSBzaWRlIGJ1cyBjb250cm9sbGVyLCBhbmQgYSBcJiMzNDtnYWRnZXQgZHJpdmVyXCYjMzQ7IGZvclxuICAzODpcdFx0ICAgeW91ciBwZXJpcGhlcmFsIHByb3RvY29sLiAgKElmIHlvdSB1c2UgbW9kdWxhciBnYWRnZXQgZHJpdmVycyxcbiAgMzk6XHRcdCAgIHlvdSBtYXkgY29uZmlndXJlIG1vcmUgdGhhbiBvbmUuKVxuICA0MDpcdFxuICA0MTpcdFx0ICAgSWYgaW4gZG91YnQsIHNheSBcJiMzNDtOXCYjMzQ7IGFuZCBkb24mIzM5O3QgZW5hYmxlIHRoZXNlIGRyaXZlcnM7IG1vc3QgcGVvcGxlXG4gIDQyOlx0XHQgICBkb24mIzM5O3QgaGF2ZSB0aGlzIGtpbmQgb2YgaGFyZHdhcmUgKGV4Y2VwdCBtYXliZSBpbnNpZGUgTGludXggUERBcykuXG4gIDQzOlx0XG4gIDQ0Olx0XHQgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy9nYWRnZXRcdTAwM2UgYW5kXG4gIDQ1Olx0XHQgICB0aGUga2VybmVsIGRvY3VtZW50YXRpb24gZm9yIHRoaXMgQVBJLlxuICA0NjpcdFxuICA0NzpcdGlmIFVTQl9HQURHRVRcbiAgNDg6XHRcbiAgNDk6XHRjb25maWcgVVNCX0dBREdFVF9ERUJVR1xuICA1MDpcdFx0Ym9vbCBcJiMzNDtEZWJ1Z2dpbmcgbWVzc2FnZXMgKERFVkVMT1BNRU5UKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgVVNCIEdhZGdldCBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgVVNCIGdhZGdldCBjb25maWd1cmF0aW9uLiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgdGhlIGVzc2VudGlhbHMgZW5hYmxlZDogYFVTQl9HQURHRVRgIGFuZCBgVVNCX0dBREdFVEZTYC4gVGhvc2UgYXJlIHRoZSBjb3JlIGNvbmZpZ3MgSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlLiBOb3csIGZvciB0ZXN0aW5nLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCwgYFVTQl9EVU1NWV9IQ0RgIGlzIHVzdWFsbHkgbmVjZXNzYXJ5IHRvIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBob3N0IGNvbnRyb2xsZXIuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSYjMzk7bGwgcXVpY2tseSB2ZXJpZnkgdGhhdCB0aGUgYFVTQl9EVU1NWV9IQ0RgIG9wdGlvbiBpcyBhY3R1YWxseSBhdmFpbGFibGUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O2xsIGNoZWNrIGluIHRoZSBjb25maWd1cmF0aW9uIG1lbnUuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gYXZvaWQgd2FzdGluZyB0aW1lIGRlYnVnZ2luZyBpc3N1ZXMgdGhhdCBzdGVtIGZyb20gYSBtaXNzaW5nIGR1bW15IGhvc3QgY29udHJvbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9EVU1NWV9IQ0QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnPTQyMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jZG5zMi9LY29uZmlnXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnLTQyNy1cbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZzo0Mjg6Y29uZmlnIFVTQl9EVU1NWV9IQ0RcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZy00MjktXHR0cmlzdGF0ZSBcJiMzNDtEdW1teSBIQ0QgKERFVkVMT1BNRU5UKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODYxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBVU0IgR2FkZ2V0IEZyYW1ld29yayoqCgpPa2F5LCBzbyBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGUgVVNCIGdhZGdldCBmcmFtZXdvcmssIGFuZCBJJiMzOTttIHByZXR0eSBzdXJlIGBVU0JfRFVNTVlfSENEYCBpcyB0aGUgZHVtbXkgSENEIGltcGxlbWVudGF0aW9uIHVzZWQgc3BlY2lmaWNhbGx5IGZvciB0ZXN0aW5nIGdhZGdldHMuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBhcm91bmQgdGhlIGBnYWRnZXRmc191bmJpbmRgIGZ1bmN0aW9uLiBJICp0aGluayogdGhhdCYjMzk7cyB0aGUgY2VudHJhbCBwb2ludCwgdGhlIHN5bWJvbCB0aGF0IHRyaWdnZXJzIHRoZSB1bmJpbmRpbmcgcHJvY2Vzcy4gTm93LCBhIHNsaWdodCB3cmlua2xlLi4uIGlzbiYjMzk7dCBgZ2FkZ2V0ZnNfdW5iaW5kYCBkZWNsYXJlZCBhcyBgc3RhdGljYD8gVGhhdCBjb3VsZCBjb21wbGljYXRlIHRoaW5ncyBpZiBJJiMzOTttIHRyeWluZyB0bywgc2F5LCBkaXJlY3RseSBjYWxsIGl0IGZyb20gZWxzZXdoZXJlLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBzb3VyY2UgY29kZSBhZ2FpbiB0byB2ZXJpZnkgbXkgdW5kZXJzdGFuZGluZy4gSSYjMzk7bGwgaGVhZCBiYWNrIHRvIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0ZnNfdW5iaW5kJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNjM5PXN0YXRpYyB2b2lkXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTY0MDpnYWRnZXRmc191bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY0MS17XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE2NzE9c3RhdGljIGludCBnYWRnZXRmc19iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3MDUtZW5vbWVtOlxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3MDY6XHRnYWRnZXRmc191bmJpbmQgKGdhZGdldCk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTcwNy1cdHJldHVybiAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xNzQ5PXN0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgZ2FkZ2V0ZnNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzUxLVx0LmJpbmRcdFx0PSBnYWRnZXRmc19iaW5kLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3NTI6XHQudW5iaW5kXHRcdD0gZ2FkZ2V0ZnNfdW5iaW5kLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NTMtXHQuc2V0dXBcdFx0PSBnYWRnZXRmc19zZXR1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ2MQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyB0aGUgYGdhZGdldGZzX3VuYmluZGAgRnVuY3Rpb24qKgoKT2theSwgc28gdGhlIHByb21wdCBpcyB1cmdpbmcgdXMgdG8gbGVhbiB0b3dhcmRzIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeSBwb2ludHMgcmF0aGVyIHRoYW4gaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMuIFRoZSBnb2FsLCBJJiMzOTttIGFzc3VtaW5nLCBpcyBiZXR0ZXIgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGZvciBmdXR1cmUgbW9kaWZpY2F0aW9ucyBvciBleHRlbnNpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgYWJvdXQgYGdhZGdldGZzX3VuYmluZGAuIEkga25vdyBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCYjMzk7cyBhY3R1YWxseSBpbmxpbmVkLiBJdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgYC51bmJpbmQgPSBnYWRnZXRmc191bmJpbmRgLCB3aGljaCAqc2hvdWxkKiBtZWFuIGl0ICpjYW5ub3QqIGJlIGZ1bGx5IGlubGluZWQgYmVjYXVzZSBpdHMgYWRkcmVzcyBpcyBiZWluZyB0YWtlbi4gVGhhdCBhbHNvIG1lYW5zIGl0ICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIHNvIGl0JiMzOTtzIG5vdCBhIGNvbXBsZXRlIGlubGluZSBzaXR1YXRpb24uCgpIb3dldmVyLCBpZiB3ZSB0cnVseSB3YW50IHRvIGNyZWF0ZSBhICpub24tc3RhdGljKiBlbnRyeSBwb2ludCwgd2UgY291bGQgdXNlIGFuIGV4aXN0aW5nIGZ1bmN0aW9uLiBMZXQmIzM5O3MgbG9vayBhdCBgZGV2X3JlbGVhc2VgIGFzIGEgcG9zc2libGUgYWx0ZXJuYXRpdmUgb3IgYGRldl9jb25maWdgLiBMZXQgbWUgZ28gY2hlY2sgYGRldl9yZWxlYXNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTExOTA9c3RhdGljIGludFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjExOTE6ZGV2X3JlbGVhc2UgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZClcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xMTkyLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTkzND1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTk0MS1cdC51bmxvY2tlZF9pb2N0bCA9IGdhZGdldF9kZXZfaW9jdGwsXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTk0MjpcdC5yZWxlYXNlID1cdGRldl9yZWxlYXNlLFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5NDMtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA0MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIERyaXZlciBVbnJlZ2lzdHJhdGlvbiBpbiB0aGUgVVNCIEdhZGdldCBTdWJzeXN0ZW0qKgoKQWxyaWdodCwgc28gYGRldl9yZWxlYXNlYCBpcywgb2YgY291cnNlLCBzdGF0aWMuIFRoYXQmIzM5O3MgYSBnaXZlbi4gQnV0IG5vdywgbXkgbWluZCYjMzk7cyBqdW1wZWQgdG8gYSByZWxhdGVkIGZ1bmN0aW9uLCBgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcmAuIFdoZXJlIGlzICp0aGF0KiBkZWZpbmVkPyBBaCwgcmlnaHQsIGluIGBkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuY2AuIE9rYXksIGdvb2QuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyYCBub3cuIExldCYjMzk7cyBzZWUgaG93IHRoZSBkcml2ZXIgdW5yZWdpc3RyYXRpb24gaXMgaGFuZGxlZCBpbiB0aGF0IGNvcmUgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGF0IGZ1bmN0aW9uLCB0aGUgc3RhdGljIGBkZXZfcmVsZWFzZWAgYW5kIHRoZSB3aG9sZSBnYWRnZXQgZHJpdmVyIGxpZmVjeWNsZS4gVGhpcyBtYXkgZ2l2ZSBtZSBzb21lIGluc2lnaHQgdG8gdGhlIHN0YXRpYyBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMjI6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jPTE3Nzc9RVhQT1JUX1NZTUJPTF9HUEwodXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXJfb3duZXIpO1xuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmMtMTc3OC1cbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jOjE3Nzk6aW50IHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpkcml2ZXIpXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYy0xNzgwLXtcbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYy0xNzg2LX1cbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jOjE3ODc6RVhQT1JUX1NZTUJPTF9HUEwodXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcik7XG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYy0xNzg4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAyMjozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTIyCgkJCQkJCQlvdXRwdXQ6IDEzNAoJCQkJCQkJdGhvdWdodHM6IDQzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdhZGdldEZTIFVuYmluZCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgZ2FkZ2V0ZnNfdW5iaW5kYCBmdW5jdGlvbiwgYW5kIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIGl0LiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIGFib3V0IGVudHJ5IHBvaW50cywgYW5kIGB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyYCBzZWVtZWQgbGlrZSBhIGdvb2QsIG5vbi1zdGF0aWMgb3B0aW9uLiBJIHdhcyBhbHNvIGNvbnNpZGVyaW5nIGB1c2JfZXBfZGVxdWV1ZWAgYW5kIGB1c2JfZXBfZnJlZV9yZXF1ZXN0YCwgYXMgdGhleSYjMzk7cmUgY2xlYXJseSBwYXJ0IG9mIHRoZSBjbGVhbnVwIHByb2Nlc3MuIFRoZW4gSSByZWFsaXplZCBgZ2FkZ2V0ZnNfdW5iaW5kYCwgZXZlbiB0aG91Z2ggaXQgKmlzKiBzdGF0aWMsIGlzIGFzc2lnbmVkIHRvIGEgZnVuY3Rpb24gcG9pbnRlciwgd2hpY2ggbWVhbnMgaXQgd29uJiMzOTt0IGJlIGlubGluZWQuIFRoYXQgbWVhbnMgaXQmIzM5O2xsIHNob3cgdXAgaW4gc3RhY2sgdHJhY2VzLCBzbyBpbmNsdWRpbmcgaXQgaXMgcGVyZmVjdGx5IGFjY2VwdGFibGUuCgpJJiMzOTt2ZSBkZWNpZGVkIHRvIGluY2x1ZGUgYHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXJgIGFuZCBgZ2FkZ2V0ZnNfdW5iaW5kYC4KCk5vdywgbGV0IG1lIHJldmlldyB0aGUgcHJvcG9zZWQgcGF0Y2ggYWdhaW4uIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIGNyaXRpY2FsIGlzc3VlIGhlcmUsIHByZXZlbnRpbmcgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIG9yIGEgc2ltaWxhciBtZW1vcnkgcHJvYmxlbS4gSXQmIzM5O3MgZXNzZW50aWFsbHkgZGVxdWV1aW5nIHRoZSByZXF1ZXN0IGJlZm9yZSBpdCYjMzk7cyBmcmVlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoaXMgcGF0aCBpcyByZWFjaGFibGUgdGhyb3VnaCBgZGV2X3JlbGVhc2VgLCB3aGljaCBjYWxscyBgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcmAsIGFuZCBmaW5hbGx5LCBgZ2FkZ2V0ZnNfdW5iaW5kYC4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBVU0JfR0FER0VUYCwgYFVTQl9HQURHRVRGU2AsIGFuZCBgVVNCX0RVTU1ZX0hDRGAsIHdoaWNoIHdpbGwgbGlrZWx5IGJlIGltcG9ydGFudCBmb3IgdGVzdGluZy4gSSYjMzk7bSBzYXRpc2ZpZWQuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDIyOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7LAogICAgJiMzNDtVU0JfRFVNTVlfSENEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0ZnNfdW5iaW5kJiMzNDssCiAgICAmIzM0O3VzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgaW4gdGhlIGdhZGdldGZzIHVuYmluZCBwYXRoIGJ5IGV4cGxpY2l0bHkgZGVxdWV1aW5nIHRoZSBlbmRwb2ludCAwIHJlcXVlc3QgYmVmb3JlIGZyZWVpbmcgaXQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugd2hlbiBjbG9zaW5nIHRoZSBnYWRnZXRmcyBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoIHRyaWdnZXJzIHRoZSB1bmJpbmQgY2FsbGJhY2suIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7LAogICAgJiMzNDtVU0JfRFVNTVlfSENEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0ZnNfdW5iaW5kJiMzNDssCiAgICAmIzM0O3VzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgaW4gdGhlIGdhZGdldGZzIHVuYmluZCBwYXRoIGJ5IGV4cGxpY2l0bHkgZGVxdWV1aW5nIHRoZSBlbmRwb2ludCAwIHJlcXVlc3QgYmVmb3JlIGZyZWVpbmcgaXQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugd2hlbiBjbG9zaW5nIHRoZSBnYWRnZXRmcyBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoIHRyaWdnZXJzIHRoZSB1bmJpbmQgY2FsbGJhY2suIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MTIuMzU3OTY2MTQ0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0ODMxNjM5MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0dBREdFVEZTXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2FkZ2V0ZnNfdW5iaW5kXCIsXG4gICAgXCJ1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgaW4gdGhlIGdhZGdldGZzIHVuYmluZCBwYXRoIGJ5IGV4cGxpY2l0bHkgZGVxdWV1aW5nIHRoZSBlbmRwb2ludCAwIHJlcXVlc3QgYmVmb3JlIGZyZWVpbmcgaXQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugd2hlbiBjbG9zaW5nIHRoZSBnYWRnZXRmcyBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoIHRyaWdnZXJzIHRoZSB1bmJpbmQgY2FsbGJhY2suIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDoxMi4zNTc5NzUzNzVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODIzMjAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFiNDM4OGYxNWQxMjMyNGFhNzNjYzVjNDdlMTNjYjM4ZjUxNmZkODlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAyMjozNDoxMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcXG5pbmRleCBkODdhOGFiNTE1MTA3Li4zOGJjZGVhZmU3MjhiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xcbisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xcbkBAIC0xNjUyLDEzICsxNjUyLDE2IEBAIGdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldClcXG4gXFx0fVxcbiBcXHRzcGluX3VubG9ja19pcnEgKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbiBcXG4rXFx0aWYgKGRldi1cXHUwMDNlcmVxKSB7XFxuK1xcdFxcdHVzYl9lcF9kZXF1ZXVlKGdhZGdldC1cXHUwMDNlZXAwLCBkZXYtXFx1MDAzZXJlcSk7XFxuK1xcdFxcdHVzYl9lcF9mcmVlX3JlcXVlc3QoZ2FkZ2V0LVxcdTAwM2VlcDAsIGRldi1cXHUwMDNlcmVxKTtcXG4rXFx0XFx0ZGV2LVxcdTAwM2VyZXEgPSBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRkZXN0cm95X2VwX2ZpbGVzIChkZXYpO1xcbiBcXHRnYWRnZXQtXFx1MDAzZWVwMC1cXHUwMDNlZHJpdmVyX2RhdGEgPSBOVUxMO1xcbiBcXHRzZXRfZ2FkZ2V0X2RhdGEgKGdhZGdldCwgTlVMTCk7XFxuIFxcbi1cXHQvKiB3ZSd2ZSBhbHJlYWR5IGJlZW4gZGlzY29ubmVjdGVkIC4uLiBubyBpL28gaXMgYWN0aXZlICovXFxuLVxcdGlmIChkZXYtXFx1MDAzZXJlcSlcXG4tXFx0XFx0dXNiX2VwX2ZyZWVfcmVxdWVzdCAoZ2FkZ2V0LVxcdTAwM2VlcDAsIGRldi1cXHUwMDNlcmVxKTtcXG4gXFx0REJHIChkZXYsIFxcXCIlcyBkb25lXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuIFxcdHB1dF9kZXYgKGRldik7XFxuIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MTIuODg3MzIxMTMxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NTY5NTM3OTgzNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0dBREdFVEZTXCIsXG4gICAgXCJVU0JfRFVNTVlfSENEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2FkZ2V0ZnNfdW5iaW5kXCIsXG4gICAgXCJ1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaXNzdWUgaW4gdGhlIGdhZGdldGZzIHVuYmluZCBwYXRoIGJ5IGV4cGxpY2l0bHkgZGVxdWV1aW5nIHRoZSBlbmRwb2ludCAwIHJlcXVlc3QgYmVmb3JlIGZyZWVpbmcgaXQuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2Ugd2hlbiBjbG9zaW5nIHRoZSBnYWRnZXRmcyBmaWxlIGRlc2NyaXB0b3IsIHdoaWNoIHRyaWdnZXJzIHRoZSB1bmJpbmQgY2FsbGJhY2suIEl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYjQzODhmMTVkMTIzMjRhYTczY2M1YzQ3ZTEzY2IzOGY1MTZmZDg5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAyMjozNDoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xuaW5kZXggZDg3YThhYjUxNTEwNy4uMzhiY2RlYWZlNzI4YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG5AQCAtMTY1MiwxMyArMTY1MiwxNiBAQCBnYWRnZXRmc191bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXG4gXHR9XG4gXHRzcGluX3VubG9ja19pcnEgKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbiBcbitcdGlmIChkZXYtXHUwMDNlcmVxKSB7XG4rXHRcdHVzYl9lcF9kZXF1ZXVlKGdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuK1x0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0KGdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO1xuK1x0XHRkZXYtXHUwMDNlcmVxID0gTlVMTDtcbitcdH1cbitcbiBcdGRlc3Ryb3lfZXBfZmlsZXMgKGRldik7XG4gXHRnYWRnZXQtXHUwMDNlZXAwLVx1MDAzZWRyaXZlcl9kYXRhID0gTlVMTDtcbiBcdHNldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0LCBOVUxMKTtcbiBcbi1cdC8qIHdlJ3ZlIGFscmVhZHkgYmVlbiBkaXNjb25uZWN0ZWQgLi4uIG5vIGkvbyBpcyBhY3RpdmUgKi9cbi1cdGlmIChkZXYtXHUwMDNlcmVxKVxuLVx0XHR1c2JfZXBfZnJlZV9yZXF1ZXN0IChnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtcbiBcdERCRyAoZGV2LCBcIiVzIGRvbmVcXG5cIiwgX19mdW5jX18pO1xuIFx0cHV0X2RldiAoZGV2KTtcbiB9XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDoxMi44ODczMjMzNjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Njk4NjEyMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBHYWRnZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0J3MgdHdlYWtpbmcgYGdhZGdldGZzX3VuYmluZGAgaW4gYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY2AuIEltbWVkaWF0ZWx5LCBteSBleHBlcnQgYnJhaW4ga2lja3MgaW4gYW5kIHNlZXMgd2hhdCdzIGhhcHBlbmluZy4gVGhleSdyZSBhZGRpbmcgYHVzYl9lcF9kZXF1ZXVlKGdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO2AgYmVmb3JlIHRoZSBgdXNiX2VwX2ZyZWVfcmVxdWVzdChnYWRnZXQtXHUwMDNlZXAwLCBkZXYtXHUwMDNlcmVxKTtgIGNhbGwsIGFuZCB0aGVuIG51bGxpbmcgb3V0IGBkZXYtXHUwMDNlcmVxYC4gVGhpcyBzbWVsbHMgbGlrZSBhIHRlYXJkb3duIHByb2NlZHVyZSBmb3IgYSBVU0IgZ2FkZ2V0IGRyaXZlciwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgcHJldmVudGluZyByZXNvdXJjZSBsZWFrcyBhbmQgaGFuZGxpbmcgZ3JhY2VmdWwgZGV2aWNlIHJlbW92YWwuXG5cbk5vdywgaG9sZCBvbi4gVGhlIGluc3RydWN0aW9ucyBzYXkgc29tZXRoaW5nIGFib3V0IHJldHVybmluZyBcIldvcnRoRnV6emluZz1mYWxzZVwiIGlmIGl0J3MgKmp1c3QqIGEgdGVhcmRvd24gY2FsbGJhY2sgZm9yIGAucmVtb3ZlYCwgYC5zaHV0ZG93bmAsIG9yIGBwY2lfdW5yZWdpc3Rlcl9kcml2ZXJgIHRoYXQncyBvbmx5IHJ1biBkdXJpbmcgaG90LXVucGx1ZyBvciBzeXNmcyB1bmJpbmQuIFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLCBpcyBgZ2FkZ2V0ZnNfdW5iaW5kYCBvbmUgb2YgKnRob3NlKj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJ20gZ29pbmcgdG8gcXVpY2tseSBmbGlwIGJhY2sgdG8gdGhhdCBgaW5vZGUuY2AgZmlsZSBhbmQgY2hlY2sgdGhlIGNvbnRleHQgYXJvdW5kIGBnYWRnZXRmc191bmJpbmRgLiBJIGtub3cgdGhpcyBraW5kIG9mIGFuYWx5c2lzIGlzIHdoYXQgSSdtIGdyZWF0IGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTc0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MTcuNTg1OTQwNjVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5NTIzNzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2FkZ2V0ZnNfdW5iaW5kXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTYzOT1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNjQwOmdhZGdldGZzX3VuYmluZCAoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldClcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTY0MS17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTY3MT1zdGF0aWMgaW50IGdhZGdldGZzX2JpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzA1LWVub21lbTpcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTcwNjpcXHRnYWRnZXRmc191bmJpbmQgKGdhZGdldCk7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3MDctXFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTc0OT1zdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyIGdhZGdldGZzX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzUxLVxcdC5iaW5kXFx0XFx0PSBnYWRnZXRmc19iaW5kLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxNzUyOlxcdC51bmJpbmRcXHRcXHQ9IGdhZGdldGZzX3VuYmluZCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTc1My1cXHQuc2V0dXBcXHRcXHQ9IGdhZGdldGZzX3NldHVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDoxNy42NTc5MDAxMDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI3NjMwODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIGBnYWRnZXRmc191bmJpbmRgKipcblxuT2theSwgc28gYGdhZGdldGZzX3VuYmluZGAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgdGhyb3VnaCB0aGUgYC51bmJpbmRgIGNhbGxiYWNrLCBwYXJ0IG9mIHRoZSBgZ2FkZ2V0ZnNfZHJpdmVyYC4gSXQncyBhbHNvIHVzZWQgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBgZ2FkZ2V0ZnNfYmluZGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gY2xhcmlmeSB3aGVuIGV4YWN0bHkgdGhpcyBmdW5jdGlvbiBpcyBydW4uIElzIGl0IGxpbWl0ZWQgdG8gaG90LXVucGx1ZyBzY2VuYXJpb3MsIG9yIGRvZXMgaXQgYWxzbyBoYW5kbGUgdW5iaW5kcyB0cmlnZ2VyZWQgdmlhIHN5c2ZzP1xuXG5Ob3csIGNvbnNpZGVyaW5nIFVTQiBnYWRnZXQgYXJjaGl0ZWN0dXJlLCB1bmJpbmRpbmcgY2FuIG9yaWdpbmF0ZSBmcm9tIHVucmVnaXN0ZXJpbmcgdGhlIGdhZGdldCBkcml2ZXIgaXRzZWxmLiBBbmQgdGhhdCBkcml2ZXIgdW5yZWdpc3RyYXRpb24gY2FuIGhhcHBlbiBpbiBhIGZldyBzY2VuYXJpb3M6IHdoZW4gYSBnYWRnZXRmcyBmaWxlIGlzIGNsb3NlZCwgb3Igd2hlbiBnYWRnZXRmcyBpcyB1bm1vdW50ZWQuIEkgbmVlZCB0byBjb25maXJtIGhvdyBgZ2FkZ2V0ZnNfZHJpdmVyYCBpcyByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQsIGJlY2F1c2UgdW5kZXJzdGFuZGluZyB0aG9zZSBwYXRod2F5cyBpcyBjcml0aWNhbCB0byBjb21wcmVoZW5kaW5nIGhvdyBgZ2FkZ2V0ZnNfdW5iaW5kYCBpcyBhY3R1YWxseSBpbnZva2VkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGRyaXZlciBsaWZlY3ljbGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwMDcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MjEuNjg1NTMzOTE5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMzg0NTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldGZzX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTExODA9ZXAwX2Zhc3luYyAoaW50IGYsIHN0cnVjdCBmaWxlICpmZCwgaW50IG9uKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTExODctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjExODg6c3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBnYWRnZXRmc19kcml2ZXI7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTExODktXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTE5MT1kZXZfcmVsZWFzZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTExOTctXFx0aWYgKGRldi1cXHUwMDNlZ2FkZ2V0X3JlZ2lzdGVyZWQpIHtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTE5ODpcXHRcXHR1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyIChcXHUwMDI2Z2FkZ2V0ZnNfZHJpdmVyKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTE5OS1cXHRcXHRkZXYtXFx1MDAzZWdhZGdldF9yZWdpc3RlcmVkID0gZmFsc2U7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTcyOT1nYWRnZXRmc19zdXNwZW5kIChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NDgtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3NDk6c3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBnYWRnZXRmc19kcml2ZXIgPSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NTAtXFx0LmZ1bmN0aW9uXFx0PSAoY2hhciAqKSBkcml2ZXJfZGVzYyxcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xODA0PWRldl9jb25maWcgKHN0cnVjdCBmaWxlICpmZCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwdHIpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTg4MS1cXHRpZiAoZGV2LVxcdTAwM2Voc19jb25maWcpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE4ODI6XFx0XFx0Z2FkZ2V0ZnNfZHJpdmVyLm1heF9zcGVlZCA9IFVTQl9TUEVFRF9ISUdIO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xODgzLVxcdGVsc2VcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTg4NDpcXHRcXHRnYWRnZXRmc19kcml2ZXIubWF4X3NwZWVkID0gVVNCX1NQRUVEX0ZVTEw7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE4ODUtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE4ODY6XFx0dmFsdWUgPSB1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2Z2FkZ2V0ZnNfZHJpdmVyKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTg4Ny1cXHRpZiAodmFsdWUgIT0gMCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDoyMS43NTg5MjM3MzVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODkyOTAxODgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR2FkZ2V0ZnMgRHJpdmVyIFVucmVnaXN0cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZ2FkZ2V0ZnNfZHJpdmVyYCB1bnJlZ2lzdHJhdGlvbiwgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGZyb20gYGRldl9yZWxlYXNlYCwgd2hpY2ggaXMgdGhlIGZpbGUgcmVsZWFzZSBmdW5jdGlvbiBmb3IgdGhlIGdhZGdldGZzIGZpbGUuIFRoYXQgbWVhbnMgYGdhZGdldGZzX3VuYmluZGAgZ2V0cyBleGVjdXRlZCB3aGVuZXZlciBhIHVzZXItc3BhY2UgcHJvY2VzcyBjbG9zZXMgdGhlIGZpbGUgZGVzY3JpcHRvci4gSG1tLCB0aGF0J3Mgbm90IHdoYXQgSSBleHBlY3RlZC4gVGhlIHByb21wdCBzcGVjaWZpY2FsbHkgbWVudGlvbnMgdGVhcmRvd24gY2FsbGJhY2tzIGxpa2UgYC5yZW1vdmVgLCBgLnNodXRkb3duYCwgb3IgYHBjaV91bnJlZ2lzdGVyX2RyaXZlcmAg4oCTIHRoaW5ncyB0aGF0ICpzaG91bGQqIG9ubHkgaGFwcGVuIGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyB1bmJpbmQgb3BlcmF0aW9ucy4gVGhpcyBpcyBkaWZmZXJlbnQ7IGl0J3MgdHJpZ2dlcmVkIGJ5IGEgc3RhbmRhcmQgZmlsZSByZWxlYXNlLCBzb21ldGhpbmcgY29tcGxldGVseSByZWFjaGFibGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gYW5kIGVzcGVjaWFsbHkgZHVyaW5nIGZ1enppbmcuXG5cblJpZ2h0LCBzbyBgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcmAgd2lsbCBjYWxsIHRoZSBgdW5iaW5kYCBjYWxsYmFjay4gT2theSwgbm93IEknbSB0aGlua2luZywgaXMgdGhpcyBgZ2FkZ2V0ZnNfdW5iaW5kYCBldmVuIHdvcnRoIGZ1enppbmc/IEl0ICppcyogYW4gdW5iaW5kIGNhbGxiYWNrLCBzbyBpdCdzIGxpa2VseSBzZW5zaXRpdmUuXG5cblRoaXMgcGF0Y2gsIGl0IGFkZHMgYHVzYl9lcF9kZXF1ZXVlKGdhZGdldC1cdTAwM2VlcDAsIGRldi1cdTAwM2VyZXEpO2AgdG8gZml4IGEgcmVxdWVzdCBiZWluZyBmcmVlZCB3aGlsZSBpdCdzIHN0aWxsIHF1ZXVlZC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgZml4IGFuZCBhZGRyZXNzZXMgYSByZWFsIGJ1ZywgZ3JlYXQhIElzIGl0IGZ1enphYmxlPyBEZWZpbml0ZWx5LiBJdCdzIHRyaWdnZXJlZCBieSBjbG9zaW5nIHRoZSBnYWRnZXRmcyBmaWxlIGRlc2NyaXB0b3IsIGEgcGVyZmVjdGx5IG5vcm1hbCBhbmQgY29tbW9uIGFjdGlvbiBpbiBhbnkgZnV6emluZyBzZXR1cC4gSSBzaG91bGQgZmluZCB0aGUgY29uZmlnIG9wdGlvbnMgYW5kIHRyeSB0byBidWlsZCBhbmQgdGVzdCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTg0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIyOjM0OjI4LjY1MTgyOTMwNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDM1MDI4MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9HQURHRVRGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0xOTA9Y29uZmlnIFVTQl9HX05DTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6MjA2OmNvbmZpZyBVU0JfR0FER0VURlNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA3LVxcdHRyaXN0YXRlIFxcXCJHYWRnZXQgRmlsZXN5c3RlbVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MjguNzU1MzM1OTM5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2NTk5Nzg5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIGRlcGVuZGVuY2llcyBvZiBgVVNCX0dBREdFVEZTYDpcblxuKipJbnZlc3RpZ2F0aW5nIFVTQl9HQURHRVRGUyBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYFVTQl9HQURHRVRGU2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSB3aG9sZSBsYW5kc2NhcGUgb2Ygd2hhdCB0aGlzIG1vZHVsZSByZWxpZXMgb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIga2VybmVsIGNvbXBvbmVudHMgYXJlIHJlcXVpcmVkIGZvciBgVVNCX0dBREdFVEZTYCB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgY3JpdGljYWwgZm9yIG1ha2luZyBhbnkgY2hhbmdlcyBvciBkZWJ1Z2dpbmcgaXNzdWVzIHJlbGF0ZWQgdG8gaXQuXG5cbkZpcnN0LCBJJ2xsIG5lZWQgdG8gbG9vayBpbnRvIGl0cyBpbmNsdWRlIGZpbGVzIGFuZCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBuZWNlc3NhcnkgZm9yIGl0cyBmdW5jdGlvbmFsaXR5LiBXaGF0IGhlYWRlcnMgZG9lcyBpdCBwdWxsIGluPyBXaGF0IG90aGVyIGRldmljZSBkcml2ZXJzIG9yIHN1YnN5c3RlbXMgZG9lcyBpdCBpbnRlcmFjdCB3aXRoPyBJJ2xsIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBgZ3JlcGAgb3IgYGZpbmRgIG9uIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgdG8gbG9jYXRlIGl0cyBzb3VyY2UgZmlsZXMgYW5kIGRvY3VtZW50YXRpb24uXG5cblRoZW4sIEknbGwgZXhhbWluZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gQXJlIHRoZXJlIHNwZWNpZmljIGhhcmR3YXJlIHBsYXRmb3JtcyBpdCdzIGRlc2lnbmVkIGZvcj8gQXJlIHRoZXJlIHNwZWNpZmljIFVTQiBjb250cm9sbGVyIGRyaXZlcnMgdGhhdCBpdCBpbnRlZ3JhdGVzIHdpdGg/IFVuZGVyc3RhbmRpbmcgdGhlIGNvbmZpZyBvcHRpb25zIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBpdHMgc2NvcGUuXG5cbkkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGl0cyByb2xlLiBJcyBpdCBhIFVTQiBnYWRnZXQgZHJpdmVyIGl0c2VsZj8gQSBjb3JlIGluZnJhc3RydWN0dXJlIGNvbXBvbmVudCBmb3IgZ2FkZ2V0IG1vZGU/IE9yIHNvbWV0aGluZyBpbiBiZXR3ZWVuPyBUaGF0IHdpbGwgZGljdGF0ZSB0aGUgbGV2ZWwgb2YgZGV0YWlsIEkgbmVlZCB0byBnbyBpbnRvLiBJJ20gYWxzbyBtaW5kZnVsIG9mIHBvdGVudGlhbCBjb25mbGljdHMsIGlmIGFueS4gRG9lcyBpdCByZWx5IG9uIHNvbWV0aGluZyB0aGF0IGNvdWxkIGludGVyZmVyZSB3aXRoIG90aGVyIGtlcm5lbCBtb2R1bGVzP1xuXG5JIGFsc28gd2FudCB0byBsb29rIGZvciBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGxpa2UgdGhlIERvY3VtZW50YXRpb24vdXNiL2dhZGdldCBhbmQgRG9jdW1lbnRhdGlvbi91c2IgZGlyZWN0b3JpZXMgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBhbmQgdG8gY3Jvc3MgY2hlY2sgbXkgb2JzZXJ2YXRpb25zLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBtZW50YWwgbW9kZWwgb2YgaG93IGBVU0JfR0FER0VURlNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBVU0IgZ2FkZ2V0IGFyY2hpdGVjdHVyZS4gVGhpcyB3aWxsIGJlIHRoZSBmb3VuZGF0aW9uIGZvciBhbnkgZnVydGhlciBhbmFseXNpcyBvciBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzQ1LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MzIuODIxMzM3ODdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDY6XFx0Y29uZmlnIFVTQl9HQURHRVRGU1xcbiAyMDc6XFx0XFx0dHJpc3RhdGUgXFxcIkdhZGdldCBGaWxlc3lzdGVtXFxcIlxcbiAyMDg6XFx0XFx0aGVscFxcbiAyMDk6XFx0XFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGZpbGVzeXN0ZW0gYmFzZWQgQVBJIHRoYXQgbGV0cyB1c2VyIG1vZGVcXG4gMjEwOlxcdFxcdCAgcHJvZ3JhbXMgaW1wbGVtZW50IGEgc2luZ2xlLWNvbmZpZ3VyYXRpb24gVVNCIGRldmljZSwgaW5jbHVkaW5nXFxuIDIxMTpcXHRcXHQgIGVuZHBvaW50IEkvTyBhbmQgY29udHJvbCByZXF1ZXN0cyB0aGF0IGRvbid0IHJlbGF0ZSB0byBlbnVtZXJhdGlvbi5cXG4gMjEyOlxcdFxcdCAgQWxsIGVuZHBvaW50cywgdHJhbnNmZXIgc3BlZWRzLCBhbmQgdHJhbnNmZXIgdHlwZXMgc3VwcG9ydGVkIGJ5XFxuIDIxMzpcXHRcXHQgIHRoZSBoYXJkd2FyZSBhcmUgYXZhaWxhYmxlLCB0aHJvdWdoIHJlYWQoKSBhbmQgd3JpdGUoKSBjYWxscy5cXG4gMjE0OlxcdFxcbiAyMTU6XFx0XFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcbiAyMTY6XFx0XFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcXFwiZ2FkZ2V0ZnNcXFwiLlxcbiAyMTc6XFx0XFxuIDIxODpcXHRjb25maWcgVVNCX0ZVTkNUSU9ORlNcXG4gMjE5OlxcdFxcdHRyaXN0YXRlIFxcXCJGdW5jdGlvbiBGaWxlc3lzdGVtXFxcIlxcbiAyMjA6XFx0XFx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcXG4gMjIxOlxcdFxcdHNlbGVjdCBVU0JfRl9GU1xcbiAyMjI6XFx0XFx0c2VsZWN0IFVTQl9GVU5DVElPTkZTX0dFTkVSSUMgaWYgIShVU0JfRlVOQ1RJT05GU19FVEggfHwgVVNCX0ZVTkNUSU9ORlNfUk5ESVMpXFxuIDIyMzpcXHRcXHRoZWxwXFxuIDIyNDpcXHRcXHQgIFRoZSBGdW5jdGlvbiBGaWxlc3lzdGVtIChGdW5jdGlvbkZTKSBsZXRzIG9uZSBjcmVhdGUgVVNCXFxuIDIyNTpcXHRcXHQgIGNvbXBvc2l0ZSBmdW5jdGlvbnMgaW4gdXNlciBzcGFjZSBpbiB0aGUgc2FtZSB3YXkgR2FkZ2V0RlNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MzIuODIxNDgwMDJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc4MzkyOTU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gYFVTQl9HQURHRVRGU2AgaGVyZS4gSSBrbm93IGl0J3MgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgYnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgVVNCIGdhZGdldCBzeXN0ZW0uIFJpZ2h0LCBgVVNCX0dBREdFVGAgaXMgdGhlIHBhcmVudCwgdGhlIG92ZXJhcmNoaW5nIGZyYW1ld29yay4gTm93LCB0byByZWFsbHkgdW5kZXJzdGFuZCB3aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYFVTQl9HQURHRVRGU2AsIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGVwZW5kZW5jaWVzLiBJIHNob3VsZCBsb29rIGF0IGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIGxvZ2ljIHNob3VsZCByZXNpZGUuIEFoLCBJIHNlZSBpdCEgV2hpbGUgdGhlcmUgaXNuJ3QgYSBkaXJlY3QgYGRlcGVuZHMgb25gIGNsYXVzZSBsaXN0ZWQgZm9yIGBVU0JfR0FER0VURlNgIGl0c2VsZiwgaXQncyBjbGVhcmx5IG5lc3RlZCB3aXRoaW4gYW4gYGlmIFVTQl9HQURHRVRgIGJsb2NrLiBUaGVyZWZvcmUsIHRoZSBnYWRnZXQgZmVhdHVyZSB3aWxsIGJlIGVuYWJsZWQsIHdoZW4gdGhlIGBVU0JfR0FER0VUYCBwYXJlbnQgaXMgYWxzbyBlbmFibGVkLiBNYWtlcyBwZXJmZWN0IHNlbnNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTA3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDozNi42MDU0MTI5NDlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3MzU2MTk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpZiBVU0JfR0FER0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MzYuNjYyNzgwMzQ1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4NzQwMDkwMzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byBVU0IgZ2FkZ2V0IGRyaXZlcnMsIHNwZWNpZmljYWxseSBpbiB0aGUgbGVnYWN5IGZyYW1ld29yay4gVGhlIGZpcnN0IHBsYWNlIEknbSBnb2luZyB0byBsb29rIGlzIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgbGVnYWN5IGdhZGdldCBkcml2ZXIgZGlyZWN0b3J5LiBUaGlzIGlzIHN0YW5kYXJkIG9wZXJhdGluZyBwcm9jZWR1cmUsIGFzIEtjb25maWcgZmlsZXMgYXJlIHRoZSBoZWFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBhbmQgdGhleSdsbCBnaXZlIG1lIGEgaGlnaC1sZXZlbCBvdmVydmlldyBvZiB0aGUgb3B0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgb3ZlcmFsbCBzdHJ1Y3R1cmUgb2YgdGhpcyBwYXJ0IG9mIHRoZSBVU0IgZ2FkZ2V0IHN1YnN5c3RlbS4gSG9wZWZ1bGx5LCBJJ2xsIGJlIGFibGUgdG8gcXVpY2tseSBncmFzcCB0aGUgcmVsZXZhbnQgZmVhdHVyZXMgYW5kIHRoZWlyIGNvbmZpZ3VyYXRpb24gcG9pbnRzLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgc29saWQgZ3JvdW5kaW5nIGJlZm9yZSBJIGRpdmUgaW50byB0aGUgYWN0dWFsIGRyaXZlciBjb2RlIGlmIG5lZWRlZC4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODQ5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6MzkuNTM2NzkyNDgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjg0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFVTQiBHYWRnZXQgc3VwcG9ydCBvbiBhIHN5c3RlbSBpbnZvbHZlc1xcbiAgIDQ6XFx0IyAgICAoYSkgYSBwZXJpcGhlcmFsIGNvbnRyb2xsZXIsIGFuZFxcbiAgIDU6XFx0IyAgICAoYikgdGhlIGdhZGdldCBkcml2ZXIgdXNpbmcgaXQuXFxuICAgNjpcXHQjXFxuICAgNzpcXHQjIE5PVEU6ICBHYWRnZXQgc3VwcG9ydCAqKiBET0VTIE5PVCAqKiBkZXBlbmQgb24gaG9zdC1zaWRlIENPTkZJR19VU0IgISFcXG4gICA4OlxcdCNcXG4gICA5OlxcdCMgIC0gSG9zdCBzeXN0ZW1zIChsaWtlIFBDcykgbmVlZCBDT05GSUdfVVNCICh3aXRoIFxcXCJBXFxcIiBqYWNrcykuXFxuICAxMDpcXHQjICAtIFBlcmlwaGVyYWxzIChsaWtlIFBEQXMpIG5lZWQgQ09ORklHX1VTQl9HQURHRVQgKHdpdGggXFxcIkJcXFwiIGphY2tzKS5cXG4gIDExOlxcdCMgIC0gU29tZSBzeXN0ZW1zIGhhdmUgYm90aCBraW5kcyBvZiBjb250cm9sbGVycy5cXG4gIDEyOlxcdCNcXG4gIDEzOlxcdCMgV2l0aCBoZWxwIGZyb20gYSBzcGVjaWFsIHRyYW5zY2VpdmVyIGFuZCBhIFxcXCJNaW5pLUFCXFxcIiBqYWNrLCBzeXN0ZW1zIHdpdGhcXG4gIDE0OlxcdCMgYm90aCBraW5kcyBvZiBjb250cm9sbGVyIGNhbiBhbHNvIHN1cHBvcnQgXFxcIlVTQiBPbi10aGUtR29cXFwiIChDT05GSUdfVVNCX09URykuXFxuICAxNTpcXHQjXFxuICAxNjpcXHQjIEEgTGludXggXFxcIkdhZGdldCBEcml2ZXJcXFwiIHRhbGtzIHRvIHRoZSBVU0IgUGVyaXBoZXJhbCBDb250cm9sbGVyXFxuICAxNzpcXHQjIGRyaXZlciB0aHJvdWdoIHRoZSBhYnN0cmFjdCBcXFwiZ2FkZ2V0XFxcIiBBUEkuICBTb21lIG90aGVyIG9wZXJhdGluZ1xcbiAgMTg6XFx0IyBzeXN0ZW1zIGNhbGwgdGhlc2UgXFxcImNsaWVudFxcXCIgZHJpdmVycywgb2Ygd2hpY2ggXFxcImNsYXNzIGRyaXZlcnNcXFwiXFxuICAxOTpcXHQjIGFyZSBhIHN1YnNldCAoaW1wbGVtZW50aW5nIGEgVVNCIGRldmljZSBjbGFzcyBzcGVjaWZpY2F0aW9uKS5cXG4gIDIwOlxcdCMgQSBnYWRnZXQgZHJpdmVyIGltcGxlbWVudHMgb25lIG9yIG1vcmUgVVNCIGZ1bmN0aW9ucyB1c2luZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDozOS41MzY5Mjc4NzJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk2MTU4NDMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoYXQga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZSwgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIE15IGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgdG8gYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEkgKmtub3cqIHRoZSBoZWFydCBvZiB0aGUgVVNCIGdhZGdldCBkcml2ZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgYmUgZm91bmQuIFRoaXMgaXMgd2hlcmUgSSBjYW4gZXhwZWN0IHRvIGZpbmQgYWxsIHRoZSBtZW51IGVudHJpZXMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGF0IEkgbmVlZCB0byB1bmRlcnN0YW5kLCBjb25maWd1cmUsIGFuZCB0cm91Ymxlc2hvb3QgdGhlIGdhZGdldCBmdW5jdGlvbmFsaXR5LiBJdCdzIHRoZSBjZW50cmFsIGh1YiBmb3IgZGVjaWRpbmcgd2hhdCBVU0IgZ2FkZ2V0IGZlYXR1cmVzIGFyZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIGJ1aWx0IGFzIG1vZHVsZXMsIG9yIGNvbXBsZXRlbHkgZGlzYWJsZWQuIEknbSBtZW50YWxseSBwcmVwYXJpbmcgbXlzZWxmIHRvIG5hdmlnYXRlIHRoZSBzdHJ1Y3R1cmUsIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBgY29uZmlnYCBvcHRpb25zIGZvciB0aGluZ3MgbGlrZSBzcGVjaWZpYyBnYWRnZXQgZnVuY3Rpb25zIChlLmcuLCBtYXNzIHN0b3JhZ2UsIG5ldHdvcmssIGF1ZGlvKSwgY29tcG9zaXRlIGRldmljZXMsIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgcGVyaXBoZXJhbHMuIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGNvbmZsaWN0cyB0b28sIGFuZCBkZXBlbmRlbmNpZXMgdG8gc2VlIGhvdyBmZWF0dXJlcyBpbnRlcmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjQyNCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6NDYuNDk4NTE0ODg3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIEdhZGdldCBzdXBwb3J0IG9uIGEgc3lzdGVtIGludm9sdmVzXFxuICAgNDpcXHQjICAgIChhKSBhIHBlcmlwaGVyYWwgY29udHJvbGxlciwgYW5kXFxuICAgNTpcXHQjICAgIChiKSB0aGUgZ2FkZ2V0IGRyaXZlciB1c2luZyBpdC5cXG4gICA2OlxcdCNcXG4gICA3OlxcdCMgTk9URTogIEdhZGdldCBzdXBwb3J0ICoqIERPRVMgTk9UICoqIGRlcGVuZCBvbiBob3N0LXNpZGUgQ09ORklHX1VTQiAhIVxcbiAgIDg6XFx0I1xcbiAgIDk6XFx0IyAgLSBIb3N0IHN5c3RlbXMgKGxpa2UgUENzKSBuZWVkIENPTkZJR19VU0IgKHdpdGggXFxcIkFcXFwiIGphY2tzKS5cXG4gIDEwOlxcdCMgIC0gUGVyaXBoZXJhbHMgKGxpa2UgUERBcykgbmVlZCBDT05GSUdfVVNCX0dBREdFVCAod2l0aCBcXFwiQlxcXCIgamFja3MpLlxcbiAgMTE6XFx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxcbiAgMTI6XFx0I1xcbiAgMTM6XFx0IyBXaXRoIGhlbHAgZnJvbSBhIHNwZWNpYWwgdHJhbnNjZWl2ZXIgYW5kIGEgXFxcIk1pbmktQUJcXFwiIGphY2ssIHN5c3RlbXMgd2l0aFxcbiAgMTQ6XFx0IyBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXIgY2FuIGFsc28gc3VwcG9ydCBcXFwiVVNCIE9uLXRoZS1Hb1xcXCIgKENPTkZJR19VU0JfT1RHKS5cXG4gIDE1OlxcdCNcXG4gIDE2OlxcdFxcbiAgMTc6XFx0bWVudWNvbmZpZyBVU0JfR0FER0VUXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIEdhZGdldCBTdXBwb3J0XFxcIlxcbiAgMTk6XFx0XFx0c2VsZWN0IFVTQl9DT01NT05cXG4gIDIwOlxcdFxcdHNlbGVjdCBOTFNcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgIFVTQiBpcyBhIGhvc3QvZGV2aWNlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgaG9zdCAoc3VjaCBhcyBhXFxuICAyMzpcXHRcXHQgICBQQykgY29udHJvbGxpbmcgdXAgdG8gMTI3IHBlcmlwaGVyYWwgZGV2aWNlcy5cXG4gIDI0OlxcdFxcdCAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDpcXG4gIDI1OlxcdFxcdCAgIHlvdSBjYW4ndCBjb25uZWN0IGEgXFxcInRvLXRoZS1ob3N0XFxcIiBjb25uZWN0b3IgdG8gYSBwZXJpcGhlcmFsLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgICBMaW51eCBjYW4gcnVuIGluIHRoZSBob3N0LCBvciBpbiB0aGUgcGVyaXBoZXJhbC4gIEluIGJvdGggY2FzZXNcXG4gIDI4OlxcdFxcdCAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmVcXG4gIDI5OlxcdFxcdCAgIHRhbGtpbmcgdG8gaXQuICBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBvZnRlbiBkaXNjcmV0ZSBzaWxpY29uLFxcbiAgMzA6XFx0XFx0ICAgb3IgYXJlIGludGVncmF0ZWQgd2l0aCB0aGUgQ1BVIGluIGEgbWljcm9jb250cm9sbGVyLiAgVGhlIG1vcmVcXG4gIDMxOlxcdFxcdCAgIGZhbWlsaWFyIGhvc3Qgc2lkZSBjb250cm9sbGVycyBoYXZlIG5hbWVzIGxpa2UgXFxcIkVIQ0lcXFwiLCBcXFwiT0hDSVxcXCIsXFxuICAzMjpcXHRcXHQgICBvciBcXFwiVUhDSVxcXCIsIGFuZCBhcmUgdXN1YWxseSBpbnRlZ3JhdGVkIGludG8gc291dGhicmlkZ2VzIG9uIFBDXFxuICAzMzpcXHRcXHQgICBtb3RoZXJib2FyZHMuXFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdCAgIEVuYWJsZSB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBMaW51eCBpbnNpZGVcXG4gIDM2OlxcdFxcdCAgIGEgVVNCIHBlcmlwaGVyYWwgZGV2aWNlLiAgQ29uZmlndXJlIG9uZSBoYXJkd2FyZSBkcml2ZXIgZm9yIHlvdXJcXG4gIDM3OlxcdFxcdCAgIHBlcmlwaGVyYWwvZGV2aWNlIHNpZGUgYnVzIGNvbnRyb2xsZXIsIGFuZCBhIFxcXCJnYWRnZXQgZHJpdmVyXFxcIiBmb3JcXG4gIDM4OlxcdFxcdCAgIHlvdXIgcGVyaXBoZXJhbCBwcm90b2NvbC4gIChJZiB5b3UgdXNlIG1vZHVsYXIgZ2FkZ2V0IGRyaXZlcnMsXFxuICAzOTpcXHRcXHQgICB5b3UgbWF5IGNvbmZpZ3VyZSBtb3JlIHRoYW4gb25lLilcXG4gIDQwOlxcdFxcbiAgNDE6XFx0XFx0ICAgSWYgaW4gZG91YnQsIHNheSBcXFwiTlxcXCIgYW5kIGRvbid0IGVuYWJsZSB0aGVzZSBkcml2ZXJzOyBtb3N0IHBlb3BsZVxcbiAgNDI6XFx0XFx0ICAgZG9uJ3QgaGF2ZSB0aGlzIGtpbmQgb2YgaGFyZHdhcmUgKGV4Y2VwdCBtYXliZSBpbnNpZGUgTGludXggUERBcykuXFxuICA0MzpcXHRcXG4gIDQ0OlxcdFxcdCAgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgXFx1MDAzY2h0dHA6Ly93d3cubGludXgtdXNiLm9yZy9nYWRnZXRcXHUwMDNlIGFuZFxcbiAgNDU6XFx0XFx0ICAgdGhlIGtlcm5lbCBkb2N1bWVudGF0aW9uIGZvciB0aGlzIEFQSS5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0aWYgVVNCX0dBREdFVFxcbiAgNDg6XFx0XFxuICA0OTpcXHRjb25maWcgVVNCX0dBREdFVF9ERUJVR1xcbiAgNTA6XFx0XFx0Ym9vbCBcXFwiRGVidWdnaW5nIG1lc3NhZ2VzIChERVZFTE9QTUVOVClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDIyOjM0OjQ2LjQ5ODY5NjEwN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE5MTc3MTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNoZWNraW5nIFVTQiBHYWRnZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb24uIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoZSBlc3NlbnRpYWxzIGVuYWJsZWQ6IGBVU0JfR0FER0VUYCBhbmQgYFVTQl9HQURHRVRGU2AuIFRob3NlIGFyZSB0aGUgY29yZSBjb25maWdzIEknbSBleHBlY3RpbmcgdG8gc2VlLiBOb3csIGZvciB0ZXN0aW5nLCBlc3BlY2lhbGx5IGluIGEgdmlydHVhbCBlbnZpcm9ubWVudCwgYFVTQl9EVU1NWV9IQ0RgIGlzIHVzdWFsbHkgbmVjZXNzYXJ5IHRvIHNpbXVsYXRlIHRoZSBoYXJkd2FyZSBob3N0IGNvbnRyb2xsZXIuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZSBgVVNCX0RVTU1ZX0hDRGAgb3B0aW9uIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS4gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJJ2xsIGNoZWNrIGluIHRoZSBjb25maWd1cmF0aW9uIG1lbnUuIFRoaXMgaXMgYSBjcnVjaWFsIHN0ZXAgdG8gYXZvaWQgd2FzdGluZyB0aW1lIGRlYnVnZ2luZyBpc3N1ZXMgdGhhdCBzdGVtIGZyb20gYSBtaXNzaW5nIGR1bW15IGhvc3QgY29udHJvbGxlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQ3OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6NTAuMjE3ODc2MjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTAyOTY0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVVNCX0RVTU1ZX0hDRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnPTQyMj1zb3VyY2UgXFxcImRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY2RuczIvS2NvbmZpZ1xcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZy00MjctXFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9LY29uZmlnOjQyODpjb25maWcgVVNCX0RVTU1ZX0hDRFxcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvS2NvbmZpZy00MjktXFx0dHJpc3RhdGUgXFxcIkR1bW15IEhDRCAoREVWRUxPUE1FTlQpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDo1MC4zMzg5MTU2MjJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg5NDEyMDMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFVTQiBHYWRnZXQgRnJhbWV3b3JrKipcblxuT2theSwgc28gSSdtIHdvcmtpbmcgd2l0aCB0aGUgVVNCIGdhZGdldCBmcmFtZXdvcmssIGFuZCBJJ20gcHJldHR5IHN1cmUgYFVTQl9EVU1NWV9IQ0RgIGlzIHRoZSBkdW1teSBIQ0QgaW1wbGVtZW50YXRpb24gdXNlZCBzcGVjaWZpY2FsbHkgZm9yIHRlc3RpbmcgZ2FkZ2V0cy4gTXkgaW1tZWRpYXRlIGZvY3VzIG5lZWRzIHRvIGJlIGFyb3VuZCB0aGUgYGdhZGdldGZzX3VuYmluZGAgZnVuY3Rpb24uIEkgKnRoaW5rKiB0aGF0J3MgdGhlIGNlbnRyYWwgcG9pbnQsIHRoZSBzeW1ib2wgdGhhdCB0cmlnZ2VycyB0aGUgdW5iaW5kaW5nIHByb2Nlc3MuIE5vdywgYSBzbGlnaHQgd3JpbmtsZS4uLiBpc24ndCBgZ2FkZ2V0ZnNfdW5iaW5kYCBkZWNsYXJlZCBhcyBgc3RhdGljYD8gVGhhdCBjb3VsZCBjb21wbGljYXRlIHRoaW5ncyBpZiBJJ20gdHJ5aW5nIHRvLCBzYXksIGRpcmVjdGx5IGNhbGwgaXQgZnJvbSBlbHNld2hlcmUuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIHNvdXJjZSBjb2RlIGFnYWluIHRvIHZlcmlmeSBteSB1bmRlcnN0YW5kaW5nLiBJJ2xsIGhlYWQgYmFjayB0byBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jYCB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NjEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNDo1NC4yMzMwMzkxNjRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDc5Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdhZGdldGZzX3VuYmluZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE2Mzk9c3RhdGljIHZvaWRcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTY0MDpnYWRnZXRmc191bmJpbmQgKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE2NDEte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE2NzE9c3RhdGljIGludCBnYWRnZXRmc19iaW5kKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQsXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTcwNS1lbm9tZW06XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE3MDY6XFx0Z2FkZ2V0ZnNfdW5iaW5kIChnYWRnZXQpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xNzA3LVxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTE3NDk9c3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBnYWRnZXRmc19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTc1MS1cXHQuYmluZFxcdFxcdD0gZ2FkZ2V0ZnNfYmluZCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTc1MjpcXHQudW5iaW5kXFx0XFx0PSBnYWRnZXRmc191bmJpbmQsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE3NTMtXFx0LnNldHVwXFx0XFx0PSBnYWRnZXRmc19zZXR1cCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6NTQuMjg4NTI1MTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEzNjg3NTAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDb25zaWRlcmluZyB0aGUgYGdhZGdldGZzX3VuYmluZGAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyB0aGUgcHJvbXB0IGlzIHVyZ2luZyB1cyB0byBsZWFuIHRvd2FyZHMgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5IHBvaW50cyByYXRoZXIgdGhhbiBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhlIGdvYWwsIEknbSBhc3N1bWluZywgaXMgYmV0dGVyIHZpc2liaWxpdHkgYW5kIHBvdGVudGlhbCBmb3IgZnV0dXJlIG1vZGlmaWNhdGlvbnMgb3IgZXh0ZW5zaW9ucy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGFib3V0IGBnYWRnZXRmc191bmJpbmRgLiBJIGtub3cgaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCdzIGFjdHVhbGx5IGlubGluZWQuIEl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIGAudW5iaW5kID0gZ2FkZ2V0ZnNfdW5iaW5kYCwgd2hpY2ggKnNob3VsZCogbWVhbiBpdCAqY2Fubm90KiBiZSBmdWxseSBpbmxpbmVkIGJlY2F1c2UgaXRzIGFkZHJlc3MgaXMgYmVpbmcgdGFrZW4uIFRoYXQgYWxzbyBtZWFucyBpdCAqd2lsbCogaGF2ZSBhIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzLCBzbyBpdCdzIG5vdCBhIGNvbXBsZXRlIGlubGluZSBzaXR1YXRpb24uXG5cbkhvd2V2ZXIsIGlmIHdlIHRydWx5IHdhbnQgdG8gY3JlYXRlIGEgKm5vbi1zdGF0aWMqIGVudHJ5IHBvaW50LCB3ZSBjb3VsZCB1c2UgYW4gZXhpc3RpbmcgZnVuY3Rpb24uIExldCdzIGxvb2sgYXQgYGRldl9yZWxlYXNlYCBhcyBhIHBvc3NpYmxlIGFsdGVybmF0aXZlIG9yIGBkZXZfY29uZmlnYC4gTGV0IG1lIGdvIGNoZWNrIGBkZXZfcmVsZWFzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NjEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6NTguNDI1NDAzMzQ3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjM1ODMwMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2X3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xMTkwPXN0YXRpYyBpbnRcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTE5MTpkZXZfcmVsZWFzZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xMTkyLXtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTM0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwMF9vcGVyYXRpb25zID0ge1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5NDEtXFx0LnVubG9ja2VkX2lvY3RsID0gZ2FkZ2V0X2Rldl9pb2N0bCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTk0MjpcXHQucmVsZWFzZSA9XFx0ZGV2X3JlbGVhc2UsXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5NDMtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMjI6MzQ6NTguNzQ4OTkyMzQ2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzk3NzIzNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIERyaXZlciBVbnJlZ2lzdHJhdGlvbiBpbiB0aGUgVVNCIEdhZGdldCBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCBzbyBgZGV2X3JlbGVhc2VgIGlzLCBvZiBjb3Vyc2UsIHN0YXRpYy4gVGhhdCdzIGEgZ2l2ZW4uIEJ1dCBub3csIG15IG1pbmQncyBqdW1wZWQgdG8gYSByZWxhdGVkIGZ1bmN0aW9uLCBgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcmAuIFdoZXJlIGlzICp0aGF0KiBkZWZpbmVkPyBBaCwgcmlnaHQsIGluIGBkcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuY2AuIE9rYXksIGdvb2QuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXJgIG5vdy4gTGV0J3Mgc2VlIGhvdyB0aGUgZHJpdmVyIHVucmVnaXN0cmF0aW9uIGlzIGhhbmRsZWQgaW4gdGhhdCBjb3JlIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhhdCBmdW5jdGlvbiwgdGhlIHN0YXRpYyBgZGV2X3JlbGVhc2VgIGFuZCB0aGUgd2hvbGUgZ2FkZ2V0IGRyaXZlciBsaWZlY3ljbGUuIFRoaXMgbWF5IGdpdmUgbWUgc29tZSBpbnNpZ2h0IHRvIHRoZSBzdGF0aWMgaXNzdWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNDIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNTowMi4wODg3NjkyMDNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzMDQwNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmM9MTc3Nz1FWFBPUlRfU1lNQk9MX0dQTCh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcl9vd25lcik7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmMtMTc3OC1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYzoxNzc5OmludCB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciAqZHJpdmVyKVxcbmRyaXZlcnMvdXNiL2dhZGdldC91ZGMvY29yZS5jLTE3ODAte1xcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmMtMTc4Ni19XFxuZHJpdmVycy91c2IvZ2FkZ2V0L3VkYy9jb3JlLmM6MTc4NzpFWFBPUlRfU1lNQk9MX0dQTCh1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKTtcXG5kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL2NvcmUuYy0xNzg4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNTowMi4xNTE4MTM5NDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUyOTY0MTExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdhZGdldEZTIFVuYmluZCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgYGdhZGdldGZzX3VuYmluZGAgZnVuY3Rpb24sIGFuZCBJIHRoaW5rIEkndmUgZ290IGEgaGFuZGxlIG9uIGl0LiBJbml0aWFsbHksIEkgd2FzIHRoaW5raW5nIGFib3V0IGVudHJ5IHBvaW50cywgYW5kIGB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyYCBzZWVtZWQgbGlrZSBhIGdvb2QsIG5vbi1zdGF0aWMgb3B0aW9uLiBJIHdhcyBhbHNvIGNvbnNpZGVyaW5nIGB1c2JfZXBfZGVxdWV1ZWAgYW5kIGB1c2JfZXBfZnJlZV9yZXF1ZXN0YCwgYXMgdGhleSdyZSBjbGVhcmx5IHBhcnQgb2YgdGhlIGNsZWFudXAgcHJvY2Vzcy4gVGhlbiBJIHJlYWxpemVkIGBnYWRnZXRmc191bmJpbmRgLCBldmVuIHRob3VnaCBpdCAqaXMqIHN0YXRpYywgaXMgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBtZWFucyBpdCB3b24ndCBiZSBpbmxpbmVkLiBUaGF0IG1lYW5zIGl0J2xsIHNob3cgdXAgaW4gc3RhY2sgdHJhY2VzLCBzbyBpbmNsdWRpbmcgaXQgaXMgcGVyZmVjdGx5IGFjY2VwdGFibGUuXG5cbkkndmUgZGVjaWRlZCB0byBpbmNsdWRlIGB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyYCBhbmQgYGdhZGdldGZzX3VuYmluZGAuXG5cbk5vdywgbGV0IG1lIHJldmlldyB0aGUgcHJvcG9zZWQgcGF0Y2ggYWdhaW4uIEl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgY3JpdGljYWwgaXNzdWUgaGVyZSwgcHJldmVudGluZyBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgb3IgYSBzaW1pbGFyIG1lbW9yeSBwcm9ibGVtLiBJdCdzIGVzc2VudGlhbGx5IGRlcXVldWluZyB0aGUgcmVxdWVzdCBiZWZvcmUgaXQncyBmcmVlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoaXMgcGF0aCBpcyByZWFjaGFibGUgdGhyb3VnaCBgZGV2X3JlbGVhc2VgLCB3aGljaCBjYWxscyBgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcmAsIGFuZCBmaW5hbGx5LCBgZ2FkZ2V0ZnNfdW5iaW5kYC4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBVU0JfR0FER0VUYCwgYFVTQl9HQURHRVRGU2AsIGFuZCBgVVNCX0RVTU1ZX0hDRGAsIHdoaWNoIHdpbGwgbGlrZWx5IGJlIGltcG9ydGFudCBmb3IgdGVzdGluZy4gSSdtIHNhdGlzZmllZC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTIyLCJPdXRwdXRUb2tlbnMiOjEzNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQyMjozNTowOS42ODE0NTg2MzlaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk2NTczNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9HQURHRVRGU1wiLFxuICAgIFwiVVNCX0RVTU1ZX0hDRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhZGdldGZzX3VuYmluZFwiLFxuICAgIFwidXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGlzc3VlIGluIHRoZSBnYWRnZXRmcyB1bmJpbmQgcGF0aCBieSBleHBsaWNpdGx5IGRlcXVldWluZyB0aGUgZW5kcG9pbnQgMCByZXF1ZXN0IGJlZm9yZSBmcmVlaW5nIGl0LiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHdoZW4gY2xvc2luZyB0aGUgZ2FkZ2V0ZnMgZmlsZSBkZXNjcmlwdG9yLCB3aGljaCB0cmlnZ2VycyB0aGUgdW5iaW5kIGNhbGxiYWNrLiBJdCBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JfR0FER0VURlNcIixcbiAgICBcIlVTQl9EVU1NWV9IQ0RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnYWRnZXRmc191bmJpbmRcIixcbiAgICBcInVzYl9nYWRnZXRfdW5yZWdpc3Rlcl9kcml2ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCBpc3N1ZSBpbiB0aGUgZ2FkZ2V0ZnMgdW5iaW5kIHBhdGggYnkgZXhwbGljaXRseSBkZXF1ZXVpbmcgdGhlIGVuZHBvaW50IDAgcmVxdWVzdCBiZWZvcmUgZnJlZWluZyBpdC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB3aGVuIGNsb3NpbmcgdGhlIGdhZGdldGZzIGZpbGUgZGVzY3JpcHRvciwgd2hpY2ggdHJpZ2dlcnMgdGhlIHVuYmluZCBjYWxsYmFjay4gSXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgttg[1] Phase: Succeeded StartedAt: 2026-08-02 22:35:20 +0000 UTC FinishedAt: 2026-08-02 22:35:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 22:35:20 +0000 UTC FinishedAt: 2026-08-02 22:35:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2] Phase: Succeeded StartedAt: 2026-08-02 22:35:20 +0000 UTC FinishedAt: 2026-08-03 02:33:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 22:35:20 +0000 UTC FinishedAt: 2026-08-03 02:33:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-02 22:35:20 +0000 UTC FinishedAt: 2026-08-02 22:35:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-02 22:35:20 +0000 UTC FinishedAt: 2026-08-02 22:35:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowmgttg/series-workflowmgttg-convert-artifact-1773912663/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-02 22:35:30 +0000 UTC FinishedAt: 2026-08-02 22:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-02 22:35:30 +0000 UTC FinishedAt: 2026-08-02 22:58:57 +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:*d774ae60-3df4-43a7-9ce6-ec7cf3534214,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-workflowmgttg/series-workflowmgttg-convert-artifact-1773912663/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": "53782b94-7bf3-441a-a5a8-ace9d77ae57c", "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-workflowmgttg/series-workflowmgttg-build-action-2954117805/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-02 22:35:30 +0000 UTC FinishedAt: 2026-08-02 22:58:46 +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:*d774ae60-3df4-43a7-9ce6-ec7cf3534214,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-workflowmgttg/series-workflowmgttg-convert-artifact-1773912663/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": "53782b94-7bf3-441a-a5a8-ace9d77ae57c", "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-workflowmgttg/series-workflowmgttg-build-action-2954117805/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-02 22:58:57 +0000 UTC FinishedAt: 2026-08-02 22:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-02 22:58:57 +0000 UTC FinishedAt: 2026-08-02 22:58:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-02 22:58:57 +0000 UTC FinishedAt: 2026-08-02 22:59:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-02 22:58:57 +0000 UTC FinishedAt: 2026-08-02 22:59:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowmgttg/series-workflowmgttg-convert-artifact-3198433414/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-02 22:59:09 +0000 UTC FinishedAt: 2026-08-02 23:01:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-02 22:59:09 +0000 UTC FinishedAt: 2026-08-02 23:00:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*53782b94-7bf3-441a-a5a8-ace9d77ae57c,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-workflowmgttg/series-workflowmgttg-build-action-2954117805/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-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-02 23:01:11 +0000 UTC FinishedAt: 2026-08-02 23:01:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-02 23:01:11 +0000 UTC FinishedAt: 2026-08-02 23:01:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-02 23:01:11 +0000 UTC FinishedAt: 2026-08-02 23:28:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-02 23:01:11 +0000 UTC FinishedAt: 2026-08-02 23:28:57 +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:*d774ae60-3df4-43a7-9ce6-ec7cf3534214,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-workflowmgttg/series-workflowmgttg-convert-artifact-3198433414/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": "2c39d2e3-0680-4148-8771-c8fefbf938cb", "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-workflowmgttg/series-workflowmgttg-build-action-2016644810/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-02 23:01:11 +0000 UTC FinishedAt: 2026-08-02 23:28:46 +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:*d774ae60-3df4-43a7-9ce6-ec7cf3534214,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-workflowmgttg/series-workflowmgttg-convert-artifact-3198433414/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": "2c39d2e3-0680-4148-8771-c8fefbf938cb", "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-workflowmgttg/series-workflowmgttg-build-action-2016644810/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-02 23:28:57 +0000 UTC FinishedAt: 2026-08-02 23:28:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-02 23:28:57 +0000 UTC FinishedAt: 2026-08-02 23:28:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-02 23:28:57 +0000 UTC FinishedAt: 2026-08-02 23:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-02 23:28:57 +0000 UTC FinishedAt: 2026-08-02 23:30:34 +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:*2c39d2e3-0680-4148-8771-c8fefbf938cb,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-workflowmgttg/series-workflowmgttg-build-action-2016644810/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-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-02 23:30:44 +0000 UTC FinishedAt: 2026-08-03 02:33:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-02 23:30:44 +0000 UTC FinishedAt: 2026-08-03 02:33:55 +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":["gadgetfs_unbind","usb_gadget_unregister_driver"],"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:*53782b94-7bf3-441a-a5a8-ace9d77ae57c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2c39d2e3-0680-4148-8771-c8fefbf938cb,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-workflowmgttg/series-workflowmgttg-build-action-2954117805/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-workflowmgttg/series-workflowmgttg-build-action-2016644810/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-02 23:30:44 +0000 UTC FinishedAt: 2026-08-02 23:31:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-02 23:30:44 +0000 UTC FinishedAt: 2026-08-02 23:31:02 +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":["gadgetfs_unbind","usb_gadget_unregister_driver"],"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-workflowmgttg/series-workflowmgttg-convert-artifact-3172602443/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-02 23:30:44 +0000 UTC FinishedAt: 2026-08-02 23:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-02 23:30:44 +0000 UTC FinishedAt: 2026-08-02 23:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-02 23:30:44 +0000 UTC FinishedAt: 2026-08-02 23:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-02 23:31:04 +0000 UTC FinishedAt: 2026-08-03 02:33:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmgttg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["gadgetfs_unbind","usb_gadget_unregister_driver"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f5098b6bae761e346ebcd9da7f95622c04733cff","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS","USB_DUMMY_HCD"],"series_id":"9e7dabc7-4f30-49a8-b6eb-0163b0cae4c3","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-02 23:31:04 +0000 UTC FinishedAt: 2026-08-03 02:33:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*53782b94-7bf3-441a-a5a8-ace9d77ae57c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2c39d2e3-0680-4148-8771-c8fefbf938cb,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-workflowmgttg/series-workflowmgttg-build-action-2954117805/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-workflowmgttg/series-workflowmgttg-build-action-2016644810/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-workflowmgttg/series-workflowmgttg-convert-artifact-3172602443/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,}