Name: series-workflowghnh9 Phase: Succeeded StartedAt: 2026-06-29 16:58:30 +0000 UTC FinishedAt: 2026-06-29 21:20:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[0] Phase: Succeeded StartedAt: 2026-06-29 16:58:30 +0000 UTC FinishedAt: 2026-06-29 17:10:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 16:58:30 +0000 UTC FinishedAt: 2026-06-29 17:10:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "098e32cba334da0f3fa8cfd4e022ae7c72341400", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_XEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "098e32cba334da0f3fa8cfd4e022ae7c72341400", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_XEN" ], "series_id": "aa556caf-4c83-401c-8506-7ee4ff7ea844" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_xen_vcpu_set_attr", "__kvm_xen_write_hypercall_page" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl92Y3B1X3NldF9hdHRyJiMzNDssCiAgICAmIzM0O19fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBYZW4gVkNQVSBhdHRyaWJ1dGUgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTRmNzlmNDk5Y2VhNThjM2MxODJhZTg4ZjlmY2M1NWQxNzRiZTE3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDE3OjA5OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuaW5kZXggYTVmOWVlOTJmNDNlOGQuLjNjNmFlZTJhMzViZmRjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbkBAIC01ODEyLDYgJiM0Mzs1ODEyLDE5IEBAIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfVVBDQUxMX1ZFQ1RPUlxuICAgdmVjdG9yIGNvbmZpZ3VyZWQgd2l0aCBIVk1fUEFSQU1fQ0FMTEJBQ0tfSVJRLiBJdCBpcyBkaXNhYmxlZCBieVxuICAgc2V0dGluZyB0aGUgdmVjdG9yIHRvIHplcm8uXG4gXG4mIzQzO0tWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VcbiYjNDM7ICBUaGlzIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgd2hlbiB0aGUgS1ZNX0NBUF9YRU5fSFZNIGlvY3RsIGluZGljYXRlc1xuJiM0MzsgIHN1cHBvcnQgZm9yIEtWTV9YRU5fSFZNX0NPTkZJR19XUklURV9IWVBFUkNBTExfUEFHRS4gSXQgdHJpZ2dlcnNcbiYjNDM7ICBwb3B1bGF0aW9uIG9mIHRoZSBYZW4gaHlwZXJjYWxsIHBhZ2UgYXQgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NcbiYjNDM7ICBzcGVjaWZpZWQgaW4gYGBncGFgYCwganVzdCBhcyBpZiB0aGUgZ3Vlc3QgaGFkIHdyaXR0ZW4gdG8gdGhlXG4mIzQzOyAgaHlwZXJjYWxsIE1TUi4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgVk1NcyB0aGF0IGludGVyY2VwdCB0aGUgZ3Vlc3QmIzM5O3NcbiYjNDM7ICBNU1Igd3JpdGUgKGUuZy4gdG8gdHJhY2sgYW4gZXBvY2ggZm9yIGtleGVjL2NyYXNoIHJlY292ZXJ5KSBhbmQgbmVlZFxuJiM0MzsgIHRvIHJlcGxheSB0aGUgd3JpdGUgZnJvbSBob3N0IGNvbnRleHQuIERpcmVjdCBob3N0LWluaXRpYXRlZCB3cml0ZXNcbiYjNDM7ICB2aWEgS1ZNX1NFVF9NU1JTIGFyZSBibG9ja2VkIGZvciBzYWZldHk7IHRoaXMgYXR0cmlidXRlIHByb3ZpZGVzIHRoZVxuJiM0MzsgIGNvcnJlY3QgYWx0ZXJuYXRpdmUuIEFzIHdpdGggYSBub24taW50ZXJjZXB0ZWQgZ3Vlc3Qgd3JpdGUgdG8gdGhlXG4mIzQzOyAgaHlwZXJjYWxsIE1TUiwgaXQgYWxzbyBsYXRjaGVzIHRoZSAmIzM5O2xvbmcgbW9kZSYjMzk7IGZvciB0aGUgVk0sIHdoaWNoXG4mIzQzOyAgZGV0ZXJtaW5lcyB0aGUgbGF5b3V0IG9mIHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLlxuJiM0MztcbiBcbiA0LjEyOSBLVk1fWEVOX1ZDUFVfR0VUX0FUVFJcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMTU4NWVjODA0MDY2NmUuLjc3MzJiOTJhNGRiMDJlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuQEAgLTU5OCw2ICYjNDM7NTk4LDcgQEAgc3RydWN0IGt2bV94ODZfbWNlIHtcbiAjZGVmaW5lIEtWTV9YRU5fSFZNX0NPTkZJR19SVU5TVEFURV9VUERBVEVfRkxBR1x0KDEgXHUwMDNjXHUwMDNjIDYpXG4gI2RlZmluZSBLVk1fWEVOX0hWTV9DT05GSUdfUFZDTE9DS19UU0NfVU5TVEFCTEVcdCgxIFx1MDAzY1x1MDAzYyA3KVxuICNkZWZpbmUgS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQVx0KDEgXHUwMDNjXHUwMDNjIDgpXG4mIzQzOyNkZWZpbmUgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFXHQoMSBcdTAwM2NcdTAwM2MgOSlcbiBcbiAjZGVmaW5lIEtWTV9YRU5fTVNSX01JTl9JTkRFWFx0XHRcdDB4NDAwMDAwMDB1XG4gI2RlZmluZSBLVk1fWEVOX01TUl9NQVhfSU5ERVhcdFx0XHQweDRmZmZmZmZmdVxuQEAgLTcwNiw2ICYjNDM7NzA3LDggQEAgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyIHtcbiAjZGVmaW5lIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfVVBDQUxMX1ZFQ1RPUlx0MHg4XG4gLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9YRU5fSFZNIC8gS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQSAqL1xuICNkZWZpbmUgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9WQ1BVX0lORk9fSFZBXHQweDlcbiYjNDM7LyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9YRU5fSFZNIC8gS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFICovXG4mIzQzOyNkZWZpbmUgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRSAweGFcbiBcbiAvKiBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIGNvbW1hbmQgKi9cbiBlbnVtIHNldl9jbWRfaWQge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggYWZjYWMxMDQyOTQ3YTUuLmQ3ZjIzYzBiZmY3NDU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC00ODY5LDcgJiM0Mzs0ODY5LDggQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fMkxFVkVMIHxcbiBcdFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fU0VORCB8XG4gXHRcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfUFZDTE9DS19UU0NfVU5TVEFCTEUgfFxuLVx0XHQgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQTtcbiYjNDM7XHRcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfU0hBUkVEX0lORk9fSFZBIHxcbiYjNDM7XHRcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0U7XG4gXHRcdGlmIChzY2hlZF9pbmZvX29uKCkpXG4gXHRcdFx0ciB8PSBLVk1fWEVOX0hWTV9DT05GSUdfUlVOU1RBVEUgfFxuIFx0XHRcdCAgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1JVTlNUQVRFX1VQREFURV9GTEFHO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuaW5kZXggNjk0YjMxYzFmY2M5YWYuLjUwNDIzZGY2ZTIyZDlkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbkBAIC0zMiw2ICYjNDM7MzIsNyBAQFxuIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSk7XG4gc3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xuIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcik7XG4mIzQzO3N0YXRpYyBpbnQgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpO1xuIFxuIERFRklORV9TVEFUSUNfS0VZX0RFRkVSUkVEX0ZBTFNFKGt2bV94ZW5fZW5hYmxlZCwgSFopO1xuIFxuQEAgLTExMzgsNiAmIzQzOzExMzksMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcbiYjNDM7XHRjYXNlIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0U6XG4mIzQzO1x0XHRyID0gX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHZjcHUsIGRhdGEtXHUwMDNldS5ncGEpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMTI3Myw3ICYjNDM7MTI3OCw3IEBAIGludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRyZXR1cm4gcjtcbiB9XG4gXG4taW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiYjNDM7c3RhdGljIGludCBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdHUzMiBwYWdlX251bSA9IGRhdGEgXHUwMDI2IH5QQUdFX01BU0s7XG5AQCAtMTI4MSw3ICYjNDM7MTI4Niw2IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXG4gXHRib29sIGxtID0gaXNfbG9uZ19tb2RlKHZjcHUpO1xuIFx0aW50IHIgPSAwO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUgIT0gbG0pIHtcbiBcdFx0a3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSA9IGxtO1xuIFxuQEAgLTEyODksMTEgJiM0MzsxMjkzLDkgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiBcdFx0ICogUmUtaW5pdGlhbGl6ZSBzaGFyZWRfaW5mbyB0byBwdXQgdGhlIHdhbGxjbG9jayBpbiB0aGVcbiBcdFx0ICogY29ycmVjdCBwbGFjZS5cbiBcdFx0ICovXG4tXHRcdGlmIChrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLmFjdGl2ZSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChrdm0pKVxuLVx0XHRcdHIgPSAxO1xuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUuYWN0aXZlKVxuJiM0MztcdFx0XHRyID0ga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KGt2bSk7XG4gXHR9XG4tXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbiBcbiBcdGlmIChyKVxuIFx0XHRyZXR1cm4gcjtcbkBAIC0xMzA5LDcgJiM0MzsxMzExLDcgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiBcdFx0aW50IGk7XG4gXG4gXHRcdGlmIChwYWdlX251bSlcbi1cdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdC8qIG1vdiBpbW0zMiwgJWVheCAqL1xuIFx0XHRpbnN0cnVjdGlvbnNbMF0gPSAweGI4O1xuQEAgLTEzMjUsMTAgJiM0MzsxMzI3LDExIEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXG4gXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBBR0VfU0laRSAvIHNpemVvZihpbnN0cnVjdGlvbnMpOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdCoodTMyICopXHUwMDI2aW5zdHJ1Y3Rpb25zWzFdID0gaTtcbi1cdFx0XHRpZiAoa3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSxcbiYjNDM7XHRcdFx0ciA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0KHZjcHUsXG4gXHRcdFx0XHRcdFx0IHBhZ2VfYWRkciAmIzQzOyAoaSAqIHNpemVvZihpbnN0cnVjdGlvbnMpKSxcbi1cdFx0XHRcdFx0XHQgaW5zdHJ1Y3Rpb25zLCBzaXplb2YoaW5zdHJ1Y3Rpb25zKSkpXG4tXHRcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdFx0XHRcdFx0IGluc3RydWN0aW9ucywgc2l6ZW9mKGluc3RydWN0aW9ucykpO1xuJiM0MztcdFx0XHRpZiAocilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcjtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbkBAIC0xMzQwLDEwICYjNDM7MTM0Myw5IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXG4gXHRcdHU4IGJsb2Jfc2l6ZSA9IGxtID8ga3ZtLVx1MDAzZWFyY2gueGVuLmh2bV9jb25maWcuYmxvYl9zaXplXzY0XG4gXHRcdFx0XHQgIDoga3ZtLVx1MDAzZWFyY2gueGVuLmh2bV9jb25maWcuYmxvYl9zaXplXzMyO1xuIFx0XHR1OCAqcGFnZTtcbi1cdFx0aW50IHJldDtcbiBcbiBcdFx0aWYgKHBhZ2VfbnVtIFx1MDAzZT0gYmxvYl9zaXplKVxuLVx0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdFx0YmxvYl9hZGRyICYjNDM7PSBwYWdlX251bSAqIFBBR0VfU0laRTtcbiBcbkBAIC0xMzUxLDE0ICYjNDM7MTM1MywyNyBAQCBpbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxuIFx0XHRpZiAoSVNfRVJSKHBhZ2UpKVxuIFx0XHRcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xuIFxuLVx0XHRyZXQgPSBrdm1fdmNwdV93cml0ZV9ndWVzdCh2Y3B1LCBwYWdlX2FkZHIsIHBhZ2UsIFBBR0VfU0laRSk7XG4mIzQzO1x0XHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSwgcGFnZV9hZGRyLCBwYWdlLCBQQUdFX1NJWkUpO1xuIFx0XHRrZnJlZShwYWdlKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdGlmIChyKVxuJiM0MztcdFx0XHRyZXR1cm4gcjtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7aW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiYjNDM7e1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIE1TUiB3cml0ZSBwYXRoIGV4cGVjdHMgYSAwLzEgcmV0dXJuOyBjb252ZXJ0IHRoZSBlcnJubyBmcm9tXG4mIzQzO1x0ICogdGhlIHNoYXJlZCBoZWxwZXIgYWNjb3JkaW5nbHkuIENhbGxlcnMgdGhhdCB3YW50IHRoZSByZWFsIGVycm9yXG4mIzQzO1x0ICogKGUuZy4gdGhlIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UgYXR0cmlidXRlKVxuJiM0MztcdCAqIGludm9rZSBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2UoKSBkaXJlY3RseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHZjcHUsIGRhdGEpID8gMSA6IDA7XG4mIzQzO31cbiYjNDM7XG4gaW50IGt2bV94ZW5faHZtX2NvbmZpZyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgKnhoYylcbiB7XG4gXHQvKiBPbmx5IHNvbWUgZmVhdHVyZSBmbGFncyBuZWVkIHRvIGJlICplbmFibGVkKiBieSB1c2Vyc3BhY2UgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl92bWNhbGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuY1xuaW5kZXggMjU4NTA4N2NkZjVjYmUuLjE1MzZkNTEwYWIzMDE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuY1xuQEAgLTEyLDYgJiM0MzsxMiw4IEBAXG4gI2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtoeXBlcnYuaFwmIzM0O1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MztcbiAjZGVmaW5lIEhDQUxMX1JFR0lPTl9HUEFcdDB4YzAwMDAwMDBVTExcbiAjZGVmaW5lIEhDQUxMX1JFR0lPTl9TTE9UXHQxMFxuIFxuQEAgLTI2LDYgJiM0MzsyOCwxMCBAQFxuICNkZWZpbmUgSFZDQUxMX1NJR05BTF9FVkVOVFx0XHQweDAwNWRcbiAjZGVmaW5lIEhWX1NUQVRVU19JTlZBTElEX0FMSUdOTUVOVFx0NFxuIFxuJiM0MztlbnVtIHtcbiYjNDM7XHRURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFID0gMSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcmF4ID0gSU5QVVRWQUxVRTtcbkBAIC03NiwxNyAmIzQzOzgyLDY1IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiBcdFx0XHQgICAgIFwmIzM0O3JcJiMzNDsocjgpKTtcbiBcdEdVRVNUX0FTU0VSVChyYXggPT0gSFZfU1RBVFVTX0lOVkFMSURfQUxJR05NRU5UKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRlc3QgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRTogYXNrIHVzZXJzcGFjZVxuJiM0MztcdCAqIHRvIHNldCB1cCBNU1IgZmlsdGVyaW5nLCB0aGVuIHdyaXRlIHRoZSBNU1IuIFRoZSBXUk1TUiB3aWxsIGV4aXRcbiYjNDM7XHQgKiB0byB1c2Vyc3BhY2UgKG5vdCBwb3B1bGF0ZSB0aGUgcGFnZSkuIFVzZXJzcGFjZSB2ZXJpZmllcyB0aGUgcGFnZVxuJiM0MztcdCAqIGlzIGVtcHR5LCB1c2VzIHRoZSBhdHRyIHRvIHBvcHVsYXRlIGl0LCB0aGVuIHJlc3VtZXMgdXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0R1VFU1RfU1lOQyhURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTtcbiYjNDM7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7d3Jtc3JcJiMzNDsgOiA6IFwmIzM0O2NcJiMzNDsgKFhFTl9IWVBFUkNBTExfTVNSKSxcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDthXCYjMzQ7IChIQ0FMTF9SRUdJT05fR1BBIFx1MDAyNiAweGZmZmZmZmZmKSxcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtkXCYjMzQ7IChIQ0FMTF9SRUdJT05fR1BBIFx1MDAzZVx1MDAzZSAzMikpO1xuJiM0MztcbiYjNDM7XHQvKiBVc2Vyc3BhY2UgcG9wdWxhdGVkIHRoZSBwYWdlIHZpYSB0aGUgYXR0ciDigJQgdmVyaWZ5IGl0IHdvcmtzICovXG4mIzQzO1x0cmF4ID0gSU5QVVRWQUxVRTtcbiYjNDM7XHRyZGkgPSBBUkdWQUxVRSgxKTtcbiYjNDM7XHRyc2kgPSBBUkdWQUxVRSgyKTtcbiYjNDM7XHRyZHggPSBBUkdWQUxVRSgzKTtcbiYjNDM7XHRyMTAgPSBBUkdWQUxVRSg0KTtcbiYjNDM7XHRyOCA9IEFSR1ZBTFVFKDUpO1xuJiM0MztcdHI5ID0gQVJHVkFMVUUoNik7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7Y2FsbCAqJTFcJiMzNDsgOiBcJiMzNDs9YVwmIzM0OyhyYXgpIDpcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtyXCYjMzQ7KEhDQUxMX1JFR0lPTl9HUEEgJiM0MzsgSU5QVVRWQUxVRSAqIDMyKSxcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDthXCYjMzQ7KHJheCksIFwmIzM0O0RcJiMzNDsocmRpKSwgXCYjMzQ7U1wmIzM0Oyhyc2kpLCBcJiMzNDtkXCYjMzQ7KHJkeCksXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7clwmIzM0OyhyMTApLCBcJiMzNDtyXCYjMzQ7KHI4KSwgXCYjMzQ7clwmIzM0OyhyOSkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChyYXggPT0gUkVUVkFMVUUpO1xuJiM0MztcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX21zcl9maWx0ZXIoc3RydWN0IGt2bV92bSAqdm0pXG4mIzQzO3tcbiYjNDM7XHR1aW50NjRfdCBkZW55X2JpdHMgPSAwO1xuJiM0MztcdHN0cnVjdCBrdm1fbXNyX2ZpbHRlciBmaWx0ZXIgPSB7XG4mIzQzO1x0XHQuZmxhZ3MgPSBLVk1fTVNSX0ZJTFRFUl9ERUZBVUxUX0FMTE9XLFxuJiM0MztcdFx0LnJhbmdlcyA9IHtcbiYjNDM7XHRcdFx0e1xuJiM0MztcdFx0XHRcdC5mbGFncyA9IEtWTV9NU1JfRklMVEVSX1dSSVRFLFxuJiM0MztcdFx0XHRcdC5ubXNycyA9IDEsXG4mIzQzO1x0XHRcdFx0LmJhc2UgPSBYRU5fSFlQRVJDQUxMX01TUixcbiYjNDM7XHRcdFx0XHQuYml0bWFwID0gKHVpbnQ4X3QgKilcdTAwMjZkZW55X2JpdHMsXG4mIzQzO1x0XHRcdH0sXG4mIzQzO1x0XHR9LFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fWDg2X1NFVF9NU1JfRklMVEVSLCBcdTAwMjZmaWx0ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuIFx0dW5zaWduZWQgaW50IHhlbl9jYXBzO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0Ym9vbCBtc3JfZmlsdGVyX3JlYWR5ID0gZmFsc2U7XG4gXG4gXHR4ZW5fY2FwcyA9IGt2bV9jaGVja19jYXAoS1ZNX0NBUF9YRU5fSFZNKTtcbiBcdFRFU1RfUkVRVUlSRSh4ZW5fY2FwcyBcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX0lOVEVSQ0VQVF9IQ0FMTCk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKHhlbl9jYXBzIFx1MDAyNiBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0UpO1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfWDg2X1VTRVJfU1BBQ0VfTVNSKSk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9YODZfTVNSX0ZJTFRFUikpO1xuIFxuIFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcbiBcdHZjcHVfc2V0X2h2X2NwdWlkKHZjcHUpO1xuQEAgLTEyMyw2ICYjNDM7MTc3LDM2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdGlmIChydW4tXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfWDg2X1dSTVNSKSB7XG4mIzQzO1x0XHRcdC8qIE1TUiBmaWx0ZXIgY2F1Z2h0IHRoZSBYZW4gaHlwZXJjYWxsIE1TUiB3cml0ZSAqL1xuJiM0MztcdFx0XHRURVNUX0FTU0VSVChtc3JfZmlsdGVyX3JlYWR5LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtVbmV4cGVjdGVkIFdSTVNSIGV4aXQgYmVmb3JlIGZpbHRlciBzZXR1cFwmIzM0Oyk7XG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUX0VRKHJ1bi1cdTAwM2Vtc3IuaW5kZXgsIFhFTl9IWVBFUkNBTExfTVNSKTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSBob3N0X2luaXRpYXRlZCBjaGVjayBzaG91bGQgaGF2ZSBwcmV2ZW50ZWRcbiYjNDM7XHRcdFx0ICogS1ZNIGZyb20gcG9wdWxhdGluZyB0aGUgcGFnZS4gVmVyaWZ5IGl0JiMzOTtzIGVtcHR5LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0dWludDhfdCAqaGNhbGxfcGFnZSA9IGFkZHJfZ3BhMmh2YSh2bSwgSENBTExfUkVHSU9OX0dQQSk7XG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUX0VRKGhjYWxsX3BhZ2VbMF0sIDApO1xuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogTm93IHVzZSB0aGUgYXR0ciB0byBwb3B1bGF0ZSB0aGUgcGFnZSwgYXMgYVxuJiM0MztcdFx0XHQgKiBWTU0gd291bGQgYWZ0ZXIgaW50ZXJjZXB0aW5nIHRoZSBNU1Igd3JpdGUuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgYXR0ciA9IHtcbiYjNDM7XHRcdFx0XHQudHlwZSA9IEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UsXG4mIzQzO1x0XHRcdFx0LnUuZ3BhID0gSENBTExfUkVHSU9OX0dQQSxcbiYjNDM7XHRcdFx0fTtcbiYjNDM7XHRcdFx0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fWEVOX1ZDUFVfU0VUX0FUVFIsIFx1MDAyNmF0dHIpO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogVmVyaWZ5IHRoZSBwYWdlIGlzIG5vdyBwb3B1bGF0ZWQgKi9cbiYjNDM7XHRcdFx0VEVTVF9BU1NFUlRfRVEoaGNhbGxfcGFnZVswXSwgMHhiOCk7XG4mIzQzO1xuJiM0MztcdFx0XHRydW4tXHUwMDNlbXNyLmVycm9yID0gMDtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pO1xuIFxuIFx0XHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YykpIHtcbkBAIC0xMzAsNiAmIzQzOzIxNCwxOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xuIFx0XHRcdC8qIE5PVCBSRUFDSEVEICovXG4gXHRcdGNhc2UgVUNBTExfU1lOQzpcbiYjNDM7XHRcdFx0VEVTVF9BU1NFUlRfRVEodWMuYXJnc1sxXSwgVEVTVF9XUklURV9IWVBFUkNBTExfUEFHRSk7XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBHdWVzdCBpcyBhYm91dCB0byB3cml0ZSB0aGUgWGVuIE1TUi4gQ2xlYXIgdGhlXG4mIzQzO1x0XHRcdCAqIGh5cGVyY2FsbCBwYWdlLCBpbnN0YWxsIE1TUiBmaWx0ZXIgdG8gaW50ZXJjZXB0XG4mIzQzO1x0XHRcdCAqIHRoZSB3cml0ZSwgYW5kIGVuYWJsZSB1c2Vyc3BhY2UgTVNSIGV4aXRzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgSENBTExfUkVHSU9OX0dQQSksIDAsIFBBR0VfU0laRSk7XG4mIzQzO1x0XHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfWDg2X1VTRVJfU1BBQ0VfTVNSLFxuJiM0MztcdFx0XHRcdCAgICAgIEtWTV9NU1JfRVhJVF9SRUFTT05fRklMVEVSKTtcbiYjNDM7XHRcdFx0c2V0dXBfbXNyX2ZpbHRlcih2bSk7XG4mIzQzO1x0XHRcdG1zcl9maWx0ZXJfcmVhZHkgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFVDQUxMX0RPTkU6XG4gXHRcdFx0Z290byBkb25lO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl92Y3B1X3NldF9hdHRyJiMzNDssCiAgICAmIzM0O19fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBYZW4gVkNQVSBhdHRyaWJ1dGUgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNGY3OWY0OTljZWE1OGMzYzE4MmFlODhmOWZjYzU1ZDE3NGJlMTdmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjkgMTc6MDk6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKaW5kZXggYTVmOWVlOTJmNDNlOGQuLjNjNmFlZTJhMzViZmRjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CkBAIC01ODEyLDYgJiM0Mzs1ODEyLDE5IEBAIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfVVBDQUxMX1ZFQ1RPUgogICB2ZWN0b3IgY29uZmlndXJlZCB3aXRoIEhWTV9QQVJBTV9DQUxMQkFDS19JUlEuIEl0IGlzIGRpc2FibGVkIGJ5CiAgIHNldHRpbmcgdGhlIHZlY3RvciB0byB6ZXJvLgogCiYjNDM7S1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRQomIzQzOyAgVGhpcyBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIEtWTV9DQVBfWEVOX0hWTSBpb2N0bCBpbmRpY2F0ZXMKJiM0MzsgIHN1cHBvcnQgZm9yIEtWTV9YRU5fSFZNX0NPTkZJR19XUklURV9IWVBFUkNBTExfUEFHRS4gSXQgdHJpZ2dlcnMKJiM0MzsgIHBvcHVsYXRpb24gb2YgdGhlIFhlbiBoeXBlcmNhbGwgcGFnZSBhdCB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcwomIzQzOyAgc3BlY2lmaWVkIGluIGBgZ3BhYGAsIGp1c3QgYXMgaWYgdGhlIGd1ZXN0IGhhZCB3cml0dGVuIHRvIHRoZQomIzQzOyAgaHlwZXJjYWxsIE1TUi4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgVk1NcyB0aGF0IGludGVyY2VwdCB0aGUgZ3Vlc3QmIzM5O3MKJiM0MzsgIE1TUiB3cml0ZSAoZS5nLiB0byB0cmFjayBhbiBlcG9jaCBmb3Iga2V4ZWMvY3Jhc2ggcmVjb3ZlcnkpIGFuZCBuZWVkCiYjNDM7ICB0byByZXBsYXkgdGhlIHdyaXRlIGZyb20gaG9zdCBjb250ZXh0LiBEaXJlY3QgaG9zdC1pbml0aWF0ZWQgd3JpdGVzCiYjNDM7ICB2aWEgS1ZNX1NFVF9NU1JTIGFyZSBibG9ja2VkIGZvciBzYWZldHk7IHRoaXMgYXR0cmlidXRlIHByb3ZpZGVzIHRoZQomIzQzOyAgY29ycmVjdCBhbHRlcm5hdGl2ZS4gQXMgd2l0aCBhIG5vbi1pbnRlcmNlcHRlZCBndWVzdCB3cml0ZSB0byB0aGUKJiM0MzsgIGh5cGVyY2FsbCBNU1IsIGl0IGFsc28gbGF0Y2hlcyB0aGUgJiMzOTtsb25nIG1vZGUmIzM5OyBmb3IgdGhlIFZNLCB3aGljaAomIzQzOyAgZGV0ZXJtaW5lcyB0aGUgbGF5b3V0IG9mIHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLgomIzQzOwogCiA0LjEyOSBLVk1fWEVOX1ZDUFVfR0VUX0FUVFIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKaW5kZXggMTU4NWVjODA0MDY2NmUuLjc3MzJiOTJhNGRiMDJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKQEAgLTU5OCw2ICYjNDM7NTk4LDcgQEAgc3RydWN0IGt2bV94ODZfbWNlIHsKICNkZWZpbmUgS1ZNX1hFTl9IVk1fQ09ORklHX1JVTlNUQVRFX1VQREFURV9GTEFHCSgxICZsdDsmbHQ7IDYpCiAjZGVmaW5lIEtWTV9YRU5fSFZNX0NPTkZJR19QVkNMT0NLX1RTQ19VTlNUQUJMRQkoMSAmbHQ7Jmx0OyA3KQogI2RlZmluZSBLVk1fWEVOX0hWTV9DT05GSUdfU0hBUkVEX0lORk9fSFZBCSgxICZsdDsmbHQ7IDgpCiYjNDM7I2RlZmluZSBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0UJKDEgJmx0OyZsdDsgOSkKIAogI2RlZmluZSBLVk1fWEVOX01TUl9NSU5fSU5ERVgJCQkweDQwMDAwMDAwdQogI2RlZmluZSBLVk1fWEVOX01TUl9NQVhfSU5ERVgJCQkweDRmZmZmZmZmdQpAQCAtNzA2LDYgJiM0Mzs3MDcsOCBAQCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgewogI2RlZmluZSBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1VQQ0FMTF9WRUNUT1IJMHg4CiAvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1hFTl9IVk0gLyBLVk1fWEVOX0hWTV9DT05GSUdfU0hBUkVEX0lORk9fSFZBICovCiAjZGVmaW5lIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfVkNQVV9JTkZPX0hWQQkweDkKJiM0MzsvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1hFTl9IVk0gLyBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0UgKi8KJiM0MzsjZGVmaW5lIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UgMHhhCiAKIC8qIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gY29tbWFuZCAqLwogZW51bSBzZXZfY21kX2lkIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCBhZmNhYzEwNDI5NDdhNS4uZDdmMjNjMGJmZjc0NTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTQ4NjksNyAmIzQzOzQ4NjksOCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KQogCQkgICAgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl8yTEVWRUwgfAogCQkgICAgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EIHwKIAkJICAgIEtWTV9YRU5fSFZNX0NPTkZJR19QVkNMT0NLX1RTQ19VTlNUQUJMRSB8Ci0JCSAgICBLVk1fWEVOX0hWTV9DT05GSUdfU0hBUkVEX0lORk9fSFZBOwomIzQzOwkJICAgIEtWTV9YRU5fSFZNX0NPTkZJR19TSEFSRURfSU5GT19IVkEgfAomIzQzOwkJICAgIEtWTV9YRU5fSFZNX0NPTkZJR19XUklURV9IWVBFUkNBTExfUEFHRTsKIAkJaWYgKHNjaGVkX2luZm9fb24oKSkKIAkJCXIgfD0gS1ZNX1hFTl9IVk1fQ09ORklHX1JVTlNUQVRFIHwKIAkJCSAgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1JVTlNUQVRFX1VQREFURV9GTEFHOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jCmluZGV4IDY5NGIzMWMxZmNjOWFmLi41MDQyM2RmNmUyMmQ5ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uYwpAQCAtMzIsNiAmIzQzOzMyLDcgQEAKIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSk7CiBzdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSk7CiBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpOwomIzQzO3N0YXRpYyBpbnQgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpOwogCiBERUZJTkVfU1RBVElDX0tFWV9ERUZFUlJFRF9GQUxTRShrdm1feGVuX2VuYWJsZWQsIEhaKTsKIApAQCAtMTEzOCw2ICYjNDM7MTEzOSwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKQogCQl9CiAJCWJyZWFrOwogCiYjNDM7CWNhc2UgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRToKJiM0MzsJCXIgPSBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2UodmNwdSwgZGF0YS0mZ3Q7dS5ncGEpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMTI3Myw3ICYjNDM7MTI3OCw3IEBAIGludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpCiAJcmV0dXJuIHI7CiB9CiAKLWludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpCiYjNDM7c3RhdGljIGludCBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSkKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJdTMyIHBhZ2VfbnVtID0gZGF0YSAmYW1wOyB+UEFHRV9NQVNLOwpAQCAtMTI4MSw3ICYjNDM7MTI4Niw2IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpCiAJYm9vbCBsbSA9IGlzX2xvbmdfbW9kZSh2Y3B1KTsKIAlpbnQgciA9IDA7CiAKLQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7CiAJaWYgKGt2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlICE9IGxtKSB7CiAJCWt2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlID0gbG07CiAKQEAgLTEyODksMTEgJiM0MzsxMjkzLDkgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSkKIAkJICogUmUtaW5pdGlhbGl6ZSBzaGFyZWRfaW5mbyB0byBwdXQgdGhlIHdhbGxjbG9jayBpbiB0aGUKIAkJICogY29ycmVjdCBwbGFjZS4KIAkJICovCi0JCWlmIChrdm0tJmd0O2FyY2gueGVuLnNoaW5mb19jYWNoZS5hY3RpdmUgJmFtcDsmYW1wOwotCQkgICAga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KGt2bSkpCi0JCQlyID0gMTsKJiM0MzsJCWlmIChrdm0tJmd0O2FyY2gueGVuLnNoaW5mb19jYWNoZS5hY3RpdmUpCiYjNDM7CQkJciA9IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChrdm0pOwogCX0KLQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKIAogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAgLTEzMDksNyAmIzQzOzEzMTEsNyBAQCBpbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKQogCQlpbnQgaTsKIAogCQlpZiAocGFnZV9udW0pCi0JCQlyZXR1cm4gMTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQkvKiBtb3YgaW1tMzIsICVlYXggKi8KIAkJaW5zdHJ1Y3Rpb25zWzBdID0gMHhiODsKQEAgLTEzMjUsMTAgJiM0MzsxMzI3LDExIEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpCiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7IFBBR0VfU0laRSAvIHNpemVvZihpbnN0cnVjdGlvbnMpOyBpJiM0MzsmIzQzOykgewogCQkJKih1MzIgKikmYW1wO2luc3RydWN0aW9uc1sxXSA9IGk7Ci0JCQlpZiAoa3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSwKJiM0MzsJCQlyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSwKIAkJCQkJCSBwYWdlX2FkZHIgJiM0MzsgKGkgKiBzaXplb2YoaW5zdHJ1Y3Rpb25zKSksCi0JCQkJCQkgaW5zdHJ1Y3Rpb25zLCBzaXplb2YoaW5zdHJ1Y3Rpb25zKSkpCi0JCQkJcmV0dXJuIDE7CiYjNDM7CQkJCQkJIGluc3RydWN0aW9ucywgc2l6ZW9mKGluc3RydWN0aW9ucykpOwomIzQzOwkJCWlmIChyKQomIzQzOwkJCQlyZXR1cm4gcjsKIAkJfQogCX0gZWxzZSB7CiAJCS8qCkBAIC0xMzQwLDEwICYjNDM7MTM0Myw5IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpCiAJCXU4IGJsb2Jfc2l6ZSA9IGxtID8ga3ZtLSZndDthcmNoLnhlbi5odm1fY29uZmlnLmJsb2Jfc2l6ZV82NAogCQkJCSAgOiBrdm0tJmd0O2FyY2gueGVuLmh2bV9jb25maWcuYmxvYl9zaXplXzMyOwogCQl1OCAqcGFnZTsKLQkJaW50IHJldDsKIAogCQlpZiAocGFnZV9udW0gJmd0Oz0gYmxvYl9zaXplKQotCQkJcmV0dXJuIDE7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJYmxvYl9hZGRyICYjNDM7PSBwYWdlX251bSAqIFBBR0VfU0laRTsKIApAQCAtMTM1MSwxNCAmIzQzOzEzNTMsMjcgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSkKIAkJaWYgKElTX0VSUihwYWdlKSkKIAkJCXJldHVybiBQVFJfRVJSKHBhZ2UpOwogCi0JCXJldCA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0KHZjcHUsIHBhZ2VfYWRkciwgcGFnZSwgUEFHRV9TSVpFKTsKJiM0MzsJCXIgPSBrdm1fdmNwdV93cml0ZV9ndWVzdCh2Y3B1LCBwYWdlX2FkZHIsIHBhZ2UsIFBBR0VfU0laRSk7CiAJCWtmcmVlKHBhZ2UpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIDE7CiYjNDM7CQlpZiAocikKJiM0MzsJCQlyZXR1cm4gcjsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKJiM0MztpbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKQomIzQzO3sKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBNU1Igd3JpdGUgcGF0aCBleHBlY3RzIGEgMC8xIHJldHVybjsgY29udmVydCB0aGUgZXJybm8gZnJvbQomIzQzOwkgKiB0aGUgc2hhcmVkIGhlbHBlciBhY2NvcmRpbmdseS4gQ2FsbGVycyB0aGF0IHdhbnQgdGhlIHJlYWwgZXJyb3IKJiM0MzsJICogKGUuZy4gdGhlIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UgYXR0cmlidXRlKQomIzQzOwkgKiBpbnZva2UgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKCkgZGlyZWN0bHkuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHZjcHUsIGRhdGEpID8gMSA6IDA7CiYjNDM7fQomIzQzOwogaW50IGt2bV94ZW5faHZtX2NvbmZpZyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgKnhoYykKIHsKIAkvKiBPbmx5IHNvbWUgZmVhdHVyZSBmbGFncyBuZWVkIHRvIGJlICplbmFibGVkKiBieSB1c2Vyc3BhY2UgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl92bWNhbGxfdGVzdC5jCmluZGV4IDI1ODUwODdjZGY1Y2JlLi4xNTM2ZDUxMGFiMzAxOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl92bWNhbGxfdGVzdC5jCkBAIC0xMiw2ICYjNDM7MTIsOCBAQAogI2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2h5cGVydi5oJiMzNDsKIAomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsKICNkZWZpbmUgSENBTExfUkVHSU9OX0dQQQkweGMwMDAwMDAwVUxMCiAjZGVmaW5lIEhDQUxMX1JFR0lPTl9TTE9UCTEwCiAKQEAgLTI2LDYgJiM0MzsyOCwxMCBAQAogI2RlZmluZSBIVkNBTExfU0lHTkFMX0VWRU5UCQkweDAwNWQKICNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfQUxJR05NRU5UCTQKIAomIzQzO2VudW0gewomIzQzOwlURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFID0gMSwKJiM0Mzt9OwomIzQzOwogc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgcmF4ID0gSU5QVVRWQUxVRTsKQEAgLTc2LDE3ICYjNDM7ODIsNjUgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKQogCQkJICAgICAmIzM0O3ImIzM0OyhyOCkpOwogCUdVRVNUX0FTU0VSVChyYXggPT0gSFZfU1RBVFVTX0lOVkFMSURfQUxJR05NRU5UKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUZXN0IEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0U6IGFzayB1c2Vyc3BhY2UKJiM0MzsJICogdG8gc2V0IHVwIE1TUiBmaWx0ZXJpbmcsIHRoZW4gd3JpdGUgdGhlIE1TUi4gVGhlIFdSTVNSIHdpbGwgZXhpdAomIzQzOwkgKiB0byB1c2Vyc3BhY2UgKG5vdCBwb3B1bGF0ZSB0aGUgcGFnZSkuIFVzZXJzcGFjZSB2ZXJpZmllcyB0aGUgcGFnZQomIzQzOwkgKiBpcyBlbXB0eSwgdXNlcyB0aGUgYXR0ciB0byBwb3B1bGF0ZSBpdCwgdGhlbiByZXN1bWVzIHVzLgomIzQzOwkgKi8KJiM0MzsJR1VFU1RfU1lOQyhURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTsKJiM0MzsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDt3cm1zciYjMzQ7IDogOiAmIzM0O2MmIzM0OyAoWEVOX0hZUEVSQ0FMTF9NU1IpLAomIzQzOwkJCSAgICAgJiMzNDthJiMzNDsgKEhDQUxMX1JFR0lPTl9HUEEgJmFtcDsgMHhmZmZmZmZmZiksCiYjNDM7CQkJICAgICAmIzM0O2QmIzM0OyAoSENBTExfUkVHSU9OX0dQQSAmZ3Q7Jmd0OyAzMikpOwomIzQzOwomIzQzOwkvKiBVc2Vyc3BhY2UgcG9wdWxhdGVkIHRoZSBwYWdlIHZpYSB0aGUgYXR0ciDigJQgdmVyaWZ5IGl0IHdvcmtzICovCiYjNDM7CXJheCA9IElOUFVUVkFMVUU7CiYjNDM7CXJkaSA9IEFSR1ZBTFVFKDEpOwomIzQzOwlyc2kgPSBBUkdWQUxVRSgyKTsKJiM0MzsJcmR4ID0gQVJHVkFMVUUoMyk7CiYjNDM7CXIxMCA9IEFSR1ZBTFVFKDQpOwomIzQzOwlyOCA9IEFSR1ZBTFVFKDUpOwomIzQzOwlyOSA9IEFSR1ZBTFVFKDYpOwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O2NhbGwgKiUxJiMzNDsgOiAmIzM0Oz1hJiMzNDsocmF4KSA6CiYjNDM7CQkJICAgICAmIzM0O3ImIzM0OyhIQ0FMTF9SRUdJT05fR1BBICYjNDM7IElOUFVUVkFMVUUgKiAzMiksCiYjNDM7CQkJICAgICAmIzM0O2EmIzM0OyhyYXgpLCAmIzM0O0QmIzM0OyhyZGkpLCAmIzM0O1MmIzM0Oyhyc2kpLCAmIzM0O2QmIzM0OyhyZHgpLAomIzQzOwkJCSAgICAgJiMzNDtyJiMzNDsocjEwKSwgJiMzNDtyJiMzNDsocjgpLCAmIzM0O3ImIzM0OyhyOSkpOwomIzQzOwlHVUVTVF9BU1NFUlQocmF4ID09IFJFVFZBTFVFKTsKJiM0MzsKIAlHVUVTVF9ET05FKCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBzZXR1cF9tc3JfZmlsdGVyKHN0cnVjdCBrdm1fdm0gKnZtKQomIzQzO3sKJiM0MzsJdWludDY0X3QgZGVueV9iaXRzID0gMDsKJiM0MzsJc3RydWN0IGt2bV9tc3JfZmlsdGVyIGZpbHRlciA9IHsKJiM0MzsJCS5mbGFncyA9IEtWTV9NU1JfRklMVEVSX0RFRkFVTFRfQUxMT1csCiYjNDM7CQkucmFuZ2VzID0gewomIzQzOwkJCXsKJiM0MzsJCQkJLmZsYWdzID0gS1ZNX01TUl9GSUxURVJfV1JJVEUsCiYjNDM7CQkJCS5ubXNycyA9IDEsCiYjNDM7CQkJCS5iYXNlID0gWEVOX0hZUEVSQ0FMTF9NU1IsCiYjNDM7CQkJCS5iaXRtYXAgPSAodWludDhfdCAqKSZhbXA7ZGVueV9iaXRzLAomIzQzOwkJCX0sCiYjNDM7CQl9LAomIzQzOwl9OwomIzQzOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX1g4Nl9TRVRfTVNSX0ZJTFRFUiwgJmFtcDtmaWx0ZXIpOwomIzQzO30KJiM0MzsKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJdW5zaWduZWQgaW50IHhlbl9jYXBzOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJYm9vbCBtc3JfZmlsdGVyX3JlYWR5ID0gZmFsc2U7CiAKIAl4ZW5fY2FwcyA9IGt2bV9jaGVja19jYXAoS1ZNX0NBUF9YRU5fSFZNKTsKIAlURVNUX1JFUVVJUkUoeGVuX2NhcHMgJmFtcDsgS1ZNX1hFTl9IVk1fQ09ORklHX0lOVEVSQ0VQVF9IQ0FMTCk7CiYjNDM7CVRFU1RfUkVRVUlSRSh4ZW5fY2FwcyAmYW1wOyBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0UpOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1g4Nl9VU0VSX1NQQUNFX01TUikpOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1g4Nl9NU1JfRklMVEVSKSk7CiAKIAl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfY29kZSk7CiAJdmNwdV9zZXRfaHZfY3B1aWQodmNwdSk7CkBAIC0xMjMsNiAmIzQzOzE3NywzNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJY29udGludWU7CiAJCX0KIAomIzQzOwkJaWYgKHJ1bi0mZ3Q7ZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfWDg2X1dSTVNSKSB7CiYjNDM7CQkJLyogTVNSIGZpbHRlciBjYXVnaHQgdGhlIFhlbiBoeXBlcmNhbGwgTVNSIHdyaXRlICovCiYjNDM7CQkJVEVTVF9BU1NFUlQobXNyX2ZpbHRlcl9yZWFkeSwKJiM0MzsJCQkJICAgICYjMzQ7VW5leHBlY3RlZCBXUk1TUiBleGl0IGJlZm9yZSBmaWx0ZXIgc2V0dXAmIzM0Oyk7CiYjNDM7CQkJVEVTVF9BU1NFUlRfRVEocnVuLSZndDttc3IuaW5kZXgsIFhFTl9IWVBFUkNBTExfTVNSKTsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSBob3N0X2luaXRpYXRlZCBjaGVjayBzaG91bGQgaGF2ZSBwcmV2ZW50ZWQKJiM0MzsJCQkgKiBLVk0gZnJvbSBwb3B1bGF0aW5nIHRoZSBwYWdlLiBWZXJpZnkgaXQmIzM5O3MgZW1wdHkuCiYjNDM7CQkJICovCiYjNDM7CQkJdWludDhfdCAqaGNhbGxfcGFnZSA9IGFkZHJfZ3BhMmh2YSh2bSwgSENBTExfUkVHSU9OX0dQQSk7CiYjNDM7CQkJVEVTVF9BU1NFUlRfRVEoaGNhbGxfcGFnZVswXSwgMCk7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBOb3cgdXNlIHRoZSBhdHRyIHRvIHBvcHVsYXRlIHRoZSBwYWdlLCBhcyBhCiYjNDM7CQkJICogVk1NIHdvdWxkIGFmdGVyIGludGVyY2VwdGluZyB0aGUgTVNSIHdyaXRlLgomIzQzOwkJCSAqLwomIzQzOwkJCXN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciBhdHRyID0gewomIzQzOwkJCQkudHlwZSA9IEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UsCiYjNDM7CQkJCS51LmdwYSA9IEhDQUxMX1JFR0lPTl9HUEEsCiYjNDM7CQkJfTsKJiM0MzsJCQl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9YRU5fVkNQVV9TRVRfQVRUUiwgJmFtcDthdHRyKTsKJiM0MzsKJiM0MzsJCQkvKiBWZXJpZnkgdGhlIHBhZ2UgaXMgbm93IHBvcHVsYXRlZCAqLwomIzQzOwkJCVRFU1RfQVNTRVJUX0VRKGhjYWxsX3BhZ2VbMF0sIDB4YjgpOwomIzQzOwomIzQzOwkJCXJ1bi0mZ3Q7bXNyLmVycm9yID0gMDsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJVEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTsKIAogCQlzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1LCAmYW1wO3VjKSkgewpAQCAtMTMwLDYgJiM0MzsyMTQsMTggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCVJFUE9SVF9HVUVTVF9BU1NFUlQodWMpOwogCQkJLyogTk9UIFJFQUNIRUQgKi8KIAkJY2FzZSBVQ0FMTF9TWU5DOgomIzQzOwkJCVRFU1RfQVNTRVJUX0VRKHVjLmFyZ3NbMV0sIFRFU1RfV1JJVEVfSFlQRVJDQUxMX1BBR0UpOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogR3Vlc3QgaXMgYWJvdXQgdG8gd3JpdGUgdGhlIFhlbiBNU1IuIENsZWFyIHRoZQomIzQzOwkJCSAqIGh5cGVyY2FsbCBwYWdlLCBpbnN0YWxsIE1TUiBmaWx0ZXIgdG8gaW50ZXJjZXB0CiYjNDM7CQkJICogdGhlIHdyaXRlLCBhbmQgZW5hYmxlIHVzZXJzcGFjZSBNU1IgZXhpdHMuCiYjNDM7CQkJICovCiYjNDM7CQkJbWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgSENBTExfUkVHSU9OX0dQQSksIDAsIFBBR0VfU0laRSk7CiYjNDM7CQkJdm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9YODZfVVNFUl9TUEFDRV9NU1IsCiYjNDM7CQkJCSAgICAgIEtWTV9NU1JfRVhJVF9SRUFTT05fRklMVEVSKTsKJiM0MzsJCQlzZXR1cF9tc3JfZmlsdGVyKHZtKTsKJiM0MzsJCQltc3JfZmlsdGVyX3JlYWR5ID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIFVDQUxMX0RPTkU6CiAJCQlnb3RvIGRvbmU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gWGVuIFZDUFUgSHlwZXJjYWxsIFBhZ2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IGludHJvZHVjZXMgYSBuZXcgS1ZNIFhlbiBWQ1BVIGF0dHJpYnV0ZSwgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgLiBUaGUgZ2lzdCBpcywgaXQgYWxsb3dzIHVzZXJzcGFjZSB0byB0cmlnZ2VyIHRoZSBYZW4gaHlwZXJjYWxsIHBhZ2UgcG9wdWxhdGlvbiBhdCBhIHNwZWNpZmllZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLiBJdCYjMzk7cyBiYXNpY2FsbHkgYSBzYWZlciB3YXkgdG8gZG8gaXQsIGJ5cGFzc2luZyB0aGUgZGlyZWN0IE1TUiB3cml0ZSwgd2hpY2ggaXMgYmxvY2tlZCBmb3Igc2VjdXJpdHkgcmVhc29ucyB3aGVuIHRoZSBob3N0IHRyaWVzIHRvIHdyaXRlIHRvIHRoZSBoeXBlcmNhbGwgcGFnZS4gU21hcnQuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHRoaW5nLiBGaXJzdCwgZG9jdW1lbnRhdGlvbiBpbiBgRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0YCAtIGdvdHRhIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIHVwIHRvIHNudWZmLiBUaGVuLCB0aGUgdXN1YWwgc3VzcGVjdHM6IGBhcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oYCBhZGRpbmcgdGhlIG5ldyBkZWZpbml0aW9ucyBgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFYCBhbmQgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgLiBgYXJjaC94ODYva3ZtL3g4Ni5jYCBpbmNsdWRlcyB0aGUgYEtWTV9YRU5fSFZNX0NPTkZJR19XUklURV9IWVBFUkNBTExfUEFHRWAgaW4gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLiBTdGFuZGFyZCBzdHVmZiBzbyBmYXIuCgpOb3csIGhlcmUmIzM5O3Mgd2hlcmUgdGhlIG1lYXQgaXMsIGBhcmNoL3g4Ni9rdm0veGVuLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBoYW5kbGluZyBgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRWAgaW4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAuIEl0JiMzOTtzIGNhbGxpbmcgYF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZSh2Y3B1LCBkYXRhLSZndDt1LmdwYSlgLiBBaCwgYW5kIEkgc2VlIHRoZXkgcmVmYWN0b3JlZCB0aGUgZXhpc3RpbmcgYGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VgIGludG8gdGhpcyBpbnRlcm5hbCBmdW5jdGlvbiBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYCB0byByZXR1cm4gcHJvcGVyIGVycm9yIGNvZGVzIGxpa2UgYC1FSU5WQUxgLCBpbnN0ZWFkIG9mIHJldHVybmluZyBgMWAgb24gZXJyb3IuIFRoZW4gdGhlIG9yaWdpbmFsIGBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYCB3cmFwcyB0aGF0IHRvIHN0YXkgYmFja3dhcmQgY29tcGF0aWJsZS4gR29vZCBtb3ZlLCBjbGVhbmVyIGVycm9yIGhhbmRsaW5nLgoKQW5kIGZpbmFsbHksIHdlJiMzOTt2ZSBnb3QgYSBzZWxmdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmNgLCBzbyBpdCYjMzk7cyB0ZXN0ZWQuIEV4Y2VsbGVudCEKClNvLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEtWTSBYZW4gZW11bGF0aW9uLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgS1ZNX1hFTl9WQ1BVX1NFVF9BVFRSYCBpb2N0bC4gUmlnaHQsIGdpdmVuIHRoYXQgaXQmIzM5O3MgdXNlcnNwYWNlLWZhY2luZywgYW5kIGRlYWxzIHdpdGggaHlwZXJjYWxscywgd2UgYWJzb2x1dGVseSBuZWVkIHRvIGZ1enogdGhpcyEgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBLY29uZmlncy4gTGV0JiMzOTtzIGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZm9yIGBLVk1gIGFuZCBgS1ZNX1hFTmAuLi4gZ290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9YRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOTM9Y29uZmlnIEtWTV9IWVBFUlZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Nzg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0vWGVuIENvbmZpZ3VyYXRpb24gZm9yIFBvdGVudGlhbCBQZXJmb3JtYW5jZSBCb3R0bGVuZWNrcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBLVk1gIGFuZCBgS1ZNX1hFTmAsIGFuZCBJJiMzOTttIHRyeWluZyB0byBwaW5wb2ludCB3aGVyZSB0aGUgZm9jdXMgbGllcy4gVGltZSB0byBkaWcgaW50byB0aGUgc3ltYm9scy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VgLCBhbmQgYGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBpcyBldmVuIHdvcnRoIGEgZGVlcGVyIGxvb2sgaW4gdGVybXMgb2YgYmVpbmcgYSBob3QgcGF0aC4gQWgsIGlvY3RsIGhhbmRsZXIsIG5vdCBhIHByaW1hcnkgY29uY2VybiBmb3IgcGVyZm9ybWFuY2UgcmlnaHQgbm93LgoKTm93LCB0aGF0IGxlYXZlcyBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYC4gVGhhdCYjMzk7cyB0aGUgbmV3ZXIgZnVuY3Rpb24sIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGZvY3VzIHRoZXJlLiBKdXN0IGdvaW5nIHRvIHF1aWNrbHkgcmUtdmFsaWRhdGUgdGhvc2UgY29uZmlnIG9wdGlvbnMgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzk0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIEtWTS1YZW4gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9uIFN5bWJvbHMqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYEtWTWAgYW5kIGBLVk1fWEVOYCBjb25maWd1cmF0aW9ucyBoZXJlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGtleSBjb25maWd1cmF0aW9uIGlkZW50aWZpZXJzLCBhbmQgd2hhdCB0aGV5IG1lYW4gZnJvbSBhbiBhcmNoaXRlY3R1cmFsIHN0YW5kcG9pbnQuCgpOb3csIEkmIzM5O20gemVyb2luZyBpbiBvbiBhIGNvdXBsZSBvZiBmdW5jdGlvbiBzeW1ib2xzLiBTcGVjaWZpY2FsbHksIEkgc2VlIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFuZCBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYC4gVGhlc2UgKmZlZWwqIHNpZ25pZmljYW50LCBhbmQgSSYjMzk7bSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgdGhlIGNvcmUgbWVjaGFuaXNtcy4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAgaW1tZWRpYXRlbHkgc3RhbmRzIG91dC4gSXQmIzM5O3Mgc2NyZWFtaW5nICYjMzQ7dmlydHVhbCBDUFUgYXR0cmlidXRlIG1hbmlwdWxhdGlvbiYjMzQ7IGFuZCB0aGUgWGVuIGludGVncmF0aW9uIGlzIGtleS4gVGhhdCBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlIHNwZWNpZmljIGNvbnRleHQgYW5kIHdoZXJlIGl0IG9wZXJhdGVzIHdpdGggdGhlIGh5cGVydmlzb3IuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBpcyBhIHNvbGlkIGZvY3VzIHN5bWJvbC4gSSBzdXNwZWN0IGl0JiMzOTtzIGNlbnRyYWwgdG8gaG93IEtWTSBpbnRlcmFjdHMgd2l0aCBYZW4gdG8gbWFuYWdlIHZpcnR1YWwgQ1BVcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiBkaXZpbmcgZGVlcGVyLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgbWFwcyB0byBYZW4mIzM5O3Mgc3RydWN0dXJlcyBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHR3byB2aXJ0dWFsIG1hY2hpbmUgbW9uaXRvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV94ZW5fdmNwdV9zZXRfYXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTYxOTA9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NjEyLVx0XHRcdGdvdG8gb3V0O1xuYXJjaC94ODYva3ZtL3g4Ni5jOjY2MTM6XHRcdHIgPSBrdm1feGVuX3ZjcHVfc2V0X2F0dHIodmNwdSwgXHUwMDI2eHZhKTtcbmFyY2gveDg2L2t2bS94ODYuYy02NjE0LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9ODUyPWludCBrdm1feGVuX2h2bV9nZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy05MDYtXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTA3OmludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTA4LXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmg9MjI9dm9pZCBrdm1feGVuX2luamVjdF92Y3B1X3ZlY3RvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3hlbi5oOjIzOmludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xuYXJjaC94ODYva3ZtL3hlbi5oLTI0LWludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjQxCgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNLVhlbiBIeXBlcmNhbGwgUGFnZSBQb3B1bGF0aW9uKioKCk9rYXksIHNvIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGlzIGRlZmluaXRlbHkgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoaXMgcHV6emxlOyBpdCYjMzk7cyB0aGUgaW9jdGwgaGFuZGxlciBmb3IgYEtWTV9YRU5fVkNQVV9TRVRfQVRUUmAsIG1ha2luZyBpdCBhIGtleSBmb2N1cyBwb2ludC4gIEFuZCwgb2YgY291cnNlLCBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYCBsb29rcyBlcXVhbGx5IGNyaXRpY2FsLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBhdCB0aGUgZm9yZWZyb250LgoKTGV0JiMzOTtzIHNlZSwgYXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBpbXBvcnRhbnQgaGVyZT8gIEFoLCB5ZXMsIGBLVk1fWEVOYCBkZXBlbmRzIG9uIGBLVk1gLiBHb3QgaXQuCgpJbiBzaG9ydCwgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgYWRkaXRpb24gb2YgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIGFuZCBpdHMgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5IC0gc3BlY2lmaWNhbGx5IHRoZSBhYmlsaXR5IGZvciB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlIC0gaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgS1ZNX1hFTl9WQ1BVX1NFVF9BVFRSYCBpb2N0bCBhbmQgZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGNvcmUgS1ZNIFhlbiBlbXVsYXRpb24uIE15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgYXJlYXMgYXJvdW5kIHRob3NlIHR3byBzeW1ib2xzOiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBhbmQgYF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZWAuIEkgd2lsbCB3YW50IHRvIGVuc3VyZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgS1ZNYCBhbmQgYEtWTV9YRU5gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1feGVuX3ZjcHVfc2V0X2F0dHImIzM0OywKICAgICYjMzQ7X19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgS1ZNIFhlbiBWQ1BVIGF0dHJpYnV0ZSBgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRWAgd2hpY2ggYWxsb3dzIHVzZXJzcGFjZSB0byB0cmlnZ2VyIHRoZSBwb3B1bGF0aW9uIG9mIHRoZSBYZW4gaHlwZXJjYWxsIHBhZ2UuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYEtWTV9YRU5fVkNQVV9TRVRfQVRUUmAgaW9jdGwgYW5kIG1vZGlmaWVzIGNvcmUgS1ZNIFhlbiBlbXVsYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl92Y3B1X3NldF9hdHRyJiMzNDssCiAgICAmIzM0O19fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBYZW4gVkNQVSBhdHRyaWJ1dGUgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDk6MzguNTk2NTc1ODg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NjYwOTE4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3hlbl92Y3B1X3NldF9hdHRyXCIsXG4gICAgXCJfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBYZW4gVkNQVSBhdHRyaWJ1dGUgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowOTozOC41OTY1ODMyNzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDEwMjg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE0Zjc5ZjQ5OWNlYTU4YzNjMTgyYWU4OGY5ZmNjNTVkMTc0YmUxN2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTc6MDk6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuaW5kZXggYTVmOWVlOTJmNDNlOGQuLjNjNmFlZTJhMzViZmRjIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbkBAIC01ODEyLDYgKzU4MTIsMTkgQEAgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9VUENBTExfVkVDVE9SXFxuICAgdmVjdG9yIGNvbmZpZ3VyZWQgd2l0aCBIVk1fUEFSQU1fQ0FMTEJBQ0tfSVJRLiBJdCBpcyBkaXNhYmxlZCBieVxcbiAgIHNldHRpbmcgdGhlIHZlY3RvciB0byB6ZXJvLlxcbiBcXG4rS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRVxcbisgIFRoaXMgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBLVk1fQ0FQX1hFTl9IVk0gaW9jdGwgaW5kaWNhdGVzXFxuKyAgc3VwcG9ydCBmb3IgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFLiBJdCB0cmlnZ2Vyc1xcbisgIHBvcHVsYXRpb24gb2YgdGhlIFhlbiBoeXBlcmNhbGwgcGFnZSBhdCB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc1xcbisgIHNwZWNpZmllZCBpbiBgYGdwYWBgLCBqdXN0IGFzIGlmIHRoZSBndWVzdCBoYWQgd3JpdHRlbiB0byB0aGVcXG4rICBoeXBlcmNhbGwgTVNSLiBUaGlzIGlzIGludGVuZGVkIGZvciBWTU1zIHRoYXQgaW50ZXJjZXB0IHRoZSBndWVzdCdzXFxuKyAgTVNSIHdyaXRlIChlLmcuIHRvIHRyYWNrIGFuIGVwb2NoIGZvciBrZXhlYy9jcmFzaCByZWNvdmVyeSkgYW5kIG5lZWRcXG4rICB0byByZXBsYXkgdGhlIHdyaXRlIGZyb20gaG9zdCBjb250ZXh0LiBEaXJlY3QgaG9zdC1pbml0aWF0ZWQgd3JpdGVzXFxuKyAgdmlhIEtWTV9TRVRfTVNSUyBhcmUgYmxvY2tlZCBmb3Igc2FmZXR5OyB0aGlzIGF0dHJpYnV0ZSBwcm92aWRlcyB0aGVcXG4rICBjb3JyZWN0IGFsdGVybmF0aXZlLiBBcyB3aXRoIGEgbm9uLWludGVyY2VwdGVkIGd1ZXN0IHdyaXRlIHRvIHRoZVxcbisgIGh5cGVyY2FsbCBNU1IsIGl0IGFsc28gbGF0Y2hlcyB0aGUgJ2xvbmcgbW9kZScgZm9yIHRoZSBWTSwgd2hpY2hcXG4rICBkZXRlcm1pbmVzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuXFxuK1xcbiBcXG4gNC4xMjkgS1ZNX1hFTl9WQ1BVX0dFVF9BVFRSXFxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbmluZGV4IDE1ODVlYzgwNDA2NjZlLi43NzMyYjkyYTRkYjAyZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbkBAIC01OTgsNiArNTk4LDcgQEAgc3RydWN0IGt2bV94ODZfbWNlIHtcXG4gI2RlZmluZSBLVk1fWEVOX0hWTV9DT05GSUdfUlVOU1RBVEVfVVBEQVRFX0ZMQUdcXHQoMSBcXHUwMDNjXFx1MDAzYyA2KVxcbiAjZGVmaW5lIEtWTV9YRU5fSFZNX0NPTkZJR19QVkNMT0NLX1RTQ19VTlNUQUJMRVxcdCgxIFxcdTAwM2NcXHUwMDNjIDcpXFxuICNkZWZpbmUgS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQVxcdCgxIFxcdTAwM2NcXHUwMDNjIDgpXFxuKyNkZWZpbmUgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFXFx0KDEgXFx1MDAzY1xcdTAwM2MgOSlcXG4gXFxuICNkZWZpbmUgS1ZNX1hFTl9NU1JfTUlOX0lOREVYXFx0XFx0XFx0MHg0MDAwMDAwMHVcXG4gI2RlZmluZSBLVk1fWEVOX01TUl9NQVhfSU5ERVhcXHRcXHRcXHQweDRmZmZmZmZmdVxcbkBAIC03MDYsNiArNzA3LDggQEAgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyIHtcXG4gI2RlZmluZSBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1VQQ0FMTF9WRUNUT1JcXHQweDhcXG4gLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9YRU5fSFZNIC8gS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQSAqL1xcbiAjZGVmaW5lIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfVkNQVV9JTkZPX0hWQVxcdDB4OVxcbisvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1hFTl9IVk0gLyBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0UgKi9cXG4rI2RlZmluZSBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1dSSVRFX0hZUEVSQ0FMTF9QQUdFIDB4YVxcbiBcXG4gLyogU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiBjb21tYW5kICovXFxuIGVudW0gc2V2X2NtZF9pZCB7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IGFmY2FjMTA0Mjk0N2E1Li5kN2YyM2MwYmZmNzQ1NiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtNDg2OSw3ICs0ODY5LDggQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4gXFx0XFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fMkxFVkVMIHxcXG4gXFx0XFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fU0VORCB8XFxuIFxcdFxcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfUFZDTE9DS19UU0NfVU5TVEFCTEUgfFxcbi1cXHRcXHQgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQTtcXG4rXFx0XFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19TSEFSRURfSU5GT19IVkEgfFxcbitcXHRcXHQgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFO1xcbiBcXHRcXHRpZiAoc2NoZWRfaW5mb19vbigpKVxcbiBcXHRcXHRcXHRyIHw9IEtWTV9YRU5fSFZNX0NPTkZJR19SVU5TVEFURSB8XFxuIFxcdFxcdFxcdCAgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1JVTlNUQVRFX1VQREFURV9GTEFHO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcXG5pbmRleCA2OTRiMzFjMWZjYzlhZi4uNTA0MjNkZjZlMjJkOWQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3hlbi5jXFxuQEAgLTMyLDYgKzMyLDcgQEBcXG4gc3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKTtcXG4gc3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xcbiBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpO1xcbitzdGF0aWMgaW50IF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKTtcXG4gXFxuIERFRklORV9TVEFUSUNfS0VZX0RFRkVSUkVEX0ZBTFNFKGt2bV94ZW5fZW5hYmxlZCwgSFopO1xcbiBcXG5AQCAtMTEzOCw2ICsxMTM5LDEwIEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcbitcXHRjYXNlIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0U6XFxuK1xcdFxcdHIgPSBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2UodmNwdSwgZGF0YS1cXHUwMDNldS5ncGEpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTEyNzMsNyArMTI3OCw3IEBAIGludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXFxuIFxcdHJldHVybiByO1xcbiB9XFxuIFxcbi1pbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxcbitzdGF0aWMgaW50IF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0dTMyIHBhZ2VfbnVtID0gZGF0YSBcXHUwMDI2IH5QQUdFX01BU0s7XFxuQEAgLTEyODEsNyArMTI4Niw2IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXFxuIFxcdGJvb2wgbG0gPSBpc19sb25nX21vZGUodmNwdSk7XFxuIFxcdGludCByID0gMDtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xcbiBcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnhlbi5sb25nX21vZGUgIT0gbG0pIHtcXG4gXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnhlbi5sb25nX21vZGUgPSBsbTtcXG4gXFxuQEAgLTEyODksMTEgKzEyOTMsOSBAQCBpbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxcbiBcXHRcXHQgKiBSZS1pbml0aWFsaXplIHNoYXJlZF9pbmZvIHRvIHB1dCB0aGUgd2FsbGNsb2NrIGluIHRoZVxcbiBcXHRcXHQgKiBjb3JyZWN0IHBsYWNlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLmFjdGl2ZSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KGt2bSkpXFxuLVxcdFxcdFxcdHIgPSAxO1xcbitcXHRcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUuYWN0aXZlKVxcbitcXHRcXHRcXHRyID0ga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KGt2bSk7XFxuIFxcdH1cXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcXG4gXFxuIFxcdGlmIChyKVxcbiBcXHRcXHRyZXR1cm4gcjtcXG5AQCAtMTMwOSw3ICsxMzExLDcgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcXG4gXFx0XFx0aW50IGk7XFxuIFxcbiBcXHRcXHRpZiAocGFnZV9udW0pXFxuLVxcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdFxcdC8qIG1vdiBpbW0zMiwgJWVheCAqL1xcbiBcXHRcXHRpbnN0cnVjdGlvbnNbMF0gPSAweGI4O1xcbkBAIC0xMzI1LDEwICsxMzI3LDExIEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXFxuIFxcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUEFHRV9TSVpFIC8gc2l6ZW9mKGluc3RydWN0aW9ucyk7IGkrKykge1xcbiBcXHRcXHRcXHQqKHUzMiAqKVxcdTAwMjZpbnN0cnVjdGlvbnNbMV0gPSBpO1xcbi1cXHRcXHRcXHRpZiAoa3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSxcXG4rXFx0XFx0XFx0ciA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0KHZjcHUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBwYWdlX2FkZHIgKyAoaSAqIHNpemVvZihpbnN0cnVjdGlvbnMpKSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IGluc3RydWN0aW9ucywgc2l6ZW9mKGluc3RydWN0aW9ucykpKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGluc3RydWN0aW9ucywgc2l6ZW9mKGluc3RydWN0aW9ucykpO1xcbitcXHRcXHRcXHRpZiAocilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG5AQCAtMTM0MCwxMCArMTM0Myw5IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXFxuIFxcdFxcdHU4IGJsb2Jfc2l6ZSA9IGxtID8ga3ZtLVxcdTAwM2VhcmNoLnhlbi5odm1fY29uZmlnLmJsb2Jfc2l6ZV82NFxcbiBcXHRcXHRcXHRcXHQgIDoga3ZtLVxcdTAwM2VhcmNoLnhlbi5odm1fY29uZmlnLmJsb2Jfc2l6ZV8zMjtcXG4gXFx0XFx0dTggKnBhZ2U7XFxuLVxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHRpZiAocGFnZV9udW0gXFx1MDAzZT0gYmxvYl9zaXplKVxcbi1cXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRcXHRibG9iX2FkZHIgKz0gcGFnZV9udW0gKiBQQUdFX1NJWkU7XFxuIFxcbkBAIC0xMzUxLDE0ICsxMzUzLDI3IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXFxuIFxcdFxcdGlmIChJU19FUlIocGFnZSkpXFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xcbiBcXG4tXFx0XFx0cmV0ID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSwgcGFnZV9hZGRyLCBwYWdlLCBQQUdFX1NJWkUpO1xcbitcXHRcXHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSwgcGFnZV9hZGRyLCBwYWdlLCBQQUdFX1NJWkUpO1xcbiBcXHRcXHRrZnJlZShwYWdlKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4raW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcXG4re1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIE1TUiB3cml0ZSBwYXRoIGV4cGVjdHMgYSAwLzEgcmV0dXJuOyBjb252ZXJ0IHRoZSBlcnJubyBmcm9tXFxuK1xcdCAqIHRoZSBzaGFyZWQgaGVscGVyIGFjY29yZGluZ2x5LiBDYWxsZXJzIHRoYXQgd2FudCB0aGUgcmVhbCBlcnJvclxcbitcXHQgKiAoZS5nLiB0aGUgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRSBhdHRyaWJ1dGUpXFxuK1xcdCAqIGludm9rZSBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2UoKSBkaXJlY3RseS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2UodmNwdSwgZGF0YSkgPyAxIDogMDtcXG4rfVxcbitcXG4gaW50IGt2bV94ZW5faHZtX2NvbmZpZyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgKnhoYylcXG4ge1xcbiBcXHQvKiBPbmx5IHNvbWUgZmVhdHVyZSBmbGFncyBuZWVkIHRvIGJlICplbmFibGVkKiBieSB1c2Vyc3BhY2UgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmNcXG5pbmRleCAyNTg1MDg3Y2RmNWNiZS4uMTUzNmQ1MTBhYjMwMTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmNcXG5AQCAtMTIsNiArMTIsOCBAQFxcbiAjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJoeXBlcnYuaFxcXCJcXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rXFxuICNkZWZpbmUgSENBTExfUkVHSU9OX0dQQVxcdDB4YzAwMDAwMDBVTExcXG4gI2RlZmluZSBIQ0FMTF9SRUdJT05fU0xPVFxcdDEwXFxuIFxcbkBAIC0yNiw2ICsyOCwxMCBAQFxcbiAjZGVmaW5lIEhWQ0FMTF9TSUdOQUxfRVZFTlRcXHRcXHQweDAwNWRcXG4gI2RlZmluZSBIVl9TVEFUVVNfSU5WQUxJRF9BTElHTk1FTlRcXHQ0XFxuIFxcbitlbnVtIHtcXG4rXFx0VEVTVF9XUklURV9IWVBFUkNBTExfUEFHRSA9IDEsXFxuK307XFxuK1xcbiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyByYXggPSBJTlBVVFZBTFVFO1xcbkBAIC03NiwxNyArODIsNjUgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxcbiBcXHRcXHRcXHQgICAgIFxcXCJyXFxcIihyOCkpO1xcbiBcXHRHVUVTVF9BU1NFUlQocmF4ID09IEhWX1NUQVRVU19JTlZBTElEX0FMSUdOTUVOVCk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUZXN0IEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0U6IGFzayB1c2Vyc3BhY2VcXG4rXFx0ICogdG8gc2V0IHVwIE1TUiBmaWx0ZXJpbmcsIHRoZW4gd3JpdGUgdGhlIE1TUi4gVGhlIFdSTVNSIHdpbGwgZXhpdFxcbitcXHQgKiB0byB1c2Vyc3BhY2UgKG5vdCBwb3B1bGF0ZSB0aGUgcGFnZSkuIFVzZXJzcGFjZSB2ZXJpZmllcyB0aGUgcGFnZVxcbitcXHQgKiBpcyBlbXB0eSwgdXNlcyB0aGUgYXR0ciB0byBwb3B1bGF0ZSBpdCwgdGhlbiByZXN1bWVzIHVzLlxcbitcXHQgKi9cXG4rXFx0R1VFU1RfU1lOQyhURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTtcXG4rXFxuK1xcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJ3cm1zclxcXCIgOiA6IFxcXCJjXFxcIiAoWEVOX0hZUEVSQ0FMTF9NU1IpLFxcbitcXHRcXHRcXHQgICAgIFxcXCJhXFxcIiAoSENBTExfUkVHSU9OX0dQQSBcXHUwMDI2IDB4ZmZmZmZmZmYpLFxcbitcXHRcXHRcXHQgICAgIFxcXCJkXFxcIiAoSENBTExfUkVHSU9OX0dQQSBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXG4rXFx0LyogVXNlcnNwYWNlIHBvcHVsYXRlZCB0aGUgcGFnZSB2aWEgdGhlIGF0dHIg4oCUIHZlcmlmeSBpdCB3b3JrcyAqL1xcbitcXHRyYXggPSBJTlBVVFZBTFVFO1xcbitcXHRyZGkgPSBBUkdWQUxVRSgxKTtcXG4rXFx0cnNpID0gQVJHVkFMVUUoMik7XFxuK1xcdHJkeCA9IEFSR1ZBTFVFKDMpO1xcbitcXHRyMTAgPSBBUkdWQUxVRSg0KTtcXG4rXFx0cjggPSBBUkdWQUxVRSg1KTtcXG4rXFx0cjkgPSBBUkdWQUxVRSg2KTtcXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcImNhbGwgKiUxXFxcIiA6IFxcXCI9YVxcXCIocmF4KSA6XFxuK1xcdFxcdFxcdCAgICAgXFxcInJcXFwiKEhDQUxMX1JFR0lPTl9HUEEgKyBJTlBVVFZBTFVFICogMzIpLFxcbitcXHRcXHRcXHQgICAgIFxcXCJhXFxcIihyYXgpLCBcXFwiRFxcXCIocmRpKSwgXFxcIlNcXFwiKHJzaSksIFxcXCJkXFxcIihyZHgpLFxcbitcXHRcXHRcXHQgICAgIFxcXCJyXFxcIihyMTApLCBcXFwiclxcXCIocjgpLCBcXFwiclxcXCIocjkpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKHJheCA9PSBSRVRWQUxVRSk7XFxuK1xcbiBcXHRHVUVTVF9ET05FKCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHNldHVwX21zcl9maWx0ZXIoc3RydWN0IGt2bV92bSAqdm0pXFxuK3tcXG4rXFx0dWludDY0X3QgZGVueV9iaXRzID0gMDtcXG4rXFx0c3RydWN0IGt2bV9tc3JfZmlsdGVyIGZpbHRlciA9IHtcXG4rXFx0XFx0LmZsYWdzID0gS1ZNX01TUl9GSUxURVJfREVGQVVMVF9BTExPVyxcXG4rXFx0XFx0LnJhbmdlcyA9IHtcXG4rXFx0XFx0XFx0e1xcbitcXHRcXHRcXHRcXHQuZmxhZ3MgPSBLVk1fTVNSX0ZJTFRFUl9XUklURSxcXG4rXFx0XFx0XFx0XFx0Lm5tc3JzID0gMSxcXG4rXFx0XFx0XFx0XFx0LmJhc2UgPSBYRU5fSFlQRVJDQUxMX01TUixcXG4rXFx0XFx0XFx0XFx0LmJpdG1hcCA9ICh1aW50OF90ICopXFx1MDAyNmRlbnlfYml0cyxcXG4rXFx0XFx0XFx0fSxcXG4rXFx0XFx0fSxcXG4rXFx0fTtcXG4rXFxuK1xcdHZtX2lvY3RsKHZtLCBLVk1fWDg2X1NFVF9NU1JfRklMVEVSLCBcXHUwMDI2ZmlsdGVyKTtcXG4rfVxcbitcXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgeGVuX2NhcHM7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGJvb2wgbXNyX2ZpbHRlcl9yZWFkeSA9IGZhbHNlO1xcbiBcXG4gXFx0eGVuX2NhcHMgPSBrdm1fY2hlY2tfY2FwKEtWTV9DQVBfWEVOX0hWTSk7XFxuIFxcdFRFU1RfUkVRVUlSRSh4ZW5fY2FwcyBcXHUwMDI2IEtWTV9YRU5fSFZNX0NPTkZJR19JTlRFUkNFUFRfSENBTEwpO1xcbitcXHRURVNUX1JFUVVJUkUoeGVuX2NhcHMgXFx1MDAyNiBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0UpO1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1g4Nl9VU0VSX1NQQUNFX01TUikpO1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1g4Nl9NU1JfRklMVEVSKSk7XFxuIFxcbiBcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFxcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcXG4gXFx0dmNwdV9zZXRfaHZfY3B1aWQodmNwdSk7XFxuQEAgLTEyMyw2ICsxNzcsMzYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmIChydW4tXFx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX1g4Nl9XUk1TUikge1xcbitcXHRcXHRcXHQvKiBNU1IgZmlsdGVyIGNhdWdodCB0aGUgWGVuIGh5cGVyY2FsbCBNU1Igd3JpdGUgKi9cXG4rXFx0XFx0XFx0VEVTVF9BU1NFUlQobXNyX2ZpbHRlcl9yZWFkeSxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJVbmV4cGVjdGVkIFdSTVNSIGV4aXQgYmVmb3JlIGZpbHRlciBzZXR1cFxcXCIpO1xcbitcXHRcXHRcXHRURVNUX0FTU0VSVF9FUShydW4tXFx1MDAzZW1zci5pbmRleCwgWEVOX0hZUEVSQ0FMTF9NU1IpO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVGhlIGhvc3RfaW5pdGlhdGVkIGNoZWNrIHNob3VsZCBoYXZlIHByZXZlbnRlZFxcbitcXHRcXHRcXHQgKiBLVk0gZnJvbSBwb3B1bGF0aW5nIHRoZSBwYWdlLiBWZXJpZnkgaXQncyBlbXB0eS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHVpbnQ4X3QgKmhjYWxsX3BhZ2UgPSBhZGRyX2dwYTJodmEodm0sIEhDQUxMX1JFR0lPTl9HUEEpO1xcbitcXHRcXHRcXHRURVNUX0FTU0VSVF9FUShoY2FsbF9wYWdlWzBdLCAwKTtcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIE5vdyB1c2UgdGhlIGF0dHIgdG8gcG9wdWxhdGUgdGhlIHBhZ2UsIGFzIGFcXG4rXFx0XFx0XFx0ICogVk1NIHdvdWxkIGFmdGVyIGludGVyY2VwdGluZyB0aGUgTVNSIHdyaXRlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0c3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyIGF0dHIgPSB7XFxuK1xcdFxcdFxcdFxcdC50eXBlID0gS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRSxcXG4rXFx0XFx0XFx0XFx0LnUuZ3BhID0gSENBTExfUkVHSU9OX0dQQSxcXG4rXFx0XFx0XFx0fTtcXG4rXFx0XFx0XFx0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fWEVOX1ZDUFVfU0VUX0FUVFIsIFxcdTAwMjZhdHRyKTtcXG4rXFxuK1xcdFxcdFxcdC8qIFZlcmlmeSB0aGUgcGFnZSBpcyBub3cgcG9wdWxhdGVkICovXFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0VRKGhjYWxsX3BhZ2VbMF0sIDB4YjgpO1xcbitcXG4rXFx0XFx0XFx0cnVuLVxcdTAwM2Vtc3IuZXJyb3IgPSAwO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcXG4gXFxuIFxcdFxcdHN3aXRjaCAoZ2V0X3VjYWxsKHZjcHUsIFxcdTAwMjZ1YykpIHtcXG5AQCAtMTMwLDYgKzIxNCwxOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHRcXHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcXG4gXFx0XFx0XFx0LyogTk9UIFJFQUNIRUQgKi9cXG4gXFx0XFx0Y2FzZSBVQ0FMTF9TWU5DOlxcbitcXHRcXHRcXHRURVNUX0FTU0VSVF9FUSh1Yy5hcmdzWzFdLCBURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTtcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEd1ZXN0IGlzIGFib3V0IHRvIHdyaXRlIHRoZSBYZW4gTVNSLiBDbGVhciB0aGVcXG4rXFx0XFx0XFx0ICogaHlwZXJjYWxsIHBhZ2UsIGluc3RhbGwgTVNSIGZpbHRlciB0byBpbnRlcmNlcHRcXG4rXFx0XFx0XFx0ICogdGhlIHdyaXRlLCBhbmQgZW5hYmxlIHVzZXJzcGFjZSBNU1IgZXhpdHMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRtZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCBIQ0FMTF9SRUdJT05fR1BBKSwgMCwgUEFHRV9TSVpFKTtcXG4rXFx0XFx0XFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9YODZfVVNFUl9TUEFDRV9NU1IsXFxuK1xcdFxcdFxcdFxcdCAgICAgIEtWTV9NU1JfRVhJVF9SRUFTT05fRklMVEVSKTtcXG4rXFx0XFx0XFx0c2V0dXBfbXNyX2ZpbHRlcih2bSk7XFxuK1xcdFxcdFxcdG1zcl9maWx0ZXJfcmVhZHkgPSB0cnVlO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBVQ0FMTF9ET05FOlxcbiBcXHRcXHRcXHRnb3RvIGRvbmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA5OjM4Ljk3NzQwNDY5M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxODUyNDg5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3hlbl92Y3B1X3NldF9hdHRyXCIsXG4gICAgXCJfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBYZW4gVkNQVSBhdHRyaWJ1dGUgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE0Zjc5ZjQ5OWNlYTU4YzNjMTgyYWU4OGY5ZmNjNTVkMTc0YmUxN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNzowOTozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuaW5kZXggYTVmOWVlOTJmNDNlOGQuLjNjNmFlZTJhMzViZmRjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbkBAIC01ODEyLDYgKzU4MTIsMTkgQEAgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9VUENBTExfVkVDVE9SXG4gICB2ZWN0b3IgY29uZmlndXJlZCB3aXRoIEhWTV9QQVJBTV9DQUxMQkFDS19JUlEuIEl0IGlzIGRpc2FibGVkIGJ5XG4gICBzZXR0aW5nIHRoZSB2ZWN0b3IgdG8gemVyby5cbiBcbitLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1dSSVRFX0hZUEVSQ0FMTF9QQUdFXG4rICBUaGlzIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgd2hlbiB0aGUgS1ZNX0NBUF9YRU5fSFZNIGlvY3RsIGluZGljYXRlc1xuKyAgc3VwcG9ydCBmb3IgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFLiBJdCB0cmlnZ2Vyc1xuKyAgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlIGF0IHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzXG4rICBzcGVjaWZpZWQgaW4gYGBncGFgYCwganVzdCBhcyBpZiB0aGUgZ3Vlc3QgaGFkIHdyaXR0ZW4gdG8gdGhlXG4rICBoeXBlcmNhbGwgTVNSLiBUaGlzIGlzIGludGVuZGVkIGZvciBWTU1zIHRoYXQgaW50ZXJjZXB0IHRoZSBndWVzdCdzXG4rICBNU1Igd3JpdGUgKGUuZy4gdG8gdHJhY2sgYW4gZXBvY2ggZm9yIGtleGVjL2NyYXNoIHJlY292ZXJ5KSBhbmQgbmVlZFxuKyAgdG8gcmVwbGF5IHRoZSB3cml0ZSBmcm9tIGhvc3QgY29udGV4dC4gRGlyZWN0IGhvc3QtaW5pdGlhdGVkIHdyaXRlc1xuKyAgdmlhIEtWTV9TRVRfTVNSUyBhcmUgYmxvY2tlZCBmb3Igc2FmZXR5OyB0aGlzIGF0dHJpYnV0ZSBwcm92aWRlcyB0aGVcbisgIGNvcnJlY3QgYWx0ZXJuYXRpdmUuIEFzIHdpdGggYSBub24taW50ZXJjZXB0ZWQgZ3Vlc3Qgd3JpdGUgdG8gdGhlXG4rICBoeXBlcmNhbGwgTVNSLCBpdCBhbHNvIGxhdGNoZXMgdGhlICdsb25nIG1vZGUnIGZvciB0aGUgVk0sIHdoaWNoXG4rICBkZXRlcm1pbmVzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuXG4rXG4gXG4gNC4xMjkgS1ZNX1hFTl9WQ1BVX0dFVF9BVFRSXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbmluZGV4IDE1ODVlYzgwNDA2NjZlLi43NzMyYjkyYTRkYjAyZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC01OTgsNiArNTk4LDcgQEAgc3RydWN0IGt2bV94ODZfbWNlIHtcbiAjZGVmaW5lIEtWTV9YRU5fSFZNX0NPTkZJR19SVU5TVEFURV9VUERBVEVfRkxBR1x0KDEgXHUwMDNjXHUwMDNjIDYpXG4gI2RlZmluZSBLVk1fWEVOX0hWTV9DT05GSUdfUFZDTE9DS19UU0NfVU5TVEFCTEVcdCgxIFx1MDAzY1x1MDAzYyA3KVxuICNkZWZpbmUgS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQVx0KDEgXHUwMDNjXHUwMDNjIDgpXG4rI2RlZmluZSBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0VcdCgxIFx1MDAzY1x1MDAzYyA5KVxuIFxuICNkZWZpbmUgS1ZNX1hFTl9NU1JfTUlOX0lOREVYXHRcdFx0MHg0MDAwMDAwMHVcbiAjZGVmaW5lIEtWTV9YRU5fTVNSX01BWF9JTkRFWFx0XHRcdDB4NGZmZmZmZmZ1XG5AQCAtNzA2LDYgKzcwNyw4IEBAIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciB7XG4gI2RlZmluZSBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1VQQ0FMTF9WRUNUT1JcdDB4OFxuIC8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfWEVOX0hWTSAvIEtWTV9YRU5fSFZNX0NPTkZJR19TSEFSRURfSU5GT19IVkEgKi9cbiAjZGVmaW5lIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfVkNQVV9JTkZPX0hWQVx0MHg5XG4rLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9YRU5fSFZNIC8gS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFICovXG4rI2RlZmluZSBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1dSSVRFX0hZUEVSQ0FMTF9QQUdFIDB4YVxuIFxuIC8qIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gY29tbWFuZCAqL1xuIGVudW0gc2V2X2NtZF9pZCB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCBhZmNhYzEwNDI5NDdhNS4uZDdmMjNjMGJmZjc0NTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTQ4NjksNyArNDg2OSw4IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4gXHRcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfRVZUQ0hOXzJMRVZFTCB8XG4gXHRcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfRVZUQ0hOX1NFTkQgfFxuIFx0XHQgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1BWQ0xPQ0tfVFNDX1VOU1RBQkxFIHxcbi1cdFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19TSEFSRURfSU5GT19IVkE7XG4rXHRcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfU0hBUkVEX0lORk9fSFZBIHxcbitcdFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19XUklURV9IWVBFUkNBTExfUEFHRTtcbiBcdFx0aWYgKHNjaGVkX2luZm9fb24oKSlcbiBcdFx0XHRyIHw9IEtWTV9YRU5fSFZNX0NPTkZJR19SVU5TVEFURSB8XG4gXHRcdFx0ICAgICBLVk1fWEVOX0hWTV9DT05GSUdfUlVOU1RBVEVfVVBEQVRFX0ZMQUc7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXG5pbmRleCA2OTRiMzFjMWZjYzlhZi4uNTA0MjNkZjZlMjJkOWQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTMyLDYgKzMyLDcgQEBcbiBzdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKTtcbiBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpO1xuK3N0YXRpYyBpbnQgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpO1xuIFxuIERFRklORV9TVEFUSUNfS0VZX0RFRkVSUkVEX0ZBTFNFKGt2bV94ZW5fZW5hYmxlZCwgSFopO1xuIFxuQEAgLTExMzgsNiArMTEzOSwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFxuK1x0Y2FzZSBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1dSSVRFX0hZUEVSQ0FMTF9QQUdFOlxuK1x0XHRyID0gX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHZjcHUsIGRhdGEtXHUwMDNldS5ncGEpO1xuK1x0XHRicmVhaztcbitcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTEyNzMsNyArMTI3OCw3IEBAIGludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRyZXR1cm4gcjtcbiB9XG4gXG4taW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbitzdGF0aWMgaW50IF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxuIHtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0dTMyIHBhZ2VfbnVtID0gZGF0YSBcdTAwMjYgflBBR0VfTUFTSztcbkBAIC0xMjgxLDcgKzEyODYsNiBAQCBpbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxuIFx0Ym9vbCBsbSA9IGlzX2xvbmdfbW9kZSh2Y3B1KTtcbiBcdGludCByID0gMDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbiBcdGlmIChrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlICE9IGxtKSB7XG4gXHRcdGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUgPSBsbTtcbiBcbkBAIC0xMjg5LDExICsxMjkzLDkgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiBcdFx0ICogUmUtaW5pdGlhbGl6ZSBzaGFyZWRfaW5mbyB0byBwdXQgdGhlIHdhbGxjbG9jayBpbiB0aGVcbiBcdFx0ICogY29ycmVjdCBwbGFjZS5cbiBcdFx0ICovXG4tXHRcdGlmIChrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLmFjdGl2ZSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChrdm0pKVxuLVx0XHRcdHIgPSAxO1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZS5hY3RpdmUpXG4rXHRcdFx0ciA9IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChrdm0pO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4gXG4gXHRpZiAocilcbiBcdFx0cmV0dXJuIHI7XG5AQCAtMTMwOSw3ICsxMzExLDcgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiBcdFx0aW50IGk7XG4gXG4gXHRcdGlmIChwYWdlX251bSlcbi1cdFx0XHRyZXR1cm4gMTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdFx0LyogbW92IGltbTMyLCAlZWF4ICovXG4gXHRcdGluc3RydWN0aW9uc1swXSA9IDB4Yjg7XG5AQCAtMTMyNSwxMCArMTMyNywxMSBAQCBpbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgLyBzaXplb2YoaW5zdHJ1Y3Rpb25zKTsgaSsrKSB7XG4gXHRcdFx0Kih1MzIgKilcdTAwMjZpbnN0cnVjdGlvbnNbMV0gPSBpO1xuLVx0XHRcdGlmIChrdm1fdmNwdV93cml0ZV9ndWVzdCh2Y3B1LFxuK1x0XHRcdHIgPSBrdm1fdmNwdV93cml0ZV9ndWVzdCh2Y3B1LFxuIFx0XHRcdFx0XHRcdCBwYWdlX2FkZHIgKyAoaSAqIHNpemVvZihpbnN0cnVjdGlvbnMpKSxcbi1cdFx0XHRcdFx0XHQgaW5zdHJ1Y3Rpb25zLCBzaXplb2YoaW5zdHJ1Y3Rpb25zKSkpXG4tXHRcdFx0XHRyZXR1cm4gMTtcbitcdFx0XHRcdFx0XHQgaW5zdHJ1Y3Rpb25zLCBzaXplb2YoaW5zdHJ1Y3Rpb25zKSk7XG4rXHRcdFx0aWYgKHIpXG4rXHRcdFx0XHRyZXR1cm4gcjtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbkBAIC0xMzQwLDEwICsxMzQzLDkgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiBcdFx0dTggYmxvYl9zaXplID0gbG0gPyBrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5ibG9iX3NpemVfNjRcbiBcdFx0XHRcdCAgOiBrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5ibG9iX3NpemVfMzI7XG4gXHRcdHU4ICpwYWdlO1xuLVx0XHRpbnQgcmV0O1xuIFxuIFx0XHRpZiAocGFnZV9udW0gXHUwMDNlPSBibG9iX3NpemUpXG4tXHRcdFx0cmV0dXJuIDE7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdGJsb2JfYWRkciArPSBwYWdlX251bSAqIFBBR0VfU0laRTtcbiBcbkBAIC0xMzUxLDE0ICsxMzUzLDI3IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXG4gXHRcdGlmIChJU19FUlIocGFnZSkpXG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIocGFnZSk7XG4gXG4tXHRcdHJldCA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0KHZjcHUsIHBhZ2VfYWRkciwgcGFnZSwgUEFHRV9TSVpFKTtcbitcdFx0ciA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0KHZjcHUsIHBhZ2VfYWRkciwgcGFnZSwgUEFHRV9TSVpFKTtcbiBcdFx0a2ZyZWUocGFnZSk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIDE7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2ludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXG4re1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbitcbitcdC8qXG4rXHQgKiBUaGUgTVNSIHdyaXRlIHBhdGggZXhwZWN0cyBhIDAvMSByZXR1cm47IGNvbnZlcnQgdGhlIGVycm5vIGZyb21cbitcdCAqIHRoZSBzaGFyZWQgaGVscGVyIGFjY29yZGluZ2x5LiBDYWxsZXJzIHRoYXQgd2FudCB0aGUgcmVhbCBlcnJvclxuK1x0ICogKGUuZy4gdGhlIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UgYXR0cmlidXRlKVxuK1x0ICogaW52b2tlIF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZSgpIGRpcmVjdGx5LlxuK1x0ICovXG4rXHRyZXR1cm4gX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHZjcHUsIGRhdGEpID8gMSA6IDA7XG4rfVxuK1xuIGludCBrdm1feGVuX2h2bV9jb25maWcoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fY29uZmlnICp4aGMpXG4ge1xuIFx0LyogT25seSBzb21lIGZlYXR1cmUgZmxhZ3MgbmVlZCB0byBiZSAqZW5hYmxlZCogYnkgdXNlcnNwYWNlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmNcbmluZGV4IDI1ODUwODdjZGY1Y2JlLi4xNTM2ZDUxMGFiMzAxOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmNcbkBAIC0xMiw2ICsxMiw4IEBAXG4gI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4gI2luY2x1ZGUgXCJoeXBlcnYuaFwiXG4gXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbitcbiAjZGVmaW5lIEhDQUxMX1JFR0lPTl9HUEFcdDB4YzAwMDAwMDBVTExcbiAjZGVmaW5lIEhDQUxMX1JFR0lPTl9TTE9UXHQxMFxuIFxuQEAgLTI2LDYgKzI4LDEwIEBAXG4gI2RlZmluZSBIVkNBTExfU0lHTkFMX0VWRU5UXHRcdDB4MDA1ZFxuICNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfQUxJR05NRU5UXHQ0XG4gXG4rZW51bSB7XG4rXHRURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFID0gMSxcbit9O1xuK1xuIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHJheCA9IElOUFVUVkFMVUU7XG5AQCAtNzYsMTcgKzgyLDY1IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiBcdFx0XHQgICAgIFwiclwiKHI4KSk7XG4gXHRHVUVTVF9BU1NFUlQocmF4ID09IEhWX1NUQVRVU19JTlZBTElEX0FMSUdOTUVOVCk7XG4gXG4rXHQvKlxuK1x0ICogVGVzdCBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1dSSVRFX0hZUEVSQ0FMTF9QQUdFOiBhc2sgdXNlcnNwYWNlXG4rXHQgKiB0byBzZXQgdXAgTVNSIGZpbHRlcmluZywgdGhlbiB3cml0ZSB0aGUgTVNSLiBUaGUgV1JNU1Igd2lsbCBleGl0XG4rXHQgKiB0byB1c2Vyc3BhY2UgKG5vdCBwb3B1bGF0ZSB0aGUgcGFnZSkuIFVzZXJzcGFjZSB2ZXJpZmllcyB0aGUgcGFnZVxuK1x0ICogaXMgZW1wdHksIHVzZXMgdGhlIGF0dHIgdG8gcG9wdWxhdGUgaXQsIHRoZW4gcmVzdW1lcyB1cy5cbitcdCAqL1xuK1x0R1VFU1RfU1lOQyhURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTtcbitcbitcdF9fYXNtX18gX192b2xhdGlsZV9fKFwid3Jtc3JcIiA6IDogXCJjXCIgKFhFTl9IWVBFUkNBTExfTVNSKSxcbitcdFx0XHQgICAgIFwiYVwiIChIQ0FMTF9SRUdJT05fR1BBIFx1MDAyNiAweGZmZmZmZmZmKSxcbitcdFx0XHQgICAgIFwiZFwiIChIQ0FMTF9SRUdJT05fR1BBIFx1MDAzZVx1MDAzZSAzMikpO1xuK1xuK1x0LyogVXNlcnNwYWNlIHBvcHVsYXRlZCB0aGUgcGFnZSB2aWEgdGhlIGF0dHIg4oCUIHZlcmlmeSBpdCB3b3JrcyAqL1xuK1x0cmF4ID0gSU5QVVRWQUxVRTtcbitcdHJkaSA9IEFSR1ZBTFVFKDEpO1xuK1x0cnNpID0gQVJHVkFMVUUoMik7XG4rXHRyZHggPSBBUkdWQUxVRSgzKTtcbitcdHIxMCA9IEFSR1ZBTFVFKDQpO1xuK1x0cjggPSBBUkdWQUxVRSg1KTtcbitcdHI5ID0gQVJHVkFMVUUoNik7XG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcImNhbGwgKiUxXCIgOiBcIj1hXCIocmF4KSA6XG4rXHRcdFx0ICAgICBcInJcIihIQ0FMTF9SRUdJT05fR1BBICsgSU5QVVRWQUxVRSAqIDMyKSxcbitcdFx0XHQgICAgIFwiYVwiKHJheCksIFwiRFwiKHJkaSksIFwiU1wiKHJzaSksIFwiZFwiKHJkeCksXG4rXHRcdFx0ICAgICBcInJcIihyMTApLCBcInJcIihyOCksIFwiclwiKHI5KSk7XG4rXHRHVUVTVF9BU1NFUlQocmF4ID09IFJFVFZBTFVFKTtcbitcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgc2V0dXBfbXNyX2ZpbHRlcihzdHJ1Y3Qga3ZtX3ZtICp2bSlcbit7XG4rXHR1aW50NjRfdCBkZW55X2JpdHMgPSAwO1xuK1x0c3RydWN0IGt2bV9tc3JfZmlsdGVyIGZpbHRlciA9IHtcbitcdFx0LmZsYWdzID0gS1ZNX01TUl9GSUxURVJfREVGQVVMVF9BTExPVyxcbitcdFx0LnJhbmdlcyA9IHtcbitcdFx0XHR7XG4rXHRcdFx0XHQuZmxhZ3MgPSBLVk1fTVNSX0ZJTFRFUl9XUklURSxcbitcdFx0XHRcdC5ubXNycyA9IDEsXG4rXHRcdFx0XHQuYmFzZSA9IFhFTl9IWVBFUkNBTExfTVNSLFxuK1x0XHRcdFx0LmJpdG1hcCA9ICh1aW50OF90ICopXHUwMDI2ZGVueV9iaXRzLFxuK1x0XHRcdH0sXG4rXHRcdH0sXG4rXHR9O1xuK1xuK1x0dm1faW9jdGwodm0sIEtWTV9YODZfU0VUX01TUl9GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4rfVxuK1xuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuIFx0dW5zaWduZWQgaW50IHhlbl9jYXBzO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4rXHRib29sIG1zcl9maWx0ZXJfcmVhZHkgPSBmYWxzZTtcbiBcbiBcdHhlbl9jYXBzID0ga3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1hFTl9IVk0pO1xuIFx0VEVTVF9SRVFVSVJFKHhlbl9jYXBzIFx1MDAyNiBLVk1fWEVOX0hWTV9DT05GSUdfSU5URVJDRVBUX0hDQUxMKTtcbitcdFRFU1RfUkVRVUlSRSh4ZW5fY2FwcyBcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfWDg2X1VTRVJfU1BBQ0VfTVNSKSk7XG4rXHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1g4Nl9NU1JfRklMVEVSKSk7XG4gXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuIFx0dmNwdV9zZXRfaHZfY3B1aWQodmNwdSk7XG5AQCAtMTIzLDYgKzE3NywzNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdGlmIChydW4tXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfWDg2X1dSTVNSKSB7XG4rXHRcdFx0LyogTVNSIGZpbHRlciBjYXVnaHQgdGhlIFhlbiBoeXBlcmNhbGwgTVNSIHdyaXRlICovXG4rXHRcdFx0VEVTVF9BU1NFUlQobXNyX2ZpbHRlcl9yZWFkeSxcbitcdFx0XHRcdCAgICBcIlVuZXhwZWN0ZWQgV1JNU1IgZXhpdCBiZWZvcmUgZmlsdGVyIHNldHVwXCIpO1xuK1x0XHRcdFRFU1RfQVNTRVJUX0VRKHJ1bi1cdTAwM2Vtc3IuaW5kZXgsIFhFTl9IWVBFUkNBTExfTVNSKTtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRoZSBob3N0X2luaXRpYXRlZCBjaGVjayBzaG91bGQgaGF2ZSBwcmV2ZW50ZWRcbitcdFx0XHQgKiBLVk0gZnJvbSBwb3B1bGF0aW5nIHRoZSBwYWdlLiBWZXJpZnkgaXQncyBlbXB0eS5cbitcdFx0XHQgKi9cbitcdFx0XHR1aW50OF90ICpoY2FsbF9wYWdlID0gYWRkcl9ncGEyaHZhKHZtLCBIQ0FMTF9SRUdJT05fR1BBKTtcbitcdFx0XHRURVNUX0FTU0VSVF9FUShoY2FsbF9wYWdlWzBdLCAwKTtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIE5vdyB1c2UgdGhlIGF0dHIgdG8gcG9wdWxhdGUgdGhlIHBhZ2UsIGFzIGFcbitcdFx0XHQgKiBWTU0gd291bGQgYWZ0ZXIgaW50ZXJjZXB0aW5nIHRoZSBNU1Igd3JpdGUuXG4rXHRcdFx0ICovXG4rXHRcdFx0c3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyIGF0dHIgPSB7XG4rXHRcdFx0XHQudHlwZSA9IEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UsXG4rXHRcdFx0XHQudS5ncGEgPSBIQ0FMTF9SRUdJT05fR1BBLFxuK1x0XHRcdH07XG4rXHRcdFx0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fWEVOX1ZDUFVfU0VUX0FUVFIsIFx1MDAyNmF0dHIpO1xuK1xuK1x0XHRcdC8qIFZlcmlmeSB0aGUgcGFnZSBpcyBub3cgcG9wdWxhdGVkICovXG4rXHRcdFx0VEVTVF9BU1NFUlRfRVEoaGNhbGxfcGFnZVswXSwgMHhiOCk7XG4rXG4rXHRcdFx0cnVuLVx1MDAzZW1zci5lcnJvciA9IDA7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcbiBcbiBcdFx0c3dpdGNoIChnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKSB7XG5AQCAtMTMwLDYgKzIxNCwxOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xuIFx0XHRcdC8qIE5PVCBSRUFDSEVEICovXG4gXHRcdGNhc2UgVUNBTExfU1lOQzpcbitcdFx0XHRURVNUX0FTU0VSVF9FUSh1Yy5hcmdzWzFdLCBURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEd1ZXN0IGlzIGFib3V0IHRvIHdyaXRlIHRoZSBYZW4gTVNSLiBDbGVhciB0aGVcbitcdFx0XHQgKiBoeXBlcmNhbGwgcGFnZSwgaW5zdGFsbCBNU1IgZmlsdGVyIHRvIGludGVyY2VwdFxuK1x0XHRcdCAqIHRoZSB3cml0ZSwgYW5kIGVuYWJsZSB1c2Vyc3BhY2UgTVNSIGV4aXRzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdG1lbXNldChhZGRyX2dwYTJodmEodm0sIEhDQUxMX1JFR0lPTl9HUEEpLCAwLCBQQUdFX1NJWkUpO1xuK1x0XHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfWDg2X1VTRVJfU1BBQ0VfTVNSLFxuK1x0XHRcdFx0ICAgICAgS1ZNX01TUl9FWElUX1JFQVNPTl9GSUxURVIpO1xuK1x0XHRcdHNldHVwX21zcl9maWx0ZXIodm0pO1xuK1x0XHRcdG1zcl9maWx0ZXJfcmVhZHkgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFVDQUxMX0RPTkU6XG4gXHRcdFx0Z290byBkb25lO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDk6MzguOTc3NDA2MzEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg0OTg5MTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBYZW4gVkNQVSBIeXBlcmNhbGwgUGFnZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IGludHJvZHVjZXMgYSBuZXcgS1ZNIFhlbiBWQ1BVIGF0dHJpYnV0ZSwgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgLiBUaGUgZ2lzdCBpcywgaXQgYWxsb3dzIHVzZXJzcGFjZSB0byB0cmlnZ2VyIHRoZSBYZW4gaHlwZXJjYWxsIHBhZ2UgcG9wdWxhdGlvbiBhdCBhIHNwZWNpZmllZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLiBJdCdzIGJhc2ljYWxseSBhIHNhZmVyIHdheSB0byBkbyBpdCwgYnlwYXNzaW5nIHRoZSBkaXJlY3QgTVNSIHdyaXRlLCB3aGljaCBpcyBibG9ja2VkIGZvciBzZWN1cml0eSByZWFzb25zIHdoZW4gdGhlIGhvc3QgdHJpZXMgdG8gd3JpdGUgdG8gdGhlIGh5cGVyY2FsbCBwYWdlLiBTbWFydC5cblxuTGV0J3MgZGlzc2VjdCB0aGlzIHRoaW5nLiBGaXJzdCwgZG9jdW1lbnRhdGlvbiBpbiBgRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0YCAtIGdvdHRhIG1ha2Ugc3VyZSB0aGF0J3MgdXAgdG8gc251ZmYuIFRoZW4sIHRoZSB1c3VhbCBzdXNwZWN0czogYGFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhgIGFkZGluZyB0aGUgbmV3IGRlZmluaXRpb25zIGBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIGFuZCBgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRWAuIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGluY2x1ZGVzIHRoZSBgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFYCBpbiBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAuIFN0YW5kYXJkIHN0dWZmIHNvIGZhci5cblxuTm93LCBoZXJlJ3Mgd2hlcmUgdGhlIG1lYXQgaXMsIGBhcmNoL3g4Ni9rdm0veGVuLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBoYW5kbGluZyBgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRWAgaW4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAuIEl0J3MgY2FsbGluZyBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHZjcHUsIGRhdGEtXHUwMDNldS5ncGEpYC4gQWgsIGFuZCBJIHNlZSB0aGV5IHJlZmFjdG9yZWQgdGhlIGV4aXN0aW5nIGBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYCBpbnRvIHRoaXMgaW50ZXJuYWwgZnVuY3Rpb24gYF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZWAgdG8gcmV0dXJuIHByb3BlciBlcnJvciBjb2RlcyBsaWtlIGAtRUlOVkFMYCwgaW5zdGVhZCBvZiByZXR1cm5pbmcgYDFgIG9uIGVycm9yLiBUaGVuIHRoZSBvcmlnaW5hbCBga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZWAgd3JhcHMgdGhhdCB0byBzdGF5IGJhY2t3YXJkIGNvbXBhdGlibGUuIEdvb2QgbW92ZSwgY2xlYW5lciBlcnJvciBoYW5kbGluZy5cblxuQW5kIGZpbmFsbHksIHdlJ3ZlIGdvdCBhIHNlbGZ0ZXN0LCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuY2AsIHNvIGl0J3MgdGVzdGVkLiBFeGNlbGxlbnQhXG5cblNvLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEtWTSBYZW4gZW11bGF0aW9uLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgS1ZNX1hFTl9WQ1BVX1NFVF9BVFRSYCBpb2N0bC4gUmlnaHQsIGdpdmVuIHRoYXQgaXQncyB1c2Vyc3BhY2UtZmFjaW5nLCBhbmQgZGVhbHMgd2l0aCBoeXBlcmNhbGxzLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gZnV6eiB0aGlzISBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWdzLiBMZXQncyBjaGVjayBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZvciBgS1ZNYCBhbmQgYEtWTV9YRU5gLi4uIGdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA5OjQ3LjgyNzMwMTM3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzQ3NjAxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDk6NDcuODkwNzg0NTI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzNTA3MDYwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTS9YZW4gQ29uZmlndXJhdGlvbiBmb3IgUG90ZW50aWFsIFBlcmZvcm1hbmNlIEJvdHRsZW5lY2tzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBLVk1gIGFuZCBgS1ZNX1hFTmAsIGFuZCBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBmb2N1cyBsaWVzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzeW1ib2xzLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VgLCBhbmQgYGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBpcyBldmVuIHdvcnRoIGEgZGVlcGVyIGxvb2sgaW4gdGVybXMgb2YgYmVpbmcgYSBob3QgcGF0aC4gQWgsIGlvY3RsIGhhbmRsZXIsIG5vdCBhIHByaW1hcnkgY29uY2VybiBmb3IgcGVyZm9ybWFuY2UgcmlnaHQgbm93LlxuXG5Ob3csIHRoYXQgbGVhdmVzIGBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VgLiBUaGF0J3MgdGhlIG5ld2VyIGZ1bmN0aW9uLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBmb2N1cyB0aGVyZS4gSnVzdCBnb2luZyB0byBxdWlja2x5IHJlLXZhbGlkYXRlIHRob3NlIGNvbmZpZyBvcHRpb25zIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjEwOjE0LjI0MTQ5NDA5NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjczMDU5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxMDoxNC40MDg4MDk3NjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk3NjU4NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgS1ZNLVhlbiBDb25maWd1cmF0aW9uIGFuZCBLZXkgRnVuY3Rpb24gU3ltYm9scyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYEtWTWAgYW5kIGBLVk1fWEVOYCBjb25maWd1cmF0aW9ucyBoZXJlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaWRlbnRpZmllcnMsIGFuZCB3aGF0IHRoZXkgbWVhbiBmcm9tIGFuIGFyY2hpdGVjdHVyYWwgc3RhbmRwb2ludC5cblxuTm93LCBJJ20gemVyb2luZyBpbiBvbiBhIGNvdXBsZSBvZiBmdW5jdGlvbiBzeW1ib2xzLiBTcGVjaWZpY2FsbHksIEkgc2VlIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFuZCBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYC4gVGhlc2UgKmZlZWwqIHNpZ25pZmljYW50LCBhbmQgSSdtIGluc3RhbnRseSB0aGlua2luZyBhYm91dCB0aGUgY29yZSBtZWNoYW5pc21zLiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBpbW1lZGlhdGVseSBzdGFuZHMgb3V0LiBJdCdzIHNjcmVhbWluZyBcInZpcnR1YWwgQ1BVIGF0dHJpYnV0ZSBtYW5pcHVsYXRpb25cIiBhbmQgdGhlIFhlbiBpbnRlZ3JhdGlvbiBpcyBrZXkuIFRoYXQgbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSBzcGVjaWZpYyBjb250ZXh0IGFuZCB3aGVyZSBpdCBvcGVyYXRlcyB3aXRoIHRoZSBoeXBlcnZpc29yLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBpcyBhIHNvbGlkIGZvY3VzIHN5bWJvbC4gSSBzdXNwZWN0IGl0J3MgY2VudHJhbCB0byBob3cgS1ZNIGludGVyYWN0cyB3aXRoIFhlbiB0byBtYW5hZ2UgdmlydHVhbCBDUFVzLiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4gZGl2aW5nIGRlZXBlci4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IG1hcHMgdG8gWGVuJ3Mgc3RydWN0dXJlcyBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHR3byB2aXJ0dWFsIG1hY2hpbmUgbW9uaXRvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzk0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTA6MTguMzA2NDcxNzE4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTE5NjE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX3ZjcHVfc2V0X2F0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NjE5MD1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjYxMi1cXHRcXHRcXHRnb3RvIG91dDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjYxMzpcXHRcXHRyID0ga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHZjcHUsIFxcdTAwMjZ4dmEpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NjE0LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTg1Mj1pbnQga3ZtX3hlbl9odm1fZ2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy05MDYtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjkwNzppbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbmFyY2gveDg2L2t2bS94ZW4uYy05MDgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oPTIyPXZvaWQga3ZtX3hlbl9pbmplY3RfdmNwdV92ZWN0b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjM6aW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSk7XFxuYXJjaC94ODYva3ZtL3hlbi5oLTI0LWludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxMDoxOC40NDE2NzU5MDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjI2MDg2NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0tWGVuIEh5cGVyY2FsbCBQYWdlIFBvcHVsYXRpb24qKlxuXG5Pa2F5LCBzbyBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBpcyBkZWZpbml0ZWx5IGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGlzIHB1enpsZTsgaXQncyB0aGUgaW9jdGwgaGFuZGxlciBmb3IgYEtWTV9YRU5fVkNQVV9TRVRfQVRUUmAsIG1ha2luZyBpdCBhIGtleSBmb2N1cyBwb2ludC4gIEFuZCwgb2YgY291cnNlLCBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYCBsb29rcyBlcXVhbGx5IGNyaXRpY2FsLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBhdCB0aGUgZm9yZWZyb250LlxuXG5MZXQncyBzZWUsIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW1wb3J0YW50IGhlcmU/ICBBaCwgeWVzLCBgS1ZNX1hFTmAgZGVwZW5kcyBvbiBgS1ZNYC4gR290IGl0LlxuXG5JbiBzaG9ydCwgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgYWRkaXRpb24gb2YgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIGFuZCBpdHMgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5IC0gc3BlY2lmaWNhbGx5IHRoZSBhYmlsaXR5IGZvciB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlIC0gaXMgaW50ZXJlc3RpbmcuIEl0J3MgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgY29yZSBLVk0gWGVuIGVtdWxhdGlvbi4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBhcmVhcyBhcm91bmQgdGhvc2UgdHdvIHN5bWJvbHM6IGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFuZCBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYC4gSSB3aWxsIHdhbnQgdG8gZW5zdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBLVk1gIGFuZCBgS1ZNX1hFTmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjQxLCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxMDoyNi4wNjc3NjUwMTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDg3NzE0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3hlbl92Y3B1X3NldF9hdHRyXCIsXG4gICAgXCJfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBYZW4gVkNQVSBhdHRyaWJ1dGUgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fdmNwdV9zZXRfYXR0clwiLFxuICAgIFwiX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gWGVuIFZDUFUgYXR0cmlidXRlIGBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1dSSVRFX0hZUEVSQ0FMTF9QQUdFYCB3aGljaCBhbGxvd3MgdXNlcnNwYWNlIHRvIHRyaWdnZXIgdGhlIHBvcHVsYXRpb24gb2YgdGhlIFhlbiBoeXBlcmNhbGwgcGFnZS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgS1ZNX1hFTl9WQ1BVX1NFVF9BVFRSYCBpb2N0bCBhbmQgbW9kaWZpZXMgY29yZSBLVk0gWGVuIGVtdWxhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowghnh9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 16:58:30 +0000 UTC FinishedAt: 2026-06-29 17:10:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "098e32cba334da0f3fa8cfd4e022ae7c72341400", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_XEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "098e32cba334da0f3fa8cfd4e022ae7c72341400", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_XEN" ], "series_id": "aa556caf-4c83-401c-8506-7ee4ff7ea844" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_xen_vcpu_set_attr", "__kvm_xen_write_hypercall_page" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl92Y3B1X3NldF9hdHRyJiMzNDssCiAgICAmIzM0O19fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBYZW4gVkNQVSBhdHRyaWJ1dGUgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTRmNzlmNDk5Y2VhNThjM2MxODJhZTg4ZjlmY2M1NWQxNzRiZTE3ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDE3OjA5OjM3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuaW5kZXggYTVmOWVlOTJmNDNlOGQuLjNjNmFlZTJhMzViZmRjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbkBAIC01ODEyLDYgJiM0Mzs1ODEyLDE5IEBAIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfVVBDQUxMX1ZFQ1RPUlxuICAgdmVjdG9yIGNvbmZpZ3VyZWQgd2l0aCBIVk1fUEFSQU1fQ0FMTEJBQ0tfSVJRLiBJdCBpcyBkaXNhYmxlZCBieVxuICAgc2V0dGluZyB0aGUgdmVjdG9yIHRvIHplcm8uXG4gXG4mIzQzO0tWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VcbiYjNDM7ICBUaGlzIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgd2hlbiB0aGUgS1ZNX0NBUF9YRU5fSFZNIGlvY3RsIGluZGljYXRlc1xuJiM0MzsgIHN1cHBvcnQgZm9yIEtWTV9YRU5fSFZNX0NPTkZJR19XUklURV9IWVBFUkNBTExfUEFHRS4gSXQgdHJpZ2dlcnNcbiYjNDM7ICBwb3B1bGF0aW9uIG9mIHRoZSBYZW4gaHlwZXJjYWxsIHBhZ2UgYXQgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3NcbiYjNDM7ICBzcGVjaWZpZWQgaW4gYGBncGFgYCwganVzdCBhcyBpZiB0aGUgZ3Vlc3QgaGFkIHdyaXR0ZW4gdG8gdGhlXG4mIzQzOyAgaHlwZXJjYWxsIE1TUi4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgVk1NcyB0aGF0IGludGVyY2VwdCB0aGUgZ3Vlc3QmIzM5O3NcbiYjNDM7ICBNU1Igd3JpdGUgKGUuZy4gdG8gdHJhY2sgYW4gZXBvY2ggZm9yIGtleGVjL2NyYXNoIHJlY292ZXJ5KSBhbmQgbmVlZFxuJiM0MzsgIHRvIHJlcGxheSB0aGUgd3JpdGUgZnJvbSBob3N0IGNvbnRleHQuIERpcmVjdCBob3N0LWluaXRpYXRlZCB3cml0ZXNcbiYjNDM7ICB2aWEgS1ZNX1NFVF9NU1JTIGFyZSBibG9ja2VkIGZvciBzYWZldHk7IHRoaXMgYXR0cmlidXRlIHByb3ZpZGVzIHRoZVxuJiM0MzsgIGNvcnJlY3QgYWx0ZXJuYXRpdmUuIEFzIHdpdGggYSBub24taW50ZXJjZXB0ZWQgZ3Vlc3Qgd3JpdGUgdG8gdGhlXG4mIzQzOyAgaHlwZXJjYWxsIE1TUiwgaXQgYWxzbyBsYXRjaGVzIHRoZSAmIzM5O2xvbmcgbW9kZSYjMzk7IGZvciB0aGUgVk0sIHdoaWNoXG4mIzQzOyAgZGV0ZXJtaW5lcyB0aGUgbGF5b3V0IG9mIHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLlxuJiM0MztcbiBcbiA0LjEyOSBLVk1fWEVOX1ZDUFVfR0VUX0FUVFJcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMTU4NWVjODA0MDY2NmUuLjc3MzJiOTJhNGRiMDJlIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuQEAgLTU5OCw2ICYjNDM7NTk4LDcgQEAgc3RydWN0IGt2bV94ODZfbWNlIHtcbiAjZGVmaW5lIEtWTV9YRU5fSFZNX0NPTkZJR19SVU5TVEFURV9VUERBVEVfRkxBR1x0KDEgXHUwMDNjXHUwMDNjIDYpXG4gI2RlZmluZSBLVk1fWEVOX0hWTV9DT05GSUdfUFZDTE9DS19UU0NfVU5TVEFCTEVcdCgxIFx1MDAzY1x1MDAzYyA3KVxuICNkZWZpbmUgS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQVx0KDEgXHUwMDNjXHUwMDNjIDgpXG4mIzQzOyNkZWZpbmUgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFXHQoMSBcdTAwM2NcdTAwM2MgOSlcbiBcbiAjZGVmaW5lIEtWTV9YRU5fTVNSX01JTl9JTkRFWFx0XHRcdDB4NDAwMDAwMDB1XG4gI2RlZmluZSBLVk1fWEVOX01TUl9NQVhfSU5ERVhcdFx0XHQweDRmZmZmZmZmdVxuQEAgLTcwNiw2ICYjNDM7NzA3LDggQEAgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyIHtcbiAjZGVmaW5lIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfVVBDQUxMX1ZFQ1RPUlx0MHg4XG4gLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9YRU5fSFZNIC8gS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQSAqL1xuICNkZWZpbmUgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9WQ1BVX0lORk9fSFZBXHQweDlcbiYjNDM7LyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9YRU5fSFZNIC8gS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFICovXG4mIzQzOyNkZWZpbmUgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRSAweGFcbiBcbiAvKiBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIGNvbW1hbmQgKi9cbiBlbnVtIHNldl9jbWRfaWQge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggYWZjYWMxMDQyOTQ3YTUuLmQ3ZjIzYzBiZmY3NDU2IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC00ODY5LDcgJiM0Mzs0ODY5LDggQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fMkxFVkVMIHxcbiBcdFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fU0VORCB8XG4gXHRcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfUFZDTE9DS19UU0NfVU5TVEFCTEUgfFxuLVx0XHQgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQTtcbiYjNDM7XHRcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfU0hBUkVEX0lORk9fSFZBIHxcbiYjNDM7XHRcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0U7XG4gXHRcdGlmIChzY2hlZF9pbmZvX29uKCkpXG4gXHRcdFx0ciB8PSBLVk1fWEVOX0hWTV9DT05GSUdfUlVOU1RBVEUgfFxuIFx0XHRcdCAgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1JVTlNUQVRFX1VQREFURV9GTEFHO1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ZW4uYyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuaW5kZXggNjk0YjMxYzFmY2M5YWYuLjUwNDIzZGY2ZTIyZDlkIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veGVuLmNcbkBAIC0zMiw2ICYjNDM7MzIsNyBAQFxuIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSk7XG4gc3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xuIHN0YXRpYyBib29sIGt2bV94ZW5faGNhbGxfZXZ0Y2huX3NlbmQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgcGFyYW0sIHU2NCAqcik7XG4mIzQzO3N0YXRpYyBpbnQgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpO1xuIFxuIERFRklORV9TVEFUSUNfS0VZX0RFRkVSUkVEX0ZBTFNFKGt2bV94ZW5fZW5hYmxlZCwgSFopO1xuIFxuQEAgLTExMzgsNiAmIzQzOzExMzksMTAgQEAgaW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSlcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcbiYjNDM7XHRjYXNlIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0U6XG4mIzQzO1x0XHRyID0gX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHZjcHUsIGRhdGEtXHUwMDNldS5ncGEpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1xuIFx0ZGVmYXVsdDpcbiBcdFx0YnJlYWs7XG4gXHR9XG5AQCAtMTI3Myw3ICYjNDM7MTI3OCw3IEBAIGludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRyZXR1cm4gcjtcbiB9XG4gXG4taW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiYjNDM7c3RhdGljIGludCBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbiBcdHUzMiBwYWdlX251bSA9IGRhdGEgXHUwMDI2IH5QQUdFX01BU0s7XG5AQCAtMTI4MSw3ICYjNDM7MTI4Niw2IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXG4gXHRib29sIGxtID0gaXNfbG9uZ19tb2RlKHZjcHUpO1xuIFx0aW50IHIgPSAwO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZrdm0tXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xuIFx0aWYgKGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUgIT0gbG0pIHtcbiBcdFx0a3ZtLVx1MDAzZWFyY2gueGVuLmxvbmdfbW9kZSA9IGxtO1xuIFxuQEAgLTEyODksMTEgJiM0MzsxMjkzLDkgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiBcdFx0ICogUmUtaW5pdGlhbGl6ZSBzaGFyZWRfaW5mbyB0byBwdXQgdGhlIHdhbGxjbG9jayBpbiB0aGVcbiBcdFx0ICogY29ycmVjdCBwbGFjZS5cbiBcdFx0ICovXG4tXHRcdGlmIChrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLmFjdGl2ZSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChrdm0pKVxuLVx0XHRcdHIgPSAxO1xuJiM0MztcdFx0aWYgKGt2bS1cdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUuYWN0aXZlKVxuJiM0MztcdFx0XHRyID0ga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KGt2bSk7XG4gXHR9XG4tXHRtdXRleF91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbiBcbiBcdGlmIChyKVxuIFx0XHRyZXR1cm4gcjtcbkBAIC0xMzA5LDcgJiM0MzsxMzExLDcgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiBcdFx0aW50IGk7XG4gXG4gXHRcdGlmIChwYWdlX251bSlcbi1cdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdC8qIG1vdiBpbW0zMiwgJWVheCAqL1xuIFx0XHRpbnN0cnVjdGlvbnNbMF0gPSAweGI4O1xuQEAgLTEzMjUsMTAgJiM0MzsxMzI3LDExIEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXG4gXG4gXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFBBR0VfU0laRSAvIHNpemVvZihpbnN0cnVjdGlvbnMpOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdCoodTMyICopXHUwMDI2aW5zdHJ1Y3Rpb25zWzFdID0gaTtcbi1cdFx0XHRpZiAoa3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSxcbiYjNDM7XHRcdFx0ciA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0KHZjcHUsXG4gXHRcdFx0XHRcdFx0IHBhZ2VfYWRkciAmIzQzOyAoaSAqIHNpemVvZihpbnN0cnVjdGlvbnMpKSxcbi1cdFx0XHRcdFx0XHQgaW5zdHJ1Y3Rpb25zLCBzaXplb2YoaW5zdHJ1Y3Rpb25zKSkpXG4tXHRcdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdFx0XHRcdFx0IGluc3RydWN0aW9ucywgc2l6ZW9mKGluc3RydWN0aW9ucykpO1xuJiM0MztcdFx0XHRpZiAocilcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcjtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbkBAIC0xMzQwLDEwICYjNDM7MTM0Myw5IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXG4gXHRcdHU4IGJsb2Jfc2l6ZSA9IGxtID8ga3ZtLVx1MDAzZWFyY2gueGVuLmh2bV9jb25maWcuYmxvYl9zaXplXzY0XG4gXHRcdFx0XHQgIDoga3ZtLVx1MDAzZWFyY2gueGVuLmh2bV9jb25maWcuYmxvYl9zaXplXzMyO1xuIFx0XHR1OCAqcGFnZTtcbi1cdFx0aW50IHJldDtcbiBcbiBcdFx0aWYgKHBhZ2VfbnVtIFx1MDAzZT0gYmxvYl9zaXplKVxuLVx0XHRcdHJldHVybiAxO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdFx0YmxvYl9hZGRyICYjNDM7PSBwYWdlX251bSAqIFBBR0VfU0laRTtcbiBcbkBAIC0xMzUxLDE0ICYjNDM7MTM1MywyNyBAQCBpbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxuIFx0XHRpZiAoSVNfRVJSKHBhZ2UpKVxuIFx0XHRcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xuIFxuLVx0XHRyZXQgPSBrdm1fdmNwdV93cml0ZV9ndWVzdCh2Y3B1LCBwYWdlX2FkZHIsIHBhZ2UsIFBBR0VfU0laRSk7XG4mIzQzO1x0XHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSwgcGFnZV9hZGRyLCBwYWdlLCBQQUdFX1NJWkUpO1xuIFx0XHRrZnJlZShwYWdlKTtcbi1cdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gMTtcbiYjNDM7XHRcdGlmIChyKVxuJiM0MztcdFx0XHRyZXR1cm4gcjtcbiBcdH1cbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7aW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiYjNDM7e1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIE1TUiB3cml0ZSBwYXRoIGV4cGVjdHMgYSAwLzEgcmV0dXJuOyBjb252ZXJ0IHRoZSBlcnJubyBmcm9tXG4mIzQzO1x0ICogdGhlIHNoYXJlZCBoZWxwZXIgYWNjb3JkaW5nbHkuIENhbGxlcnMgdGhhdCB3YW50IHRoZSByZWFsIGVycm9yXG4mIzQzO1x0ICogKGUuZy4gdGhlIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UgYXR0cmlidXRlKVxuJiM0MztcdCAqIGludm9rZSBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2UoKSBkaXJlY3RseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHZjcHUsIGRhdGEpID8gMSA6IDA7XG4mIzQzO31cbiYjNDM7XG4gaW50IGt2bV94ZW5faHZtX2NvbmZpZyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgKnhoYylcbiB7XG4gXHQvKiBPbmx5IHNvbWUgZmVhdHVyZSBmbGFncyBuZWVkIHRvIGJlICplbmFibGVkKiBieSB1c2Vyc3BhY2UgKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl92bWNhbGxfdGVzdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuY1xuaW5kZXggMjU4NTA4N2NkZjVjYmUuLjE1MzZkNTEwYWIzMDE5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuY1xuQEAgLTEyLDYgJiM0MzsxMiw4IEBAXG4gI2luY2x1ZGUgXCYjMzQ7cHJvY2Vzc29yLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtoeXBlcnYuaFwmIzM0O1xuIFxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdHJpbmcuaFx1MDAzZVxuJiM0MztcbiAjZGVmaW5lIEhDQUxMX1JFR0lPTl9HUEFcdDB4YzAwMDAwMDBVTExcbiAjZGVmaW5lIEhDQUxMX1JFR0lPTl9TTE9UXHQxMFxuIFxuQEAgLTI2LDYgJiM0MzsyOCwxMCBAQFxuICNkZWZpbmUgSFZDQUxMX1NJR05BTF9FVkVOVFx0XHQweDAwNWRcbiAjZGVmaW5lIEhWX1NUQVRVU19JTlZBTElEX0FMSUdOTUVOVFx0NFxuIFxuJiM0MztlbnVtIHtcbiYjNDM7XHRURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFID0gMSxcbiYjNDM7fTtcbiYjNDM7XG4gc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgcmF4ID0gSU5QVVRWQUxVRTtcbkBAIC03NiwxNyAmIzQzOzgyLDY1IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiBcdFx0XHQgICAgIFwmIzM0O3JcJiMzNDsocjgpKTtcbiBcdEdVRVNUX0FTU0VSVChyYXggPT0gSFZfU1RBVFVTX0lOVkFMSURfQUxJR05NRU5UKTtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRlc3QgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRTogYXNrIHVzZXJzcGFjZVxuJiM0MztcdCAqIHRvIHNldCB1cCBNU1IgZmlsdGVyaW5nLCB0aGVuIHdyaXRlIHRoZSBNU1IuIFRoZSBXUk1TUiB3aWxsIGV4aXRcbiYjNDM7XHQgKiB0byB1c2Vyc3BhY2UgKG5vdCBwb3B1bGF0ZSB0aGUgcGFnZSkuIFVzZXJzcGFjZSB2ZXJpZmllcyB0aGUgcGFnZVxuJiM0MztcdCAqIGlzIGVtcHR5LCB1c2VzIHRoZSBhdHRyIHRvIHBvcHVsYXRlIGl0LCB0aGVuIHJlc3VtZXMgdXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0R1VFU1RfU1lOQyhURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTtcbiYjNDM7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7d3Jtc3JcJiMzNDsgOiA6IFwmIzM0O2NcJiMzNDsgKFhFTl9IWVBFUkNBTExfTVNSKSxcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDthXCYjMzQ7IChIQ0FMTF9SRUdJT05fR1BBIFx1MDAyNiAweGZmZmZmZmZmKSxcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtkXCYjMzQ7IChIQ0FMTF9SRUdJT05fR1BBIFx1MDAzZVx1MDAzZSAzMikpO1xuJiM0MztcbiYjNDM7XHQvKiBVc2Vyc3BhY2UgcG9wdWxhdGVkIHRoZSBwYWdlIHZpYSB0aGUgYXR0ciDigJQgdmVyaWZ5IGl0IHdvcmtzICovXG4mIzQzO1x0cmF4ID0gSU5QVVRWQUxVRTtcbiYjNDM7XHRyZGkgPSBBUkdWQUxVRSgxKTtcbiYjNDM7XHRyc2kgPSBBUkdWQUxVRSgyKTtcbiYjNDM7XHRyZHggPSBBUkdWQUxVRSgzKTtcbiYjNDM7XHRyMTAgPSBBUkdWQUxVRSg0KTtcbiYjNDM7XHRyOCA9IEFSR1ZBTFVFKDUpO1xuJiM0MztcdHI5ID0gQVJHVkFMVUUoNik7XG4mIzQzO1x0X19hc21fXyBfX3ZvbGF0aWxlX18oXCYjMzQ7Y2FsbCAqJTFcJiMzNDsgOiBcJiMzNDs9YVwmIzM0OyhyYXgpIDpcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDtyXCYjMzQ7KEhDQUxMX1JFR0lPTl9HUEEgJiM0MzsgSU5QVVRWQUxVRSAqIDMyKSxcbiYjNDM7XHRcdFx0ICAgICBcJiMzNDthXCYjMzQ7KHJheCksIFwmIzM0O0RcJiMzNDsocmRpKSwgXCYjMzQ7U1wmIzM0Oyhyc2kpLCBcJiMzNDtkXCYjMzQ7KHJkeCksXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7clwmIzM0OyhyMTApLCBcJiMzNDtyXCYjMzQ7KHI4KSwgXCYjMzQ7clwmIzM0OyhyOSkpO1xuJiM0MztcdEdVRVNUX0FTU0VSVChyYXggPT0gUkVUVkFMVUUpO1xuJiM0MztcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHNldHVwX21zcl9maWx0ZXIoc3RydWN0IGt2bV92bSAqdm0pXG4mIzQzO3tcbiYjNDM7XHR1aW50NjRfdCBkZW55X2JpdHMgPSAwO1xuJiM0MztcdHN0cnVjdCBrdm1fbXNyX2ZpbHRlciBmaWx0ZXIgPSB7XG4mIzQzO1x0XHQuZmxhZ3MgPSBLVk1fTVNSX0ZJTFRFUl9ERUZBVUxUX0FMTE9XLFxuJiM0MztcdFx0LnJhbmdlcyA9IHtcbiYjNDM7XHRcdFx0e1xuJiM0MztcdFx0XHRcdC5mbGFncyA9IEtWTV9NU1JfRklMVEVSX1dSSVRFLFxuJiM0MztcdFx0XHRcdC5ubXNycyA9IDEsXG4mIzQzO1x0XHRcdFx0LmJhc2UgPSBYRU5fSFlQRVJDQUxMX01TUixcbiYjNDM7XHRcdFx0XHQuYml0bWFwID0gKHVpbnQ4X3QgKilcdTAwMjZkZW55X2JpdHMsXG4mIzQzO1x0XHRcdH0sXG4mIzQzO1x0XHR9LFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHZtX2lvY3RsKHZtLCBLVk1fWDg2X1NFVF9NU1JfRklMVEVSLCBcdTAwMjZmaWx0ZXIpO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuIFx0dW5zaWduZWQgaW50IHhlbl9jYXBzO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4mIzQzO1x0Ym9vbCBtc3JfZmlsdGVyX3JlYWR5ID0gZmFsc2U7XG4gXG4gXHR4ZW5fY2FwcyA9IGt2bV9jaGVja19jYXAoS1ZNX0NBUF9YRU5fSFZNKTtcbiBcdFRFU1RfUkVRVUlSRSh4ZW5fY2FwcyBcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX0lOVEVSQ0VQVF9IQ0FMTCk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKHhlbl9jYXBzIFx1MDAyNiBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0UpO1xuJiM0MztcdFRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfWDg2X1VTRVJfU1BBQ0VfTVNSKSk7XG4mIzQzO1x0VEVTVF9SRVFVSVJFKGt2bV9jaGVja19jYXAoS1ZNX0NBUF9YODZfTVNSX0ZJTFRFUikpO1xuIFxuIFx0dm0gPSB2bV9jcmVhdGVfd2l0aF9vbmVfdmNwdShcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcbiBcdHZjcHVfc2V0X2h2X2NwdWlkKHZjcHUpO1xuQEAgLTEyMyw2ICYjNDM7MTc3LDM2IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbiYjNDM7XHRcdGlmIChydW4tXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfWDg2X1dSTVNSKSB7XG4mIzQzO1x0XHRcdC8qIE1TUiBmaWx0ZXIgY2F1Z2h0IHRoZSBYZW4gaHlwZXJjYWxsIE1TUiB3cml0ZSAqL1xuJiM0MztcdFx0XHRURVNUX0FTU0VSVChtc3JfZmlsdGVyX3JlYWR5LFxuJiM0MztcdFx0XHRcdCAgICBcJiMzNDtVbmV4cGVjdGVkIFdSTVNSIGV4aXQgYmVmb3JlIGZpbHRlciBzZXR1cFwmIzM0Oyk7XG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUX0VRKHJ1bi1cdTAwM2Vtc3IuaW5kZXgsIFhFTl9IWVBFUkNBTExfTVNSKTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRoZSBob3N0X2luaXRpYXRlZCBjaGVjayBzaG91bGQgaGF2ZSBwcmV2ZW50ZWRcbiYjNDM7XHRcdFx0ICogS1ZNIGZyb20gcG9wdWxhdGluZyB0aGUgcGFnZS4gVmVyaWZ5IGl0JiMzOTtzIGVtcHR5LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0dWludDhfdCAqaGNhbGxfcGFnZSA9IGFkZHJfZ3BhMmh2YSh2bSwgSENBTExfUkVHSU9OX0dQQSk7XG4mIzQzO1x0XHRcdFRFU1RfQVNTRVJUX0VRKGhjYWxsX3BhZ2VbMF0sIDApO1xuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogTm93IHVzZSB0aGUgYXR0ciB0byBwb3B1bGF0ZSB0aGUgcGFnZSwgYXMgYVxuJiM0MztcdFx0XHQgKiBWTU0gd291bGQgYWZ0ZXIgaW50ZXJjZXB0aW5nIHRoZSBNU1Igd3JpdGUuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgYXR0ciA9IHtcbiYjNDM7XHRcdFx0XHQudHlwZSA9IEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UsXG4mIzQzO1x0XHRcdFx0LnUuZ3BhID0gSENBTExfUkVHSU9OX0dQQSxcbiYjNDM7XHRcdFx0fTtcbiYjNDM7XHRcdFx0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fWEVOX1ZDUFVfU0VUX0FUVFIsIFx1MDAyNmF0dHIpO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogVmVyaWZ5IHRoZSBwYWdlIGlzIG5vdyBwb3B1bGF0ZWQgKi9cbiYjNDM7XHRcdFx0VEVTVF9BU1NFUlRfRVEoaGNhbGxfcGFnZVswXSwgMHhiOCk7XG4mIzQzO1xuJiM0MztcdFx0XHRydW4tXHUwMDNlbXNyLmVycm9yID0gMDtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRURVNUX0FTU0VSVF9LVk1fRVhJVF9SRUFTT04odmNwdSwgS1ZNX0VYSVRfSU8pO1xuIFxuIFx0XHRzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1LCBcdTAwMjZ1YykpIHtcbkBAIC0xMzAsNiAmIzQzOzIxNCwxOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xuIFx0XHRcdC8qIE5PVCBSRUFDSEVEICovXG4gXHRcdGNhc2UgVUNBTExfU1lOQzpcbiYjNDM7XHRcdFx0VEVTVF9BU1NFUlRfRVEodWMuYXJnc1sxXSwgVEVTVF9XUklURV9IWVBFUkNBTExfUEFHRSk7XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBHdWVzdCBpcyBhYm91dCB0byB3cml0ZSB0aGUgWGVuIE1TUi4gQ2xlYXIgdGhlXG4mIzQzO1x0XHRcdCAqIGh5cGVyY2FsbCBwYWdlLCBpbnN0YWxsIE1TUiBmaWx0ZXIgdG8gaW50ZXJjZXB0XG4mIzQzO1x0XHRcdCAqIHRoZSB3cml0ZSwgYW5kIGVuYWJsZSB1c2Vyc3BhY2UgTVNSIGV4aXRzLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0bWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgSENBTExfUkVHSU9OX0dQQSksIDAsIFBBR0VfU0laRSk7XG4mIzQzO1x0XHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfWDg2X1VTRVJfU1BBQ0VfTVNSLFxuJiM0MztcdFx0XHRcdCAgICAgIEtWTV9NU1JfRVhJVF9SRUFTT05fRklMVEVSKTtcbiYjNDM7XHRcdFx0c2V0dXBfbXNyX2ZpbHRlcih2bSk7XG4mIzQzO1x0XHRcdG1zcl9maWx0ZXJfcmVhZHkgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFVDQUxMX0RPTkU6XG4gXHRcdFx0Z290byBkb25lO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl92Y3B1X3NldF9hdHRyJiMzNDssCiAgICAmIzM0O19fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBYZW4gVkNQVSBhdHRyaWJ1dGUgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhNGY3OWY0OTljZWE1OGMzYzE4MmFlODhmOWZjYzU1ZDE3NGJlMTdmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBKdW4gMjkgMTc6MDk6MzcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKaW5kZXggYTVmOWVlOTJmNDNlOGQuLjNjNmFlZTJhMzViZmRjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CkBAIC01ODEyLDYgJiM0Mzs1ODEyLDE5IEBAIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfVVBDQUxMX1ZFQ1RPUgogICB2ZWN0b3IgY29uZmlndXJlZCB3aXRoIEhWTV9QQVJBTV9DQUxMQkFDS19JUlEuIEl0IGlzIGRpc2FibGVkIGJ5CiAgIHNldHRpbmcgdGhlIHZlY3RvciB0byB6ZXJvLgogCiYjNDM7S1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRQomIzQzOyAgVGhpcyBhdHRyaWJ1dGUgaXMgYXZhaWxhYmxlIHdoZW4gdGhlIEtWTV9DQVBfWEVOX0hWTSBpb2N0bCBpbmRpY2F0ZXMKJiM0MzsgIHN1cHBvcnQgZm9yIEtWTV9YRU5fSFZNX0NPTkZJR19XUklURV9IWVBFUkNBTExfUEFHRS4gSXQgdHJpZ2dlcnMKJiM0MzsgIHBvcHVsYXRpb24gb2YgdGhlIFhlbiBoeXBlcmNhbGwgcGFnZSBhdCB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcwomIzQzOyAgc3BlY2lmaWVkIGluIGBgZ3BhYGAsIGp1c3QgYXMgaWYgdGhlIGd1ZXN0IGhhZCB3cml0dGVuIHRvIHRoZQomIzQzOyAgaHlwZXJjYWxsIE1TUi4gVGhpcyBpcyBpbnRlbmRlZCBmb3IgVk1NcyB0aGF0IGludGVyY2VwdCB0aGUgZ3Vlc3QmIzM5O3MKJiM0MzsgIE1TUiB3cml0ZSAoZS5nLiB0byB0cmFjayBhbiBlcG9jaCBmb3Iga2V4ZWMvY3Jhc2ggcmVjb3ZlcnkpIGFuZCBuZWVkCiYjNDM7ICB0byByZXBsYXkgdGhlIHdyaXRlIGZyb20gaG9zdCBjb250ZXh0LiBEaXJlY3QgaG9zdC1pbml0aWF0ZWQgd3JpdGVzCiYjNDM7ICB2aWEgS1ZNX1NFVF9NU1JTIGFyZSBibG9ja2VkIGZvciBzYWZldHk7IHRoaXMgYXR0cmlidXRlIHByb3ZpZGVzIHRoZQomIzQzOyAgY29ycmVjdCBhbHRlcm5hdGl2ZS4gQXMgd2l0aCBhIG5vbi1pbnRlcmNlcHRlZCBndWVzdCB3cml0ZSB0byB0aGUKJiM0MzsgIGh5cGVyY2FsbCBNU1IsIGl0IGFsc28gbGF0Y2hlcyB0aGUgJiMzOTtsb25nIG1vZGUmIzM5OyBmb3IgdGhlIFZNLCB3aGljaAomIzQzOyAgZGV0ZXJtaW5lcyB0aGUgbGF5b3V0IG9mIHRoZSBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLgomIzQzOwogCiA0LjEyOSBLVk1fWEVOX1ZDUFVfR0VUX0FUVFIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKaW5kZXggMTU4NWVjODA0MDY2NmUuLjc3MzJiOTJhNGRiMDJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmgKQEAgLTU5OCw2ICYjNDM7NTk4LDcgQEAgc3RydWN0IGt2bV94ODZfbWNlIHsKICNkZWZpbmUgS1ZNX1hFTl9IVk1fQ09ORklHX1JVTlNUQVRFX1VQREFURV9GTEFHCSgxICZsdDsmbHQ7IDYpCiAjZGVmaW5lIEtWTV9YRU5fSFZNX0NPTkZJR19QVkNMT0NLX1RTQ19VTlNUQUJMRQkoMSAmbHQ7Jmx0OyA3KQogI2RlZmluZSBLVk1fWEVOX0hWTV9DT05GSUdfU0hBUkVEX0lORk9fSFZBCSgxICZsdDsmbHQ7IDgpCiYjNDM7I2RlZmluZSBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0UJKDEgJmx0OyZsdDsgOSkKIAogI2RlZmluZSBLVk1fWEVOX01TUl9NSU5fSU5ERVgJCQkweDQwMDAwMDAwdQogI2RlZmluZSBLVk1fWEVOX01TUl9NQVhfSU5ERVgJCQkweDRmZmZmZmZmdQpAQCAtNzA2LDYgJiM0Mzs3MDcsOCBAQCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgewogI2RlZmluZSBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1VQQ0FMTF9WRUNUT1IJMHg4CiAvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1hFTl9IVk0gLyBLVk1fWEVOX0hWTV9DT05GSUdfU0hBUkVEX0lORk9fSFZBICovCiAjZGVmaW5lIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfVkNQVV9JTkZPX0hWQQkweDkKJiM0MzsvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1hFTl9IVk0gLyBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0UgKi8KJiM0MzsjZGVmaW5lIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UgMHhhCiAKIC8qIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gY29tbWFuZCAqLwogZW51bSBzZXZfY21kX2lkIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCBhZmNhYzEwNDI5NDdhNS4uZDdmMjNjMGJmZjc0NTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTQ4NjksNyAmIzQzOzQ4NjksOCBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KQogCQkgICAgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl8yTEVWRUwgfAogCQkgICAgS1ZNX1hFTl9IVk1fQ09ORklHX0VWVENITl9TRU5EIHwKIAkJICAgIEtWTV9YRU5fSFZNX0NPTkZJR19QVkNMT0NLX1RTQ19VTlNUQUJMRSB8Ci0JCSAgICBLVk1fWEVOX0hWTV9DT05GSUdfU0hBUkVEX0lORk9fSFZBOwomIzQzOwkJICAgIEtWTV9YRU5fSFZNX0NPTkZJR19TSEFSRURfSU5GT19IVkEgfAomIzQzOwkJICAgIEtWTV9YRU5fSFZNX0NPTkZJR19XUklURV9IWVBFUkNBTExfUEFHRTsKIAkJaWYgKHNjaGVkX2luZm9fb24oKSkKIAkJCXIgfD0gS1ZNX1hFTl9IVk1fQ09ORklHX1JVTlNUQVRFIHwKIAkJCSAgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1JVTlNUQVRFX1VQREFURV9GTEFHOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jCmluZGV4IDY5NGIzMWMxZmNjOWFmLi41MDQyM2RmNmUyMmQ5ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2t2bS94ZW4uYwpAQCAtMzIsNiAmIzQzOzMyLDcgQEAKIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRfZXZ0Y2huKHN0cnVjdCBrdm1feGVuX2V2dGNobiAqeGUsIHN0cnVjdCBrdm0gKmt2bSk7CiBzdGF0aWMgaW50IGt2bV94ZW5fc2V0YXR0cl9ldnRjaG4oc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSk7CiBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpOwomIzQzO3N0YXRpYyBpbnQgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpOwogCiBERUZJTkVfU1RBVElDX0tFWV9ERUZFUlJFRF9GQUxTRShrdm1feGVuX2VuYWJsZWQsIEhaKTsKIApAQCAtMTEzOCw2ICYjNDM7MTEzOSwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKQogCQl9CiAJCWJyZWFrOwogCiYjNDM7CWNhc2UgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRToKJiM0MzsJCXIgPSBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2UodmNwdSwgZGF0YS0mZ3Q7dS5ncGEpOwomIzQzOwkJYnJlYWs7CiYjNDM7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMTI3Myw3ICYjNDM7MTI3OCw3IEBAIGludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpCiAJcmV0dXJuIHI7CiB9CiAKLWludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpCiYjNDM7c3RhdGljIGludCBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSkKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiAJdTMyIHBhZ2VfbnVtID0gZGF0YSAmYW1wOyB+UEFHRV9NQVNLOwpAQCAtMTI4MSw3ICYjNDM7MTI4Niw2IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpCiAJYm9vbCBsbSA9IGlzX2xvbmdfbW9kZSh2Y3B1KTsKIAlpbnQgciA9IDA7CiAKLQltdXRleF9sb2NrKCZhbXA7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7CiAJaWYgKGt2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlICE9IGxtKSB7CiAJCWt2bS0mZ3Q7YXJjaC54ZW4ubG9uZ19tb2RlID0gbG07CiAKQEAgLTEyODksMTEgJiM0MzsxMjkzLDkgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSkKIAkJICogUmUtaW5pdGlhbGl6ZSBzaGFyZWRfaW5mbyB0byBwdXQgdGhlIHdhbGxjbG9jayBpbiB0aGUKIAkJICogY29ycmVjdCBwbGFjZS4KIAkJICovCi0JCWlmIChrdm0tJmd0O2FyY2gueGVuLnNoaW5mb19jYWNoZS5hY3RpdmUgJmFtcDsmYW1wOwotCQkgICAga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KGt2bSkpCi0JCQlyID0gMTsKJiM0MzsJCWlmIChrdm0tJmd0O2FyY2gueGVuLnNoaW5mb19jYWNoZS5hY3RpdmUpCiYjNDM7CQkJciA9IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChrdm0pOwogCX0KLQltdXRleF91bmxvY2soJmFtcDtrdm0tJmd0O2FyY2gueGVuLnhlbl9sb2NrKTsKIAogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAgLTEzMDksNyAmIzQzOzEzMTEsNyBAQCBpbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKQogCQlpbnQgaTsKIAogCQlpZiAocGFnZV9udW0pCi0JCQlyZXR1cm4gMTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQkvKiBtb3YgaW1tMzIsICVlYXggKi8KIAkJaW5zdHJ1Y3Rpb25zWzBdID0gMHhiODsKQEAgLTEzMjUsMTAgJiM0MzsxMzI3LDExIEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpCiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7IFBBR0VfU0laRSAvIHNpemVvZihpbnN0cnVjdGlvbnMpOyBpJiM0MzsmIzQzOykgewogCQkJKih1MzIgKikmYW1wO2luc3RydWN0aW9uc1sxXSA9IGk7Ci0JCQlpZiAoa3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSwKJiM0MzsJCQlyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSwKIAkJCQkJCSBwYWdlX2FkZHIgJiM0MzsgKGkgKiBzaXplb2YoaW5zdHJ1Y3Rpb25zKSksCi0JCQkJCQkgaW5zdHJ1Y3Rpb25zLCBzaXplb2YoaW5zdHJ1Y3Rpb25zKSkpCi0JCQkJcmV0dXJuIDE7CiYjNDM7CQkJCQkJIGluc3RydWN0aW9ucywgc2l6ZW9mKGluc3RydWN0aW9ucykpOwomIzQzOwkJCWlmIChyKQomIzQzOwkJCQlyZXR1cm4gcjsKIAkJfQogCX0gZWxzZSB7CiAJCS8qCkBAIC0xMzQwLDEwICYjNDM7MTM0Myw5IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpCiAJCXU4IGJsb2Jfc2l6ZSA9IGxtID8ga3ZtLSZndDthcmNoLnhlbi5odm1fY29uZmlnLmJsb2Jfc2l6ZV82NAogCQkJCSAgOiBrdm0tJmd0O2FyY2gueGVuLmh2bV9jb25maWcuYmxvYl9zaXplXzMyOwogCQl1OCAqcGFnZTsKLQkJaW50IHJldDsKIAogCQlpZiAocGFnZV9udW0gJmd0Oz0gYmxvYl9zaXplKQotCQkJcmV0dXJuIDE7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJYmxvYl9hZGRyICYjNDM7PSBwYWdlX251bSAqIFBBR0VfU0laRTsKIApAQCAtMTM1MSwxNCAmIzQzOzEzNTMsMjcgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSkKIAkJaWYgKElTX0VSUihwYWdlKSkKIAkJCXJldHVybiBQVFJfRVJSKHBhZ2UpOwogCi0JCXJldCA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0KHZjcHUsIHBhZ2VfYWRkciwgcGFnZSwgUEFHRV9TSVpFKTsKJiM0MzsJCXIgPSBrdm1fdmNwdV93cml0ZV9ndWVzdCh2Y3B1LCBwYWdlX2FkZHIsIHBhZ2UsIFBBR0VfU0laRSk7CiAJCWtmcmVlKHBhZ2UpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIDE7CiYjNDM7CQlpZiAocikKJiM0MzsJCQlyZXR1cm4gcjsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKJiM0MztpbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKQomIzQzO3sKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnhlbi54ZW5fbG9jayk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBNU1Igd3JpdGUgcGF0aCBleHBlY3RzIGEgMC8xIHJldHVybjsgY29udmVydCB0aGUgZXJybm8gZnJvbQomIzQzOwkgKiB0aGUgc2hhcmVkIGhlbHBlciBhY2NvcmRpbmdseS4gQ2FsbGVycyB0aGF0IHdhbnQgdGhlIHJlYWwgZXJyb3IKJiM0MzsJICogKGUuZy4gdGhlIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UgYXR0cmlidXRlKQomIzQzOwkgKiBpbnZva2UgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKCkgZGlyZWN0bHkuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHZjcHUsIGRhdGEpID8gMSA6IDA7CiYjNDM7fQomIzQzOwogaW50IGt2bV94ZW5faHZtX2NvbmZpZyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgKnhoYykKIHsKIAkvKiBPbmx5IHNvbWUgZmVhdHVyZSBmbGFncyBuZWVkIHRvIGJlICplbmFibGVkKiBieSB1c2Vyc3BhY2UgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl92bWNhbGxfdGVzdC5jCmluZGV4IDI1ODUwODdjZGY1Y2JlLi4xNTM2ZDUxMGFiMzAxOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9rdm0veDg2L3hlbl92bWNhbGxfdGVzdC5jCkBAIC0xMiw2ICYjNDM7MTIsOCBAQAogI2luY2x1ZGUgJiMzNDtwcm9jZXNzb3IuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2h5cGVydi5oJiMzNDsKIAomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKJiM0MzsKICNkZWZpbmUgSENBTExfUkVHSU9OX0dQQQkweGMwMDAwMDAwVUxMCiAjZGVmaW5lIEhDQUxMX1JFR0lPTl9TTE9UCTEwCiAKQEAgLTI2LDYgJiM0MzsyOCwxMCBAQAogI2RlZmluZSBIVkNBTExfU0lHTkFMX0VWRU5UCQkweDAwNWQKICNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfQUxJR05NRU5UCTQKIAomIzQzO2VudW0gewomIzQzOwlURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFID0gMSwKJiM0Mzt9OwomIzQzOwogc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgcmF4ID0gSU5QVVRWQUxVRTsKQEAgLTc2LDE3ICYjNDM7ODIsNjUgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKQogCQkJICAgICAmIzM0O3ImIzM0OyhyOCkpOwogCUdVRVNUX0FTU0VSVChyYXggPT0gSFZfU1RBVFVTX0lOVkFMSURfQUxJR05NRU5UKTsKIAomIzQzOwkvKgomIzQzOwkgKiBUZXN0IEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0U6IGFzayB1c2Vyc3BhY2UKJiM0MzsJICogdG8gc2V0IHVwIE1TUiBmaWx0ZXJpbmcsIHRoZW4gd3JpdGUgdGhlIE1TUi4gVGhlIFdSTVNSIHdpbGwgZXhpdAomIzQzOwkgKiB0byB1c2Vyc3BhY2UgKG5vdCBwb3B1bGF0ZSB0aGUgcGFnZSkuIFVzZXJzcGFjZSB2ZXJpZmllcyB0aGUgcGFnZQomIzQzOwkgKiBpcyBlbXB0eSwgdXNlcyB0aGUgYXR0ciB0byBwb3B1bGF0ZSBpdCwgdGhlbiByZXN1bWVzIHVzLgomIzQzOwkgKi8KJiM0MzsJR1VFU1RfU1lOQyhURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTsKJiM0MzsKJiM0MzsJX19hc21fXyBfX3ZvbGF0aWxlX18oJiMzNDt3cm1zciYjMzQ7IDogOiAmIzM0O2MmIzM0OyAoWEVOX0hZUEVSQ0FMTF9NU1IpLAomIzQzOwkJCSAgICAgJiMzNDthJiMzNDsgKEhDQUxMX1JFR0lPTl9HUEEgJmFtcDsgMHhmZmZmZmZmZiksCiYjNDM7CQkJICAgICAmIzM0O2QmIzM0OyAoSENBTExfUkVHSU9OX0dQQSAmZ3Q7Jmd0OyAzMikpOwomIzQzOwomIzQzOwkvKiBVc2Vyc3BhY2UgcG9wdWxhdGVkIHRoZSBwYWdlIHZpYSB0aGUgYXR0ciDigJQgdmVyaWZ5IGl0IHdvcmtzICovCiYjNDM7CXJheCA9IElOUFVUVkFMVUU7CiYjNDM7CXJkaSA9IEFSR1ZBTFVFKDEpOwomIzQzOwlyc2kgPSBBUkdWQUxVRSgyKTsKJiM0MzsJcmR4ID0gQVJHVkFMVUUoMyk7CiYjNDM7CXIxMCA9IEFSR1ZBTFVFKDQpOwomIzQzOwlyOCA9IEFSR1ZBTFVFKDUpOwomIzQzOwlyOSA9IEFSR1ZBTFVFKDYpOwomIzQzOwlfX2FzbV9fIF9fdm9sYXRpbGVfXygmIzM0O2NhbGwgKiUxJiMzNDsgOiAmIzM0Oz1hJiMzNDsocmF4KSA6CiYjNDM7CQkJICAgICAmIzM0O3ImIzM0OyhIQ0FMTF9SRUdJT05fR1BBICYjNDM7IElOUFVUVkFMVUUgKiAzMiksCiYjNDM7CQkJICAgICAmIzM0O2EmIzM0OyhyYXgpLCAmIzM0O0QmIzM0OyhyZGkpLCAmIzM0O1MmIzM0Oyhyc2kpLCAmIzM0O2QmIzM0OyhyZHgpLAomIzQzOwkJCSAgICAgJiMzNDtyJiMzNDsocjEwKSwgJiMzNDtyJiMzNDsocjgpLCAmIzM0O3ImIzM0OyhyOSkpOwomIzQzOwlHVUVTVF9BU1NFUlQocmF4ID09IFJFVFZBTFVFKTsKJiM0MzsKIAlHVUVTVF9ET05FKCk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCBzZXR1cF9tc3JfZmlsdGVyKHN0cnVjdCBrdm1fdm0gKnZtKQomIzQzO3sKJiM0MzsJdWludDY0X3QgZGVueV9iaXRzID0gMDsKJiM0MzsJc3RydWN0IGt2bV9tc3JfZmlsdGVyIGZpbHRlciA9IHsKJiM0MzsJCS5mbGFncyA9IEtWTV9NU1JfRklMVEVSX0RFRkFVTFRfQUxMT1csCiYjNDM7CQkucmFuZ2VzID0gewomIzQzOwkJCXsKJiM0MzsJCQkJLmZsYWdzID0gS1ZNX01TUl9GSUxURVJfV1JJVEUsCiYjNDM7CQkJCS5ubXNycyA9IDEsCiYjNDM7CQkJCS5iYXNlID0gWEVOX0hZUEVSQ0FMTF9NU1IsCiYjNDM7CQkJCS5iaXRtYXAgPSAodWludDhfdCAqKSZhbXA7ZGVueV9iaXRzLAomIzQzOwkJCX0sCiYjNDM7CQl9LAomIzQzOwl9OwomIzQzOwomIzQzOwl2bV9pb2N0bCh2bSwgS1ZNX1g4Nl9TRVRfTVNSX0ZJTFRFUiwgJmFtcDtmaWx0ZXIpOwomIzQzO30KJiM0MzsKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJdW5zaWduZWQgaW50IHhlbl9jYXBzOwogCXN0cnVjdCBrdm1fdmNwdSAqdmNwdTsKIAlzdHJ1Y3Qga3ZtX3ZtICp2bTsKJiM0MzsJYm9vbCBtc3JfZmlsdGVyX3JlYWR5ID0gZmFsc2U7CiAKIAl4ZW5fY2FwcyA9IGt2bV9jaGVja19jYXAoS1ZNX0NBUF9YRU5fSFZNKTsKIAlURVNUX1JFUVVJUkUoeGVuX2NhcHMgJmFtcDsgS1ZNX1hFTl9IVk1fQ09ORklHX0lOVEVSQ0VQVF9IQ0FMTCk7CiYjNDM7CVRFU1RfUkVRVUlSRSh4ZW5fY2FwcyAmYW1wOyBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0UpOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1g4Nl9VU0VSX1NQQUNFX01TUikpOwomIzQzOwlURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1g4Nl9NU1JfRklMVEVSKSk7CiAKIAl2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KCZhbXA7dmNwdSwgZ3Vlc3RfY29kZSk7CiAJdmNwdV9zZXRfaHZfY3B1aWQodmNwdSk7CkBAIC0xMjMsNiAmIzQzOzE3NywzNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJY29udGludWU7CiAJCX0KIAomIzQzOwkJaWYgKHJ1bi0mZ3Q7ZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfWDg2X1dSTVNSKSB7CiYjNDM7CQkJLyogTVNSIGZpbHRlciBjYXVnaHQgdGhlIFhlbiBoeXBlcmNhbGwgTVNSIHdyaXRlICovCiYjNDM7CQkJVEVTVF9BU1NFUlQobXNyX2ZpbHRlcl9yZWFkeSwKJiM0MzsJCQkJICAgICYjMzQ7VW5leHBlY3RlZCBXUk1TUiBleGl0IGJlZm9yZSBmaWx0ZXIgc2V0dXAmIzM0Oyk7CiYjNDM7CQkJVEVTVF9BU1NFUlRfRVEocnVuLSZndDttc3IuaW5kZXgsIFhFTl9IWVBFUkNBTExfTVNSKTsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIFRoZSBob3N0X2luaXRpYXRlZCBjaGVjayBzaG91bGQgaGF2ZSBwcmV2ZW50ZWQKJiM0MzsJCQkgKiBLVk0gZnJvbSBwb3B1bGF0aW5nIHRoZSBwYWdlLiBWZXJpZnkgaXQmIzM5O3MgZW1wdHkuCiYjNDM7CQkJICovCiYjNDM7CQkJdWludDhfdCAqaGNhbGxfcGFnZSA9IGFkZHJfZ3BhMmh2YSh2bSwgSENBTExfUkVHSU9OX0dQQSk7CiYjNDM7CQkJVEVTVF9BU1NFUlRfRVEoaGNhbGxfcGFnZVswXSwgMCk7CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBOb3cgdXNlIHRoZSBhdHRyIHRvIHBvcHVsYXRlIHRoZSBwYWdlLCBhcyBhCiYjNDM7CQkJICogVk1NIHdvdWxkIGFmdGVyIGludGVyY2VwdGluZyB0aGUgTVNSIHdyaXRlLgomIzQzOwkJCSAqLwomIzQzOwkJCXN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciBhdHRyID0gewomIzQzOwkJCQkudHlwZSA9IEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UsCiYjNDM7CQkJCS51LmdwYSA9IEhDQUxMX1JFR0lPTl9HUEEsCiYjNDM7CQkJfTsKJiM0MzsJCQl2Y3B1X2lvY3RsKHZjcHUsIEtWTV9YRU5fVkNQVV9TRVRfQVRUUiwgJmFtcDthdHRyKTsKJiM0MzsKJiM0MzsJCQkvKiBWZXJpZnkgdGhlIHBhZ2UgaXMgbm93IHBvcHVsYXRlZCAqLwomIzQzOwkJCVRFU1RfQVNTRVJUX0VRKGhjYWxsX3BhZ2VbMF0sIDB4YjgpOwomIzQzOwomIzQzOwkJCXJ1bi0mZ3Q7bXNyLmVycm9yID0gMDsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsKIAkJVEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTsKIAogCQlzd2l0Y2ggKGdldF91Y2FsbCh2Y3B1LCAmYW1wO3VjKSkgewpAQCAtMTMwLDYgJiM0MzsyMTQsMTggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAkJCVJFUE9SVF9HVUVTVF9BU1NFUlQodWMpOwogCQkJLyogTk9UIFJFQUNIRUQgKi8KIAkJY2FzZSBVQ0FMTF9TWU5DOgomIzQzOwkJCVRFU1RfQVNTRVJUX0VRKHVjLmFyZ3NbMV0sIFRFU1RfV1JJVEVfSFlQRVJDQUxMX1BBR0UpOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogR3Vlc3QgaXMgYWJvdXQgdG8gd3JpdGUgdGhlIFhlbiBNU1IuIENsZWFyIHRoZQomIzQzOwkJCSAqIGh5cGVyY2FsbCBwYWdlLCBpbnN0YWxsIE1TUiBmaWx0ZXIgdG8gaW50ZXJjZXB0CiYjNDM7CQkJICogdGhlIHdyaXRlLCBhbmQgZW5hYmxlIHVzZXJzcGFjZSBNU1IgZXhpdHMuCiYjNDM7CQkJICovCiYjNDM7CQkJbWVtc2V0KGFkZHJfZ3BhMmh2YSh2bSwgSENBTExfUkVHSU9OX0dQQSksIDAsIFBBR0VfU0laRSk7CiYjNDM7CQkJdm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9YODZfVVNFUl9TUEFDRV9NU1IsCiYjNDM7CQkJCSAgICAgIEtWTV9NU1JfRVhJVF9SRUFTT05fRklMVEVSKTsKJiM0MzsJCQlzZXR1cF9tc3JfZmlsdGVyKHZtKTsKJiM0MzsJCQltc3JfZmlsdGVyX3JlYWR5ID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQljYXNlIFVDQUxMX0RPTkU6CiAJCQlnb3RvIGRvbmU7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MjUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gWGVuIFZDUFUgSHlwZXJjYWxsIFBhZ2UgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IGludHJvZHVjZXMgYSBuZXcgS1ZNIFhlbiBWQ1BVIGF0dHJpYnV0ZSwgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgLiBUaGUgZ2lzdCBpcywgaXQgYWxsb3dzIHVzZXJzcGFjZSB0byB0cmlnZ2VyIHRoZSBYZW4gaHlwZXJjYWxsIHBhZ2UgcG9wdWxhdGlvbiBhdCBhIHNwZWNpZmllZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLiBJdCYjMzk7cyBiYXNpY2FsbHkgYSBzYWZlciB3YXkgdG8gZG8gaXQsIGJ5cGFzc2luZyB0aGUgZGlyZWN0IE1TUiB3cml0ZSwgd2hpY2ggaXMgYmxvY2tlZCBmb3Igc2VjdXJpdHkgcmVhc29ucyB3aGVuIHRoZSBob3N0IHRyaWVzIHRvIHdyaXRlIHRvIHRoZSBoeXBlcmNhbGwgcGFnZS4gU21hcnQuCgpMZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHRoaW5nLiBGaXJzdCwgZG9jdW1lbnRhdGlvbiBpbiBgRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0YCAtIGdvdHRhIG1ha2Ugc3VyZSB0aGF0JiMzOTtzIHVwIHRvIHNudWZmLiBUaGVuLCB0aGUgdXN1YWwgc3VzcGVjdHM6IGBhcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oYCBhZGRpbmcgdGhlIG5ldyBkZWZpbml0aW9ucyBgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFYCBhbmQgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgLiBgYXJjaC94ODYva3ZtL3g4Ni5jYCBpbmNsdWRlcyB0aGUgYEtWTV9YRU5fSFZNX0NPTkZJR19XUklURV9IWVBFUkNBTExfUEFHRWAgaW4gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLiBTdGFuZGFyZCBzdHVmZiBzbyBmYXIuCgpOb3csIGhlcmUmIzM5O3Mgd2hlcmUgdGhlIG1lYXQgaXMsIGBhcmNoL3g4Ni9rdm0veGVuLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBoYW5kbGluZyBgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRWAgaW4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAuIEl0JiMzOTtzIGNhbGxpbmcgYF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZSh2Y3B1LCBkYXRhLSZndDt1LmdwYSlgLiBBaCwgYW5kIEkgc2VlIHRoZXkgcmVmYWN0b3JlZCB0aGUgZXhpc3RpbmcgYGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VgIGludG8gdGhpcyBpbnRlcm5hbCBmdW5jdGlvbiBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYCB0byByZXR1cm4gcHJvcGVyIGVycm9yIGNvZGVzIGxpa2UgYC1FSU5WQUxgLCBpbnN0ZWFkIG9mIHJldHVybmluZyBgMWAgb24gZXJyb3IuIFRoZW4gdGhlIG9yaWdpbmFsIGBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYCB3cmFwcyB0aGF0IHRvIHN0YXkgYmFja3dhcmQgY29tcGF0aWJsZS4gR29vZCBtb3ZlLCBjbGVhbmVyIGVycm9yIGhhbmRsaW5nLgoKQW5kIGZpbmFsbHksIHdlJiMzOTt2ZSBnb3QgYSBzZWxmdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmNgLCBzbyBpdCYjMzk7cyB0ZXN0ZWQuIEV4Y2VsbGVudCEKClNvLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEtWTSBYZW4gZW11bGF0aW9uLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgS1ZNX1hFTl9WQ1BVX1NFVF9BVFRSYCBpb2N0bC4gUmlnaHQsIGdpdmVuIHRoYXQgaXQmIzM5O3MgdXNlcnNwYWNlLWZhY2luZywgYW5kIGRlYWxzIHdpdGggaHlwZXJjYWxscywgd2UgYWJzb2x1dGVseSBuZWVkIHRvIGZ1enogdGhpcyEgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSByZWxldmFudCBLY29uZmlncy4gTGV0JiMzOTtzIGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZm9yIGBLVk1gIGFuZCBgS1ZNX1hFTmAuLi4gZ290IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9YRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOTM9Y29uZmlnIEtWTV9IWVBFUlZcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Nzg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0vWGVuIENvbmZpZ3VyYXRpb24gZm9yIFBvdGVudGlhbCBQZXJmb3JtYW5jZSBCb3R0bGVuZWNrcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBLVk1gIGFuZCBgS1ZNX1hFTmAsIGFuZCBJJiMzOTttIHRyeWluZyB0byBwaW5wb2ludCB3aGVyZSB0aGUgZm9jdXMgbGllcy4gVGltZSB0byBkaWcgaW50byB0aGUgc3ltYm9scy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VgLCBhbmQgYGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBpcyBldmVuIHdvcnRoIGEgZGVlcGVyIGxvb2sgaW4gdGVybXMgb2YgYmVpbmcgYSBob3QgcGF0aC4gQWgsIGlvY3RsIGhhbmRsZXIsIG5vdCBhIHByaW1hcnkgY29uY2VybiBmb3IgcGVyZm9ybWFuY2UgcmlnaHQgbm93LgoKTm93LCB0aGF0IGxlYXZlcyBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYC4gVGhhdCYjMzk7cyB0aGUgbmV3ZXIgZnVuY3Rpb24sIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGZvY3VzIHRoZXJlLiBKdXN0IGdvaW5nIHRvIHF1aWNrbHkgcmUtdmFsaWRhdGUgdGhvc2UgY29uZmlnIG9wdGlvbnMgYW5kIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01My1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6Njk6Y29uZmlnIEtWTV9XRVJST1JcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtDb21waWxlIEtWTSB3aXRoIC1XZXJyb3JcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cdGJvb2wgXCYjMzQ7RW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMDc6Y29uZmlnIEtWTV9JTlRFTF9QUk9WRV9WRVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcJiMzNDtDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzNS1cdGJvb2wgXCYjMzQ7SW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE0Njpjb25maWcgS1ZNX0FNRFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBBTUQgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTU1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVx0Ym9vbCBcJiMzNDtBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTcyOmNvbmZpZyBLVk1fSU9BUElDXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzMtXHRib29sIFwmIzM0O0kvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTgxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTgyOmNvbmZpZyBLVk1fU01NXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXHRib29sIFwmIzM0O1N5c3RlbSBNYW5hZ2VtZW50IE1vZGUgZW11bGF0aW9uXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTkyLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxuYXJjaC94ODYva3ZtL0tjb25maWctMjA4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIxNjpjb25maWcgS1ZNX1BST1ZFX01NVVxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVx0Ym9vbCBcJiMzNDtQcm92ZSBLVk0gTU1VIGNvcnJlY3RuZXNzXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMjI4LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMC1cdGJvb2xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMjpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xuYXJjaC94ODYva3ZtL0tjb25maWctMjMzLVx0aW50IFwmIzM0O01heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzk0CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqQW5hbHl6aW5nIEtWTS1YZW4gQ29uZmlndXJhdGlvbiBhbmQgS2V5IEZ1bmN0aW9uIFN5bWJvbHMqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgYEtWTWAgYW5kIGBLVk1fWEVOYCBjb25maWd1cmF0aW9ucyBoZXJlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgaW1tZWRpYXRlbHkgZHJhd24gdG8gdGhlIGtleSBjb25maWd1cmF0aW9uIGlkZW50aWZpZXJzLCBhbmQgd2hhdCB0aGV5IG1lYW4gZnJvbSBhbiBhcmNoaXRlY3R1cmFsIHN0YW5kcG9pbnQuCgpOb3csIEkmIzM5O20gemVyb2luZyBpbiBvbiBhIGNvdXBsZSBvZiBmdW5jdGlvbiBzeW1ib2xzLiBTcGVjaWZpY2FsbHksIEkgc2VlIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFuZCBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYC4gVGhlc2UgKmZlZWwqIHNpZ25pZmljYW50LCBhbmQgSSYjMzk7bSBpbnN0YW50bHkgdGhpbmtpbmcgYWJvdXQgdGhlIGNvcmUgbWVjaGFuaXNtcy4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAgaW1tZWRpYXRlbHkgc3RhbmRzIG91dC4gSXQmIzM5O3Mgc2NyZWFtaW5nICYjMzQ7dmlydHVhbCBDUFUgYXR0cmlidXRlIG1hbmlwdWxhdGlvbiYjMzQ7IGFuZCB0aGUgWGVuIGludGVncmF0aW9uIGlzIGtleS4gVGhhdCBtYWtlcyBtZSB3b25kZXIgYWJvdXQgdGhlIHNwZWNpZmljIGNvbnRleHQgYW5kIHdoZXJlIGl0IG9wZXJhdGVzIHdpdGggdGhlIGh5cGVydmlzb3IuCgpJIG5lZWQgdG8gY29uZmlybSBpZiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBpcyBhIHNvbGlkIGZvY3VzIHN5bWJvbC4gSSBzdXNwZWN0IGl0JiMzOTtzIGNlbnRyYWwgdG8gaG93IEtWTSBpbnRlcmFjdHMgd2l0aCBYZW4gdG8gbWFuYWdlIHZpcnR1YWwgQ1BVcy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiBkaXZpbmcgZGVlcGVyLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgbWFwcyB0byBYZW4mIzM5O3Mgc3RydWN0dXJlcyBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHR3byB2aXJ0dWFsIG1hY2hpbmUgbW9uaXRvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV94ZW5fdmNwdV9zZXRfYXR0ciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jPTYxOTA9bG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy02NjEyLVx0XHRcdGdvdG8gb3V0O1xuYXJjaC94ODYva3ZtL3g4Ni5jOjY2MTM6XHRcdHIgPSBrdm1feGVuX3ZjcHVfc2V0X2F0dHIodmNwdSwgXHUwMDI2eHZhKTtcbmFyY2gveDg2L2t2bS94ODYuYy02NjE0LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmM9ODUyPWludCBrdm1feGVuX2h2bV9nZXRfYXR0cihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKVxuLS1cbmFyY2gveDg2L2t2bS94ZW4uYy05MDYtXG5hcmNoL3g4Ni9rdm0veGVuLmM6OTA3OmludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG5hcmNoL3g4Ni9rdm0veGVuLmMtOTA4LXtcbi0tXG5hcmNoL3g4Ni9rdm0veGVuLmg9MjI9dm9pZCBrdm1feGVuX2luamVjdF92Y3B1X3ZlY3RvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL3hlbi5oOjIzOmludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xuYXJjaC94ODYva3ZtL3hlbi5oLTI0LWludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDE3OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjQxCgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDIzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNLVhlbiBIeXBlcmNhbGwgUGFnZSBQb3B1bGF0aW9uKioKCk9rYXksIHNvIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGlzIGRlZmluaXRlbHkgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoaXMgcHV6emxlOyBpdCYjMzk7cyB0aGUgaW9jdGwgaGFuZGxlciBmb3IgYEtWTV9YRU5fVkNQVV9TRVRfQVRUUmAsIG1ha2luZyBpdCBhIGtleSBmb2N1cyBwb2ludC4gIEFuZCwgb2YgY291cnNlLCBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYCBsb29rcyBlcXVhbGx5IGNyaXRpY2FsLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBhdCB0aGUgZm9yZWZyb250LgoKTGV0JiMzOTtzIHNlZSwgYXJlIHRoZXJlIGFueSBvdGhlciByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBiZSBpbXBvcnRhbnQgaGVyZT8gIEFoLCB5ZXMsIGBLVk1fWEVOYCBkZXBlbmRzIG9uIGBLVk1gLiBHb3QgaXQuCgpJbiBzaG9ydCwgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgYWRkaXRpb24gb2YgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIGFuZCBpdHMgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5IC0gc3BlY2lmaWNhbGx5IHRoZSBhYmlsaXR5IGZvciB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlIC0gaXMgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIHRoZSBgS1ZNX1hFTl9WQ1BVX1NFVF9BVFRSYCBpb2N0bCBhbmQgZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIGNvcmUgS1ZNIFhlbiBlbXVsYXRpb24uIE15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgYXJlYXMgYXJvdW5kIHRob3NlIHR3byBzeW1ib2xzOiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBhbmQgYF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZWAuIEkgd2lsbCB3YW50IHRvIGVuc3VyZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zIGFyZSBlbmFibGVkOiBgS1ZNYCBhbmQgYEtWTV9YRU5gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxNzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9YRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1feGVuX3ZjcHVfc2V0X2F0dHImIzM0OywKICAgICYjMzQ7X19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgS1ZNIFhlbiBWQ1BVIGF0dHJpYnV0ZSBgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRWAgd2hpY2ggYWxsb3dzIHVzZXJzcGFjZSB0byB0cmlnZ2VyIHRoZSBwb3B1bGF0aW9uIG9mIHRoZSBYZW4gaHlwZXJjYWxsIHBhZ2UuIFRoaXMgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYEtWTV9YRU5fVkNQVV9TRVRfQVRUUmAgaW9jdGwgYW5kIG1vZGlmaWVzIGNvcmUgS1ZNIFhlbiBlbXVsYXRpb24gbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fWEVOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3hlbl92Y3B1X3NldF9hdHRyJiMzNDssCiAgICAmIzM0O19fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBYZW4gVkNQVSBhdHRyaWJ1dGUgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDk6MzguNTk2NTc1ODg5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1NjYwOTE4ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3hlbl92Y3B1X3NldF9hdHRyXCIsXG4gICAgXCJfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBYZW4gVkNQVSBhdHRyaWJ1dGUgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzowOTozOC41OTY1ODMyNzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDEwMjg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE0Zjc5ZjQ5OWNlYTU4YzNjMTgyYWU4OGY5ZmNjNTVkMTc0YmUxN2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTc6MDk6MzcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuaW5kZXggYTVmOWVlOTJmNDNlOGQuLjNjNmFlZTJhMzViZmRjIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbkBAIC01ODEyLDYgKzU4MTIsMTkgQEAgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9VUENBTExfVkVDVE9SXFxuICAgdmVjdG9yIGNvbmZpZ3VyZWQgd2l0aCBIVk1fUEFSQU1fQ0FMTEJBQ0tfSVJRLiBJdCBpcyBkaXNhYmxlZCBieVxcbiAgIHNldHRpbmcgdGhlIHZlY3RvciB0byB6ZXJvLlxcbiBcXG4rS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRVxcbisgIFRoaXMgYXR0cmlidXRlIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBLVk1fQ0FQX1hFTl9IVk0gaW9jdGwgaW5kaWNhdGVzXFxuKyAgc3VwcG9ydCBmb3IgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFLiBJdCB0cmlnZ2Vyc1xcbisgIHBvcHVsYXRpb24gb2YgdGhlIFhlbiBoeXBlcmNhbGwgcGFnZSBhdCB0aGUgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzc1xcbisgIHNwZWNpZmllZCBpbiBgYGdwYWBgLCBqdXN0IGFzIGlmIHRoZSBndWVzdCBoYWQgd3JpdHRlbiB0byB0aGVcXG4rICBoeXBlcmNhbGwgTVNSLiBUaGlzIGlzIGludGVuZGVkIGZvciBWTU1zIHRoYXQgaW50ZXJjZXB0IHRoZSBndWVzdCdzXFxuKyAgTVNSIHdyaXRlIChlLmcuIHRvIHRyYWNrIGFuIGVwb2NoIGZvciBrZXhlYy9jcmFzaCByZWNvdmVyeSkgYW5kIG5lZWRcXG4rICB0byByZXBsYXkgdGhlIHdyaXRlIGZyb20gaG9zdCBjb250ZXh0LiBEaXJlY3QgaG9zdC1pbml0aWF0ZWQgd3JpdGVzXFxuKyAgdmlhIEtWTV9TRVRfTVNSUyBhcmUgYmxvY2tlZCBmb3Igc2FmZXR5OyB0aGlzIGF0dHJpYnV0ZSBwcm92aWRlcyB0aGVcXG4rICBjb3JyZWN0IGFsdGVybmF0aXZlLiBBcyB3aXRoIGEgbm9uLWludGVyY2VwdGVkIGd1ZXN0IHdyaXRlIHRvIHRoZVxcbisgIGh5cGVyY2FsbCBNU1IsIGl0IGFsc28gbGF0Y2hlcyB0aGUgJ2xvbmcgbW9kZScgZm9yIHRoZSBWTSwgd2hpY2hcXG4rICBkZXRlcm1pbmVzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuXFxuK1xcbiBcXG4gNC4xMjkgS1ZNX1hFTl9WQ1BVX0dFVF9BVFRSXFxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbmluZGV4IDE1ODVlYzgwNDA2NjZlLi43NzMyYjkyYTRkYjAyZSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuKysrIGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxcbkBAIC01OTgsNiArNTk4LDcgQEAgc3RydWN0IGt2bV94ODZfbWNlIHtcXG4gI2RlZmluZSBLVk1fWEVOX0hWTV9DT05GSUdfUlVOU1RBVEVfVVBEQVRFX0ZMQUdcXHQoMSBcXHUwMDNjXFx1MDAzYyA2KVxcbiAjZGVmaW5lIEtWTV9YRU5fSFZNX0NPTkZJR19QVkNMT0NLX1RTQ19VTlNUQUJMRVxcdCgxIFxcdTAwM2NcXHUwMDNjIDcpXFxuICNkZWZpbmUgS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQVxcdCgxIFxcdTAwM2NcXHUwMDNjIDgpXFxuKyNkZWZpbmUgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFXFx0KDEgXFx1MDAzY1xcdTAwM2MgOSlcXG4gXFxuICNkZWZpbmUgS1ZNX1hFTl9NU1JfTUlOX0lOREVYXFx0XFx0XFx0MHg0MDAwMDAwMHVcXG4gI2RlZmluZSBLVk1fWEVOX01TUl9NQVhfSU5ERVhcXHRcXHRcXHQweDRmZmZmZmZmdVxcbkBAIC03MDYsNiArNzA3LDggQEAgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyIHtcXG4gI2RlZmluZSBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1VQQ0FMTF9WRUNUT1JcXHQweDhcXG4gLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9YRU5fSFZNIC8gS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQSAqL1xcbiAjZGVmaW5lIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfVkNQVV9JTkZPX0hWQVxcdDB4OVxcbisvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1hFTl9IVk0gLyBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0UgKi9cXG4rI2RlZmluZSBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1dSSVRFX0hZUEVSQ0FMTF9QQUdFIDB4YVxcbiBcXG4gLyogU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiBjb21tYW5kICovXFxuIGVudW0gc2V2X2NtZF9pZCB7XFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xcbmluZGV4IGFmY2FjMTA0Mjk0N2E1Li5kN2YyM2MwYmZmNzQ1NiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtNDg2OSw3ICs0ODY5LDggQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4gXFx0XFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fMkxFVkVMIHxcXG4gXFx0XFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19FVlRDSE5fU0VORCB8XFxuIFxcdFxcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfUFZDTE9DS19UU0NfVU5TVEFCTEUgfFxcbi1cXHRcXHQgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQTtcXG4rXFx0XFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19TSEFSRURfSU5GT19IVkEgfFxcbitcXHRcXHQgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFO1xcbiBcXHRcXHRpZiAoc2NoZWRfaW5mb19vbigpKVxcbiBcXHRcXHRcXHRyIHw9IEtWTV9YRU5fSFZNX0NPTkZJR19SVU5TVEFURSB8XFxuIFxcdFxcdFxcdCAgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1JVTlNUQVRFX1VQREFURV9GTEFHO1xcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veGVuLmMgYi9hcmNoL3g4Ni9rdm0veGVuLmNcXG5pbmRleCA2OTRiMzFjMWZjYzlhZi4uNTA0MjNkZjZlMjJkOWQgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYva3ZtL3hlbi5jXFxuKysrIGIvYXJjaC94ODYva3ZtL3hlbi5jXFxuQEAgLTMyLDYgKzMyLDcgQEBcXG4gc3RhdGljIGludCBrdm1feGVuX3NldF9ldnRjaG4oc3RydWN0IGt2bV94ZW5fZXZ0Y2huICp4ZSwgc3RydWN0IGt2bSAqa3ZtKTtcXG4gc3RhdGljIGludCBrdm1feGVuX3NldGF0dHJfZXZ0Y2huKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV94ZW5faHZtX2F0dHIgKmRhdGEpO1xcbiBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpO1xcbitzdGF0aWMgaW50IF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKTtcXG4gXFxuIERFRklORV9TVEFUSUNfS0VZX0RFRkVSUkVEX0ZBTFNFKGt2bV94ZW5fZW5hYmxlZCwgSFopO1xcbiBcXG5AQCAtMTEzOCw2ICsxMTM5LDEwIEBAIGludCBrdm1feGVuX3ZjcHVfc2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXFxuIFxcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcbitcXHRjYXNlIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0U6XFxuK1xcdFxcdHIgPSBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2UodmNwdSwgZGF0YS1cXHUwMDNldS5ncGEpO1xcbitcXHRcXHRicmVhaztcXG4rXFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTEyNzMsNyArMTI3OCw3IEBAIGludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXFxuIFxcdHJldHVybiByO1xcbiB9XFxuIFxcbi1pbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxcbitzdGF0aWMgaW50IF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG4gXFx0dTMyIHBhZ2VfbnVtID0gZGF0YSBcXHUwMDI2IH5QQUdFX01BU0s7XFxuQEAgLTEyODEsNyArMTI4Niw2IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXFxuIFxcdGJvb2wgbG0gPSBpc19sb25nX21vZGUodmNwdSk7XFxuIFxcdGludCByID0gMDtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xcbiBcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnhlbi5sb25nX21vZGUgIT0gbG0pIHtcXG4gXFx0XFx0a3ZtLVxcdTAwM2VhcmNoLnhlbi5sb25nX21vZGUgPSBsbTtcXG4gXFxuQEAgLTEyODksMTEgKzEyOTMsOSBAQCBpbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxcbiBcXHRcXHQgKiBSZS1pbml0aWFsaXplIHNoYXJlZF9pbmZvIHRvIHB1dCB0aGUgd2FsbGNsb2NrIGluIHRoZVxcbiBcXHRcXHQgKiBjb3JyZWN0IHBsYWNlLlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGt2bS1cXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLmFjdGl2ZSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KGt2bSkpXFxuLVxcdFxcdFxcdHIgPSAxO1xcbitcXHRcXHRpZiAoa3ZtLVxcdTAwM2VhcmNoLnhlbi5zaGluZm9fY2FjaGUuYWN0aXZlKVxcbitcXHRcXHRcXHRyID0ga3ZtX3hlbl9zaGFyZWRfaW5mb19pbml0KGt2bSk7XFxuIFxcdH1cXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcXG4gXFxuIFxcdGlmIChyKVxcbiBcXHRcXHRyZXR1cm4gcjtcXG5AQCAtMTMwOSw3ICsxMzExLDcgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcXG4gXFx0XFx0aW50IGk7XFxuIFxcbiBcXHRcXHRpZiAocGFnZV9udW0pXFxuLVxcdFxcdFxcdHJldHVybiAxO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdFxcdC8qIG1vdiBpbW0zMiwgJWVheCAqL1xcbiBcXHRcXHRpbnN0cnVjdGlvbnNbMF0gPSAweGI4O1xcbkBAIC0xMzI1LDEwICsxMzI3LDExIEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXFxuIFxcbiBcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgUEFHRV9TSVpFIC8gc2l6ZW9mKGluc3RydWN0aW9ucyk7IGkrKykge1xcbiBcXHRcXHRcXHQqKHUzMiAqKVxcdTAwMjZpbnN0cnVjdGlvbnNbMV0gPSBpO1xcbi1cXHRcXHRcXHRpZiAoa3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSxcXG4rXFx0XFx0XFx0ciA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0KHZjcHUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBwYWdlX2FkZHIgKyAoaSAqIHNpemVvZihpbnN0cnVjdGlvbnMpKSxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IGluc3RydWN0aW9ucywgc2l6ZW9mKGluc3RydWN0aW9ucykpKVxcbi1cXHRcXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IGluc3RydWN0aW9ucywgc2l6ZW9mKGluc3RydWN0aW9ucykpO1xcbitcXHRcXHRcXHRpZiAocilcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0LypcXG5AQCAtMTM0MCwxMCArMTM0Myw5IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXFxuIFxcdFxcdHU4IGJsb2Jfc2l6ZSA9IGxtID8ga3ZtLVxcdTAwM2VhcmNoLnhlbi5odm1fY29uZmlnLmJsb2Jfc2l6ZV82NFxcbiBcXHRcXHRcXHRcXHQgIDoga3ZtLVxcdTAwM2VhcmNoLnhlbi5odm1fY29uZmlnLmJsb2Jfc2l6ZV8zMjtcXG4gXFx0XFx0dTggKnBhZ2U7XFxuLVxcdFxcdGludCByZXQ7XFxuIFxcbiBcXHRcXHRpZiAocGFnZV9udW0gXFx1MDAzZT0gYmxvYl9zaXplKVxcbi1cXHRcXHRcXHRyZXR1cm4gMTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRcXHRibG9iX2FkZHIgKz0gcGFnZV9udW0gKiBQQUdFX1NJWkU7XFxuIFxcbkBAIC0xMzUxLDE0ICsxMzUzLDI3IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXFxuIFxcdFxcdGlmIChJU19FUlIocGFnZSkpXFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKHBhZ2UpO1xcbiBcXG4tXFx0XFx0cmV0ID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSwgcGFnZV9hZGRyLCBwYWdlLCBQQUdFX1NJWkUpO1xcbitcXHRcXHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3QodmNwdSwgcGFnZV9hZGRyLCBwYWdlLCBQQUdFX1NJWkUpO1xcbiBcXHRcXHRrZnJlZShwYWdlKTtcXG4tXFx0XFx0aWYgKHJldClcXG4tXFx0XFx0XFx0cmV0dXJuIDE7XFxuK1xcdFxcdGlmIChyKVxcbitcXHRcXHRcXHRyZXR1cm4gcjtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4raW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcXG4re1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC54ZW4ueGVuX2xvY2spO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIE1TUiB3cml0ZSBwYXRoIGV4cGVjdHMgYSAwLzEgcmV0dXJuOyBjb252ZXJ0IHRoZSBlcnJubyBmcm9tXFxuK1xcdCAqIHRoZSBzaGFyZWQgaGVscGVyIGFjY29yZGluZ2x5LiBDYWxsZXJzIHRoYXQgd2FudCB0aGUgcmVhbCBlcnJvclxcbitcXHQgKiAoZS5nLiB0aGUgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRSBhdHRyaWJ1dGUpXFxuK1xcdCAqIGludm9rZSBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2UoKSBkaXJlY3RseS5cXG4rXFx0ICovXFxuK1xcdHJldHVybiBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2UodmNwdSwgZGF0YSkgPyAxIDogMDtcXG4rfVxcbitcXG4gaW50IGt2bV94ZW5faHZtX2NvbmZpZyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9jb25maWcgKnhoYylcXG4ge1xcbiBcXHQvKiBPbmx5IHNvbWUgZmVhdHVyZSBmbGFncyBuZWVkIHRvIGJlICplbmFibGVkKiBieSB1c2Vyc3BhY2UgKi9cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmNcXG5pbmRleCAyNTg1MDg3Y2RmNWNiZS4uMTUzNmQ1MTBhYjMwMTkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmNcXG5AQCAtMTIsNiArMTIsOCBAQFxcbiAjaW5jbHVkZSBcXFwicHJvY2Vzc29yLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJoeXBlcnYuaFxcXCJcXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4rXFxuICNkZWZpbmUgSENBTExfUkVHSU9OX0dQQVxcdDB4YzAwMDAwMDBVTExcXG4gI2RlZmluZSBIQ0FMTF9SRUdJT05fU0xPVFxcdDEwXFxuIFxcbkBAIC0yNiw2ICsyOCwxMCBAQFxcbiAjZGVmaW5lIEhWQ0FMTF9TSUdOQUxfRVZFTlRcXHRcXHQweDAwNWRcXG4gI2RlZmluZSBIVl9TVEFUVVNfSU5WQUxJRF9BTElHTk1FTlRcXHQ0XFxuIFxcbitlbnVtIHtcXG4rXFx0VEVTVF9XUklURV9IWVBFUkNBTExfUEFHRSA9IDEsXFxuK307XFxuK1xcbiBzdGF0aWMgdm9pZCBndWVzdF9jb2RlKHZvaWQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyByYXggPSBJTlBVVFZBTFVFO1xcbkBAIC03NiwxNyArODIsNjUgQEAgc3RhdGljIHZvaWQgZ3Vlc3RfY29kZSh2b2lkKVxcbiBcXHRcXHRcXHQgICAgIFxcXCJyXFxcIihyOCkpO1xcbiBcXHRHVUVTVF9BU1NFUlQocmF4ID09IEhWX1NUQVRVU19JTlZBTElEX0FMSUdOTUVOVCk7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBUZXN0IEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0U6IGFzayB1c2Vyc3BhY2VcXG4rXFx0ICogdG8gc2V0IHVwIE1TUiBmaWx0ZXJpbmcsIHRoZW4gd3JpdGUgdGhlIE1TUi4gVGhlIFdSTVNSIHdpbGwgZXhpdFxcbitcXHQgKiB0byB1c2Vyc3BhY2UgKG5vdCBwb3B1bGF0ZSB0aGUgcGFnZSkuIFVzZXJzcGFjZSB2ZXJpZmllcyB0aGUgcGFnZVxcbitcXHQgKiBpcyBlbXB0eSwgdXNlcyB0aGUgYXR0ciB0byBwb3B1bGF0ZSBpdCwgdGhlbiByZXN1bWVzIHVzLlxcbitcXHQgKi9cXG4rXFx0R1VFU1RfU1lOQyhURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTtcXG4rXFxuK1xcdF9fYXNtX18gX192b2xhdGlsZV9fKFxcXCJ3cm1zclxcXCIgOiA6IFxcXCJjXFxcIiAoWEVOX0hZUEVSQ0FMTF9NU1IpLFxcbitcXHRcXHRcXHQgICAgIFxcXCJhXFxcIiAoSENBTExfUkVHSU9OX0dQQSBcXHUwMDI2IDB4ZmZmZmZmZmYpLFxcbitcXHRcXHRcXHQgICAgIFxcXCJkXFxcIiAoSENBTExfUkVHSU9OX0dQQSBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXG4rXFx0LyogVXNlcnNwYWNlIHBvcHVsYXRlZCB0aGUgcGFnZSB2aWEgdGhlIGF0dHIg4oCUIHZlcmlmeSBpdCB3b3JrcyAqL1xcbitcXHRyYXggPSBJTlBVVFZBTFVFO1xcbitcXHRyZGkgPSBBUkdWQUxVRSgxKTtcXG4rXFx0cnNpID0gQVJHVkFMVUUoMik7XFxuK1xcdHJkeCA9IEFSR1ZBTFVFKDMpO1xcbitcXHRyMTAgPSBBUkdWQUxVRSg0KTtcXG4rXFx0cjggPSBBUkdWQUxVRSg1KTtcXG4rXFx0cjkgPSBBUkdWQUxVRSg2KTtcXG4rXFx0X19hc21fXyBfX3ZvbGF0aWxlX18oXFxcImNhbGwgKiUxXFxcIiA6IFxcXCI9YVxcXCIocmF4KSA6XFxuK1xcdFxcdFxcdCAgICAgXFxcInJcXFwiKEhDQUxMX1JFR0lPTl9HUEEgKyBJTlBVVFZBTFVFICogMzIpLFxcbitcXHRcXHRcXHQgICAgIFxcXCJhXFxcIihyYXgpLCBcXFwiRFxcXCIocmRpKSwgXFxcIlNcXFwiKHJzaSksIFxcXCJkXFxcIihyZHgpLFxcbitcXHRcXHRcXHQgICAgIFxcXCJyXFxcIihyMTApLCBcXFwiclxcXCIocjgpLCBcXFwiclxcXCIocjkpKTtcXG4rXFx0R1VFU1RfQVNTRVJUKHJheCA9PSBSRVRWQUxVRSk7XFxuK1xcbiBcXHRHVUVTVF9ET05FKCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHNldHVwX21zcl9maWx0ZXIoc3RydWN0IGt2bV92bSAqdm0pXFxuK3tcXG4rXFx0dWludDY0X3QgZGVueV9iaXRzID0gMDtcXG4rXFx0c3RydWN0IGt2bV9tc3JfZmlsdGVyIGZpbHRlciA9IHtcXG4rXFx0XFx0LmZsYWdzID0gS1ZNX01TUl9GSUxURVJfREVGQVVMVF9BTExPVyxcXG4rXFx0XFx0LnJhbmdlcyA9IHtcXG4rXFx0XFx0XFx0e1xcbitcXHRcXHRcXHRcXHQuZmxhZ3MgPSBLVk1fTVNSX0ZJTFRFUl9XUklURSxcXG4rXFx0XFx0XFx0XFx0Lm5tc3JzID0gMSxcXG4rXFx0XFx0XFx0XFx0LmJhc2UgPSBYRU5fSFlQRVJDQUxMX01TUixcXG4rXFx0XFx0XFx0XFx0LmJpdG1hcCA9ICh1aW50OF90ICopXFx1MDAyNmRlbnlfYml0cyxcXG4rXFx0XFx0XFx0fSxcXG4rXFx0XFx0fSxcXG4rXFx0fTtcXG4rXFxuK1xcdHZtX2lvY3RsKHZtLCBLVk1fWDg2X1NFVF9NU1JfRklMVEVSLCBcXHUwMDI2ZmlsdGVyKTtcXG4rfVxcbitcXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgeGVuX2NhcHM7XFxuIFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcXG4gXFx0c3RydWN0IGt2bV92bSAqdm07XFxuK1xcdGJvb2wgbXNyX2ZpbHRlcl9yZWFkeSA9IGZhbHNlO1xcbiBcXG4gXFx0eGVuX2NhcHMgPSBrdm1fY2hlY2tfY2FwKEtWTV9DQVBfWEVOX0hWTSk7XFxuIFxcdFRFU1RfUkVRVUlSRSh4ZW5fY2FwcyBcXHUwMDI2IEtWTV9YRU5fSFZNX0NPTkZJR19JTlRFUkNFUFRfSENBTEwpO1xcbitcXHRURVNUX1JFUVVJUkUoeGVuX2NhcHMgXFx1MDAyNiBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0UpO1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1g4Nl9VU0VSX1NQQUNFX01TUikpO1xcbitcXHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1g4Nl9NU1JfRklMVEVSKSk7XFxuIFxcbiBcXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFxcdTAwMjZ2Y3B1LCBndWVzdF9jb2RlKTtcXG4gXFx0dmNwdV9zZXRfaHZfY3B1aWQodmNwdSk7XFxuQEAgLTEyMyw2ICsxNzcsMzYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFxuK1xcdFxcdGlmIChydW4tXFx1MDAzZWV4aXRfcmVhc29uID09IEtWTV9FWElUX1g4Nl9XUk1TUikge1xcbitcXHRcXHRcXHQvKiBNU1IgZmlsdGVyIGNhdWdodCB0aGUgWGVuIGh5cGVyY2FsbCBNU1Igd3JpdGUgKi9cXG4rXFx0XFx0XFx0VEVTVF9BU1NFUlQobXNyX2ZpbHRlcl9yZWFkeSxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJVbmV4cGVjdGVkIFdSTVNSIGV4aXQgYmVmb3JlIGZpbHRlciBzZXR1cFxcXCIpO1xcbitcXHRcXHRcXHRURVNUX0FTU0VSVF9FUShydW4tXFx1MDAzZW1zci5pbmRleCwgWEVOX0hZUEVSQ0FMTF9NU1IpO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVGhlIGhvc3RfaW5pdGlhdGVkIGNoZWNrIHNob3VsZCBoYXZlIHByZXZlbnRlZFxcbitcXHRcXHRcXHQgKiBLVk0gZnJvbSBwb3B1bGF0aW5nIHRoZSBwYWdlLiBWZXJpZnkgaXQncyBlbXB0eS5cXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdHVpbnQ4X3QgKmhjYWxsX3BhZ2UgPSBhZGRyX2dwYTJodmEodm0sIEhDQUxMX1JFR0lPTl9HUEEpO1xcbitcXHRcXHRcXHRURVNUX0FTU0VSVF9FUShoY2FsbF9wYWdlWzBdLCAwKTtcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIE5vdyB1c2UgdGhlIGF0dHIgdG8gcG9wdWxhdGUgdGhlIHBhZ2UsIGFzIGFcXG4rXFx0XFx0XFx0ICogVk1NIHdvdWxkIGFmdGVyIGludGVyY2VwdGluZyB0aGUgTVNSIHdyaXRlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0c3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyIGF0dHIgPSB7XFxuK1xcdFxcdFxcdFxcdC50eXBlID0gS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRSxcXG4rXFx0XFx0XFx0XFx0LnUuZ3BhID0gSENBTExfUkVHSU9OX0dQQSxcXG4rXFx0XFx0XFx0fTtcXG4rXFx0XFx0XFx0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fWEVOX1ZDUFVfU0VUX0FUVFIsIFxcdTAwMjZhdHRyKTtcXG4rXFxuK1xcdFxcdFxcdC8qIFZlcmlmeSB0aGUgcGFnZSBpcyBub3cgcG9wdWxhdGVkICovXFxuK1xcdFxcdFxcdFRFU1RfQVNTRVJUX0VRKGhjYWxsX3BhZ2VbMF0sIDB4YjgpO1xcbitcXG4rXFx0XFx0XFx0cnVuLVxcdTAwM2Vtc3IuZXJyb3IgPSAwO1xcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcXG4gXFxuIFxcdFxcdHN3aXRjaCAoZ2V0X3VjYWxsKHZjcHUsIFxcdTAwMjZ1YykpIHtcXG5AQCAtMTMwLDYgKzIxNCwxOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiBcXHRcXHRcXHRSRVBPUlRfR1VFU1RfQVNTRVJUKHVjKTtcXG4gXFx0XFx0XFx0LyogTk9UIFJFQUNIRUQgKi9cXG4gXFx0XFx0Y2FzZSBVQ0FMTF9TWU5DOlxcbitcXHRcXHRcXHRURVNUX0FTU0VSVF9FUSh1Yy5hcmdzWzFdLCBURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTtcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEd1ZXN0IGlzIGFib3V0IHRvIHdyaXRlIHRoZSBYZW4gTVNSLiBDbGVhciB0aGVcXG4rXFx0XFx0XFx0ICogaHlwZXJjYWxsIHBhZ2UsIGluc3RhbGwgTVNSIGZpbHRlciB0byBpbnRlcmNlcHRcXG4rXFx0XFx0XFx0ICogdGhlIHdyaXRlLCBhbmQgZW5hYmxlIHVzZXJzcGFjZSBNU1IgZXhpdHMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRtZW1zZXQoYWRkcl9ncGEyaHZhKHZtLCBIQ0FMTF9SRUdJT05fR1BBKSwgMCwgUEFHRV9TSVpFKTtcXG4rXFx0XFx0XFx0dm1fZW5hYmxlX2NhcCh2bSwgS1ZNX0NBUF9YODZfVVNFUl9TUEFDRV9NU1IsXFxuK1xcdFxcdFxcdFxcdCAgICAgIEtWTV9NU1JfRVhJVF9SRUFTT05fRklMVEVSKTtcXG4rXFx0XFx0XFx0c2V0dXBfbXNyX2ZpbHRlcih2bSk7XFxuK1xcdFxcdFxcdG1zcl9maWx0ZXJfcmVhZHkgPSB0cnVlO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0Y2FzZSBVQ0FMTF9ET05FOlxcbiBcXHRcXHRcXHRnb3RvIGRvbmU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA5OjM4Ljk3NzQwNDY5M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcxODUyNDg5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3hlbl92Y3B1X3NldF9hdHRyXCIsXG4gICAgXCJfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBYZW4gVkNQVSBhdHRyaWJ1dGUgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE0Zjc5ZjQ5OWNlYTU4YzNjMTgyYWU4OGY5ZmNjNTVkMTc0YmUxN2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxNzowOTozNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuaW5kZXggYTVmOWVlOTJmNDNlOGQuLjNjNmFlZTJhMzViZmRjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbkBAIC01ODEyLDYgKzU4MTIsMTkgQEAgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9VUENBTExfVkVDVE9SXG4gICB2ZWN0b3IgY29uZmlndXJlZCB3aXRoIEhWTV9QQVJBTV9DQUxMQkFDS19JUlEuIEl0IGlzIGRpc2FibGVkIGJ5XG4gICBzZXR0aW5nIHRoZSB2ZWN0b3IgdG8gemVyby5cbiBcbitLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1dSSVRFX0hZUEVSQ0FMTF9QQUdFXG4rICBUaGlzIGF0dHJpYnV0ZSBpcyBhdmFpbGFibGUgd2hlbiB0aGUgS1ZNX0NBUF9YRU5fSFZNIGlvY3RsIGluZGljYXRlc1xuKyAgc3VwcG9ydCBmb3IgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFLiBJdCB0cmlnZ2Vyc1xuKyAgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlIGF0IHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzXG4rICBzcGVjaWZpZWQgaW4gYGBncGFgYCwganVzdCBhcyBpZiB0aGUgZ3Vlc3QgaGFkIHdyaXR0ZW4gdG8gdGhlXG4rICBoeXBlcmNhbGwgTVNSLiBUaGlzIGlzIGludGVuZGVkIGZvciBWTU1zIHRoYXQgaW50ZXJjZXB0IHRoZSBndWVzdCdzXG4rICBNU1Igd3JpdGUgKGUuZy4gdG8gdHJhY2sgYW4gZXBvY2ggZm9yIGtleGVjL2NyYXNoIHJlY292ZXJ5KSBhbmQgbmVlZFxuKyAgdG8gcmVwbGF5IHRoZSB3cml0ZSBmcm9tIGhvc3QgY29udGV4dC4gRGlyZWN0IGhvc3QtaW5pdGlhdGVkIHdyaXRlc1xuKyAgdmlhIEtWTV9TRVRfTVNSUyBhcmUgYmxvY2tlZCBmb3Igc2FmZXR5OyB0aGlzIGF0dHJpYnV0ZSBwcm92aWRlcyB0aGVcbisgIGNvcnJlY3QgYWx0ZXJuYXRpdmUuIEFzIHdpdGggYSBub24taW50ZXJjZXB0ZWQgZ3Vlc3Qgd3JpdGUgdG8gdGhlXG4rICBoeXBlcmNhbGwgTVNSLCBpdCBhbHNvIGxhdGNoZXMgdGhlICdsb25nIG1vZGUnIGZvciB0aGUgVk0sIHdoaWNoXG4rICBkZXRlcm1pbmVzIHRoZSBsYXlvdXQgb2YgdGhlIHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuXG4rXG4gXG4gNC4xMjkgS1ZNX1hFTl9WQ1BVX0dFVF9BVFRSXG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbmluZGV4IDE1ODVlYzgwNDA2NjZlLi43NzMyYjkyYTRkYjAyZSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC01OTgsNiArNTk4LDcgQEAgc3RydWN0IGt2bV94ODZfbWNlIHtcbiAjZGVmaW5lIEtWTV9YRU5fSFZNX0NPTkZJR19SVU5TVEFURV9VUERBVEVfRkxBR1x0KDEgXHUwMDNjXHUwMDNjIDYpXG4gI2RlZmluZSBLVk1fWEVOX0hWTV9DT05GSUdfUFZDTE9DS19UU0NfVU5TVEFCTEVcdCgxIFx1MDAzY1x1MDAzYyA3KVxuICNkZWZpbmUgS1ZNX1hFTl9IVk1fQ09ORklHX1NIQVJFRF9JTkZPX0hWQVx0KDEgXHUwMDNjXHUwMDNjIDgpXG4rI2RlZmluZSBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0VcdCgxIFx1MDAzY1x1MDAzYyA5KVxuIFxuICNkZWZpbmUgS1ZNX1hFTl9NU1JfTUlOX0lOREVYXHRcdFx0MHg0MDAwMDAwMHVcbiAjZGVmaW5lIEtWTV9YRU5fTVNSX01BWF9JTkRFWFx0XHRcdDB4NGZmZmZmZmZ1XG5AQCAtNzA2LDYgKzcwNyw4IEBAIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciB7XG4gI2RlZmluZSBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1VQQ0FMTF9WRUNUT1JcdDB4OFxuIC8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfWEVOX0hWTSAvIEtWTV9YRU5fSFZNX0NPTkZJR19TSEFSRURfSU5GT19IVkEgKi9cbiAjZGVmaW5lIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfVkNQVV9JTkZPX0hWQVx0MHg5XG4rLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9YRU5fSFZNIC8gS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFICovXG4rI2RlZmluZSBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1dSSVRFX0hZUEVSQ0FMTF9QQUdFIDB4YVxuIFxuIC8qIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gY29tbWFuZCAqL1xuIGVudW0gc2V2X2NtZF9pZCB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCBhZmNhYzEwNDI5NDdhNS4uZDdmMjNjMGJmZjc0NTYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcbisrKyBiL2FyY2gveDg2L2t2bS94ODYuY1xuQEAgLTQ4NjksNyArNDg2OSw4IEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4gXHRcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfRVZUQ0hOXzJMRVZFTCB8XG4gXHRcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfRVZUQ0hOX1NFTkQgfFxuIFx0XHQgICAgS1ZNX1hFTl9IVk1fQ09ORklHX1BWQ0xPQ0tfVFNDX1VOU1RBQkxFIHxcbi1cdFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19TSEFSRURfSU5GT19IVkE7XG4rXHRcdCAgICBLVk1fWEVOX0hWTV9DT05GSUdfU0hBUkVEX0lORk9fSFZBIHxcbitcdFx0ICAgIEtWTV9YRU5fSFZNX0NPTkZJR19XUklURV9IWVBFUkNBTExfUEFHRTtcbiBcdFx0aWYgKHNjaGVkX2luZm9fb24oKSlcbiBcdFx0XHRyIHw9IEtWTV9YRU5fSFZNX0NPTkZJR19SVU5TVEFURSB8XG4gXHRcdFx0ICAgICBLVk1fWEVOX0hWTV9DT05GSUdfUlVOU1RBVEVfVVBEQVRFX0ZMQUc7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3hlbi5jIGIvYXJjaC94ODYva3ZtL3hlbi5jXG5pbmRleCA2OTRiMzFjMWZjYzlhZi4uNTA0MjNkZjZlMjJkOWQgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0veGVuLmNcbisrKyBiL2FyY2gveDg2L2t2bS94ZW4uY1xuQEAgLTMyLDYgKzMyLDcgQEBcbiBzdGF0aWMgaW50IGt2bV94ZW5fc2V0X2V2dGNobihzdHJ1Y3Qga3ZtX3hlbl9ldnRjaG4gKnhlLCBzdHJ1Y3Qga3ZtICprdm0pO1xuIHN0YXRpYyBpbnQga3ZtX3hlbl9zZXRhdHRyX2V2dGNobihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1feGVuX2h2bV9hdHRyICpkYXRhKTtcbiBzdGF0aWMgYm9vbCBrdm1feGVuX2hjYWxsX2V2dGNobl9zZW5kKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHBhcmFtLCB1NjQgKnIpO1xuK3N0YXRpYyBpbnQgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpO1xuIFxuIERFRklORV9TVEFUSUNfS0VZX0RFRkVSUkVEX0ZBTFNFKGt2bV94ZW5fZW5hYmxlZCwgSFopO1xuIFxuQEAgLTExMzgsNiArMTEzOSwxMCBAQCBpbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxuIFx0XHR9XG4gXHRcdGJyZWFrO1xuIFxuK1x0Y2FzZSBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1dSSVRFX0hZUEVSQ0FMTF9QQUdFOlxuK1x0XHRyID0gX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHZjcHUsIGRhdGEtXHUwMDNldS5ncGEpO1xuK1x0XHRicmVhaztcbitcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTEyNzMsNyArMTI3OCw3IEBAIGludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpXG4gXHRyZXR1cm4gcjtcbiB9XG4gXG4taW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbitzdGF0aWMgaW50IF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxuIHtcbiBcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuIFx0dTMyIHBhZ2VfbnVtID0gZGF0YSBcdTAwMjYgflBBR0VfTUFTSztcbkBAIC0xMjgxLDcgKzEyODYsNiBAQCBpbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxuIFx0Ym9vbCBsbSA9IGlzX2xvbmdfbW9kZSh2Y3B1KTtcbiBcdGludCByID0gMDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2a3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbiBcdGlmIChrdm0tXHUwMDNlYXJjaC54ZW4ubG9uZ19tb2RlICE9IGxtKSB7XG4gXHRcdGt2bS1cdTAwM2VhcmNoLnhlbi5sb25nX21vZGUgPSBsbTtcbiBcbkBAIC0xMjg5LDExICsxMjkzLDkgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiBcdFx0ICogUmUtaW5pdGlhbGl6ZSBzaGFyZWRfaW5mbyB0byBwdXQgdGhlIHdhbGxjbG9jayBpbiB0aGVcbiBcdFx0ICogY29ycmVjdCBwbGFjZS5cbiBcdFx0ICovXG4tXHRcdGlmIChrdm0tXHUwMDNlYXJjaC54ZW4uc2hpbmZvX2NhY2hlLmFjdGl2ZSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChrdm0pKVxuLVx0XHRcdHIgPSAxO1xuK1x0XHRpZiAoa3ZtLVx1MDAzZWFyY2gueGVuLnNoaW5mb19jYWNoZS5hY3RpdmUpXG4rXHRcdFx0ciA9IGt2bV94ZW5fc2hhcmVkX2luZm9faW5pdChrdm0pO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnhlbi54ZW5fbG9jayk7XG4gXG4gXHRpZiAocilcbiBcdFx0cmV0dXJuIHI7XG5AQCAtMTMwOSw3ICsxMzExLDcgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiBcdFx0aW50IGk7XG4gXG4gXHRcdGlmIChwYWdlX251bSlcbi1cdFx0XHRyZXR1cm4gMTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdFx0LyogbW92IGltbTMyLCAlZWF4ICovXG4gXHRcdGluc3RydWN0aW9uc1swXSA9IDB4Yjg7XG5AQCAtMTMyNSwxMCArMTMyNywxMSBAQCBpbnQga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCBkYXRhKVxuIFxuIFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQQUdFX1NJWkUgLyBzaXplb2YoaW5zdHJ1Y3Rpb25zKTsgaSsrKSB7XG4gXHRcdFx0Kih1MzIgKilcdTAwMjZpbnN0cnVjdGlvbnNbMV0gPSBpO1xuLVx0XHRcdGlmIChrdm1fdmNwdV93cml0ZV9ndWVzdCh2Y3B1LFxuK1x0XHRcdHIgPSBrdm1fdmNwdV93cml0ZV9ndWVzdCh2Y3B1LFxuIFx0XHRcdFx0XHRcdCBwYWdlX2FkZHIgKyAoaSAqIHNpemVvZihpbnN0cnVjdGlvbnMpKSxcbi1cdFx0XHRcdFx0XHQgaW5zdHJ1Y3Rpb25zLCBzaXplb2YoaW5zdHJ1Y3Rpb25zKSkpXG4tXHRcdFx0XHRyZXR1cm4gMTtcbitcdFx0XHRcdFx0XHQgaW5zdHJ1Y3Rpb25zLCBzaXplb2YoaW5zdHJ1Y3Rpb25zKSk7XG4rXHRcdFx0aWYgKHIpXG4rXHRcdFx0XHRyZXR1cm4gcjtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LypcbkBAIC0xMzQwLDEwICsxMzQzLDkgQEAgaW50IGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgZGF0YSlcbiBcdFx0dTggYmxvYl9zaXplID0gbG0gPyBrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5ibG9iX3NpemVfNjRcbiBcdFx0XHRcdCAgOiBrdm0tXHUwMDNlYXJjaC54ZW4uaHZtX2NvbmZpZy5ibG9iX3NpemVfMzI7XG4gXHRcdHU4ICpwYWdlO1xuLVx0XHRpbnQgcmV0O1xuIFxuIFx0XHRpZiAocGFnZV9udW0gXHUwMDNlPSBibG9iX3NpemUpXG4tXHRcdFx0cmV0dXJuIDE7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRcdGJsb2JfYWRkciArPSBwYWdlX251bSAqIFBBR0VfU0laRTtcbiBcbkBAIC0xMzUxLDE0ICsxMzUzLDI3IEBAIGludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXG4gXHRcdGlmIChJU19FUlIocGFnZSkpXG4gXHRcdFx0cmV0dXJuIFBUUl9FUlIocGFnZSk7XG4gXG4tXHRcdHJldCA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0KHZjcHUsIHBhZ2VfYWRkciwgcGFnZSwgUEFHRV9TSVpFKTtcbitcdFx0ciA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0KHZjcHUsIHBhZ2VfYWRkciwgcGFnZSwgUEFHRV9TSVpFKTtcbiBcdFx0a2ZyZWUocGFnZSk7XG4tXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIDE7XG4rXHRcdGlmIChyKVxuK1x0XHRcdHJldHVybiByO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2ludCBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGRhdGEpXG4re1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gueGVuLnhlbl9sb2NrKTtcbitcbitcdC8qXG4rXHQgKiBUaGUgTVNSIHdyaXRlIHBhdGggZXhwZWN0cyBhIDAvMSByZXR1cm47IGNvbnZlcnQgdGhlIGVycm5vIGZyb21cbitcdCAqIHRoZSBzaGFyZWQgaGVscGVyIGFjY29yZGluZ2x5LiBDYWxsZXJzIHRoYXQgd2FudCB0aGUgcmVhbCBlcnJvclxuK1x0ICogKGUuZy4gdGhlIEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UgYXR0cmlidXRlKVxuK1x0ICogaW52b2tlIF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZSgpIGRpcmVjdGx5LlxuK1x0ICovXG4rXHRyZXR1cm4gX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHZjcHUsIGRhdGEpID8gMSA6IDA7XG4rfVxuK1xuIGludCBrdm1feGVuX2h2bV9jb25maWcoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fY29uZmlnICp4aGMpXG4ge1xuIFx0LyogT25seSBzb21lIGZlYXR1cmUgZmxhZ3MgbmVlZCB0byBiZSAqZW5hYmxlZCogYnkgdXNlcnNwYWNlICovXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmNcbmluZGV4IDI1ODUwODdjZGY1Y2JlLi4xNTM2ZDUxMGFiMzAxOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2t2bS94ODYveGVuX3ZtY2FsbF90ZXN0LmNcbkBAIC0xMiw2ICsxMiw4IEBAXG4gI2luY2x1ZGUgXCJwcm9jZXNzb3IuaFwiXG4gI2luY2x1ZGUgXCJoeXBlcnYuaFwiXG4gXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbitcbiAjZGVmaW5lIEhDQUxMX1JFR0lPTl9HUEFcdDB4YzAwMDAwMDBVTExcbiAjZGVmaW5lIEhDQUxMX1JFR0lPTl9TTE9UXHQxMFxuIFxuQEAgLTI2LDYgKzI4LDEwIEBAXG4gI2RlZmluZSBIVkNBTExfU0lHTkFMX0VWRU5UXHRcdDB4MDA1ZFxuICNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfQUxJR05NRU5UXHQ0XG4gXG4rZW51bSB7XG4rXHRURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFID0gMSxcbit9O1xuK1xuIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHJheCA9IElOUFVUVkFMVUU7XG5AQCAtNzYsMTcgKzgyLDY1IEBAIHN0YXRpYyB2b2lkIGd1ZXN0X2NvZGUodm9pZClcbiBcdFx0XHQgICAgIFwiclwiKHI4KSk7XG4gXHRHVUVTVF9BU1NFUlQocmF4ID09IEhWX1NUQVRVU19JTlZBTElEX0FMSUdOTUVOVCk7XG4gXG4rXHQvKlxuK1x0ICogVGVzdCBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1dSSVRFX0hZUEVSQ0FMTF9QQUdFOiBhc2sgdXNlcnNwYWNlXG4rXHQgKiB0byBzZXQgdXAgTVNSIGZpbHRlcmluZywgdGhlbiB3cml0ZSB0aGUgTVNSLiBUaGUgV1JNU1Igd2lsbCBleGl0XG4rXHQgKiB0byB1c2Vyc3BhY2UgKG5vdCBwb3B1bGF0ZSB0aGUgcGFnZSkuIFVzZXJzcGFjZSB2ZXJpZmllcyB0aGUgcGFnZVxuK1x0ICogaXMgZW1wdHksIHVzZXMgdGhlIGF0dHIgdG8gcG9wdWxhdGUgaXQsIHRoZW4gcmVzdW1lcyB1cy5cbitcdCAqL1xuK1x0R1VFU1RfU1lOQyhURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTtcbitcbitcdF9fYXNtX18gX192b2xhdGlsZV9fKFwid3Jtc3JcIiA6IDogXCJjXCIgKFhFTl9IWVBFUkNBTExfTVNSKSxcbitcdFx0XHQgICAgIFwiYVwiIChIQ0FMTF9SRUdJT05fR1BBIFx1MDAyNiAweGZmZmZmZmZmKSxcbitcdFx0XHQgICAgIFwiZFwiIChIQ0FMTF9SRUdJT05fR1BBIFx1MDAzZVx1MDAzZSAzMikpO1xuK1xuK1x0LyogVXNlcnNwYWNlIHBvcHVsYXRlZCB0aGUgcGFnZSB2aWEgdGhlIGF0dHIg4oCUIHZlcmlmeSBpdCB3b3JrcyAqL1xuK1x0cmF4ID0gSU5QVVRWQUxVRTtcbitcdHJkaSA9IEFSR1ZBTFVFKDEpO1xuK1x0cnNpID0gQVJHVkFMVUUoMik7XG4rXHRyZHggPSBBUkdWQUxVRSgzKTtcbitcdHIxMCA9IEFSR1ZBTFVFKDQpO1xuK1x0cjggPSBBUkdWQUxVRSg1KTtcbitcdHI5ID0gQVJHVkFMVUUoNik7XG4rXHRfX2FzbV9fIF9fdm9sYXRpbGVfXyhcImNhbGwgKiUxXCIgOiBcIj1hXCIocmF4KSA6XG4rXHRcdFx0ICAgICBcInJcIihIQ0FMTF9SRUdJT05fR1BBICsgSU5QVVRWQUxVRSAqIDMyKSxcbitcdFx0XHQgICAgIFwiYVwiKHJheCksIFwiRFwiKHJkaSksIFwiU1wiKHJzaSksIFwiZFwiKHJkeCksXG4rXHRcdFx0ICAgICBcInJcIihyMTApLCBcInJcIihyOCksIFwiclwiKHI5KSk7XG4rXHRHVUVTVF9BU1NFUlQocmF4ID09IFJFVFZBTFVFKTtcbitcbiBcdEdVRVNUX0RPTkUoKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgc2V0dXBfbXNyX2ZpbHRlcihzdHJ1Y3Qga3ZtX3ZtICp2bSlcbit7XG4rXHR1aW50NjRfdCBkZW55X2JpdHMgPSAwO1xuK1x0c3RydWN0IGt2bV9tc3JfZmlsdGVyIGZpbHRlciA9IHtcbitcdFx0LmZsYWdzID0gS1ZNX01TUl9GSUxURVJfREVGQVVMVF9BTExPVyxcbitcdFx0LnJhbmdlcyA9IHtcbitcdFx0XHR7XG4rXHRcdFx0XHQuZmxhZ3MgPSBLVk1fTVNSX0ZJTFRFUl9XUklURSxcbitcdFx0XHRcdC5ubXNycyA9IDEsXG4rXHRcdFx0XHQuYmFzZSA9IFhFTl9IWVBFUkNBTExfTVNSLFxuK1x0XHRcdFx0LmJpdG1hcCA9ICh1aW50OF90ICopXHUwMDI2ZGVueV9iaXRzLFxuK1x0XHRcdH0sXG4rXHRcdH0sXG4rXHR9O1xuK1xuK1x0dm1faW9jdGwodm0sIEtWTV9YODZfU0VUX01TUl9GSUxURVIsIFx1MDAyNmZpbHRlcik7XG4rfVxuK1xuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuIFx0dW5zaWduZWQgaW50IHhlbl9jYXBzO1xuIFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1O1xuIFx0c3RydWN0IGt2bV92bSAqdm07XG4rXHRib29sIG1zcl9maWx0ZXJfcmVhZHkgPSBmYWxzZTtcbiBcbiBcdHhlbl9jYXBzID0ga3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1hFTl9IVk0pO1xuIFx0VEVTVF9SRVFVSVJFKHhlbl9jYXBzIFx1MDAyNiBLVk1fWEVOX0hWTV9DT05GSUdfSU5URVJDRVBUX0hDQUxMKTtcbitcdFRFU1RfUkVRVUlSRSh4ZW5fY2FwcyBcdTAwMjYgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTtcbitcdFRFU1RfUkVRVUlSRShrdm1fY2hlY2tfY2FwKEtWTV9DQVBfWDg2X1VTRVJfU1BBQ0VfTVNSKSk7XG4rXHRURVNUX1JFUVVJUkUoa3ZtX2NoZWNrX2NhcChLVk1fQ0FQX1g4Nl9NU1JfRklMVEVSKSk7XG4gXG4gXHR2bSA9IHZtX2NyZWF0ZV93aXRoX29uZV92Y3B1KFx1MDAyNnZjcHUsIGd1ZXN0X2NvZGUpO1xuIFx0dmNwdV9zZXRfaHZfY3B1aWQodmNwdSk7XG5AQCAtMTIzLDYgKzE3NywzNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG4rXHRcdGlmIChydW4tXHUwMDNlZXhpdF9yZWFzb24gPT0gS1ZNX0VYSVRfWDg2X1dSTVNSKSB7XG4rXHRcdFx0LyogTVNSIGZpbHRlciBjYXVnaHQgdGhlIFhlbiBoeXBlcmNhbGwgTVNSIHdyaXRlICovXG4rXHRcdFx0VEVTVF9BU1NFUlQobXNyX2ZpbHRlcl9yZWFkeSxcbitcdFx0XHRcdCAgICBcIlVuZXhwZWN0ZWQgV1JNU1IgZXhpdCBiZWZvcmUgZmlsdGVyIHNldHVwXCIpO1xuK1x0XHRcdFRFU1RfQVNTRVJUX0VRKHJ1bi1cdTAwM2Vtc3IuaW5kZXgsIFhFTl9IWVBFUkNBTExfTVNSKTtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRoZSBob3N0X2luaXRpYXRlZCBjaGVjayBzaG91bGQgaGF2ZSBwcmV2ZW50ZWRcbitcdFx0XHQgKiBLVk0gZnJvbSBwb3B1bGF0aW5nIHRoZSBwYWdlLiBWZXJpZnkgaXQncyBlbXB0eS5cbitcdFx0XHQgKi9cbitcdFx0XHR1aW50OF90ICpoY2FsbF9wYWdlID0gYWRkcl9ncGEyaHZhKHZtLCBIQ0FMTF9SRUdJT05fR1BBKTtcbitcdFx0XHRURVNUX0FTU0VSVF9FUShoY2FsbF9wYWdlWzBdLCAwKTtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIE5vdyB1c2UgdGhlIGF0dHIgdG8gcG9wdWxhdGUgdGhlIHBhZ2UsIGFzIGFcbitcdFx0XHQgKiBWTU0gd291bGQgYWZ0ZXIgaW50ZXJjZXB0aW5nIHRoZSBNU1Igd3JpdGUuXG4rXHRcdFx0ICovXG4rXHRcdFx0c3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyIGF0dHIgPSB7XG4rXHRcdFx0XHQudHlwZSA9IEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0UsXG4rXHRcdFx0XHQudS5ncGEgPSBIQ0FMTF9SRUdJT05fR1BBLFxuK1x0XHRcdH07XG4rXHRcdFx0dmNwdV9pb2N0bCh2Y3B1LCBLVk1fWEVOX1ZDUFVfU0VUX0FUVFIsIFx1MDAyNmF0dHIpO1xuK1xuK1x0XHRcdC8qIFZlcmlmeSB0aGUgcGFnZSBpcyBub3cgcG9wdWxhdGVkICovXG4rXHRcdFx0VEVTVF9BU1NFUlRfRVEoaGNhbGxfcGFnZVswXSwgMHhiOCk7XG4rXG4rXHRcdFx0cnVuLVx1MDAzZW1zci5lcnJvciA9IDA7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0VEVTVF9BU1NFUlRfS1ZNX0VYSVRfUkVBU09OKHZjcHUsIEtWTV9FWElUX0lPKTtcbiBcbiBcdFx0c3dpdGNoIChnZXRfdWNhbGwodmNwdSwgXHUwMDI2dWMpKSB7XG5AQCAtMTMwLDYgKzIxNCwxOCBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxuIFx0XHRcdFJFUE9SVF9HVUVTVF9BU1NFUlQodWMpO1xuIFx0XHRcdC8qIE5PVCBSRUFDSEVEICovXG4gXHRcdGNhc2UgVUNBTExfU1lOQzpcbitcdFx0XHRURVNUX0FTU0VSVF9FUSh1Yy5hcmdzWzFdLCBURVNUX1dSSVRFX0hZUEVSQ0FMTF9QQUdFKTtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEd1ZXN0IGlzIGFib3V0IHRvIHdyaXRlIHRoZSBYZW4gTVNSLiBDbGVhciB0aGVcbitcdFx0XHQgKiBoeXBlcmNhbGwgcGFnZSwgaW5zdGFsbCBNU1IgZmlsdGVyIHRvIGludGVyY2VwdFxuK1x0XHRcdCAqIHRoZSB3cml0ZSwgYW5kIGVuYWJsZSB1c2Vyc3BhY2UgTVNSIGV4aXRzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdG1lbXNldChhZGRyX2dwYTJodmEodm0sIEhDQUxMX1JFR0lPTl9HUEEpLCAwLCBQQUdFX1NJWkUpO1xuK1x0XHRcdHZtX2VuYWJsZV9jYXAodm0sIEtWTV9DQVBfWDg2X1VTRVJfU1BBQ0VfTVNSLFxuK1x0XHRcdFx0ICAgICAgS1ZNX01TUl9FWElUX1JFQVNPTl9GSUxURVIpO1xuK1x0XHRcdHNldHVwX21zcl9maWx0ZXIodm0pO1xuK1x0XHRcdG1zcl9maWx0ZXJfcmVhZHkgPSB0cnVlO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHRjYXNlIFVDQUxMX0RPTkU6XG4gXHRcdFx0Z290byBkb25lO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDk6MzguOTc3NDA2MzEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg0OTg5MTUxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBYZW4gVkNQVSBIeXBlcmNhbGwgUGFnZSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0IGludHJvZHVjZXMgYSBuZXcgS1ZNIFhlbiBWQ1BVIGF0dHJpYnV0ZSwgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgLiBUaGUgZ2lzdCBpcywgaXQgYWxsb3dzIHVzZXJzcGFjZSB0byB0cmlnZ2VyIHRoZSBYZW4gaHlwZXJjYWxsIHBhZ2UgcG9wdWxhdGlvbiBhdCBhIHNwZWNpZmllZCBndWVzdCBwaHlzaWNhbCBhZGRyZXNzLiBJdCdzIGJhc2ljYWxseSBhIHNhZmVyIHdheSB0byBkbyBpdCwgYnlwYXNzaW5nIHRoZSBkaXJlY3QgTVNSIHdyaXRlLCB3aGljaCBpcyBibG9ja2VkIGZvciBzZWN1cml0eSByZWFzb25zIHdoZW4gdGhlIGhvc3QgdHJpZXMgdG8gd3JpdGUgdG8gdGhlIGh5cGVyY2FsbCBwYWdlLiBTbWFydC5cblxuTGV0J3MgZGlzc2VjdCB0aGlzIHRoaW5nLiBGaXJzdCwgZG9jdW1lbnRhdGlvbiBpbiBgRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0YCAtIGdvdHRhIG1ha2Ugc3VyZSB0aGF0J3MgdXAgdG8gc251ZmYuIFRoZW4sIHRoZSB1c3VhbCBzdXNwZWN0czogYGFyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtLmhgIGFkZGluZyB0aGUgbmV3IGRlZmluaXRpb25zIGBLVk1fWEVOX0hWTV9DT05GSUdfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIGFuZCBgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRWAuIGBhcmNoL3g4Ni9rdm0veDg2LmNgIGluY2x1ZGVzIHRoZSBgS1ZNX1hFTl9IVk1fQ09ORklHX1dSSVRFX0hZUEVSQ0FMTF9QQUdFYCBpbiBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAuIFN0YW5kYXJkIHN0dWZmIHNvIGZhci5cblxuTm93LCBoZXJlJ3Mgd2hlcmUgdGhlIG1lYXQgaXMsIGBhcmNoL3g4Ni9rdm0veGVuLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBoYW5kbGluZyBgS1ZNX1hFTl9WQ1BVX0FUVFJfVFlQRV9XUklURV9IWVBFUkNBTExfUEFHRWAgaW4gYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAuIEl0J3MgY2FsbGluZyBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlKHZjcHUsIGRhdGEtXHUwMDNldS5ncGEpYC4gQWgsIGFuZCBJIHNlZSB0aGV5IHJlZmFjdG9yZWQgdGhlIGV4aXN0aW5nIGBrdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYCBpbnRvIHRoaXMgaW50ZXJuYWwgZnVuY3Rpb24gYF9fa3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZWAgdG8gcmV0dXJuIHByb3BlciBlcnJvciBjb2RlcyBsaWtlIGAtRUlOVkFMYCwgaW5zdGVhZCBvZiByZXR1cm5pbmcgYDFgIG9uIGVycm9yLiBUaGVuIHRoZSBvcmlnaW5hbCBga3ZtX3hlbl93cml0ZV9oeXBlcmNhbGxfcGFnZWAgd3JhcHMgdGhhdCB0byBzdGF5IGJhY2t3YXJkIGNvbXBhdGlibGUuIEdvb2QgbW92ZSwgY2xlYW5lciBlcnJvciBoYW5kbGluZy5cblxuQW5kIGZpbmFsbHksIHdlJ3ZlIGdvdCBhIHNlbGZ0ZXN0LCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMva3ZtL3g4Ni94ZW5fdm1jYWxsX3Rlc3QuY2AsIHNvIGl0J3MgdGVzdGVkLiBFeGNlbGxlbnQhXG5cblNvLCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEtWTSBYZW4gZW11bGF0aW9uLCByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgS1ZNX1hFTl9WQ1BVX1NFVF9BVFRSYCBpb2N0bC4gUmlnaHQsIGdpdmVuIHRoYXQgaXQncyB1c2Vyc3BhY2UtZmFjaW5nLCBhbmQgZGVhbHMgd2l0aCBoeXBlcmNhbGxzLCB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gZnV6eiB0aGlzISBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWdzLiBMZXQncyBjaGVjayBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZvciBgS1ZNYCBhbmQgYEtWTV9YRU5gLi4uIGdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUyNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjA5OjQ3LjgyNzMwMTM3NFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzQ3NjAxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fWEVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE5Mz1jb25maWcgS1ZNX0hZUEVSVlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwNzpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MDk6NDcuODkwNzg0NTI5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYzNTA3MDYwNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTS9YZW4gQ29uZmlndXJhdGlvbiBmb3IgUG90ZW50aWFsIFBlcmZvcm1hbmNlIEJvdHRsZW5lY2tzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnMsIGBLVk1gIGFuZCBgS1ZNX1hFTmAsIGFuZCBJJ20gdHJ5aW5nIHRvIHBpbnBvaW50IHdoZXJlIHRoZSBmb2N1cyBsaWVzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBzeW1ib2xzLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYGt2bV94ZW5fdmNwdV9zZXRfYXR0cmAsIGBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VgLCBhbmQgYGt2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBpZiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBpcyBldmVuIHdvcnRoIGEgZGVlcGVyIGxvb2sgaW4gdGVybXMgb2YgYmVpbmcgYSBob3QgcGF0aC4gQWgsIGlvY3RsIGhhbmRsZXIsIG5vdCBhIHByaW1hcnkgY29uY2VybiBmb3IgcGVyZm9ybWFuY2UgcmlnaHQgbm93LlxuXG5Ob3csIHRoYXQgbGVhdmVzIGBfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VgLiBUaGF0J3MgdGhlIG5ld2VyIGZ1bmN0aW9uLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBmb2N1cyB0aGVyZS4gSnVzdCBnb2luZyB0byBxdWlja2x5IHJlLXZhbGlkYXRlIHRob3NlIGNvbmZpZyBvcHRpb25zIGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3Nzg4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDE3OjEwOjE0LjI0MTQ5NDA5NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjczMDU5ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XFxuYXJjaC94ODYva3ZtL0tjb25maWctMjEtXFx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTEtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTUzLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo2OTpjb25maWcgS1ZNX1dFUlJPUlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIkNvbXBpbGUgS1ZNIHdpdGggLVdlcnJvclxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjgzOmNvbmZpZyBLVk1fU1dfUFJPVEVDVEVEX1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXFx0Ym9vbCBcXFwiRW5hYmxlIHN1cHBvcnQgZm9yIEtWTSBzb2Z0d2FyZS1wcm90ZWN0ZWQgVk1zXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTk3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjEwNzpjb25maWcgS1ZNX0lOVEVMX1BST1ZFX1ZFXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTA4LSAgICAgICAgYm9vbCBcXFwiQ2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTM1LVxcdGJvb2wgXFxcIkludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTQ2OmNvbmZpZyBLVk1fQU1EXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTQ3LVxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIEFNRCBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTU2OmNvbmZpZyBLVk1fQU1EX1NFVlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cXHRib29sIFxcXCJBTUQgU2VjdXJlIEVuY3J5cHRlZCBWaXJ0dWFsaXphdGlvbiAoU0VWKSBzdXBwb3J0XFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTcxLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mjpjb25maWcgS1ZNX0lPQVBJQ1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3My1cXHRib29sIFxcXCJJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxODI6Y29uZmlnIEtWTV9TTU1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xODMtXFx0Ym9vbCBcXFwiU3lzdGVtIE1hbmFnZW1lbnQgTW9kZSBlbXVsYXRpb25cXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTkzOmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk0LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDc6Y29uZmlnIEtWTV9YRU5cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDgtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTUtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjE2OmNvbmZpZyBLVk1fUFJPVkVfTU1VXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjE3LVxcdGJvb2wgXFxcIlByb3ZlIEtWTSBNTVUgY29ycmVjdG5lc3NcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMjgtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjI5OmNvbmZpZyBLVk1fRVhURVJOQUxfV1JJVEVfVFJBQ0tJTkdcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzAtXFx0Ym9vbFxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzI6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzMtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxMDoxNC40MDg4MDk3NjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODk3NjU4NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgS1ZNLVhlbiBDb25maWd1cmF0aW9uIGFuZCBLZXkgRnVuY3Rpb24gU3ltYm9scyoqXG5cbkFscmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYEtWTWAgYW5kIGBLVk1fWEVOYCBjb25maWd1cmF0aW9ucyBoZXJlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBpbW1lZGlhdGVseSBkcmF3biB0byB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaWRlbnRpZmllcnMsIGFuZCB3aGF0IHRoZXkgbWVhbiBmcm9tIGFuIGFyY2hpdGVjdHVyYWwgc3RhbmRwb2ludC5cblxuTm93LCBJJ20gemVyb2luZyBpbiBvbiBhIGNvdXBsZSBvZiBmdW5jdGlvbiBzeW1ib2xzLiBTcGVjaWZpY2FsbHksIEkgc2VlIGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFuZCBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYC4gVGhlc2UgKmZlZWwqIHNpZ25pZmljYW50LCBhbmQgSSdtIGluc3RhbnRseSB0aGlua2luZyBhYm91dCB0aGUgY29yZSBtZWNoYW5pc21zLiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBpbW1lZGlhdGVseSBzdGFuZHMgb3V0LiBJdCdzIHNjcmVhbWluZyBcInZpcnR1YWwgQ1BVIGF0dHJpYnV0ZSBtYW5pcHVsYXRpb25cIiBhbmQgdGhlIFhlbiBpbnRlZ3JhdGlvbiBpcyBrZXkuIFRoYXQgbWFrZXMgbWUgd29uZGVyIGFib3V0IHRoZSBzcGVjaWZpYyBjb250ZXh0IGFuZCB3aGVyZSBpdCBvcGVyYXRlcyB3aXRoIHRoZSBoeXBlcnZpc29yLlxuXG5JIG5lZWQgdG8gY29uZmlybSBpZiBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBpcyBhIHNvbGlkIGZvY3VzIHN5bWJvbC4gSSBzdXNwZWN0IGl0J3MgY2VudHJhbCB0byBob3cgS1ZNIGludGVyYWN0cyB3aXRoIFhlbiB0byBtYW5hZ2UgdmlydHVhbCBDUFVzLiBMZXQncyBzZWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4gZGl2aW5nIGRlZXBlci4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IG1hcHMgdG8gWGVuJ3Mgc3RydWN0dXJlcyBhbmQgaG93IGl0IGhhbmRsZXMgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHR3byB2aXJ0dWFsIG1hY2hpbmUgbW9uaXRvcnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Mzk0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTc6MTA6MTguMzA2NDcxNzE4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTE5NjE5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1feGVuX3ZjcHVfc2V0X2F0dHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmM9NjE5MD1sb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjYxMi1cXHRcXHRcXHRnb3RvIG91dDtcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjYxMzpcXHRcXHRyID0ga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHZjcHUsIFxcdTAwMjZ4dmEpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02NjE0LVxcdFxcdGJyZWFrO1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5jPTg1Mj1pbnQga3ZtX3hlbl9odm1fZ2V0X2F0dHIoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3hlbl9odm1fYXR0ciAqZGF0YSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ZW4uYy05MDYtXFxuYXJjaC94ODYva3ZtL3hlbi5jOjkwNzppbnQga3ZtX3hlbl92Y3B1X3NldF9hdHRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV94ZW5fdmNwdV9hdHRyICpkYXRhKVxcbmFyY2gveDg2L2t2bS94ZW4uYy05MDgte1xcbi0tXFxuYXJjaC94ODYva3ZtL3hlbi5oPTIyPXZvaWQga3ZtX3hlbl9pbmplY3RfdmNwdV92ZWN0b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veGVuLmg6MjM6aW50IGt2bV94ZW5fdmNwdV9zZXRfYXR0cihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1feGVuX3ZjcHVfYXR0ciAqZGF0YSk7XFxuYXJjaC94ODYva3ZtL3hlbi5oLTI0LWludCBrdm1feGVuX3ZjcHVfZ2V0X2F0dHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3hlbl92Y3B1X2F0dHIgKmRhdGEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxMDoxOC40NDE2NzU5MDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NjI2MDg2NDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLVk0tWGVuIEh5cGVyY2FsbCBQYWdlIFBvcHVsYXRpb24qKlxuXG5Pa2F5LCBzbyBga3ZtX3hlbl92Y3B1X3NldF9hdHRyYCBpcyBkZWZpbml0ZWx5IGFuIGltcG9ydGFudCBwaWVjZSBvZiB0aGlzIHB1enpsZTsgaXQncyB0aGUgaW9jdGwgaGFuZGxlciBmb3IgYEtWTV9YRU5fVkNQVV9TRVRfQVRUUmAsIG1ha2luZyBpdCBhIGtleSBmb2N1cyBwb2ludC4gIEFuZCwgb2YgY291cnNlLCBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYCBsb29rcyBlcXVhbGx5IGNyaXRpY2FsLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBhdCB0aGUgZm9yZWZyb250LlxuXG5MZXQncyBzZWUsIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW1wb3J0YW50IGhlcmU/ICBBaCwgeWVzLCBgS1ZNX1hFTmAgZGVwZW5kcyBvbiBgS1ZNYC4gR290IGl0LlxuXG5JbiBzaG9ydCwgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLiBUaGUgYWRkaXRpb24gb2YgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIGFuZCBpdHMgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5IC0gc3BlY2lmaWNhbGx5IHRoZSBhYmlsaXR5IGZvciB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlIC0gaXMgaW50ZXJlc3RpbmcuIEl0J3MgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgY29yZSBLVk0gWGVuIGVtdWxhdGlvbi4gTXkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBhcmVhcyBhcm91bmQgdGhvc2UgdHdvIHN5bWJvbHM6IGBrdm1feGVuX3ZjcHVfc2V0X2F0dHJgIGFuZCBgX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlYC4gSSB3aWxsIHdhbnQgdG8gZW5zdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMgYXJlIGVuYWJsZWQ6IGBLVk1gIGFuZCBgS1ZNX1hFTmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjQxLCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxNzoxMDoyNi4wNjc3NjUwMTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDg3NzE0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fWEVOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX3hlbl92Y3B1X3NldF9hdHRyXCIsXG4gICAgXCJfX2t2bV94ZW5fd3JpdGVfaHlwZXJjYWxsX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IEtWTSBYZW4gVkNQVSBhdHRyaWJ1dGUgYEtWTV9YRU5fVkNQVV9BVFRSX1RZUEVfV1JJVEVfSFlQRVJDQUxMX1BBR0VgIHdoaWNoIGFsbG93cyB1c2Vyc3BhY2UgdG8gdHJpZ2dlciB0aGUgcG9wdWxhdGlvbiBvZiB0aGUgWGVuIGh5cGVyY2FsbCBwYWdlLiBUaGlzIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBLVk1fWEVOX1ZDUFVfU0VUX0FUVFJgIGlvY3RsIGFuZCBtb2RpZmllcyBjb3JlIEtWTSBYZW4gZW11bGF0aW9uIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX1hFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV94ZW5fdmNwdV9zZXRfYXR0clwiLFxuICAgIFwiX19rdm1feGVuX3dyaXRlX2h5cGVyY2FsbF9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIG5ldyBLVk0gWGVuIFZDUFUgYXR0cmlidXRlIGBLVk1fWEVOX1ZDUFVfQVRUUl9UWVBFX1dSSVRFX0hZUEVSQ0FMTF9QQUdFYCB3aGljaCBhbGxvd3MgdXNlcnNwYWNlIHRvIHRyaWdnZXIgdGhlIHBvcHVsYXRpb24gb2YgdGhlIFhlbiBoeXBlcmNhbGwgcGFnZS4gVGhpcyBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgS1ZNX1hFTl9WQ1BVX1NFVF9BVFRSYCBpb2N0bCBhbmQgbW9kaWZpZXMgY29yZSBLVk0gWGVuIGVtdWxhdGlvbiBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowghnh9[1] Phase: Succeeded StartedAt: 2026-06-29 17:10:37 +0000 UTC FinishedAt: 2026-06-29 17:10:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 17:10:37 +0000 UTC FinishedAt: 2026-06-29 17:10:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2] Phase: Succeeded StartedAt: 2026-06-29 17:10:37 +0000 UTC FinishedAt: 2026-06-29 21:20:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-29 17:10:37 +0000 UTC FinishedAt: 2026-06-29 21:20:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-29 17:10:37 +0000 UTC FinishedAt: 2026-06-29 17:10:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-29 17:10:37 +0000 UTC FinishedAt: 2026-06-29 17:10:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowghnh9/series-workflowghnh9-convert-artifact-1512177273/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-29 17:10:47 +0000 UTC FinishedAt: 2026-06-29 17:45:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-29 17:10:47 +0000 UTC FinishedAt: 2026-06-29 17:45:08 +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:*e6140d05-83ff-4c24-9601-c666451cfa2f,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-workflowghnh9/series-workflowghnh9-convert-artifact-1512177273/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": "daa5c640-d26b-41be-868f-a2d1656fb52d", "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-workflowghnh9/series-workflowghnh9-build-action-4164589463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-29 17:10:47 +0000 UTC FinishedAt: 2026-06-29 17:43:23 +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:*e6140d05-83ff-4c24-9601-c666451cfa2f,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-workflowghnh9/series-workflowghnh9-convert-artifact-1512177273/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": "daa5c640-d26b-41be-868f-a2d1656fb52d", "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-workflowghnh9/series-workflowghnh9-build-action-4164589463/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-29 17:45:08 +0000 UTC FinishedAt: 2026-06-29 17:45:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-29 17:45:08 +0000 UTC FinishedAt: 2026-06-29 17:45:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-29 17:45:08 +0000 UTC FinishedAt: 2026-06-29 17:45:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-29 17:45:08 +0000 UTC FinishedAt: 2026-06-29 17:45:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowghnh9/series-workflowghnh9-convert-artifact-373491532/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-29 17:45:31 +0000 UTC FinishedAt: 2026-06-29 17:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-29 17:45:31 +0000 UTC FinishedAt: 2026-06-29 17:47:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*daa5c640-d26b-41be-868f-a2d1656fb52d,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-workflowghnh9/series-workflowghnh9-build-action-4164589463/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-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-29 17:47:32 +0000 UTC FinishedAt: 2026-06-29 17:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-29 17:47:32 +0000 UTC FinishedAt: 2026-06-29 17:47:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-29 17:47:32 +0000 UTC FinishedAt: 2026-06-29 18:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-29 17:47:32 +0000 UTC FinishedAt: 2026-06-29 18:15:22 +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:*e6140d05-83ff-4c24-9601-c666451cfa2f,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-workflowghnh9/series-workflowghnh9-convert-artifact-373491532/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": "0964754d-b52c-40b8-b269-291f603a7dc9", "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-workflowghnh9/series-workflowghnh9-build-action-4171060584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-29 17:47:32 +0000 UTC FinishedAt: 2026-06-29 18:12:16 +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:*e6140d05-83ff-4c24-9601-c666451cfa2f,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-workflowghnh9/series-workflowghnh9-convert-artifact-373491532/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": "0964754d-b52c-40b8-b269-291f603a7dc9", "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-workflowghnh9/series-workflowghnh9-build-action-4171060584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-29 18:15:22 +0000 UTC FinishedAt: 2026-06-29 18:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-29 18:15:22 +0000 UTC FinishedAt: 2026-06-29 18:15:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-29 18:15:22 +0000 UTC FinishedAt: 2026-06-29 18:17:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-29 18:15:22 +0000 UTC FinishedAt: 2026-06-29 18:17:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0964754d-b52c-40b8-b269-291f603a7dc9,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-workflowghnh9/series-workflowghnh9-build-action-4171060584/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-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-29 18:17:37 +0000 UTC FinishedAt: 2026-06-29 21:20:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-29 18:17:37 +0000 UTC FinishedAt: 2026-06-29 21:20:03 +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":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"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:*daa5c640-d26b-41be-868f-a2d1656fb52d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0964754d-b52c-40b8-b269-291f603a7dc9,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-workflowghnh9/series-workflowghnh9-build-action-4164589463/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-workflowghnh9/series-workflowghnh9-build-action-4171060584/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-29 18:17:37 +0000 UTC FinishedAt: 2026-06-29 18:17:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-29 18:17:37 +0000 UTC FinishedAt: 2026-06-29 18:17:45 +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":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"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-workflowghnh9/series-workflowghnh9-convert-artifact-1658641589/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-29 18:17:37 +0000 UTC FinishedAt: 2026-06-29 18:17:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-29 18:17:37 +0000 UTC FinishedAt: 2026-06-29 18:17:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-29 18:17:37 +0000 UTC FinishedAt: 2026-06-29 18:17:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-29 18:17:48 +0000 UTC FinishedAt: 2026-06-29 21:20:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowghnh9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_xen_vcpu_set_attr","__kvm_xen_write_hypercall_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"098e32cba334da0f3fa8cfd4e022ae7c72341400","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_XEN"],"series_id":"aa556caf-4c83-401c-8506-7ee4ff7ea844","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-29 18:17:48 +0000 UTC FinishedAt: 2026-06-29 21:19:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*daa5c640-d26b-41be-868f-a2d1656fb52d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0964754d-b52c-40b8-b269-291f603a7dc9,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-workflowghnh9/series-workflowghnh9-build-action-4164589463/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-workflowghnh9/series-workflowghnh9-build-action-4171060584/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-workflowghnh9/series-workflowghnh9-convert-artifact-1658641589/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,}