Name: series-workflow865sk Phase: Succeeded StartedAt: 2026-08-01 16:02:42 +0000 UTC FinishedAt: 2026-08-01 17:21:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[0] Phase: Succeeded StartedAt: 2026-08-01 16:02:42 +0000 UTC FinishedAt: 2026-08-01 16:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 16:02:42 +0000 UTC FinishedAt: 2026-08-01 16:24:06 +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": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTUALIZATION", "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTUALIZATION", "KVM" ], "series_id": "92ef5cd8-346a-4465-9b4e-4f8692ebb892" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_gstage_split_huge", "kvm_arch_mmu_enable_log_dirty_pt_masked", "kvm_arch_commit_memory_region" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBlYWdlciBwYWdlIHNwbGl0dGluZyBmb3IgS1ZNIG9uIFJJU0MtViwgbW9kaWZ5aW5nIHRoZSBLVk0gTU1VIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGlydHkgbG9nZ2luZyB3b3JrIGNvcnJlY3RseSB3aXRob3V0IGludHJvZHVjaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIGNyYXNoZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZDljOTA1ZGE2YmJhNjJjMTdmYzQzN2E3Mzk2NWQzMmQyNDQwY2UyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxNjoyMzoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCBiNTQ5M2E3ZjhmMjI4Li5kNzhlZGE3ZWUyM2E1IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5AQCAtMzA0Nyw3ICYjNDM7MzA0Nyw3IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0RGVmYXVsdCBpcyAwIChkb24mIzM5O3QgaWdub3JlLCBidXQgaW5qZWN0ICNHUClcbiBcbiBcdGt2bS5lYWdlcl9wYWdlX3NwbGl0PVxuLVx0XHRcdFtLVk0sWDg2XSBDb250cm9scyB3aGV0aGVyIG9yIG5vdCBLVk0gd2lsbCB0cnkgdG9cbiYjNDM7XHRcdFx0W0tWTSxYODYsUklTQ1ZdIENvbnRyb2xzIHdoZXRoZXIgb3Igbm90IEtWTSB3aWxsIHRyeSB0b1xuIFx0XHRcdHByb2FjdGl2ZWx5IHNwbGl0IGFsbCBodWdlIHBhZ2VzIGR1cmluZyBkaXJ0eSBsb2dnaW5nLlxuIFx0XHRcdEVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIHJlZHVjZXMgaW50ZXJydXB0aW9ucyB0byB2Q1BVXG4gXHRcdFx0ZXhlY3V0aW9uIGJ5IGVsaW1pbmF0aW5nIHRoZSB3cml0ZS1wcm90ZWN0aW9uIGZhdWx0c1xuQEAgLTMwNjcsNyAmIzQzOzMwNjcsMTAgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHR0aGUgS1ZNX0NMRUFSX0RJUlRZIGlvY3RsLCBhbmQgb25seSBmb3IgdGhlIHBhZ2VzIGJlaW5nXG4gXHRcdFx0Y2xlYXJlZC5cbiBcbi1cdFx0XHRFYWdlciBwYWdlIHNwbGl0dGluZyBpcyBvbmx5IHN1cHBvcnRlZCB3aGVuIGt2bS50ZHBfbW11PVkuXG4mIzQzO1x0XHRcdE9uIHg4NiwgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgb25seSBzdXBwb3J0ZWQgd2hlblxuJiM0MztcdFx0XHRrdm0udGRwX21tdT1ZLlxuJiM0MztcbiYjNDM7XHRcdFx0T24gUklTQ1YsIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0LlxuIFxuIFx0XHRcdERlZmF1bHQgaXMgWSAob24pLlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmhcbmluZGV4IDIxZTIwMTlkZjBjZjUuLmY3MjYyNzk3ODAxNzcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmhcbkBAIC02NCw5ICYjNDM7NjQsOSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuIFx0XHRcdCAgICAgIGJvb2wgcGFnZV9yZG9ubHksIGJvb2wgcGFnZV9leGVjLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApO1xuIFxuLWludCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbi1cdFx0XHRcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxuLVx0XHRcdFx0Z3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaCk7XG4mIzQzO2Jvb2wga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxuJiM0MztcdFx0XHRcdCBncGFfdCBhZGRyLCB1MzIgdGFyZ2V0X2xldmVsLCBib29sIGZsdXNoKTtcbiBcbiBlbnVtIGt2bV9yaXNjdl9nc3RhZ2Vfb3Age1xuIFx0R1NUQUdFX09QX05PUCA9IDAsXHQvKiBOb3RoaW5nICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBlMmQ1ODA4MTY5ZTQ0Li43MWU0NTVkMTY2OTA1IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC04Niw2ICYjNDM7ODYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuIFx0cGdkX3QgKnBnZDtcbiBcdHBoeXNfYWRkcl90IHBnZF9waHlzO1xuIFx0dW5zaWduZWQgbG9uZyBwZ2RfbGV2ZWxzO1xuJiM0MztcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBwZ2Rfc3BsaXRfcGFnZV9jYWNoZTtcbiBcbiBcdC8qIEd1ZXN0IFRpbWVyICovXG4gXHRzdHJ1Y3Qga3ZtX2d1ZXN0X3RpbWVyIHRpbWVyO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbmluZGV4IGIwNDc0ZmNmMDY1YWEuLjAxNjc5YWVmNTMyODkgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbkBAIC0zMDcsMTkgJiM0MzszMDcsMjAgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1ha2VfY2hpbGRfcHRlKHVuc2lnbmVkIGxvbmcgaHVnZV9wdGUsIGludCBpbmRleCxcbiBcdHJldHVybiBjaGlsZF9wdGU7XG4gfVxuIFxuLWludCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbi1cdFx0XHRcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxuLVx0XHRcdFx0Z3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaClcbiYjNDM7Ym9vbCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG4mIzQzO1x0XHRcdFx0IGdwYV90IGFkZHIsIHUzMiB0YXJnZXRfbGV2ZWwsIGJvb2wgZmx1c2gpXG4ge1xuIFx0dTMyIGN1cnJlbnRfbGV2ZWwgPSBnc3RhZ2UtXHUwMDNlcGdkX2xldmVscyAtIDE7XG4gXHRwdGVfdCAqbmV4dF9wdGVwID0gKHB0ZV90ICopZ3N0YWdlLVx1MDAzZXBnZDtcbiBcdHVuc2lnbmVkIGxvbmcgaHVnZV9wdGUsIGNoaWxkX3B0ZTtcbiBcdHVuc2lnbmVkIGxvbmcgY2hpbGRfcGFnZV9zaXplO1xuJiM0MztcdGJvb2wgbmVlZF9mbHVzaCA9IGZhbHNlO1xuIFx0cHRlX3QgKnB0ZXA7XG4gXHRpbnQgaSwgcmV0O1xuIFxuIFx0aWYgKCFwY2FjaGUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0d2hpbGUoY3VycmVudF9sZXZlbCBcdTAwM2UgdGFyZ2V0X2xldmVsKSB7XG4gXHRcdHB0ZXAgPSAocHRlX3QgKilcdTAwMjZuZXh0X3B0ZXBbZ3N0YWdlX3B0ZV9pbmRleChnc3RhZ2UsIGFkZHIsIGN1cnJlbnRfbGV2ZWwpXTtcbkBAIC0zMzcsMjcgJiM0MzszMzgsMzUgQEAgaW50IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuIFxuIFx0XHRyZXQgPSBnc3RhZ2VfbGV2ZWxfdG9fcGFnZV9zaXplKGdzdGFnZSwgY3VycmVudF9sZXZlbCAtIDEsIFx1MDAyNmNoaWxkX3BhZ2Vfc2l6ZSk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0cmV0dXJuIG5lZWRfZmx1c2g7XG4gXG4gXHRcdG5leHRfcHRlcCA9IGt2bV9tbXVfbWVtb3J5X2NhY2hlX2FsbG9jKHBjYWNoZSk7XG4gXHRcdGlmICghbmV4dF9wdGVwKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0XHRyZXR1cm4gbmVlZF9mbHVzaDtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUFRSU19QRVJfUFRFOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdGNoaWxkX3B0ZSA9IG1ha2VfY2hpbGRfcHRlKGh1Z2VfcHRlLCBpLCBjaGlsZF9wYWdlX3NpemUpO1xuIFx0XHRcdHNldF9wdGUoKHB0ZV90ICopXHUwMDI2bmV4dF9wdGVwW2ldLCBfX3B0ZShjaGlsZF9wdGUpKTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEVuc3VyZSB0aGUgd3JpdGVzIHRvIHRoZSBjaGlsZCBQVEVzIGFyZSB2aXNpYmxlIGJlZm9yZVxuJiM0MztcdFx0ICogbGlua2luZyB0aGUgbmV3IHBhZ2UgdGFibGUgdG8gdGhlIHBhcmVudCBQVEUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNtcF93bWIoKTtcbiYjNDM7XG4gXHRcdHNldF9wdGUocHRlcCwgcGZuX3B0ZShQRk5fRE9XTihfX3BhKG5leHRfcHRlcCkpLFxuIFx0XHRcdFx0X19wZ3Byb3QoX1BBR0VfVEFCTEUpKSk7XG4gXG4gXHRcdGlmIChmbHVzaClcbiBcdFx0XHRnc3RhZ2VfdGxiX2ZsdXNoKGdzdGFnZSwgY3VycmVudF9sZXZlbCwgYWRkcik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG5lZWRfZmx1c2ggPSB0cnVlO1xuIFxuIFx0XHRjdXJyZW50X2xldmVsLS07XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gbmVlZF9mbHVzaDtcbiB9XG4gXG4gYm9vbCBrdm1fcmlzY3ZfZ3N0YWdlX29wX3B0ZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLCBncGFfdCBhZGRyLFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbmluZGV4IDhhMGFhNWUwZTIxNmUuLjQzMTQ3NTNmYzQ3YTggMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbkBAIC0xNiw2ICYjNDM7MTYsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX25hY2wuaFx1MDAzZVxuIFxuJiM0MztzdGF0aWMgYm9vbCBfX3JlYWRfbW9zdGx5IGVhZ2VyX3BhZ2Vfc3BsaXQgPSB0cnVlO1xuJiM0Mzttb2R1bGVfcGFyYW0oZWFnZXJfcGFnZV9zcGxpdCwgYm9vbCwgMDY0NCk7XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG1tdV93cF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTtcbkBAIC05OCw2ICYjNDM7MTAxLDYyIEBAIHZvaWQga3ZtX3Jpc2N2X21tdV9pb3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHNpemUpXG4gXHRcdFx0XHRcdCAgICBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIG5lZWRfdG9wdXBfc3BsaXRfY2FjaGVzX29yX3Jlc2NoZWQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlO1xuJiM0MztcbiYjNDM7XHRpZiAobmVlZF9yZXNjaGVkKCkgfHwgcndsb2NrX25lZWRicmVhayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGNhY2hlID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGU7XG4mIzQzO1x0cmV0dXJuIGt2bV9tbXVfbWVtb3J5X2NhY2hlX25yX2ZyZWVfb2JqZWN0cyhjYWNoZSkgXHUwMDNjIGNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBtbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuJiM0MztcdFx0XHRcdCBwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtID0gZ3N0YWdlLVx1MDAzZWt2bTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlO1xuJiM0MztcdHBoeXNfYWRkcl90IGFkZHIgPSBBTElHTl9ET1dOKHN0YXJ0LCBQTURfU0laRSk7XG4mIzQzO1x0cGh5c19hZGRyX3QgbGFzdF9mbHVzaF9nZm4gPSBhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdGludCBjb3VudCA9IGdzdGFnZS1cdTAwM2VwZ2RfbGV2ZWxzO1xuJiM0MztcdGJvb2wgZmx1c2ggPSBmYWxzZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChhZGRyIFx1MDAzYyBlbmQpIHtcbiYjNDM7XHRcdGlmIChuZWVkX3RvcHVwX3NwbGl0X2NhY2hlc19vcl9yZXNjaGVkKGt2bSwgY291bnQpKSB7XG4mIzQzO1x0XHRcdGlmIChmbHVzaCkge1xuJiM0MztcdFx0XHRcdGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShrdm0sIGxhc3RfZmx1c2hfZ2ZuLFxuJiM0MztcdFx0XHRcdFx0ICAoYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgLSBsYXN0X2ZsdXNoX2dmbik7XG4mIzQzO1x0XHRcdFx0bGFzdF9mbHVzaF9nZm4gPSBhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdFx0XHRcdGZsdXNoID0gZmFsc2U7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdHdyaXRlX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MztcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKHBjYWNoZSwgY291bnQpO1xuJiM0MztcdFx0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdFx0a3ZtX2VycihcJiMzNDtGYWlsZWQgdG8gdG91cCBzcGxpdCBwYWdlIGNhY2hlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIGZsdXNoO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWt2bS1cdTAwM2VhcmNoLnBnZClcbiYjNDM7XHRcdFx0cmV0dXJuIGZsdXNoO1xuJiM0MztcbiYjNDM7XHRcdGZsdXNoIHw9IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgYWRkciwgMCwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRcdGFkZHIgJiM0Mzs9IFBNRF9TSVpFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZsdXNoO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0XHRcdFx0XHQgICAgIGdmbl90IGdmbl9vZmZzZXQsXG5AQCAtMTA3LDE0ICYjNDM7MTY2LDIwIEBAIHZvaWQga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHBoeXNfYWRkcl90IHN0YXJ0ID0gKGJhc2VfZ2ZuICYjNDM7ICBfX2ZmcyhtYXNrKSkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXHRwaHlzX2FkZHJfdCBlbmQgPSAoYmFzZV9nZm4gJiM0MzsgX19mbHMobWFzaykgJiM0MzsgMSkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXHRzdHJ1Y3Qga3ZtX2dzdGFnZSBnc3RhZ2U7XG4tXHRib29sIGZsdXNoO1xuIFxuIFx0a3ZtX3Jpc2N2X2dzdGFnZV9pbml0KFx1MDAyNmdzdGFnZSwga3ZtKTtcbiBcbi1cdGZsdXNoID0ga3ZtX3Jpc2N2X2dzdGFnZV93cF9yYW5nZShcdTAwMjZnc3RhZ2UsIHN0YXJ0LCBlbmQpO1xuLVx0aWYgKGZsdXNoKVxuLVx0XHRrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoa3ZtLCBzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbi1cdFx0XHRcdFx0ICAgIChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuJiM0MztcdGt2bV9yaXNjdl9nc3RhZ2Vfd3BfcmFuZ2UoXHUwMDI2Z3N0YWdlLCBzdGFydCwgZW5kKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV9kaXJ0eV9sb2dfbWFudWFsX3Byb3RlY3RfYW5kX2luaXRfc2V0KGt2bSkpIHtcbiYjNDM7XHRcdGlmIChSRUFEX09OQ0UoZWFnZXJfcGFnZV9zcGxpdCkpXG4mIzQzO1x0XHRcdG1tdV9zcGxpdF9odWdlX3BhZ2VzKFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHJlbW90ZSBUTEIgZmx1c2ggaXMgbm90IG5lZWRlZCBoZXJlIHNpbmNlIGNhbGxlcnMgb2ZcbiYjNDM7XHQgKiBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoKSBhbHJlYWR5IGRvIGl0LlxuJiM0MztcdCAqL1xuIH1cbiBcbiB2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcbkBAIC0xNTIsNiAmIzQzOzIxNywyNSBAQCB2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdFx0ICAgIHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbW11X3NwbGl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgc2xvdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7XG4mIzQzO1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCA9IGlkX3RvX21lbXNsb3Qoc2xvdHMsIHNsb3QpO1xuJiM0MztcdHBoeXNfYWRkcl90IHN0YXJ0ID0gbWVtc2xvdC1cdTAwM2ViYXNlX2dmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiYjNDM7XHRwaHlzX2FkZHJfdCBlbmQgPSAobWVtc2xvdC1cdTAwM2ViYXNlX2dmbiAmIzQzOyBtZW1zbG90LVx1MDAzZW5wYWdlcykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4mIzQzO1x0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xuJiM0MztcdGJvb2wgZmx1c2g7XG4mIzQzO1xuJiM0MztcdGt2bV9yaXNjdl9nc3RhZ2VfaW5pdChcdTAwMjZnc3RhZ2UsIGt2bSk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XHRmbHVzaCA9IG1tdV9zcGxpdF9odWdlX3BhZ2VzKFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XG4mIzQzO1x0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChmbHVzaClcbiYjNDM7XHRcdGt2bV9mbHVzaF9yZW1vdGVfdGxic19tZW1zbG90KGt2bSwgbWVtc2xvdCk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG5AQCAtMTY1LDYgJiM0MzsyNDksOSBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0aWYgKGt2bV9kaXJ0eV9sb2dfbWFudWFsX3Byb3RlY3RfYW5kX2luaXRfc2V0KGt2bSkpXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRtbXVfd3BfbWVtb3J5X3JlZ2lvbihrdm0sIG5ldy1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKFJFQURfT05DRShlYWdlcl9wYWdlX3NwbGl0KSlcbiYjNDM7XHRcdFx0bW11X3NwbGl0X21lbW9yeV9yZWdpb24oa3ZtLCBuZXctXHUwMDNlaWQpO1xuIFx0fVxuIH1cbiBcbkBAIC02NzcsNiAmIzQzOzc2NCw3IEBAIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm0tXHUwMDNlYXJjaC5wZ2QgPSBwYWdlX3RvX3ZpcnQocGdkX3BhZ2UpO1xuIFx0a3ZtLVx1MDAzZWFyY2gucGdkX3BoeXMgPSBwYWdlX3RvX3BoeXMocGdkX3BhZ2UpO1xuIFx0a3ZtLVx1MDAzZWFyY2gucGdkX2xldmVscyA9IGt2bV9yaXNjdl9nc3RhZ2VfbWF4X3BnZF9sZXZlbHM7XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGUuZ2ZwX3plcm8gPSBfX0dGUF9aRVJPO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTcwNCw2ICYjNDM7NzkyLDggQEAgdm9pZCBrdm1fcmlzY3ZfbW11X2ZyZWVfcGdkKHN0cnVjdCBrdm0gKmt2bSlcbiBcbiBcdGlmIChwZ2QpXG4gXHRcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGdkLCBnZXRfb3JkZXIoa3ZtX3Jpc2N2X2dzdGFnZV9wZ2Rfc2l6ZSkpO1xuJiM0MztcbiYjNDM7XHRrdm1fbW11X2ZyZWVfbWVtb3J5X2NhY2hlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlKTtcbiB9XG4gXG4gdm9pZCBrdm1fcmlzY3ZfbW11X3VwZGF0ZV9oZ2F0cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBlYWdlciBwYWdlIHNwbGl0dGluZyBmb3IgS1ZNIG9uIFJJU0MtViwgbW9kaWZ5aW5nIHRoZSBLVk0gTU1VIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGlydHkgbG9nZ2luZyB3b3JrIGNvcnJlY3RseSB3aXRob3V0IGludHJvZHVjaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIGNyYXNoZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZDljOTA1ZGE2YmJhNjJjMTdmYzQzN2E3Mzk2NWQzMmQyNDQwY2UyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAxNjoyMzoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYjU0OTNhN2Y4ZjIyOC4uZDc4ZWRhN2VlMjNhNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTMwNDcsNyAmIzQzOzMwNDcsNyBAQCBLZXJuZWwgcGFyYW1ldGVycwogCQkJRGVmYXVsdCBpcyAwIChkb24mIzM5O3QgaWdub3JlLCBidXQgaW5qZWN0ICNHUCkKIAogCWt2bS5lYWdlcl9wYWdlX3NwbGl0PQotCQkJW0tWTSxYODZdIENvbnRyb2xzIHdoZXRoZXIgb3Igbm90IEtWTSB3aWxsIHRyeSB0bwomIzQzOwkJCVtLVk0sWDg2LFJJU0NWXSBDb250cm9scyB3aGV0aGVyIG9yIG5vdCBLVk0gd2lsbCB0cnkgdG8KIAkJCXByb2FjdGl2ZWx5IHNwbGl0IGFsbCBodWdlIHBhZ2VzIGR1cmluZyBkaXJ0eSBsb2dnaW5nLgogCQkJRWFnZXIgcGFnZSBzcGxpdHRpbmcgcmVkdWNlcyBpbnRlcnJ1cHRpb25zIHRvIHZDUFUKIAkJCWV4ZWN1dGlvbiBieSBlbGltaW5hdGluZyB0aGUgd3JpdGUtcHJvdGVjdGlvbiBmYXVsdHMKQEAgLTMwNjcsNyAmIzQzOzMwNjcsMTAgQEAgS2VybmVsIHBhcmFtZXRlcnMKIAkJCXRoZSBLVk1fQ0xFQVJfRElSVFkgaW9jdGwsIGFuZCBvbmx5IGZvciB0aGUgcGFnZXMgYmVpbmcKIAkJCWNsZWFyZWQuCiAKLQkJCUVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4ga3ZtLnRkcF9tbXU9WS4KJiM0MzsJCQlPbiB4ODYsIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4KJiM0MzsJCQlrdm0udGRwX21tdT1ZLgomIzQzOwomIzQzOwkJCU9uIFJJU0NWLCBlYWdlciBwYWdlIHNwbGl0dGluZyBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdC4KIAogCQkJRGVmYXVsdCBpcyBZIChvbikuCiAKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgKaW5kZXggMjFlMjAxOWRmMGNmNS4uZjcyNjI3OTc4MDE3NyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgKQEAgLTY0LDkgJiM0Mzs2NCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsCiAJCQkgICAgICBib29sIHBhZ2VfcmRvbmx5LCBib29sIHBhZ2VfZXhlYywKIAkJCSAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApOwogCi1pbnQga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsCi0JCQkJc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsCi0JCQkJZ3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaCk7CiYjNDM7Ym9vbCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwKJiM0MzsJCQkJIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLAomIzQzOwkJCQkgZ3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaCk7CiAKIGVudW0ga3ZtX3Jpc2N2X2dzdGFnZV9vcCB7CiAJR1NUQUdFX09QX05PUCA9IDAsCS8qIE5vdGhpbmcgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBlMmQ1ODA4MTY5ZTQ0Li43MWU0NTVkMTY2OTA1IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC04Niw2ICYjNDM7ODYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogCXBnZF90ICpwZ2Q7CiAJcGh5c19hZGRyX3QgcGdkX3BoeXM7CiAJdW5zaWduZWQgbG9uZyBwZ2RfbGV2ZWxzOwomIzQzOwlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgcGdkX3NwbGl0X3BhZ2VfY2FjaGU7CiAKIAkvKiBHdWVzdCBUaW1lciAqLwogCXN0cnVjdCBrdm1fZ3Vlc3RfdGltZXIgdGltZXI7CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jCmluZGV4IGIwNDc0ZmNmMDY1YWEuLjAxNjc5YWVmNTMyODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jCkBAIC0zMDcsMTkgJiM0MzszMDcsMjAgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1ha2VfY2hpbGRfcHRlKHVuc2lnbmVkIGxvbmcgaHVnZV9wdGUsIGludCBpbmRleCwKIAlyZXR1cm4gY2hpbGRfcHRlOwogfQogCi1pbnQga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsCi0JCQkJc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsCi0JCQkJZ3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaCkKJiM0Mztib29sIGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLAomIzQzOwkJCQkgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsCiYjNDM7CQkJCSBncGFfdCBhZGRyLCB1MzIgdGFyZ2V0X2xldmVsLCBib29sIGZsdXNoKQogewogCXUzMiBjdXJyZW50X2xldmVsID0gZ3N0YWdlLSZndDtwZ2RfbGV2ZWxzIC0gMTsKIAlwdGVfdCAqbmV4dF9wdGVwID0gKHB0ZV90ICopZ3N0YWdlLSZndDtwZ2Q7CiAJdW5zaWduZWQgbG9uZyBodWdlX3B0ZSwgY2hpbGRfcHRlOwogCXVuc2lnbmVkIGxvbmcgY2hpbGRfcGFnZV9zaXplOwomIzQzOwlib29sIG5lZWRfZmx1c2ggPSBmYWxzZTsKIAlwdGVfdCAqcHRlcDsKIAlpbnQgaSwgcmV0OwogCiAJaWYgKCFwY2FjaGUpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiAJd2hpbGUoY3VycmVudF9sZXZlbCAmZ3Q7IHRhcmdldF9sZXZlbCkgewogCQlwdGVwID0gKHB0ZV90ICopJmFtcDtuZXh0X3B0ZXBbZ3N0YWdlX3B0ZV9pbmRleChnc3RhZ2UsIGFkZHIsIGN1cnJlbnRfbGV2ZWwpXTsKQEAgLTMzNywyNyAmIzQzOzMzOCwzNSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsCiAKIAkJcmV0ID0gZ3N0YWdlX2xldmVsX3RvX3BhZ2Vfc2l6ZShnc3RhZ2UsIGN1cnJlbnRfbGV2ZWwgLSAxLCAmYW1wO2NoaWxkX3BhZ2Vfc2l6ZSk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJCXJldHVybiBuZWVkX2ZsdXNoOwogCiAJCW5leHRfcHRlcCA9IGt2bV9tbXVfbWVtb3J5X2NhY2hlX2FsbG9jKHBjYWNoZSk7CiAJCWlmICghbmV4dF9wdGVwKQotCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQkJcmV0dXJuIG5lZWRfZmx1c2g7CiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7IFBUUlNfUEVSX1BURTsgaSYjNDM7JiM0MzspIHsKIAkJCWNoaWxkX3B0ZSA9IG1ha2VfY2hpbGRfcHRlKGh1Z2VfcHRlLCBpLCBjaGlsZF9wYWdlX3NpemUpOwogCQkJc2V0X3B0ZSgocHRlX3QgKikmYW1wO25leHRfcHRlcFtpXSwgX19wdGUoY2hpbGRfcHRlKSk7CiAJCX0KIAomIzQzOwkJLyoKJiM0MzsJCSAqIEVuc3VyZSB0aGUgd3JpdGVzIHRvIHRoZSBjaGlsZCBQVEVzIGFyZSB2aXNpYmxlIGJlZm9yZQomIzQzOwkJICogbGlua2luZyB0aGUgbmV3IHBhZ2UgdGFibGUgdG8gdGhlIHBhcmVudCBQVEUuCiYjNDM7CQkgKi8KJiM0MzsJCXNtcF93bWIoKTsKJiM0MzsKIAkJc2V0X3B0ZShwdGVwLCBwZm5fcHRlKFBGTl9ET1dOKF9fcGEobmV4dF9wdGVwKSksCiAJCQkJX19wZ3Byb3QoX1BBR0VfVEFCTEUpKSk7CiAKIAkJaWYgKGZsdXNoKQogCQkJZ3N0YWdlX3RsYl9mbHVzaChnc3RhZ2UsIGN1cnJlbnRfbGV2ZWwsIGFkZHIpOwomIzQzOwkJZWxzZQomIzQzOwkJCW5lZWRfZmx1c2ggPSB0cnVlOwogCiAJCWN1cnJlbnRfbGV2ZWwtLTsKIAl9CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIG5lZWRfZmx1c2g7CiB9CiAKIGJvb2wga3ZtX3Jpc2N2X2dzdGFnZV9vcF9wdGUoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwgZ3BhX3QgYWRkciwKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmMKaW5kZXggOGEwYWE1ZTBlMjE2ZS4uNDMxNDc1M2ZjNDdhOCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vbW11LmMKQEAgLTE2LDYgJiM0MzsxNiw5IEBACiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9tbXUuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX25hY2wuaCZndDsKIAomIzQzO3N0YXRpYyBib29sIF9fcmVhZF9tb3N0bHkgZWFnZXJfcGFnZV9zcGxpdCA9IHRydWU7CiYjNDM7bW9kdWxlX3BhcmFtKGVhZ2VyX3BhZ2Vfc3BsaXQsIGJvb2wsIDA2NDQpOwomIzQzOwogc3RhdGljIHZvaWQgbW11X3dwX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgc2xvdCkKIHsKIAlzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pOwpAQCAtOTgsNiAmIzQzOzEwMSw2MiBAQCB2b2lkIGt2bV9yaXNjdl9tbXVfaW91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBzaXplKQogCQkJCQkgICAgc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG5lZWRfdG9wdXBfc3BsaXRfY2FjaGVzX29yX3Jlc2NoZWQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlOwomIzQzOwomIzQzOwlpZiAobmVlZF9yZXNjaGVkKCkgfHwgcndsb2NrX25lZWRicmVhaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWNhY2hlID0gJmFtcDtrdm0tJmd0O2FyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGU7CiYjNDM7CXJldHVybiBrdm1fbW11X21lbW9yeV9jYWNoZV9ucl9mcmVlX29iamVjdHMoY2FjaGUpICZsdDsgY291bnQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG1tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsCiYjNDM7CQkJCSBwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bSAqa3ZtID0gZ3N0YWdlLSZndDtrdm07CiYjNDM7CXN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlID0gJmFtcDtrdm0tJmd0O2FyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGU7CiYjNDM7CXBoeXNfYWRkcl90IGFkZHIgPSBBTElHTl9ET1dOKHN0YXJ0LCBQTURfU0laRSk7CiYjNDM7CXBoeXNfYWRkcl90IGxhc3RfZmx1c2hfZ2ZuID0gYWRkciAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwlpbnQgY291bnQgPSBnc3RhZ2UtJmd0O3BnZF9sZXZlbHM7CiYjNDM7CWJvb2wgZmx1c2ggPSBmYWxzZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwl3aGlsZSAoYWRkciAmbHQ7IGVuZCkgewomIzQzOwkJaWYgKG5lZWRfdG9wdXBfc3BsaXRfY2FjaGVzX29yX3Jlc2NoZWQoa3ZtLCBjb3VudCkpIHsKJiM0MzsJCQlpZiAoZmx1c2gpIHsKJiM0MzsJCQkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKGt2bSwgbGFzdF9mbHVzaF9nZm4sCiYjNDM7CQkJCQkgIChhZGRyICZndDsmZ3Q7IFBBR0VfU0hJRlQpIC0gbGFzdF9mbHVzaF9nZm4pOwomIzQzOwkJCQlsYXN0X2ZsdXNoX2dmbiA9IGFkZHIgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJCQkJZmx1c2ggPSBmYWxzZTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJd3JpdGVfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiYjNDM7CQkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CiYjNDM7CQkJcmV0ID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUocGNhY2hlLCBjb3VudCk7CiYjNDM7CQkJaWYgKHJldCkgewomIzQzOwkJCQlrdm1fZXJyKCYjMzQ7RmFpbGVkIHRvIHRvdXAgc3BsaXQgcGFnZSBjYWNoZVxuJiMzNDspOwomIzQzOwkJCQl3cml0ZV9sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiYjNDM7CQkJCXJldHVybiBmbHVzaDsKJiM0MzsJCQl9CiYjNDM7CQkJd3JpdGVfbG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFrdm0tJmd0O2FyY2gucGdkKQomIzQzOwkJCXJldHVybiBmbHVzaDsKJiM0MzsKJiM0MzsJCWZsdXNoIHw9IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgYWRkciwgMCwgZmFsc2UpOwomIzQzOwomIzQzOwkJYWRkciAmIzQzOz0gUE1EX1NJWkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZsdXNoOwomIzQzO30KJiM0MzsKIHZvaWQga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkJICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAogCQkJCQkgICAgIGdmbl90IGdmbl9vZmZzZXQsCkBAIC0xMDcsMTQgJiM0MzsxNjYsMjAgQEAgdm9pZCBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoc3RydWN0IGt2bSAqa3ZtLAogCXBoeXNfYWRkcl90IHN0YXJ0ID0gKGJhc2VfZ2ZuICYjNDM7ICBfX2ZmcyhtYXNrKSkgJmx0OyZsdDsgUEFHRV9TSElGVDsKIAlwaHlzX2FkZHJfdCBlbmQgPSAoYmFzZV9nZm4gJiM0MzsgX19mbHMobWFzaykgJiM0MzsgMSkgJmx0OyZsdDsgUEFHRV9TSElGVDsKIAlzdHJ1Y3Qga3ZtX2dzdGFnZSBnc3RhZ2U7Ci0JYm9vbCBmbHVzaDsKIAogCWt2bV9yaXNjdl9nc3RhZ2VfaW5pdCgmYW1wO2dzdGFnZSwga3ZtKTsKIAotCWZsdXNoID0ga3ZtX3Jpc2N2X2dzdGFnZV93cF9yYW5nZSgmYW1wO2dzdGFnZSwgc3RhcnQsIGVuZCk7Ci0JaWYgKGZsdXNoKQotCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoa3ZtLCBzdGFydCAmZ3Q7Jmd0OyBQQUdFX1NISUZULAotCQkJCQkgICAgKGVuZCAtIHN0YXJ0KSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKJiM0MzsJa3ZtX3Jpc2N2X2dzdGFnZV93cF9yYW5nZSgmYW1wO2dzdGFnZSwgc3RhcnQsIGVuZCk7CiYjNDM7CiYjNDM7CWlmIChrdm1fZGlydHlfbG9nX21hbnVhbF9wcm90ZWN0X2FuZF9pbml0X3NldChrdm0pKSB7CiYjNDM7CQlpZiAoUkVBRF9PTkNFKGVhZ2VyX3BhZ2Vfc3BsaXQpKQomIzQzOwkJCW1tdV9zcGxpdF9odWdlX3BhZ2VzKCZhbXA7Z3N0YWdlLCBzdGFydCwgZW5kKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiByZW1vdGUgVExCIGZsdXNoIGlzIG5vdCBuZWVkZWQgaGVyZSBzaW5jZSBjYWxsZXJzIG9mCiYjNDM7CSAqIGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZCgpIGFscmVhZHkgZG8gaXQuCiYjNDM7CSAqLwogfQogCiB2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCkKQEAgLTE1Miw2ICYjNDM7MjE3LDI1IEBAIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLAogCQkJCQkgICAgc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1tdV9zcGxpdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pOwomIzQzOwlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90ID0gaWRfdG9fbWVtc2xvdChzbG90cywgc2xvdCk7CiYjNDM7CXBoeXNfYWRkcl90IHN0YXJ0ID0gbWVtc2xvdC0mZ3Q7YmFzZV9nZm4gJmx0OyZsdDsgUEFHRV9TSElGVDsKJiM0MzsJcGh5c19hZGRyX3QgZW5kID0gKG1lbXNsb3QtJmd0O2Jhc2VfZ2ZuICYjNDM7IG1lbXNsb3QtJmd0O25wYWdlcykgJmx0OyZsdDsgUEFHRV9TSElGVDsKJiM0MzsJc3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlOwomIzQzOwlib29sIGZsdXNoOwomIzQzOwomIzQzOwlrdm1fcmlzY3ZfZ3N0YWdlX2luaXQoJmFtcDtnc3RhZ2UsIGt2bSk7CiYjNDM7CiYjNDM7CXdyaXRlX2xvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsJZmx1c2ggPSBtbXVfc3BsaXRfaHVnZV9wYWdlcygmYW1wO2dzdGFnZSwgc3RhcnQsIGVuZCk7CiYjNDM7CXdyaXRlX3VubG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwlpZiAoZmx1c2gpCiYjNDM7CQlrdm1fZmx1c2hfcmVtb3RlX3RsYnNfbWVtc2xvdChrdm0sIG1lbXNsb3QpOwomIzQzO30KJiM0MzsKIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAogCQkJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCwKIAkJCQljb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsCkBAIC0xNjUsNiAmIzQzOzI0OSw5IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAogCQlpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSkKIAkJCXJldHVybjsKIAkJbW11X3dwX21lbW9yeV9yZWdpb24oa3ZtLCBuZXctJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmIChSRUFEX09OQ0UoZWFnZXJfcGFnZV9zcGxpdCkpCiYjNDM7CQkJbW11X3NwbGl0X21lbW9yeV9yZWdpb24oa3ZtLCBuZXctJmd0O2lkKTsKIAl9CiB9CiAKQEAgLTY3Nyw2ICYjNDM7NzY0LDcgQEAgaW50IGt2bV9yaXNjdl9tbXVfYWxsb2NfcGdkKHN0cnVjdCBrdm0gKmt2bSkKIAlrdm0tJmd0O2FyY2gucGdkID0gcGFnZV90b192aXJ0KHBnZF9wYWdlKTsKIAlrdm0tJmd0O2FyY2gucGdkX3BoeXMgPSBwYWdlX3RvX3BoeXMocGdkX3BhZ2UpOwogCWt2bS0mZ3Q7YXJjaC5wZ2RfbGV2ZWxzID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXhfcGdkX2xldmVsczsKJiM0MzsJa3ZtLSZndDthcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlLmdmcF96ZXJvID0gX19HRlBfWkVSTzsKIAogCXJldHVybiAwOwogfQpAQCAtNzA0LDYgJiM0Mzs3OTIsOCBAQCB2b2lkIGt2bV9yaXNjdl9tbXVfZnJlZV9wZ2Qoc3RydWN0IGt2bSAqa3ZtKQogCiAJaWYgKHBnZCkKIAkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwZ2QsIGdldF9vcmRlcihrdm1fcmlzY3ZfZ3N0YWdlX3BnZF9zaXplKSk7CiYjNDM7CiYjNDM7CWt2bV9tbXVfZnJlZV9tZW1vcnlfY2FjaGUoJmFtcDtrdm0tJmd0O2FyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGUpOwogfQogCiB2b2lkIGt2bV9yaXNjdl9tbXVfdXBkYXRlX2hnYXRwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVhZ2VyIFBhZ2UgU3BsaXR0aW5nIFBhdGNoIGZvciBSSVNDLVYgS1ZNKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIGEgbmV3IHBhdGNoIG91dCB0aGVyZSwgaW1wbGVtZW50aW5nIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGZvciBLVk0gb24gUklTQy1WLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gSXQmIzM5O3MgdG91Y2hpbmcgYGFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jYCBhbmQgYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgY29yZSBrZXJuZWwgbG9naWMgd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uLiAqVGhhdCYjMzk7cyBwcm9taXNpbmcgZm9yIGZ1enppbmcgLSBhIGRlZmluaXRlICYjMzQ7eWVzLiYjMzQ7KgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgYWx0ZXJlZC4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2VgIGFuZCBgbW11X3NwbGl0X2h1Z2VfcGFnZXNgLCBhbG9uZ3NpZGUgdGhlIGludHJvZHVjdGlvbiBvZiBga3ZtLmVhZ2VyX3BhZ2Vfc3BsaXRgIGFzIGEgUklTQy1WIHNwZWNpZmljIHBhcmFtZXRlci4gRnVuY3Rpb24gYGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZWAgcmV0dXJuIHR5cGUgaXMgY2hhbmdlZCB0byBib29sLiBNb2RpZmljYXRpb25zIGFyZSBtYWRlIHRvIGBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWRgIGFuZCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLiBDaGFuZ2VzIGFyZSBhbHNvIG1hZGUgdG8gdGhlIFBHRCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZnVuY3Rpb25zOiBga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2RgIGFuZCBga3ZtX3Jpc2N2X21tdV9mcmVlX3BnZGAuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgTU1VJiMzOTtzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlIGxvb2sgYXQgYm90aCBgYXJjaC9yaXNjdi9rdm0vbW11LmNgIGFuZCBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM9MjA3PWludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4tLVxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjc4LVx0XHRpZiAocHRlcF9sZXZlbCBcdTAwM2Ugb3V0X21hcC1cdTAwM2VsZXZlbCkge1xuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM6Mjc5Olx0XHRcdGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgZ3BhLFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjgwLVx0XHRcdFx0XHRcdCAgICBvdXRfbWFwLVx1MDAzZWxldmVsLCB0cnVlKTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYz0yOTM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1ha2VfY2hpbGRfcHRlKHVuc2lnbmVkIGxvbmcgaHVnZV9wdGUsIGludCBpbmRleCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0zMDktXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYzozMTA6Ym9vbCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTMxMS1cdFx0XHRcdCBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz0xMTU9c3RhdGljIGJvb2wgbW11X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy0xNTEtXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzoxNTI6XHRcdGZsdXNoIHw9IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgYWRkciwgMCwgZmFsc2UpO1xuYXJjaC9yaXNjdi9rdm0vbW11LmMtMTUzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NjUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFJJU0MtViBLVk0gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIFJJU0MtViBLVk0gY29kZSBhbmQgbWFraW5nIHNvbWUgaW5pdGlhbCBvYnNlcnZhdGlvbnMuIEkmIzM5O20gc2VlaW5nIHRoYXQgYGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZWAsIGBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWRgLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2RgLCBhbmQgYGt2bV9yaXNjdl9tbXVfZnJlZV9wZ2RgIGFyZSBhbGwgZXhwb3J0ZWQg4oCTIHRoYXQgaXMsIHRoZXkmIzM5O3JlIG5vbi1zdGF0aWMuIFRoaXMgbWVhbnMgdGhleSYjMzk7cmUgbGlrZWx5IGRlc2lnbmVkIGZvciB1c2Ugb3V0c2lkZSBvZiB0aGVpciBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggdGVsbHMgbWUgdGhleSYjMzk7cmUga2V5IGludGVyZmFjZXMgb3IgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBLVk0gaW1wbGVtZW50YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gb3RoZXIgbW9kdWxlcywgd291bGQgbmVlZCBhY2Nlc3MgdG8uIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQuCgpOZXh0IHN0ZXA6IEkgc2hvdWxkIHZlcmlmeSB0aGlzIGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBLVk0gc3VwcG9ydCBvbiBSSVNDLVYuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIEtWTSBjb25maWd1cmF0aW9uIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBtaWdodCBiZSBhdCBwbGF5LiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhleeKAmXJlIGVuYWJsZWQvZGlzYWJsZWQgYmFzZWQgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5OiBLVk0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBLVk1gIOKAkyB0aGF0JiMzOTtzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBlbGVtZW50IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHN1cmZhY2VzIGlzOiB3aGF0IGRvZXMgdGhpcyBkZXBlbmQgb24/IFdoYXQgYXJlIGl0cyBwcmVyZXF1aXNpdGVzPyBJcyBpdCBzZWxmLWNvbnRhaW5lZCwgb3IgYXJlIHRoZXJlIHVuZGVybHlpbmcgbGlicmFyaWVzLCBoYXJkd2FyZSBmZWF0dXJlcywgb3Iga2VybmVsIG1vZHVsZXMgdGhhdCAqbXVzdCogYmUgcHJlc2VudCBhbmQgY29ycmVjdGx5IGNvbmZpZ3VyZWQgZm9yIGBLVk1gIHRvIGZ1bmN0aW9uIGFzIGV4cGVjdGVkPyBJcyB0aGVyZSBhIGtub3duIG1pbmltdW0gb3IgY29tcGF0aWJsZSB2ZXJzaW9uIHRvIGNvbnNpZGVyLCBzdWNoIGFzIGtlcm5lbCB2ZXJzaW9uIG9yIFFFTVUgdmVyc2lvbj8gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgYW55IHRyb3VibGVzaG9vdGluZyBvciBtb2RpZmljYXRpb24gZWZmb3J0cy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjI6XHRkZXBlbmRzIG9uIFJJU0NWX1NCSSBcdTAwMjZcdTAwMjYgTU1VXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIzLVx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njk3CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktWTSBGdW5jdGlvbiBJZGVudGlmaWNhdGlvbiBQcm9jZXNzKioKClJpZ2h0LCBzbyBpdCYjMzk7cyBsb29raW5nIGxpa2UgYEtWTWAgaXMgdGhlIGNydWNpYWwgcGllY2UgaGVyZS4gTm93IEkgbmVlZCB0byBuYWlsIGRvd24gdGhlICpleGFjdCogZnVuY3Rpb24gbmFtZXMgSSYjMzk7bGwgYmUgd29ya2luZyB3aXRoLiBJIGNhbiYjMzk7dCBhZmZvcmQgYW55IGFtYmlndWl0eSBvciByZWxpYW5jZSBvbiBmdXp6eSByZWNhbGwuIE15IG5leHQgc3RlcCBpcyB0byBtZXRpY3Vsb3VzbHkgaWRlbnRpZnkgZWFjaCBuZWNlc3NhcnkgZnVuY3Rpb24sIGVuc3VyaW5nIEkmIzM5O20gcmVmZXJlbmNpbmcgdGhlIHByZWNpc2UgaW50ZXJmYWNlIEkmIzM5O20gdGFyZ2V0aW5nLiBObyByb29tIGZvciBndWVzc3dvcmssIGp1c3QgcHJlY2lzZSBmdW5jdGlvbiBuYW1lcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZ2V0IHRoZSByaWdodCBzeW50YXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jPTExNT1zdGF0aWMgYm9vbCBtbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTE1OS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjE2MDp2b2lkIGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy0xNjEtXHRcdFx0XHRcdCAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy0xODAtXHQgKiByZW1vdGUgVExCIGZsdXNoIGlzIG5vdCBuZWVkZWQgaGVyZSBzaW5jZSBjYWxsZXJzIG9mXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzoxODE6XHQgKiBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoKSBhbHJlYWR5IGRvIGl0LlxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMTgyLVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMzQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcy4gV2hlbiBJIHNlZSBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBteSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IuIE15IGZpcnN0IHRob3VnaHQgaXM6IHRoaXMgaXMgYSBjcml0aWNhbCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIGNoYW5nZXMgdG8gdGhlIGd1ZXN0JiMzOTtzIG1lbW9yeSBtYXAgYXJlICphY3R1YWxseSogbWFkZSBwZXJtYW5lbnQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBmaW5hbCB2YWxpZGF0aW9uIGFuZCBhcHBsaWNhdGlvbiBvZiBtZW1vcnkgcmVnaW9uIGNoYW5nZXMsIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgVExCIGludmFsaWRhdGlvbnMsIHBhZ2UgdGFibGUgdXBkYXRlcywgYW5kIGFsbCB0aGUgYXNzb2NpYXRlZCBoYXJkd2FyZSBzeW5jaHJvbml6YXRpb24uCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLiBIb3cgZWZmaWNpZW50bHkgaXMgdGhpcyBpbXBsZW1lbnRlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaGVyZT8gSXMgdGhlIGRlc2lnbiBvcHRpbWl6ZWQgZm9yIG1pbmltYWwgbGF0ZW5jeSwgZXNwZWNpYWxseSBkdXJpbmcgbGl2ZSBtaWdyYXRpb24gb3IgVk0gY3JlYXRpb24/IFRoZSBjb250ZXh0IGFyb3VuZCBpdCBtYXR0ZXJzIC0gd2hhdOKAmXMgdGhlIGNhbGxpbmcgcGF0aD8gSXMgaXQgY2FsbGVkIGZyZXF1ZW50bHk/IEluZnJlcXVlbnRseT8gV2hhdCBhcmUgdGhlIGNvbW1vbiBzY2VuYXJpb3MgdGhhdCB0cmlnZ2VyIGl0PwoKSeKAmW0gYWxzbyB3b25kZXJpbmcgYWJvdXQgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZC4gV2hhdCBraW5kIG9mIHNwaW5sb2NrcywgbXV0ZXhlcywgb3IgUkNVIHN0cnVjdHVyZXMgYXJlIHVzZWQgdG8gcHJvdGVjdCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzPyBBcmUgdGhleSBlZmZlY3RpdmU/IElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGNvbnRlbnRpb24sIGRlYWRsb2Nrcywgb3IgbGl2ZWxvY2tzPyBIb3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgKHg4NiwgQVJNLCBldGMuKSBpbiB0aGlzIGZ1bmN0aW9uPyBUaGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGxvZ2ljIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGlzIG9mdGVuIHdoZXJlIHN1YnRsZSwgaGFyZC10by1kZWJ1ZyBpc3N1ZXMgYXJpc2UuCgpTZWN1cml0eSBpcyBhbm90aGVyIGltbWVkaWF0ZSBjb25jZXJuLiBXaGF0IGNoZWNrcyBhcmUgaW4gcGxhY2UgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbj8gQXJlIHRoZXJlIHJvYnVzdCBib3VuZHMgY2hlY2tzIGFuZCB2YWxpZGF0aW9uIG9mIHRoZSByZWdpb24gcGFyYW1ldGVycz8gVGhpcyBpcyBhIGhpZ2gtcHJpdmlsZWdlIGZ1bmN0aW9uLCBzbyB2dWxuZXJhYmlsaXRpZXMgaGVyZSBjb3VsZCBiZSBjYXRhc3Ryb3BoaWMuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHBvdGVudGlhbCBUT0NUT1UgKFRpbWUtb2YtQ2hlY2stdG8tVGltZS1vZi1Vc2UpIHZ1bG5lcmFiaWxpdGllcyBvciBvdGhlciBzZWN1cml0eSBpc3N1ZXMgaW4gdGhlIG1lbW9yeSByZWdpb24gY29tbWl0LiBXaGF0IHR5cGUgb2YgaXNvbGF0aW9uIGd1YXJhbnRlZXMgYXJlIGJlaW5nIG1hZGUgZm9yIHRoZSBndWVzdD8KCkZpbmFsbHksIEnigJltIG1lbnRhbGx5IGNoYXJ0aW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggb3RoZXIgS1ZNIHN1YnN5c3RlbXMuIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIE1NVSBlbXVsYXRpb24sIHRoZSB2aXJ0dWFsaXplZCBpbnRlcnJ1cHQgY29udHJvbGxlciwgYW5kIHRoZSBkZXZpY2UgZW11bGF0aW9uIGxheWVycz8gSXQgaGFzIHRvIGludGVncmF0ZSB3aXRoIGFsbCBvZiB0aGVtIHRvIG9wZXJhdGUgcHJvcGVybHkuIEl0IGlzIHRoZSBjb3JlIG9mIG1lbW9yeS1yZWxhdGVkIG9wZXJhdGlvbnMuIEl0IGlzIGxpa2VseSBjYWxsZWQgZnJvbSBtYW55IHN1YnN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmM9MjIwPXN0YXRpYyB2b2lkIG1tdV9zcGxpdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMjM4LVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6MjM5OnZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMjQwLVx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODEwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBSSVNDLVYgUGFnZSBTcGxpdHRpbmcgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBlYWdlciBwYWdlIHNwbGl0dGluZyB3aXRoaW4gS1ZNIG9uIFJJU0MtViwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgS1ZNIE1NVSBsb2dpYy4gQmFzZWQgb24gdGhlIHN5bWJvbHMgbGlzdGVkLCB0aGUga2V5IGFyZWFzIGFmZmVjdGVkIGFyZSBga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlYCwgYGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZGAsIGFuZCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMgd2l0aCBNTVUgY2hhbmdlcywgaXMgbWVtb3J5IHNhZmV0eS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBlYWdlciBzcGxpdHRpbmcgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgb3IsIGV2ZW4gd29yc2UsIGNhdXNlIGtlcm5lbCBjcmFzaGVzLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBjb250ZXh0cyBvZiBkaXJ0eSBsb2dnaW5nLiBGdXp6aW5nIGlzIHRoZSBvYnZpb3VzIG5leHQgc3RlcCwgYWJzb2x1dGVseSBjcml0aWNhbCwgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBuZXcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRpcnR5IGxvZ2dpbmcgYmVoYXZpb3JzLiBJJiMzOTtsbCBuZWVkIHRvIGRldmVsb3AgZnV6emluZyBoYXJuZXNzZXMgdGFpbG9yZWQgdG8gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgS1ZNYCBpcywgb2YgY291cnNlLCBhIGdpdmVuLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgYFJJU0NWX1NCSWAgYW5kIGBNTVVgIGFyZSBwcmVzZW50LCB3aGljaCBhcmUgcHJldHR5IG11Y2ggc3RhbmRhcmQgb24gYW55IFJJU0MtViBLVk0gc2V0dXAuIEkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIHRoYXQgYFZJUlRVQUxJWkFUSU9OYCBpcyBjb3JyZWN0bHkgZGVmaW5lZCBhcyBhIHByZXJlcXVpc2l0ZSBmb3IgYEtWTWAsIGVzcGVjaWFsbHkgd2l0aGluIGBhcmNoL3Jpc2N2L2t2bS9LY29uZmlnYCB0byBlbnN1cmUgbm8gYnVpbGQgaXNzdWVzIGFyaXNlLiBNeSBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBpcyBjb3JyZWN0IGFuZCBjb21wbGV0ZSBmb3IgcHJvcGVyIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZJUlRVQUxJWkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM2OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqS2NvbmZpZyBSZXZpZXcgLSBSSVNDLVYgS1ZNKioKCkFscmlnaHQsIHRpbWUgdG8gcmV2aXNpdCBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AuIEkmIzM5O3ZlIGJlZW4gb3ZlciBpdCBiZWZvcmUsIGJ1dCBnaXZlbiB0aGUgcmVjZW50IGRpc2N1c3Npb25zIGFuZCBkZXZlbG9wbWVudHMgaW4gUklTQy1WIEtWTSwgaXQmIzM5O3MgcHJ1ZGVudCB0byBnaXZlIGl0IGFub3RoZXIsIGZvY3VzZWQgbG9vay4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHN0aWxsIHNvdW5kLCBwcm9wZXJseSBwbGFjZWQsIGFuZCByZWZsZWN0aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydC4gQXJlIHRoZXJlIGFueSBuZXcgZGVwZW5kZW5jaWVzIEkgbWlzc2VkPyBIYXZlIGFueSBleGlzdGluZyBvcHRpb25zIGJlY29tZSBvYnNvbGV0ZSBvciByZXF1aXJlIHJlZmluZW1lbnQ/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHJlY2VudCBwYXRjaGVzIGhhdmUgaW1wYWN0ZWQgdGhlIGV4aXN0aW5nIG9wdGlvbnMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9wcG9ydHVuaXRpZXMgdG8gaW1wcm92ZSB0aGUgdXNlciBleHBlcmllbmNlIHdpdGggbmV3IG9wdGlvbnMuIEEgdGhvcm91Z2ggY2hlY2sgaXMgZXNzZW50aWFsIHRvIG1haW50YWluIHRoZSBpbnRlZ3JpdHkgYW5kIHVzYWJpbGl0eSBvZiBvdXIgY29uZmlndXJhdGlvbiBzeXN0ZW0gZm9yIHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTY9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctNy1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTktXHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2ODgKCQkJCQkJCW91dHB1dDogMTM5CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqVmlydHVhbGl6YXRpb24gQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCB0aGUgY29yZSByZXF1aXJlbWVudCBpcyBjbGVhcjogd2UgYWJzb2x1dGVseSBuZWVkIGBWSVJUVUFMSVpBVElPTmAuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gaXMgYWJvdXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGRldGVybWluZSBpZiBgS1ZNYCBhbG9uZSB3aWxsIHN1ZmZpY2UsIG9yIGlmIHRoZXJlIGFyZSBhZGRpdGlvbmFsIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudHMgbmVjZXNzYXJ5LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYEtWTWAgaXMgb2Z0ZW4gc3lub255bW91cyB3aXRoIGEgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0eSwgYnV0IEkgbmVlZCB0byBjb25maXJtLiBMZXQgbWUgY2xhcmlmeSAtIGBLVk1gIGlzIG5lc3RlZCAqd2l0aGluKiBgVklSVFVBTElaQVRJT05gLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIFRoaXMgbWVhbnMgdGhhdCBzaW1wbHkgZW5hYmxpbmcgYEtWTWAgaXMgbm90IGF1dG9tYXRpY2FsbHkgZW5hYmxpbmcgYFZJUlRVQUxJWkFUSU9OYC4gVGhlcmVmb3JlLCB0byBtZWV0IHRoZSBpbml0aWFsIHJlcXVpcmVtZW50LCB3ZSAqZGVmaW5pdGVseSogbmVlZCBgVklSVFVBTElaQVRJT05gLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlc2UgcmVzdWx0cy4gV2UmIzM5O3JlIGdldHRpbmcgc29tZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGZvciBLVk0gb24gUklTQy1WLCBtb2RpZnlpbmcgdGhlIEtWTSBNTVUgbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIHdvcmsgY29ycmVjdGx5IHdpdGhvdXQgaW50cm9kdWNpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGZvciBLVk0gb24gUklTQy1WLCBtb2RpZnlpbmcgdGhlIEtWTSBNTVUgbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIHdvcmsgY29ycmVjdGx5IHdpdGhvdXQgaW50cm9kdWNpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjIwLjAzNTY2MTY0MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NTE0MDI0NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2VcIixcbiAgICBcImt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZFwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGZvciBLVk0gb24gUklTQy1WLCBtb2RpZnlpbmcgdGhlIEtWTSBNTVUgbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIHdvcmsgY29ycmVjdGx5IHdpdGhvdXQgaW50cm9kdWNpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTY6MjM6MjAuMDM1Njc0ODIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjYyNjE0ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlZDljOTA1ZGE2YmJhNjJjMTdmYzQzN2E3Mzk2NWQzMmQyNDQwY2UyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTY6MjM6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbmluZGV4IGI1NDkzYTdmOGYyMjguLmQ3OGVkYTdlZTIzYTUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbkBAIC0zMDQ3LDcgKzMwNDcsNyBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXHRcXHRcXHREZWZhdWx0IGlzIDAgKGRvbid0IGlnbm9yZSwgYnV0IGluamVjdCAjR1ApXFxuIFxcbiBcXHRrdm0uZWFnZXJfcGFnZV9zcGxpdD1cXG4tXFx0XFx0XFx0W0tWTSxYODZdIENvbnRyb2xzIHdoZXRoZXIgb3Igbm90IEtWTSB3aWxsIHRyeSB0b1xcbitcXHRcXHRcXHRbS1ZNLFg4NixSSVNDVl0gQ29udHJvbHMgd2hldGhlciBvciBub3QgS1ZNIHdpbGwgdHJ5IHRvXFxuIFxcdFxcdFxcdHByb2FjdGl2ZWx5IHNwbGl0IGFsbCBodWdlIHBhZ2VzIGR1cmluZyBkaXJ0eSBsb2dnaW5nLlxcbiBcXHRcXHRcXHRFYWdlciBwYWdlIHNwbGl0dGluZyByZWR1Y2VzIGludGVycnVwdGlvbnMgdG8gdkNQVVxcbiBcXHRcXHRcXHRleGVjdXRpb24gYnkgZWxpbWluYXRpbmcgdGhlIHdyaXRlLXByb3RlY3Rpb24gZmF1bHRzXFxuQEAgLTMwNjcsNyArMzA2NywxMCBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXHRcXHRcXHR0aGUgS1ZNX0NMRUFSX0RJUlRZIGlvY3RsLCBhbmQgb25seSBmb3IgdGhlIHBhZ2VzIGJlaW5nXFxuIFxcdFxcdFxcdGNsZWFyZWQuXFxuIFxcbi1cXHRcXHRcXHRFYWdlciBwYWdlIHNwbGl0dGluZyBpcyBvbmx5IHN1cHBvcnRlZCB3aGVuIGt2bS50ZHBfbW11PVkuXFxuK1xcdFxcdFxcdE9uIHg4NiwgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgb25seSBzdXBwb3J0ZWQgd2hlblxcbitcXHRcXHRcXHRrdm0udGRwX21tdT1ZLlxcbitcXG4rXFx0XFx0XFx0T24gUklTQ1YsIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0LlxcbiBcXG4gXFx0XFx0XFx0RGVmYXVsdCBpcyBZIChvbikuXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oXFxuaW5kZXggMjFlMjAxOWRmMGNmNS4uZjcyNjI3OTc4MDE3NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oXFxuQEAgLTY0LDkgKzY0LDkgQEAgaW50IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG4gXFx0XFx0XFx0ICAgICAgYm9vbCBwYWdlX3Jkb25seSwgYm9vbCBwYWdlX2V4ZWMsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApO1xcbiBcXG4taW50IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcXG4tXFx0XFx0XFx0XFx0Z3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaCk7XFxuK2Jvb2wga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcXG4rXFx0XFx0XFx0XFx0IGdwYV90IGFkZHIsIHUzMiB0YXJnZXRfbGV2ZWwsIGJvb2wgZmx1c2gpO1xcbiBcXG4gZW51bSBrdm1fcmlzY3ZfZ3N0YWdlX29wIHtcXG4gXFx0R1NUQUdFX09QX05PUCA9IDAsXFx0LyogTm90aGluZyAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCBlMmQ1ODA4MTY5ZTQ0Li43MWU0NTVkMTY2OTA1IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC04Niw2ICs4Niw3IEBAIHN0cnVjdCBrdm1fYXJjaCB7XFxuIFxcdHBnZF90ICpwZ2Q7XFxuIFxcdHBoeXNfYWRkcl90IHBnZF9waHlzO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBnZF9sZXZlbHM7XFxuK1xcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBwZ2Rfc3BsaXRfcGFnZV9jYWNoZTtcXG4gXFxuIFxcdC8qIEd1ZXN0IFRpbWVyICovXFxuIFxcdHN0cnVjdCBrdm1fZ3Vlc3RfdGltZXIgdGltZXI7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcXG5pbmRleCBiMDQ3NGZjZjA2NWFhLi4wMTY3OWFlZjUzMjg5IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcXG5AQCAtMzA3LDE5ICszMDcsMjAgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1ha2VfY2hpbGRfcHRlKHVuc2lnbmVkIGxvbmcgaHVnZV9wdGUsIGludCBpbmRleCxcXG4gXFx0cmV0dXJuIGNoaWxkX3B0ZTtcXG4gfVxcbiBcXG4taW50IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcXG4tXFx0XFx0XFx0XFx0Z3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaClcXG4rYm9vbCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxcbitcXHRcXHRcXHRcXHQgZ3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaClcXG4ge1xcbiBcXHR1MzIgY3VycmVudF9sZXZlbCA9IGdzdGFnZS1cXHUwMDNlcGdkX2xldmVscyAtIDE7XFxuIFxcdHB0ZV90ICpuZXh0X3B0ZXAgPSAocHRlX3QgKilnc3RhZ2UtXFx1MDAzZXBnZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBodWdlX3B0ZSwgY2hpbGRfcHRlO1xcbiBcXHR1bnNpZ25lZCBsb25nIGNoaWxkX3BhZ2Vfc2l6ZTtcXG4rXFx0Ym9vbCBuZWVkX2ZsdXNoID0gZmFsc2U7XFxuIFxcdHB0ZV90ICpwdGVwO1xcbiBcXHRpbnQgaSwgcmV0O1xcbiBcXG4gXFx0aWYgKCFwY2FjaGUpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHR3aGlsZShjdXJyZW50X2xldmVsIFxcdTAwM2UgdGFyZ2V0X2xldmVsKSB7XFxuIFxcdFxcdHB0ZXAgPSAocHRlX3QgKilcXHUwMDI2bmV4dF9wdGVwW2dzdGFnZV9wdGVfaW5kZXgoZ3N0YWdlLCBhZGRyLCBjdXJyZW50X2xldmVsKV07XFxuQEAgLTMzNywyNyArMzM4LDM1IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG4gXFxuIFxcdFxcdHJldCA9IGdzdGFnZV9sZXZlbF90b19wYWdlX3NpemUoZ3N0YWdlLCBjdXJyZW50X2xldmVsIC0gMSwgXFx1MDAyNmNoaWxkX3BhZ2Vfc2l6ZSk7XFxuIFxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdHJldHVybiBuZWVkX2ZsdXNoO1xcbiBcXG4gXFx0XFx0bmV4dF9wdGVwID0ga3ZtX21tdV9tZW1vcnlfY2FjaGVfYWxsb2MocGNhY2hlKTtcXG4gXFx0XFx0aWYgKCFuZXh0X3B0ZXApXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRcXHRyZXR1cm4gbmVlZF9mbHVzaDtcXG4gXFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBQVFJTX1BFUl9QVEU7IGkrKykge1xcbiBcXHRcXHRcXHRjaGlsZF9wdGUgPSBtYWtlX2NoaWxkX3B0ZShodWdlX3B0ZSwgaSwgY2hpbGRfcGFnZV9zaXplKTtcXG4gXFx0XFx0XFx0c2V0X3B0ZSgocHRlX3QgKilcXHUwMDI2bmV4dF9wdGVwW2ldLCBfX3B0ZShjaGlsZF9wdGUpKTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRW5zdXJlIHRoZSB3cml0ZXMgdG8gdGhlIGNoaWxkIFBURXMgYXJlIHZpc2libGUgYmVmb3JlXFxuK1xcdFxcdCAqIGxpbmtpbmcgdGhlIG5ldyBwYWdlIHRhYmxlIHRvIHRoZSBwYXJlbnQgUFRFLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c21wX3dtYigpO1xcbitcXG4gXFx0XFx0c2V0X3B0ZShwdGVwLCBwZm5fcHRlKFBGTl9ET1dOKF9fcGEobmV4dF9wdGVwKSksXFxuIFxcdFxcdFxcdFxcdF9fcGdwcm90KF9QQUdFX1RBQkxFKSkpO1xcbiBcXG4gXFx0XFx0aWYgKGZsdXNoKVxcbiBcXHRcXHRcXHRnc3RhZ2VfdGxiX2ZsdXNoKGdzdGFnZSwgY3VycmVudF9sZXZlbCwgYWRkcik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bmVlZF9mbHVzaCA9IHRydWU7XFxuIFxcbiBcXHRcXHRjdXJyZW50X2xldmVsLS07XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gbmVlZF9mbHVzaDtcXG4gfVxcbiBcXG4gYm9vbCBrdm1fcmlzY3ZfZ3N0YWdlX29wX3B0ZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLCBncGFfdCBhZGRyLFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuaW5kZXggOGEwYWE1ZTBlMjE2ZS4uNDMxNDc1M2ZjNDdhOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuQEAgLTE2LDYgKzE2LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX25hY2wuaFxcdTAwM2VcXG4gXFxuK3N0YXRpYyBib29sIF9fcmVhZF9tb3N0bHkgZWFnZXJfcGFnZV9zcGxpdCA9IHRydWU7XFxuK21vZHVsZV9wYXJhbShlYWdlcl9wYWdlX3NwbGl0LCBib29sLCAwNjQ0KTtcXG4rXFxuIHN0YXRpYyB2b2lkIG1tdV93cF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTtcXG5AQCAtOTgsNiArMTAxLDYyIEBAIHZvaWQga3ZtX3Jpc2N2X21tdV9pb3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHNpemUpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBuZWVkX3RvcHVwX3NwbGl0X2NhY2hlc19vcl9yZXNjaGVkKHN0cnVjdCBrdm0gKmt2bSwgaW50IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqY2FjaGU7XFxuK1xcbitcXHRpZiAobmVlZF9yZXNjaGVkKCkgfHwgcndsb2NrX25lZWRicmVhayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jaykpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0Y2FjaGUgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlO1xcbitcXHRyZXR1cm4ga3ZtX21tdV9tZW1vcnlfY2FjaGVfbnJfZnJlZV9vYmplY3RzKGNhY2hlKSBcXHUwMDNjIGNvdW50O1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBtbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxcbitcXHRcXHRcXHRcXHQgcGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtICprdm0gPSBnc3RhZ2UtXFx1MDAzZWt2bTtcXG4rXFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlO1xcbitcXHRwaHlzX2FkZHJfdCBhZGRyID0gQUxJR05fRE9XTihzdGFydCwgUE1EX1NJWkUpO1xcbitcXHRwaHlzX2FkZHJfdCBsYXN0X2ZsdXNoX2dmbiA9IGFkZHIgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0aW50IGNvdW50ID0gZ3N0YWdlLVxcdTAwM2VwZ2RfbGV2ZWxzO1xcbitcXHRib29sIGZsdXNoID0gZmFsc2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4rXFxuK1xcdHdoaWxlIChhZGRyIFxcdTAwM2MgZW5kKSB7XFxuK1xcdFxcdGlmIChuZWVkX3RvcHVwX3NwbGl0X2NhY2hlc19vcl9yZXNjaGVkKGt2bSwgY291bnQpKSB7XFxuK1xcdFxcdFxcdGlmIChmbHVzaCkge1xcbitcXHRcXHRcXHRcXHRrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoa3ZtLCBsYXN0X2ZsdXNoX2dmbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAoYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSAtIGxhc3RfZmx1c2hfZ2ZuKTtcXG4rXFx0XFx0XFx0XFx0bGFzdF9mbHVzaF9nZm4gPSBhZGRyIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdFxcdFxcdFxcdGZsdXNoID0gZmFsc2U7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUocGNhY2hlLCBjb3VudCk7XFxuK1xcdFxcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0XFx0a3ZtX2VycihcXFwiRmFpbGVkIHRvIHRvdXAgc3BsaXQgcGFnZSBjYWNoZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHdyaXRlX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gZmx1c2g7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0d3JpdGVfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLnBnZClcXG4rXFx0XFx0XFx0cmV0dXJuIGZsdXNoO1xcbitcXG4rXFx0XFx0Zmx1c2ggfD0ga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKGdzdGFnZSwgcGNhY2hlLCBhZGRyLCAwLCBmYWxzZSk7XFxuK1xcbitcXHRcXHRhZGRyICs9IFBNRF9TSVpFO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmx1c2g7XFxuK31cXG4rXFxuIHZvaWQga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGdmbl90IGdmbl9vZmZzZXQsXFxuQEAgLTEwNywxNCArMTY2LDIwIEBAIHZvaWQga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cGh5c19hZGRyX3Qgc3RhcnQgPSAoYmFzZV9nZm4gKyAgX19mZnMobWFzaykpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIFxcdHBoeXNfYWRkcl90IGVuZCA9IChiYXNlX2dmbiArIF9fZmxzKG1hc2spICsgMSkgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVDtcXG4gXFx0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xcbi1cXHRib29sIGZsdXNoO1xcbiBcXG4gXFx0a3ZtX3Jpc2N2X2dzdGFnZV9pbml0KFxcdTAwMjZnc3RhZ2UsIGt2bSk7XFxuIFxcbi1cXHRmbHVzaCA9IGt2bV9yaXNjdl9nc3RhZ2Vfd3BfcmFuZ2UoXFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XFxuLVxcdGlmIChmbHVzaClcXG4tXFx0XFx0a3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKGt2bSwgc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIChlbmQgLSBzdGFydCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcdGt2bV9yaXNjdl9nc3RhZ2Vfd3BfcmFuZ2UoXFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XFxuK1xcbitcXHRpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSkge1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKGVhZ2VyX3BhZ2Vfc3BsaXQpKVxcbitcXHRcXHRcXHRtbXVfc3BsaXRfaHVnZV9wYWdlcyhcXHUwMDI2Z3N0YWdlLCBzdGFydCwgZW5kKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogcmVtb3RlIFRMQiBmbHVzaCBpcyBub3QgbmVlZGVkIGhlcmUgc2luY2UgY2FsbGVycyBvZlxcbitcXHQgKiBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoKSBhbHJlYWR5IGRvIGl0LlxcbitcXHQgKi9cXG4gfVxcbiBcXG4gdm9pZCBrdm1fYXJjaF9zeW5jX2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QpXFxuQEAgLTE1Miw2ICsyMTcsMjUgQEAgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBtbXVfc3BsaXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7XFxuK1xcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QgPSBpZF90b19tZW1zbG90KHNsb3RzLCBzbG90KTtcXG4rXFx0cGh5c19hZGRyX3Qgc3RhcnQgPSBtZW1zbG90LVxcdTAwM2ViYXNlX2dmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbitcXHRwaHlzX2FkZHJfdCBlbmQgPSAobWVtc2xvdC1cXHUwMDNlYmFzZV9nZm4gKyBtZW1zbG90LVxcdTAwM2VucGFnZXMpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuK1xcdHN0cnVjdCBrdm1fZ3N0YWdlIGdzdGFnZTtcXG4rXFx0Ym9vbCBmbHVzaDtcXG4rXFxuK1xcdGt2bV9yaXNjdl9nc3RhZ2VfaW5pdChcXHUwMDI2Z3N0YWdlLCBrdm0pO1xcbitcXG4rXFx0d3JpdGVfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcdGZsdXNoID0gbW11X3NwbGl0X2h1Z2VfcGFnZXMoXFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XFxuK1xcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcbitcXHRpZiAoZmx1c2gpXFxuK1xcdFxcdGt2bV9mbHVzaF9yZW1vdGVfdGxic19tZW1zbG90KGt2bSwgbWVtc2xvdCk7XFxuK31cXG4rXFxuIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXFxuIFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldyxcXG5AQCAtMTY1LDYgKzI0OSw5IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRtbXVfd3BfbWVtb3J5X3JlZ2lvbihrdm0sIG5ldy1cXHUwMDNlaWQpO1xcbitcXG4rXFx0XFx0aWYgKFJFQURfT05DRShlYWdlcl9wYWdlX3NwbGl0KSlcXG4rXFx0XFx0XFx0bW11X3NwbGl0X21lbW9yeV9yZWdpb24oa3ZtLCBuZXctXFx1MDAzZWlkKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC02NzcsNiArNzY0LDcgQEAgaW50IGt2bV9yaXNjdl9tbXVfYWxsb2NfcGdkKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLnBnZCA9IHBhZ2VfdG9fdmlydChwZ2RfcGFnZSk7XFxuIFxcdGt2bS1cXHUwMDNlYXJjaC5wZ2RfcGh5cyA9IHBhZ2VfdG9fcGh5cyhwZ2RfcGFnZSk7XFxuIFxcdGt2bS1cXHUwMDNlYXJjaC5wZ2RfbGV2ZWxzID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXhfcGdkX2xldmVscztcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlLmdmcF96ZXJvID0gX19HRlBfWkVSTztcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTcwNCw2ICs3OTIsOCBAQCB2b2lkIGt2bV9yaXNjdl9tbXVfZnJlZV9wZ2Qoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gXFx0aWYgKHBnZClcXG4gXFx0XFx0ZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwZ2QsIGdldF9vcmRlcihrdm1fcmlzY3ZfZ3N0YWdlX3BnZF9zaXplKSk7XFxuK1xcbitcXHRrdm1fbW11X2ZyZWVfbWVtb3J5X2NhY2hlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGUpO1xcbiB9XFxuIFxcbiB2b2lkIGt2bV9yaXNjdl9tbXVfdXBkYXRlX2hnYXRwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTY6MjM6MjAuNjYzMDMyNjM0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzM4ODY1ODc2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVFVBTElaQVRJT05cIixcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZVwiLFxuICAgIFwia3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgZWFnZXIgcGFnZSBzcGxpdHRpbmcgZm9yIEtWTSBvbiBSSVNDLVYsIG1vZGlmeWluZyB0aGUgS1ZNIE1NVSBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRpcnR5IGxvZ2dpbmcgd29yayBjb3JyZWN0bHkgd2l0aG91dCBpbnRyb2R1Y2luZyBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZDljOTA1ZGE2YmJhNjJjMTdmYzQzN2E3Mzk2NWQzMmQyNDQwY2UyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxNjoyMzoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbmluZGV4IGI1NDkzYTdmOGYyMjguLmQ3OGVkYTdlZTIzYTUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC0zMDQ3LDcgKzMwNDcsNyBAQCBLZXJuZWwgcGFyYW1ldGVyc1xuIFx0XHRcdERlZmF1bHQgaXMgMCAoZG9uJ3QgaWdub3JlLCBidXQgaW5qZWN0ICNHUClcbiBcbiBcdGt2bS5lYWdlcl9wYWdlX3NwbGl0PVxuLVx0XHRcdFtLVk0sWDg2XSBDb250cm9scyB3aGV0aGVyIG9yIG5vdCBLVk0gd2lsbCB0cnkgdG9cbitcdFx0XHRbS1ZNLFg4NixSSVNDVl0gQ29udHJvbHMgd2hldGhlciBvciBub3QgS1ZNIHdpbGwgdHJ5IHRvXG4gXHRcdFx0cHJvYWN0aXZlbHkgc3BsaXQgYWxsIGh1Z2UgcGFnZXMgZHVyaW5nIGRpcnR5IGxvZ2dpbmcuXG4gXHRcdFx0RWFnZXIgcGFnZSBzcGxpdHRpbmcgcmVkdWNlcyBpbnRlcnJ1cHRpb25zIHRvIHZDUFVcbiBcdFx0XHRleGVjdXRpb24gYnkgZWxpbWluYXRpbmcgdGhlIHdyaXRlLXByb3RlY3Rpb24gZmF1bHRzXG5AQCAtMzA2Nyw3ICszMDY3LDEwIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0dGhlIEtWTV9DTEVBUl9ESVJUWSBpb2N0bCwgYW5kIG9ubHkgZm9yIHRoZSBwYWdlcyBiZWluZ1xuIFx0XHRcdGNsZWFyZWQuXG4gXG4tXHRcdFx0RWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgb25seSBzdXBwb3J0ZWQgd2hlbiBrdm0udGRwX21tdT1ZLlxuK1x0XHRcdE9uIHg4NiwgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgb25seSBzdXBwb3J0ZWQgd2hlblxuK1x0XHRcdGt2bS50ZHBfbW11PVkuXG4rXG4rXHRcdFx0T24gUklTQ1YsIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0LlxuIFxuIFx0XHRcdERlZmF1bHQgaXMgWSAob24pLlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmhcbmluZGV4IDIxZTIwMTlkZjBjZjUuLmY3MjYyNzk3ODAxNzcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmhcbkBAIC02NCw5ICs2NCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXHRcdFx0ICAgICAgYm9vbCBwYWdlX3Jkb25seSwgYm9vbCBwYWdlX2V4ZWMsXG4gXHRcdFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcCk7XG4gXG4taW50IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuLVx0XHRcdFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG4tXHRcdFx0XHRncGFfdCBhZGRyLCB1MzIgdGFyZ2V0X2xldmVsLCBib29sIGZsdXNoKTtcbitib29sIGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuK1x0XHRcdFx0IHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxuK1x0XHRcdFx0IGdwYV90IGFkZHIsIHUzMiB0YXJnZXRfbGV2ZWwsIGJvb2wgZmx1c2gpO1xuIFxuIGVudW0ga3ZtX3Jpc2N2X2dzdGFnZV9vcCB7XG4gXHRHU1RBR0VfT1BfTk9QID0gMCxcdC8qIE5vdGhpbmcgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGUyZDU4MDgxNjllNDQuLjcxZTQ1NWQxNjY5MDUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTg2LDYgKzg2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdHBnZF90ICpwZ2Q7XG4gXHRwaHlzX2FkZHJfdCBwZ2RfcGh5cztcbiBcdHVuc2lnbmVkIGxvbmcgcGdkX2xldmVscztcbitcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBwZ2Rfc3BsaXRfcGFnZV9jYWNoZTtcbiBcbiBcdC8qIEd1ZXN0IFRpbWVyICovXG4gXHRzdHJ1Y3Qga3ZtX2d1ZXN0X3RpbWVyIHRpbWVyO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbmluZGV4IGIwNDc0ZmNmMDY1YWEuLjAxNjc5YWVmNTMyODkgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbkBAIC0zMDcsMTkgKzMwNywyMCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWFrZV9jaGlsZF9wdGUodW5zaWduZWQgbG9uZyBodWdlX3B0ZSwgaW50IGluZGV4LFxuIFx0cmV0dXJuIGNoaWxkX3B0ZTtcbiB9XG4gXG4taW50IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuLVx0XHRcdFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG4tXHRcdFx0XHRncGFfdCBhZGRyLCB1MzIgdGFyZ2V0X2xldmVsLCBib29sIGZsdXNoKVxuK2Jvb2wga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4rXHRcdFx0XHQgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG4rXHRcdFx0XHQgZ3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaClcbiB7XG4gXHR1MzIgY3VycmVudF9sZXZlbCA9IGdzdGFnZS1cdTAwM2VwZ2RfbGV2ZWxzIC0gMTtcbiBcdHB0ZV90ICpuZXh0X3B0ZXAgPSAocHRlX3QgKilnc3RhZ2UtXHUwMDNlcGdkO1xuIFx0dW5zaWduZWQgbG9uZyBodWdlX3B0ZSwgY2hpbGRfcHRlO1xuIFx0dW5zaWduZWQgbG9uZyBjaGlsZF9wYWdlX3NpemU7XG4rXHRib29sIG5lZWRfZmx1c2ggPSBmYWxzZTtcbiBcdHB0ZV90ICpwdGVwO1xuIFx0aW50IGksIHJldDtcbiBcbiBcdGlmICghcGNhY2hlKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0d2hpbGUoY3VycmVudF9sZXZlbCBcdTAwM2UgdGFyZ2V0X2xldmVsKSB7XG4gXHRcdHB0ZXAgPSAocHRlX3QgKilcdTAwMjZuZXh0X3B0ZXBbZ3N0YWdlX3B0ZV9pbmRleChnc3RhZ2UsIGFkZHIsIGN1cnJlbnRfbGV2ZWwpXTtcbkBAIC0zMzcsMjcgKzMzOCwzNSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXG4gXHRcdHJldCA9IGdzdGFnZV9sZXZlbF90b19wYWdlX3NpemUoZ3N0YWdlLCBjdXJyZW50X2xldmVsIC0gMSwgXHUwMDI2Y2hpbGRfcGFnZV9zaXplKTtcbiBcdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdHJldHVybiBuZWVkX2ZsdXNoO1xuIFxuIFx0XHRuZXh0X3B0ZXAgPSBrdm1fbW11X21lbW9yeV9jYWNoZV9hbGxvYyhwY2FjaGUpO1xuIFx0XHRpZiAoIW5leHRfcHRlcClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0XHRyZXR1cm4gbmVlZF9mbHVzaDtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUFRSU19QRVJfUFRFOyBpKyspIHtcbiBcdFx0XHRjaGlsZF9wdGUgPSBtYWtlX2NoaWxkX3B0ZShodWdlX3B0ZSwgaSwgY2hpbGRfcGFnZV9zaXplKTtcbiBcdFx0XHRzZXRfcHRlKChwdGVfdCAqKVx1MDAyNm5leHRfcHRlcFtpXSwgX19wdGUoY2hpbGRfcHRlKSk7XG4gXHRcdH1cbiBcbitcdFx0LypcbitcdFx0ICogRW5zdXJlIHRoZSB3cml0ZXMgdG8gdGhlIGNoaWxkIFBURXMgYXJlIHZpc2libGUgYmVmb3JlXG4rXHRcdCAqIGxpbmtpbmcgdGhlIG5ldyBwYWdlIHRhYmxlIHRvIHRoZSBwYXJlbnQgUFRFLlxuK1x0XHQgKi9cbitcdFx0c21wX3dtYigpO1xuK1xuIFx0XHRzZXRfcHRlKHB0ZXAsIHBmbl9wdGUoUEZOX0RPV04oX19wYShuZXh0X3B0ZXApKSxcbiBcdFx0XHRcdF9fcGdwcm90KF9QQUdFX1RBQkxFKSkpO1xuIFxuIFx0XHRpZiAoZmx1c2gpXG4gXHRcdFx0Z3N0YWdlX3RsYl9mbHVzaChnc3RhZ2UsIGN1cnJlbnRfbGV2ZWwsIGFkZHIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0bmVlZF9mbHVzaCA9IHRydWU7XG4gXG4gXHRcdGN1cnJlbnRfbGV2ZWwtLTtcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIG5lZWRfZmx1c2g7XG4gfVxuIFxuIGJvb2wga3ZtX3Jpc2N2X2dzdGFnZV9vcF9wdGUoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwgZ3BhX3QgYWRkcixcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG5pbmRleCA4YTBhYTVlMGUyMTZlLi40MzE0NzUzZmM0N2E4IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vbW11LmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG5AQCAtMTYsNiArMTYsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX25hY2wuaFx1MDAzZVxuIFxuK3N0YXRpYyBib29sIF9fcmVhZF9tb3N0bHkgZWFnZXJfcGFnZV9zcGxpdCA9IHRydWU7XG4rbW9kdWxlX3BhcmFtKGVhZ2VyX3BhZ2Vfc3BsaXQsIGJvb2wsIDA2NDQpO1xuK1xuIHN0YXRpYyB2b2lkIG1tdV93cF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTtcbkBAIC05OCw2ICsxMDEsNjIgQEAgdm9pZCBrdm1fcmlzY3ZfbW11X2lvdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiBcdFx0XHRcdFx0ICAgIHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBuZWVkX3RvcHVwX3NwbGl0X2NhY2hlc19vcl9yZXNjaGVkKHN0cnVjdCBrdm0gKmt2bSwgaW50IGNvdW50KVxuK3tcbitcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqY2FjaGU7XG4rXG4rXHRpZiAobmVlZF9yZXNjaGVkKCkgfHwgcndsb2NrX25lZWRicmVhayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGNhY2hlID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGU7XG4rXHRyZXR1cm4ga3ZtX21tdV9tZW1vcnlfY2FjaGVfbnJfZnJlZV9vYmplY3RzKGNhY2hlKSBcdTAwM2MgY291bnQ7XG4rfVxuK1xuK3N0YXRpYyBib29sIG1tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4rXHRcdFx0XHQgcGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZClcbit7XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSBnc3RhZ2UtXHUwMDNla3ZtO1xuK1x0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC5wZ2Rfc3BsaXRfcGFnZV9jYWNoZTtcbitcdHBoeXNfYWRkcl90IGFkZHIgPSBBTElHTl9ET1dOKHN0YXJ0LCBQTURfU0laRSk7XG4rXHRwaHlzX2FkZHJfdCBsYXN0X2ZsdXNoX2dmbiA9IGFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRpbnQgY291bnQgPSBnc3RhZ2UtXHUwMDNlcGdkX2xldmVscztcbitcdGJvb2wgZmx1c2ggPSBmYWxzZTtcbitcdGludCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHR3aGlsZSAoYWRkciBcdTAwM2MgZW5kKSB7XG4rXHRcdGlmIChuZWVkX3RvcHVwX3NwbGl0X2NhY2hlc19vcl9yZXNjaGVkKGt2bSwgY291bnQpKSB7XG4rXHRcdFx0aWYgKGZsdXNoKSB7XG4rXHRcdFx0XHRrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoa3ZtLCBsYXN0X2ZsdXNoX2dmbixcbitcdFx0XHRcdFx0ICAoYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgLSBsYXN0X2ZsdXNoX2dmbik7XG4rXHRcdFx0XHRsYXN0X2ZsdXNoX2dmbiA9IGFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRcdFx0XHRmbHVzaCA9IGZhbHNlO1xuK1x0XHRcdH1cbitcbitcdFx0XHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbitcbitcdFx0XHRyZXQgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShwY2FjaGUsIGNvdW50KTtcbitcdFx0XHRpZiAocmV0KSB7XG4rXHRcdFx0XHRrdm1fZXJyKFwiRmFpbGVkIHRvIHRvdXAgc3BsaXQgcGFnZSBjYWNoZVxcblwiKTtcbitcdFx0XHRcdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdFx0XHRcdHJldHVybiBmbHVzaDtcbitcdFx0XHR9XG4rXHRcdFx0d3JpdGVfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1x0XHR9XG4rXG4rXHRcdGlmICgha3ZtLVx1MDAzZWFyY2gucGdkKVxuK1x0XHRcdHJldHVybiBmbHVzaDtcbitcbitcdFx0Zmx1c2ggfD0ga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKGdzdGFnZSwgcGNhY2hlLCBhZGRyLCAwLCBmYWxzZSk7XG4rXG4rXHRcdGFkZHIgKz0gUE1EX1NJWkU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmx1c2g7XG4rfVxuK1xuIHZvaWQga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0XHRcdFx0XHQgICAgIGdmbl90IGdmbl9vZmZzZXQsXG5AQCAtMTA3LDE0ICsxNjYsMjAgQEAgdm9pZCBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoc3RydWN0IGt2bSAqa3ZtLFxuIFx0cGh5c19hZGRyX3Qgc3RhcnQgPSAoYmFzZV9nZm4gKyAgX19mZnMobWFzaykpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIFx0cGh5c19hZGRyX3QgZW5kID0gKGJhc2VfZ2ZuICsgX19mbHMobWFzaykgKyAxKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcdHN0cnVjdCBrdm1fZ3N0YWdlIGdzdGFnZTtcbi1cdGJvb2wgZmx1c2g7XG4gXG4gXHRrdm1fcmlzY3ZfZ3N0YWdlX2luaXQoXHUwMDI2Z3N0YWdlLCBrdm0pO1xuIFxuLVx0Zmx1c2ggPSBrdm1fcmlzY3ZfZ3N0YWdlX3dwX3JhbmdlKFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAoZmx1c2gpXG4tXHRcdGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShrdm0sIHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuLVx0XHRcdFx0XHQgICAgKGVuZCAtIHN0YXJ0KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXHRrdm1fcmlzY3ZfZ3N0YWdlX3dwX3JhbmdlKFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XG4rXG4rXHRpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSkge1xuK1x0XHRpZiAoUkVBRF9PTkNFKGVhZ2VyX3BhZ2Vfc3BsaXQpKVxuK1x0XHRcdG1tdV9zcGxpdF9odWdlX3BhZ2VzKFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogcmVtb3RlIFRMQiBmbHVzaCBpcyBub3QgbmVlZGVkIGhlcmUgc2luY2UgY2FsbGVycyBvZlxuK1x0ICoga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKCkgYWxyZWFkeSBkbyBpdC5cbitcdCAqL1xuIH1cbiBcbiB2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcbkBAIC0xNTIsNiArMjE3LDI1IEBAIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0XHQgICAgc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG1tdV9zcGxpdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpXG4re1xuK1x0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTtcbitcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QgPSBpZF90b19tZW1zbG90KHNsb3RzLCBzbG90KTtcbitcdHBoeXNfYWRkcl90IHN0YXJ0ID0gbWVtc2xvdC1cdTAwM2ViYXNlX2dmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbitcdHBoeXNfYWRkcl90IGVuZCA9IChtZW1zbG90LVx1MDAzZWJhc2VfZ2ZuICsgbWVtc2xvdC1cdTAwM2VucGFnZXMpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuK1x0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xuK1x0Ym9vbCBmbHVzaDtcbitcbitcdGt2bV9yaXNjdl9nc3RhZ2VfaW5pdChcdTAwMjZnc3RhZ2UsIGt2bSk7XG4rXG4rXHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXHRmbHVzaCA9IG1tdV9zcGxpdF9odWdlX3BhZ2VzKFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XG4rXHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcbitcdGlmIChmbHVzaClcbitcdFx0a3ZtX2ZsdXNoX3JlbW90ZV90bGJzX21lbXNsb3Qoa3ZtLCBtZW1zbG90KTtcbit9XG4rXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG5AQCAtMTY1LDYgKzI0OSw5IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSlcbiBcdFx0XHRyZXR1cm47XG4gXHRcdG1tdV93cF9tZW1vcnlfcmVnaW9uKGt2bSwgbmV3LVx1MDAzZWlkKTtcbitcbitcdFx0aWYgKFJFQURfT05DRShlYWdlcl9wYWdlX3NwbGl0KSlcbitcdFx0XHRtbXVfc3BsaXRfbWVtb3J5X3JlZ2lvbihrdm0sIG5ldy1cdTAwM2VpZCk7XG4gXHR9XG4gfVxuIFxuQEAgLTY3Nyw2ICs3NjQsNyBAQCBpbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtLVx1MDAzZWFyY2gucGdkID0gcGFnZV90b192aXJ0KHBnZF9wYWdlKTtcbiBcdGt2bS1cdTAwM2VhcmNoLnBnZF9waHlzID0gcGFnZV90b19waHlzKHBnZF9wYWdlKTtcbiBcdGt2bS1cdTAwM2VhcmNoLnBnZF9sZXZlbHMgPSBrdm1fcmlzY3ZfZ3N0YWdlX21heF9wZ2RfbGV2ZWxzO1xuK1x0a3ZtLVx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGUuZ2ZwX3plcm8gPSBfX0dGUF9aRVJPO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTcwNCw2ICs3OTIsOCBAQCB2b2lkIGt2bV9yaXNjdl9tbXVfZnJlZV9wZ2Qoc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0aWYgKHBnZClcbiBcdFx0ZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwZ2QsIGdldF9vcmRlcihrdm1fcmlzY3ZfZ3N0YWdlX3BnZF9zaXplKSk7XG4rXG4rXHRrdm1fbW11X2ZyZWVfbWVtb3J5X2NhY2hlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlKTtcbiB9XG4gXG4gdm9pZCBrdm1fcmlzY3ZfbW11X3VwZGF0ZV9oZ2F0cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzoyMC42NjMwMzUzNDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODc2MjAxNDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRWFnZXIgUGFnZSBTcGxpdHRpbmcgUGF0Y2ggZm9yIFJJU0MtViBLVk0qKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgbmV3IHBhdGNoIG91dCB0aGVyZSwgaW1wbGVtZW50aW5nIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGZvciBLVk0gb24gUklTQy1WLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gSXQncyB0b3VjaGluZyBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgIGFuZCBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIFJJU0MtViBLVk0gaW1wbGVtZW50YXRpb24uICpUaGF0J3MgcHJvbWlzaW5nIGZvciBmdXp6aW5nIC0gYSBkZWZpbml0ZSBcInllcy5cIipcblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGFuZCBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBhbHRlcmVkLiBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZWAgYW5kIGBtbXVfc3BsaXRfaHVnZV9wYWdlc2AsIGFsb25nc2lkZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBrdm0uZWFnZXJfcGFnZV9zcGxpdGAgYXMgYSBSSVNDLVYgc3BlY2lmaWMgcGFyYW1ldGVyLiBGdW5jdGlvbiBga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlYCByZXR1cm4gdHlwZSBpcyBjaGFuZ2VkIHRvIGJvb2wuIE1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgdG8gYGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZGAgYW5kIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAuIENoYW5nZXMgYXJlIGFsc28gbWFkZSB0byB0aGUgUEdEIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBmdW5jdGlvbnM6IGBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZGAgYW5kIGBrdm1fcmlzY3ZfbW11X2ZyZWVfcGdkYC4gVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBNTVUncyBiZWhhdmlvci4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZSBsb29rIGF0IGJvdGggYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCBhbmQgYGFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzoyNi41MzkyNDIwMDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NTU0OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM9MjA3PWludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yNzgtXFx0XFx0aWYgKHB0ZXBfbGV2ZWwgXFx1MDAzZSBvdXRfbWFwLVxcdTAwM2VsZXZlbCkge1xcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jOjI3OTpcXHRcXHRcXHRrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2UoZ3N0YWdlLCBwY2FjaGUsIGdwYSxcXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yODAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG91dF9tYXAtXFx1MDAzZWxldmVsLCB0cnVlKTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jPTI5Mz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWFrZV9jaGlsZF9wdGUodW5zaWduZWQgbG9uZyBodWdlX3B0ZSwgaW50IGluZGV4LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMzA5LVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jOjMxMDpib29sIGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTMxMS1cXHRcXHRcXHRcXHQgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz0xMTU9c3RhdGljIGJvb2wgbW11X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTE1MS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzoxNTI6XFx0XFx0Zmx1c2ggfD0ga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKGdzdGFnZSwgcGNhY2hlLCBhZGRyLCAwLCBmYWxzZSk7XFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMTUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzoyNi42NTQ4MDc1MThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjcyNTE0MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBSSVNDLVYgS1ZNIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgUklTQy1WIEtWTSBjb2RlIGFuZCBtYWtpbmcgc29tZSBpbml0aWFsIG9ic2VydmF0aW9ucy4gSSdtIHNlZWluZyB0aGF0IGBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2VgLCBga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGt2bV9yaXNjdl9tbXVfYWxsb2NfcGdkYCwgYW5kIGBrdm1fcmlzY3ZfbW11X2ZyZWVfcGdkYCBhcmUgYWxsIGV4cG9ydGVkIOKAkyB0aGF0IGlzLCB0aGV5J3JlIG5vbi1zdGF0aWMuIFRoaXMgbWVhbnMgdGhleSdyZSBsaWtlbHkgZGVzaWduZWQgZm9yIHVzZSBvdXRzaWRlIG9mIHRoZWlyIGltbWVkaWF0ZSBjb21waWxhdGlvbiB1bml0LCB3aGljaCB0ZWxscyBtZSB0aGV5J3JlIGtleSBpbnRlcmZhY2VzIG9yIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGltcGxlbWVudGF0aW9uLCBvciBwb3RlbnRpYWxseSBldmVuIG90aGVyIG1vZHVsZXMsIHdvdWxkIG5lZWQgYWNjZXNzIHRvLiBUaGlzIGlzIGltcG9ydGFudCBjb250ZXh0LlxuXG5OZXh0IHN0ZXA6IEkgc2hvdWxkIHZlcmlmeSB0aGlzIGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBLVk0gc3VwcG9ydCBvbiBSSVNDLVYuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIEtWTSBjb25maWd1cmF0aW9uIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBtaWdodCBiZSBhdCBwbGF5LiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGV54oCZcmUgZW5hYmxlZC9kaXNhYmxlZCBiYXNlZCBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg2NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzozMC45MjczMjQ5MjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NzU0OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjMxLjA2NTA4Njk5OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjc1NjE0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3k6IEtWTSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBLVk1gIOKAkyB0aGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIGVsZW1lbnQgd2UncmUgZGVhbGluZyB3aXRoLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBzdXJmYWNlcyBpczogd2hhdCBkb2VzIHRoaXMgZGVwZW5kIG9uPyBXaGF0IGFyZSBpdHMgcHJlcmVxdWlzaXRlcz8gSXMgaXQgc2VsZi1jb250YWluZWQsIG9yIGFyZSB0aGVyZSB1bmRlcmx5aW5nIGxpYnJhcmllcywgaGFyZHdhcmUgZmVhdHVyZXMsIG9yIGtlcm5lbCBtb2R1bGVzIHRoYXQgKm11c3QqIGJlIHByZXNlbnQgYW5kIGNvcnJlY3RseSBjb25maWd1cmVkIGZvciBgS1ZNYCB0byBmdW5jdGlvbiBhcyBleHBlY3RlZD8gSXMgdGhlcmUgYSBrbm93biBtaW5pbXVtIG9yIGNvbXBhdGlibGUgdmVyc2lvbiB0byBjb25zaWRlciwgc3VjaCBhcyBrZXJuZWwgdmVyc2lvbiBvciBRRU1VIHZlcnNpb24/IFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIHdpbGwgYmUgY3JpdGljYWwgZm9yIGFueSB0cm91Ymxlc2hvb3Rpbmcgb3IgbW9kaWZpY2F0aW9uIGVmZm9ydHMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzozNC4xMzI2NTE4NTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MjA4MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMjpcXHRkZXBlbmRzIG9uIFJJU0NWX1NCSSBcXHUwMDI2XFx1MDAyNiBNTVVcXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIzLVxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjM0LjMzOTg2NzE1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODE4OTMzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLVk0gRnVuY3Rpb24gSWRlbnRpZmljYXRpb24gUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBpdCdzIGxvb2tpbmcgbGlrZSBgS1ZNYCBpcyB0aGUgY3J1Y2lhbCBwaWVjZSBoZXJlLiBOb3cgSSBuZWVkIHRvIG5haWwgZG93biB0aGUgKmV4YWN0KiBmdW5jdGlvbiBuYW1lcyBJJ2xsIGJlIHdvcmtpbmcgd2l0aC4gSSBjYW4ndCBhZmZvcmQgYW55IGFtYmlndWl0eSBvciByZWxpYW5jZSBvbiBmdXp6eSByZWNhbGwuIE15IG5leHQgc3RlcCBpcyB0byBtZXRpY3Vsb3VzbHkgaWRlbnRpZnkgZWFjaCBuZWNlc3NhcnkgZnVuY3Rpb24sIGVuc3VyaW5nIEknbSByZWZlcmVuY2luZyB0aGUgcHJlY2lzZSBpbnRlcmZhY2UgSSdtIHRhcmdldGluZy4gTm8gcm9vbSBmb3IgZ3Vlc3N3b3JrLCBqdXN0IHByZWNpc2UgZnVuY3Rpb24gbmFtZXMuIExldCdzIGRpZyBpbiBhbmQgZ2V0IHRoZSByaWdodCBzeW50YXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTcsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzozNy4zMjE3NjQzNTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MTkzOTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuYz0xMTU9c3RhdGljIGJvb2wgbW11X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTE1OS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzoxNjA6dm9pZCBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTE2MS1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy0xODAtXFx0ICogcmVtb3RlIFRMQiBmbHVzaCBpcyBub3QgbmVlZGVkIGhlcmUgc2luY2UgY2FsbGVycyBvZlxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjE4MTpcXHQgKiBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoKSBhbHJlYWR5IGRvIGl0LlxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTE4Mi1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTY6MjM6MzcuNDE5MDEzNDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNDMzODIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzLiBXaGVuIEkgc2VlIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIG15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgYXJjaGl0ZWN0dXJhbCBzcGVjaWZpY3Mgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBLVk0gaHlwZXJ2aXNvci4gTXkgZmlyc3QgdGhvdWdodCBpczogdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLiBJdCdzIHRoZSBwb2ludCB3aGVyZSBjaGFuZ2VzIHRvIHRoZSBndWVzdCdzIG1lbW9yeSBtYXAgYXJlICphY3R1YWxseSogbWFkZSBwZXJtYW5lbnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGZpbmFsIHZhbGlkYXRpb24gYW5kIGFwcGxpY2F0aW9uIG9mIG1lbW9yeSByZWdpb24gY2hhbmdlcywgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBUTEIgaW52YWxpZGF0aW9ucywgcGFnZSB0YWJsZSB1cGRhdGVzLCBhbmQgYWxsIHRoZSBhc3NvY2lhdGVkIGhhcmR3YXJlIHN5bmNocm9uaXphdGlvbi5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLiBIb3cgZWZmaWNpZW50bHkgaXMgdGhpcyBpbXBsZW1lbnRlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaGVyZT8gSXMgdGhlIGRlc2lnbiBvcHRpbWl6ZWQgZm9yIG1pbmltYWwgbGF0ZW5jeSwgZXNwZWNpYWxseSBkdXJpbmcgbGl2ZSBtaWdyYXRpb24gb3IgVk0gY3JlYXRpb24/IFRoZSBjb250ZXh0IGFyb3VuZCBpdCBtYXR0ZXJzIC0gd2hhdOKAmXMgdGhlIGNhbGxpbmcgcGF0aD8gSXMgaXQgY2FsbGVkIGZyZXF1ZW50bHk/IEluZnJlcXVlbnRseT8gV2hhdCBhcmUgdGhlIGNvbW1vbiBzY2VuYXJpb3MgdGhhdCB0cmlnZ2VyIGl0P1xuXG5J4oCZbSBhbHNvIHdvbmRlcmluZyBhYm91dCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGludm9sdmVkLiBXaGF0IGtpbmQgb2Ygc3BpbmxvY2tzLCBtdXRleGVzLCBvciBSQ1Ugc3RydWN0dXJlcyBhcmUgdXNlZCB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIHN0cnVjdHVyZXM/IEFyZSB0aGV5IGVmZmVjdGl2ZT8gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgY29udGVudGlvbiwgZGVhZGxvY2tzLCBvciBsaXZlbG9ja3M/IEhvdyBkb2VzIHRoZSBjb2RlIGhhbmRsZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyAoeDg2LCBBUk0sIGV0Yy4pIGluIHRoaXMgZnVuY3Rpb24/IFRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbG9naWMgd2l0aGluIHRoaXMgZnVuY3Rpb24gaXMgb2Z0ZW4gd2hlcmUgc3VidGxlLCBoYXJkLXRvLWRlYnVnIGlzc3VlcyBhcmlzZS5cblxuU2VjdXJpdHkgaXMgYW5vdGhlciBpbW1lZGlhdGUgY29uY2Vybi4gV2hhdCBjaGVja3MgYXJlIGluIHBsYWNlIHRvIHByZXZlbnQgbWVtb3J5IGNvcnJ1cHRpb24gb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24/IEFyZSB0aGVyZSByb2J1c3QgYm91bmRzIGNoZWNrcyBhbmQgdmFsaWRhdGlvbiBvZiB0aGUgcmVnaW9uIHBhcmFtZXRlcnM/IFRoaXMgaXMgYSBoaWdoLXByaXZpbGVnZSBmdW5jdGlvbiwgc28gdnVsbmVyYWJpbGl0aWVzIGhlcmUgY291bGQgYmUgY2F0YXN0cm9waGljLiBJJ20gbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHBvdGVudGlhbCBUT0NUT1UgKFRpbWUtb2YtQ2hlY2stdG8tVGltZS1vZi1Vc2UpIHZ1bG5lcmFiaWxpdGllcyBvciBvdGhlciBzZWN1cml0eSBpc3N1ZXMgaW4gdGhlIG1lbW9yeSByZWdpb24gY29tbWl0LiBXaGF0IHR5cGUgb2YgaXNvbGF0aW9uIGd1YXJhbnRlZXMgYXJlIGJlaW5nIG1hZGUgZm9yIHRoZSBndWVzdD9cblxuRmluYWxseSwgSeKAmW0gbWVudGFsbHkgY2hhcnRpbmcgdGhlIGludGVyYWN0aW9uIG9mIHRoaXMgZnVuY3Rpb24gd2l0aCBvdGhlciBLVk0gc3Vic3lzdGVtcy4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgTU1VIGVtdWxhdGlvbiwgdGhlIHZpcnR1YWxpemVkIGludGVycnVwdCBjb250cm9sbGVyLCBhbmQgdGhlIGRldmljZSBlbXVsYXRpb24gbGF5ZXJzPyBJdCBoYXMgdG8gaW50ZWdyYXRlIHdpdGggYWxsIG9mIHRoZW0gdG8gb3BlcmF0ZSBwcm9wZXJseS4gSXQgaXMgdGhlIGNvcmUgb2YgbWVtb3J5LXJlbGF0ZWQgb3BlcmF0aW9ucy4gSXQgaXMgbGlrZWx5IGNhbGxlZCBmcm9tIG1hbnkgc3Vic3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEzNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjQyLjE0MzM1NjY0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzcyOTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL21tdS5jPTIyMD1zdGF0aWMgdm9pZCBtbXVfc3BsaXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMjM4LVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjIzOTp2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy0yNDAtXFx0XFx0XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzo0Mi4yNzA3Mzc2NjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMTM3MDQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUklTQy1WIFBhZ2UgU3BsaXR0aW5nIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIHdpdGhpbiBLVk0gb24gUklTQy1WLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBLVk0gTU1VIGxvZ2ljLiBCYXNlZCBvbiB0aGUgc3ltYm9scyBsaXN0ZWQsIHRoZSBrZXkgYXJlYXMgYWZmZWN0ZWQgYXJlIGBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2VgLCBga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkYCwgYW5kIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzIHdpdGggTU1VIGNoYW5nZXMsIGlzIG1lbW9yeSBzYWZldHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgZWFnZXIgc3BsaXR0aW5nIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgb3IsIGV2ZW4gd29yc2UsIGNhdXNlIGtlcm5lbCBjcmFzaGVzLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBjb250ZXh0cyBvZiBkaXJ0eSBsb2dnaW5nLiBGdXp6aW5nIGlzIHRoZSBvYnZpb3VzIG5leHQgc3RlcCwgYWJzb2x1dGVseSBjcml0aWNhbCwgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBuZXcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRpcnR5IGxvZ2dpbmcgYmVoYXZpb3JzLiBJJ2xsIG5lZWQgdG8gZGV2ZWxvcCBmdXp6aW5nIGhhcm5lc3NlcyB0YWlsb3JlZCB0byB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMuXG5cbk5vdywgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgS1ZNYCBpcywgb2YgY291cnNlLCBhIGdpdmVuLiBJJ2xsIGNvbmZpcm0gdGhhdCBgUklTQ1ZfU0JJYCBhbmQgYE1NVWAgYXJlIHByZXNlbnQsIHdoaWNoIGFyZSBwcmV0dHkgbXVjaCBzdGFuZGFyZCBvbiBhbnkgUklTQy1WIEtWTSBzZXR1cC4gSSdsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGF0IGBWSVJUVUFMSVpBVElPTmAgaXMgY29ycmVjdGx5IGRlZmluZWQgYXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBLVk1gLCBlc3BlY2lhbGx5IHdpdGhpbiBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AgdG8gZW5zdXJlIG5vIGJ1aWxkIGlzc3VlcyBhcmlzZS4gTXkgZ29hbCBpcyB0byBlbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgaXMgY29ycmVjdCBhbmQgY29tcGxldGUgZm9yIHByb3BlciB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODEwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjQ2LjkwMjExMTQ5MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNzE5MTU0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVFVBTElaQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzo0Ny4wMDI4NDY1NjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxMDY1NDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipLY29uZmlnIFJldmlldyAtIFJJU0MtViBLVk0qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHJldmlzaXQgYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgLiBJJ3ZlIGJlZW4gb3ZlciBpdCBiZWZvcmUsIGJ1dCBnaXZlbiB0aGUgcmVjZW50IGRpc2N1c3Npb25zIGFuZCBkZXZlbG9wbWVudHMgaW4gUklTQy1WIEtWTSwgaXQncyBwcnVkZW50IHRvIGdpdmUgaXQgYW5vdGhlciwgZm9jdXNlZCBsb29rLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RpbGwgc291bmQsIHByb3Blcmx5IHBsYWNlZCwgYW5kIHJlZmxlY3RpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFyY2hpdGVjdHVyZSBzdXBwb3J0LiBBcmUgdGhlcmUgYW55IG5ldyBkZXBlbmRlbmNpZXMgSSBtaXNzZWQ/IEhhdmUgYW55IGV4aXN0aW5nIG9wdGlvbnMgYmVjb21lIG9ic29sZXRlIG9yIHJlcXVpcmUgcmVmaW5lbWVudD8gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyByZWNlbnQgcGF0Y2hlcyBoYXZlIGltcGFjdGVkIHRoZSBleGlzdGluZyBvcHRpb25zIGFuZCBpZiB0aGVyZSBhcmUgYW55IG5ldyBvcHBvcnR1bml0aWVzIHRvIGltcHJvdmUgdGhlIHVzZXIgZXhwZXJpZW5jZSB3aXRoIG5ldyBvcHRpb25zLiBBIHRob3JvdWdoIGNoZWNrIGlzIGVzc2VudGlhbCB0byBtYWludGFpbiB0aGUgaW50ZWdyaXR5IGFuZCB1c2FiaWxpdHkgb2Ygb3VyIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGZvciB0aGUgUklTQy1WIEtWTSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM2OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjUwLjAxMzUwNTYzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyODc4OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWc9Nj1zb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy03LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy05LVxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzo1MC4wOTg4MDAyNTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNzU0NDg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqVmlydHVhbGl6YXRpb24gQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIHJlcXVpcmVtZW50IGlzIGNsZWFyOiB3ZSBhYnNvbHV0ZWx5IG5lZWQgYFZJUlRVQUxJWkFUSU9OYC4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBpcyBhYm91dCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBLVk1gIGFsb25lIHdpbGwgc3VmZmljZSwgb3IgaWYgdGhlcmUgYXJlIGFkZGl0aW9uYWwgdmlydHVhbGl6YXRpb24gY29tcG9uZW50cyBuZWNlc3NhcnkuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgS1ZNYCBpcyBvZnRlbiBzeW5vbnltb3VzIHdpdGggYSB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXR5LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIExldCBtZSBjbGFyaWZ5IC0gYEtWTWAgaXMgbmVzdGVkICp3aXRoaW4qIGBWSVJUVUFMSVpBVElPTmAsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gVGhpcyBtZWFucyB0aGF0IHNpbXBseSBlbmFibGluZyBgS1ZNYCBpcyBub3QgYXV0b21hdGljYWxseSBlbmFibGluZyBgVklSVFVBTElaQVRJT05gLiBUaGVyZWZvcmUsIHRvIG1lZXQgdGhlIGluaXRpYWwgcmVxdWlyZW1lbnQsIHdlICpkZWZpbml0ZWx5KiBuZWVkIGBWSVJUVUFMSVpBVElPTmAuIE5vdywgbGV0J3MgbmFpbCBkb3duIHRoZXNlIHJlc3VsdHMuIFdlJ3JlIGdldHRpbmcgc29tZXdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg4LCJPdXRwdXRUb2tlbnMiOjEzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjU0LjMwNjM0OTA2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzI2NDE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVFVBTElaQVRJT05cIixcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZVwiLFxuICAgIFwia3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgZWFnZXIgcGFnZSBzcGxpdHRpbmcgZm9yIEtWTSBvbiBSSVNDLVYsIG1vZGlmeWluZyB0aGUgS1ZNIE1NVSBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRpcnR5IGxvZ2dpbmcgd29yayBjb3JyZWN0bHkgd2l0aG91dCBpbnRyb2R1Y2luZyBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2VcIixcbiAgICBcImt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZFwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGZvciBLVk0gb24gUklTQy1WLCBtb2RpZnlpbmcgdGhlIEtWTSBNTVUgbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIHdvcmsgY29ycmVjdGx5IHdpdGhvdXQgaW50cm9kdWNpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow865sk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 16:02:42 +0000 UTC FinishedAt: 2026-08-01 16:23:56 +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": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTUALIZATION", "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "7d3aae206663c4e006b25a1c7a20a4029e67da76", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VIRTUALIZATION", "KVM" ], "series_id": "92ef5cd8-346a-4465-9b4e-4f8692ebb892" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_riscv_gstage_split_huge", "kvm_arch_mmu_enable_log_dirty_pt_masked", "kvm_arch_commit_memory_region" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBlYWdlciBwYWdlIHNwbGl0dGluZyBmb3IgS1ZNIG9uIFJJU0MtViwgbW9kaWZ5aW5nIHRoZSBLVk0gTU1VIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGlydHkgbG9nZ2luZyB3b3JrIGNvcnJlY3RseSB3aXRob3V0IGludHJvZHVjaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIGNyYXNoZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MjM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlZDljOTA1ZGE2YmJhNjJjMTdmYzQzN2E3Mzk2NWQzMmQyNDQwY2UyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxNjoyMzoxOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5pbmRleCBiNTQ5M2E3ZjhmMjI4Li5kNzhlZGE3ZWUyM2E1IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0XG5AQCAtMzA0Nyw3ICYjNDM7MzA0Nyw3IEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0RGVmYXVsdCBpcyAwIChkb24mIzM5O3QgaWdub3JlLCBidXQgaW5qZWN0ICNHUClcbiBcbiBcdGt2bS5lYWdlcl9wYWdlX3NwbGl0PVxuLVx0XHRcdFtLVk0sWDg2XSBDb250cm9scyB3aGV0aGVyIG9yIG5vdCBLVk0gd2lsbCB0cnkgdG9cbiYjNDM7XHRcdFx0W0tWTSxYODYsUklTQ1ZdIENvbnRyb2xzIHdoZXRoZXIgb3Igbm90IEtWTSB3aWxsIHRyeSB0b1xuIFx0XHRcdHByb2FjdGl2ZWx5IHNwbGl0IGFsbCBodWdlIHBhZ2VzIGR1cmluZyBkaXJ0eSBsb2dnaW5nLlxuIFx0XHRcdEVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIHJlZHVjZXMgaW50ZXJydXB0aW9ucyB0byB2Q1BVXG4gXHRcdFx0ZXhlY3V0aW9uIGJ5IGVsaW1pbmF0aW5nIHRoZSB3cml0ZS1wcm90ZWN0aW9uIGZhdWx0c1xuQEAgLTMwNjcsNyAmIzQzOzMwNjcsMTAgQEAgS2VybmVsIHBhcmFtZXRlcnNcbiBcdFx0XHR0aGUgS1ZNX0NMRUFSX0RJUlRZIGlvY3RsLCBhbmQgb25seSBmb3IgdGhlIHBhZ2VzIGJlaW5nXG4gXHRcdFx0Y2xlYXJlZC5cbiBcbi1cdFx0XHRFYWdlciBwYWdlIHNwbGl0dGluZyBpcyBvbmx5IHN1cHBvcnRlZCB3aGVuIGt2bS50ZHBfbW11PVkuXG4mIzQzO1x0XHRcdE9uIHg4NiwgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgb25seSBzdXBwb3J0ZWQgd2hlblxuJiM0MztcdFx0XHRrdm0udGRwX21tdT1ZLlxuJiM0MztcbiYjNDM7XHRcdFx0T24gUklTQ1YsIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0LlxuIFxuIFx0XHRcdERlZmF1bHQgaXMgWSAob24pLlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmhcbmluZGV4IDIxZTIwMTlkZjBjZjUuLmY3MjYyNzk3ODAxNzcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmhcbkBAIC02NCw5ICYjNDM7NjQsOSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9tYXBfcGFnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuIFx0XHRcdCAgICAgIGJvb2wgcGFnZV9yZG9ubHksIGJvb2wgcGFnZV9leGVjLFxuIFx0XHRcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApO1xuIFxuLWludCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbi1cdFx0XHRcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxuLVx0XHRcdFx0Z3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaCk7XG4mIzQzO2Jvb2wga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxuJiM0MztcdFx0XHRcdCBncGFfdCBhZGRyLCB1MzIgdGFyZ2V0X2xldmVsLCBib29sIGZsdXNoKTtcbiBcbiBlbnVtIGt2bV9yaXNjdl9nc3RhZ2Vfb3Age1xuIFx0R1NUQUdFX09QX05PUCA9IDAsXHQvKiBOb3RoaW5nICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBlMmQ1ODA4MTY5ZTQ0Li43MWU0NTVkMTY2OTA1IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC04Niw2ICYjNDM7ODYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2gge1xuIFx0cGdkX3QgKnBnZDtcbiBcdHBoeXNfYWRkcl90IHBnZF9waHlzO1xuIFx0dW5zaWduZWQgbG9uZyBwZ2RfbGV2ZWxzO1xuJiM0MztcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBwZ2Rfc3BsaXRfcGFnZV9jYWNoZTtcbiBcbiBcdC8qIEd1ZXN0IFRpbWVyICovXG4gXHRzdHJ1Y3Qga3ZtX2d1ZXN0X3RpbWVyIHRpbWVyO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbmluZGV4IGIwNDc0ZmNmMDY1YWEuLjAxNjc5YWVmNTMyODkgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbkBAIC0zMDcsMTkgJiM0MzszMDcsMjAgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1ha2VfY2hpbGRfcHRlKHVuc2lnbmVkIGxvbmcgaHVnZV9wdGUsIGludCBpbmRleCxcbiBcdHJldHVybiBjaGlsZF9wdGU7XG4gfVxuIFxuLWludCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbi1cdFx0XHRcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxuLVx0XHRcdFx0Z3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaClcbiYjNDM7Ym9vbCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbiYjNDM7XHRcdFx0XHQgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG4mIzQzO1x0XHRcdFx0IGdwYV90IGFkZHIsIHUzMiB0YXJnZXRfbGV2ZWwsIGJvb2wgZmx1c2gpXG4ge1xuIFx0dTMyIGN1cnJlbnRfbGV2ZWwgPSBnc3RhZ2UtXHUwMDNlcGdkX2xldmVscyAtIDE7XG4gXHRwdGVfdCAqbmV4dF9wdGVwID0gKHB0ZV90ICopZ3N0YWdlLVx1MDAzZXBnZDtcbiBcdHVuc2lnbmVkIGxvbmcgaHVnZV9wdGUsIGNoaWxkX3B0ZTtcbiBcdHVuc2lnbmVkIGxvbmcgY2hpbGRfcGFnZV9zaXplO1xuJiM0MztcdGJvb2wgbmVlZF9mbHVzaCA9IGZhbHNlO1xuIFx0cHRlX3QgKnB0ZXA7XG4gXHRpbnQgaSwgcmV0O1xuIFxuIFx0aWYgKCFwY2FjaGUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0d2hpbGUoY3VycmVudF9sZXZlbCBcdTAwM2UgdGFyZ2V0X2xldmVsKSB7XG4gXHRcdHB0ZXAgPSAocHRlX3QgKilcdTAwMjZuZXh0X3B0ZXBbZ3N0YWdlX3B0ZV9pbmRleChnc3RhZ2UsIGFkZHIsIGN1cnJlbnRfbGV2ZWwpXTtcbkBAIC0zMzcsMjcgJiM0MzszMzgsMzUgQEAgaW50IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuIFxuIFx0XHRyZXQgPSBnc3RhZ2VfbGV2ZWxfdG9fcGFnZV9zaXplKGdzdGFnZSwgY3VycmVudF9sZXZlbCAtIDEsIFx1MDAyNmNoaWxkX3BhZ2Vfc2l6ZSk7XG4gXHRcdGlmIChyZXQpXG4tXHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0cmV0dXJuIG5lZWRfZmx1c2g7XG4gXG4gXHRcdG5leHRfcHRlcCA9IGt2bV9tbXVfbWVtb3J5X2NhY2hlX2FsbG9jKHBjYWNoZSk7XG4gXHRcdGlmICghbmV4dF9wdGVwKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdFx0XHRyZXR1cm4gbmVlZF9mbHVzaDtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUFRSU19QRVJfUFRFOyBpJiM0MzsmIzQzOykge1xuIFx0XHRcdGNoaWxkX3B0ZSA9IG1ha2VfY2hpbGRfcHRlKGh1Z2VfcHRlLCBpLCBjaGlsZF9wYWdlX3NpemUpO1xuIFx0XHRcdHNldF9wdGUoKHB0ZV90ICopXHUwMDI2bmV4dF9wdGVwW2ldLCBfX3B0ZShjaGlsZF9wdGUpKTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEVuc3VyZSB0aGUgd3JpdGVzIHRvIHRoZSBjaGlsZCBQVEVzIGFyZSB2aXNpYmxlIGJlZm9yZVxuJiM0MztcdFx0ICogbGlua2luZyB0aGUgbmV3IHBhZ2UgdGFibGUgdG8gdGhlIHBhcmVudCBQVEUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNtcF93bWIoKTtcbiYjNDM7XG4gXHRcdHNldF9wdGUocHRlcCwgcGZuX3B0ZShQRk5fRE9XTihfX3BhKG5leHRfcHRlcCkpLFxuIFx0XHRcdFx0X19wZ3Byb3QoX1BBR0VfVEFCTEUpKSk7XG4gXG4gXHRcdGlmIChmbHVzaClcbiBcdFx0XHRnc3RhZ2VfdGxiX2ZsdXNoKGdzdGFnZSwgY3VycmVudF9sZXZlbCwgYWRkcik7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdG5lZWRfZmx1c2ggPSB0cnVlO1xuIFxuIFx0XHRjdXJyZW50X2xldmVsLS07XG4gXHR9XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gbmVlZF9mbHVzaDtcbiB9XG4gXG4gYm9vbCBrdm1fcmlzY3ZfZ3N0YWdlX29wX3B0ZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLCBncGFfdCBhZGRyLFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbmluZGV4IDhhMGFhNWUwZTIxNmUuLjQzMTQ3NTNmYzQ3YTggMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbkBAIC0xNiw2ICYjNDM7MTYsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX25hY2wuaFx1MDAzZVxuIFxuJiM0MztzdGF0aWMgYm9vbCBfX3JlYWRfbW9zdGx5IGVhZ2VyX3BhZ2Vfc3BsaXQgPSB0cnVlO1xuJiM0Mzttb2R1bGVfcGFyYW0oZWFnZXJfcGFnZV9zcGxpdCwgYm9vbCwgMDY0NCk7XG4mIzQzO1xuIHN0YXRpYyB2b2lkIG1tdV93cF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTtcbkBAIC05OCw2ICYjNDM7MTAxLDYyIEBAIHZvaWQga3ZtX3Jpc2N2X21tdV9pb3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHNpemUpXG4gXHRcdFx0XHRcdCAgICBzaXplIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIG5lZWRfdG9wdXBfc3BsaXRfY2FjaGVzX29yX3Jlc2NoZWQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlO1xuJiM0MztcbiYjNDM7XHRpZiAobmVlZF9yZXNjaGVkKCkgfHwgcndsb2NrX25lZWRicmVhayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdGNhY2hlID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGU7XG4mIzQzO1x0cmV0dXJuIGt2bV9tbXVfbWVtb3J5X2NhY2hlX25yX2ZyZWVfb2JqZWN0cyhjYWNoZSkgXHUwMDNjIGNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBtbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuJiM0MztcdFx0XHRcdCBwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGt2bSAqa3ZtID0gZ3N0YWdlLVx1MDAzZWt2bTtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSA9IFx1MDAyNmt2bS1cdTAwM2VhcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlO1xuJiM0MztcdHBoeXNfYWRkcl90IGFkZHIgPSBBTElHTl9ET1dOKHN0YXJ0LCBQTURfU0laRSk7XG4mIzQzO1x0cGh5c19hZGRyX3QgbGFzdF9mbHVzaF9nZm4gPSBhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdGludCBjb3VudCA9IGdzdGFnZS1cdTAwM2VwZ2RfbGV2ZWxzO1xuJiM0MztcdGJvb2wgZmx1c2ggPSBmYWxzZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChhZGRyIFx1MDAzYyBlbmQpIHtcbiYjNDM7XHRcdGlmIChuZWVkX3RvcHVwX3NwbGl0X2NhY2hlc19vcl9yZXNjaGVkKGt2bSwgY291bnQpKSB7XG4mIzQzO1x0XHRcdGlmIChmbHVzaCkge1xuJiM0MztcdFx0XHRcdGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShrdm0sIGxhc3RfZmx1c2hfZ2ZuLFxuJiM0MztcdFx0XHRcdFx0ICAoYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgLSBsYXN0X2ZsdXNoX2dmbik7XG4mIzQzO1x0XHRcdFx0bGFzdF9mbHVzaF9nZm4gPSBhZGRyIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcdFx0XHRcdGZsdXNoID0gZmFsc2U7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdHdyaXRlX3VubG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuJiM0MztcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IGt2bV9tbXVfdG9wdXBfbWVtb3J5X2NhY2hlKHBjYWNoZSwgY291bnQpO1xuJiM0MztcdFx0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdFx0a3ZtX2VycihcJiMzNDtGYWlsZWQgdG8gdG91cCBzcGxpdCBwYWdlIGNhY2hlXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0XHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1x0XHRcdFx0cmV0dXJuIGZsdXNoO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWt2bS1cdTAwM2VhcmNoLnBnZClcbiYjNDM7XHRcdFx0cmV0dXJuIGZsdXNoO1xuJiM0MztcbiYjNDM7XHRcdGZsdXNoIHw9IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgYWRkciwgMCwgZmFsc2UpO1xuJiM0MztcbiYjNDM7XHRcdGFkZHIgJiM0Mzs9IFBNRF9TSVpFO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZsdXNoO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0XHRcdFx0XHQgICAgIGdmbl90IGdmbl9vZmZzZXQsXG5AQCAtMTA3LDE0ICYjNDM7MTY2LDIwIEBAIHZvaWQga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSxcbiBcdHBoeXNfYWRkcl90IHN0YXJ0ID0gKGJhc2VfZ2ZuICYjNDM7ICBfX2ZmcyhtYXNrKSkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXHRwaHlzX2FkZHJfdCBlbmQgPSAoYmFzZV9nZm4gJiM0MzsgX19mbHMobWFzaykgJiM0MzsgMSkgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4gXHRzdHJ1Y3Qga3ZtX2dzdGFnZSBnc3RhZ2U7XG4tXHRib29sIGZsdXNoO1xuIFxuIFx0a3ZtX3Jpc2N2X2dzdGFnZV9pbml0KFx1MDAyNmdzdGFnZSwga3ZtKTtcbiBcbi1cdGZsdXNoID0ga3ZtX3Jpc2N2X2dzdGFnZV93cF9yYW5nZShcdTAwMjZnc3RhZ2UsIHN0YXJ0LCBlbmQpO1xuLVx0aWYgKGZsdXNoKVxuLVx0XHRrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoa3ZtLCBzdGFydCBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCxcbi1cdFx0XHRcdFx0ICAgIChlbmQgLSBzdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuJiM0MztcdGt2bV9yaXNjdl9nc3RhZ2Vfd3BfcmFuZ2UoXHUwMDI2Z3N0YWdlLCBzdGFydCwgZW5kKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bV9kaXJ0eV9sb2dfbWFudWFsX3Byb3RlY3RfYW5kX2luaXRfc2V0KGt2bSkpIHtcbiYjNDM7XHRcdGlmIChSRUFEX09OQ0UoZWFnZXJfcGFnZV9zcGxpdCkpXG4mIzQzO1x0XHRcdG1tdV9zcGxpdF9odWdlX3BhZ2VzKFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIHJlbW90ZSBUTEIgZmx1c2ggaXMgbm90IG5lZWRlZCBoZXJlIHNpbmNlIGNhbGxlcnMgb2ZcbiYjNDM7XHQgKiBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoKSBhbHJlYWR5IGRvIGl0LlxuJiM0MztcdCAqL1xuIH1cbiBcbiB2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcbkBAIC0xNTIsNiAmIzQzOzIxNywyNSBAQCB2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdFx0ICAgIHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgbW11X3NwbGl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgc2xvdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7XG4mIzQzO1x0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCA9IGlkX3RvX21lbXNsb3Qoc2xvdHMsIHNsb3QpO1xuJiM0MztcdHBoeXNfYWRkcl90IHN0YXJ0ID0gbWVtc2xvdC1cdTAwM2ViYXNlX2dmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiYjNDM7XHRwaHlzX2FkZHJfdCBlbmQgPSAobWVtc2xvdC1cdTAwM2ViYXNlX2dmbiAmIzQzOyBtZW1zbG90LVx1MDAzZW5wYWdlcykgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQ7XG4mIzQzO1x0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xuJiM0MztcdGJvb2wgZmx1c2g7XG4mIzQzO1xuJiM0MztcdGt2bV9yaXNjdl9nc3RhZ2VfaW5pdChcdTAwMjZnc3RhZ2UsIGt2bSk7XG4mIzQzO1xuJiM0MztcdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiYjNDM7XHRmbHVzaCA9IG1tdV9zcGxpdF9odWdlX3BhZ2VzKFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XG4mIzQzO1x0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChmbHVzaClcbiYjNDM7XHRcdGt2bV9mbHVzaF9yZW1vdGVfdGxic19tZW1zbG90KGt2bSwgbWVtc2xvdCk7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG5AQCAtMTY1LDYgJiM0MzsyNDksOSBAQCB2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0aWYgKGt2bV9kaXJ0eV9sb2dfbWFudWFsX3Byb3RlY3RfYW5kX2luaXRfc2V0KGt2bSkpXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRtbXVfd3BfbWVtb3J5X3JlZ2lvbihrdm0sIG5ldy1cdTAwM2VpZCk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKFJFQURfT05DRShlYWdlcl9wYWdlX3NwbGl0KSlcbiYjNDM7XHRcdFx0bW11X3NwbGl0X21lbW9yeV9yZWdpb24oa3ZtLCBuZXctXHUwMDNlaWQpO1xuIFx0fVxuIH1cbiBcbkBAIC02NzcsNiAmIzQzOzc2NCw3IEBAIGludCBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZChzdHJ1Y3Qga3ZtICprdm0pXG4gXHRrdm0tXHUwMDNlYXJjaC5wZ2QgPSBwYWdlX3RvX3ZpcnQocGdkX3BhZ2UpO1xuIFx0a3ZtLVx1MDAzZWFyY2gucGdkX3BoeXMgPSBwYWdlX3RvX3BoeXMocGdkX3BhZ2UpO1xuIFx0a3ZtLVx1MDAzZWFyY2gucGdkX2xldmVscyA9IGt2bV9yaXNjdl9nc3RhZ2VfbWF4X3BnZF9sZXZlbHM7XG4mIzQzO1x0a3ZtLVx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGUuZ2ZwX3plcm8gPSBfX0dGUF9aRVJPO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTcwNCw2ICYjNDM7NzkyLDggQEAgdm9pZCBrdm1fcmlzY3ZfbW11X2ZyZWVfcGdkKHN0cnVjdCBrdm0gKmt2bSlcbiBcbiBcdGlmIChwZ2QpXG4gXHRcdGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGdkLCBnZXRfb3JkZXIoa3ZtX3Jpc2N2X2dzdGFnZV9wZ2Rfc2l6ZSkpO1xuJiM0MztcbiYjNDM7XHRrdm1fbW11X2ZyZWVfbWVtb3J5X2NhY2hlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlKTtcbiB9XG4gXG4gdm9pZCBrdm1fcmlzY3ZfbW11X3VwZGF0ZV9oZ2F0cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZJUlRVQUxJWkFUSU9OJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZSYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQmIzM0OywKICAgICYjMzQ7a3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW1wbGVtZW50cyBlYWdlciBwYWdlIHNwbGl0dGluZyBmb3IgS1ZNIG9uIFJJU0MtViwgbW9kaWZ5aW5nIHRoZSBLVk0gTU1VIGxvZ2ljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgZGlydHkgbG9nZ2luZyB3b3JrIGNvcnJlY3RseSB3aXRob3V0IGludHJvZHVjaW5nIG1lbW9yeSBjb3JydXB0aW9uIG9yIGNyYXNoZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlZDljOTA1ZGE2YmJhNjJjMTdmYzQzN2E3Mzk2NWQzMmQyNDQwY2UyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAxNjoyMzoxOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYjU0OTNhN2Y4ZjIyOC4uZDc4ZWRhN2VlMjNhNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTMwNDcsNyAmIzQzOzMwNDcsNyBAQCBLZXJuZWwgcGFyYW1ldGVycwogCQkJRGVmYXVsdCBpcyAwIChkb24mIzM5O3QgaWdub3JlLCBidXQgaW5qZWN0ICNHUCkKIAogCWt2bS5lYWdlcl9wYWdlX3NwbGl0PQotCQkJW0tWTSxYODZdIENvbnRyb2xzIHdoZXRoZXIgb3Igbm90IEtWTSB3aWxsIHRyeSB0bwomIzQzOwkJCVtLVk0sWDg2LFJJU0NWXSBDb250cm9scyB3aGV0aGVyIG9yIG5vdCBLVk0gd2lsbCB0cnkgdG8KIAkJCXByb2FjdGl2ZWx5IHNwbGl0IGFsbCBodWdlIHBhZ2VzIGR1cmluZyBkaXJ0eSBsb2dnaW5nLgogCQkJRWFnZXIgcGFnZSBzcGxpdHRpbmcgcmVkdWNlcyBpbnRlcnJ1cHRpb25zIHRvIHZDUFUKIAkJCWV4ZWN1dGlvbiBieSBlbGltaW5hdGluZyB0aGUgd3JpdGUtcHJvdGVjdGlvbiBmYXVsdHMKQEAgLTMwNjcsNyAmIzQzOzMwNjcsMTAgQEAgS2VybmVsIHBhcmFtZXRlcnMKIAkJCXRoZSBLVk1fQ0xFQVJfRElSVFkgaW9jdGwsIGFuZCBvbmx5IGZvciB0aGUgcGFnZXMgYmVpbmcKIAkJCWNsZWFyZWQuCiAKLQkJCUVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4ga3ZtLnRkcF9tbXU9WS4KJiM0MzsJCQlPbiB4ODYsIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4KJiM0MzsJCQlrdm0udGRwX21tdT1ZLgomIzQzOwomIzQzOwkJCU9uIFJJU0NWLCBlYWdlciBwYWdlIHNwbGl0dGluZyBpcyBzdXBwb3J0ZWQgYnkgZGVmYXVsdC4KIAogCQkJRGVmYXVsdCBpcyBZIChvbikuCiAKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgKaW5kZXggMjFlMjAxOWRmMGNmNS4uZjcyNjI3OTc4MDE3NyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmgKQEAgLTY0LDkgJiM0Mzs2NCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsCiAJCQkgICAgICBib29sIHBhZ2VfcmRvbmx5LCBib29sIHBhZ2VfZXhlYywKIAkJCSAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApOwogCi1pbnQga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsCi0JCQkJc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsCi0JCQkJZ3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaCk7CiYjNDM7Ym9vbCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwKJiM0MzsJCQkJIHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLAomIzQzOwkJCQkgZ3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaCk7CiAKIGVudW0ga3ZtX3Jpc2N2X2dzdGFnZV9vcCB7CiAJR1NUQUdFX09QX05PUCA9IDAsCS8qIE5vdGhpbmcgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCBlMmQ1ODA4MTY5ZTQ0Li43MWU0NTVkMTY2OTA1IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC04Niw2ICYjNDM7ODYsNyBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogCXBnZF90ICpwZ2Q7CiAJcGh5c19hZGRyX3QgcGdkX3BoeXM7CiAJdW5zaWduZWQgbG9uZyBwZ2RfbGV2ZWxzOwomIzQzOwlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgcGdkX3NwbGl0X3BhZ2VfY2FjaGU7CiAKIAkvKiBHdWVzdCBUaW1lciAqLwogCXN0cnVjdCBrdm1fZ3Vlc3RfdGltZXIgdGltZXI7CmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jCmluZGV4IGIwNDc0ZmNmMDY1YWEuLjAxNjc5YWVmNTMyODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jCkBAIC0zMDcsMTkgJiM0MzszMDcsMjAgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1ha2VfY2hpbGRfcHRlKHVuc2lnbmVkIGxvbmcgaHVnZV9wdGUsIGludCBpbmRleCwKIAlyZXR1cm4gY2hpbGRfcHRlOwogfQogCi1pbnQga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsCi0JCQkJc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsCi0JCQkJZ3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaCkKJiM0Mztib29sIGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLAomIzQzOwkJCQkgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsCiYjNDM7CQkJCSBncGFfdCBhZGRyLCB1MzIgdGFyZ2V0X2xldmVsLCBib29sIGZsdXNoKQogewogCXUzMiBjdXJyZW50X2xldmVsID0gZ3N0YWdlLSZndDtwZ2RfbGV2ZWxzIC0gMTsKIAlwdGVfdCAqbmV4dF9wdGVwID0gKHB0ZV90ICopZ3N0YWdlLSZndDtwZ2Q7CiAJdW5zaWduZWQgbG9uZyBodWdlX3B0ZSwgY2hpbGRfcHRlOwogCXVuc2lnbmVkIGxvbmcgY2hpbGRfcGFnZV9zaXplOwomIzQzOwlib29sIG5lZWRfZmx1c2ggPSBmYWxzZTsKIAlwdGVfdCAqcHRlcDsKIAlpbnQgaSwgcmV0OwogCiAJaWYgKCFwY2FjaGUpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwkJcmV0dXJuIGZhbHNlOwogCiAJd2hpbGUoY3VycmVudF9sZXZlbCAmZ3Q7IHRhcmdldF9sZXZlbCkgewogCQlwdGVwID0gKHB0ZV90ICopJmFtcDtuZXh0X3B0ZXBbZ3N0YWdlX3B0ZV9pbmRleChnc3RhZ2UsIGFkZHIsIGN1cnJlbnRfbGV2ZWwpXTsKQEAgLTMzNywyNyAmIzQzOzMzOCwzNSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsCiAKIAkJcmV0ID0gZ3N0YWdlX2xldmVsX3RvX3BhZ2Vfc2l6ZShnc3RhZ2UsIGN1cnJlbnRfbGV2ZWwgLSAxLCAmYW1wO2NoaWxkX3BhZ2Vfc2l6ZSk7CiAJCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwomIzQzOwkJCXJldHVybiBuZWVkX2ZsdXNoOwogCiAJCW5leHRfcHRlcCA9IGt2bV9tbXVfbWVtb3J5X2NhY2hlX2FsbG9jKHBjYWNoZSk7CiAJCWlmICghbmV4dF9wdGVwKQotCQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQkJcmV0dXJuIG5lZWRfZmx1c2g7CiAKIAkJZm9yIChpID0gMDsgaSAmbHQ7IFBUUlNfUEVSX1BURTsgaSYjNDM7JiM0MzspIHsKIAkJCWNoaWxkX3B0ZSA9IG1ha2VfY2hpbGRfcHRlKGh1Z2VfcHRlLCBpLCBjaGlsZF9wYWdlX3NpemUpOwogCQkJc2V0X3B0ZSgocHRlX3QgKikmYW1wO25leHRfcHRlcFtpXSwgX19wdGUoY2hpbGRfcHRlKSk7CiAJCX0KIAomIzQzOwkJLyoKJiM0MzsJCSAqIEVuc3VyZSB0aGUgd3JpdGVzIHRvIHRoZSBjaGlsZCBQVEVzIGFyZSB2aXNpYmxlIGJlZm9yZQomIzQzOwkJICogbGlua2luZyB0aGUgbmV3IHBhZ2UgdGFibGUgdG8gdGhlIHBhcmVudCBQVEUuCiYjNDM7CQkgKi8KJiM0MzsJCXNtcF93bWIoKTsKJiM0MzsKIAkJc2V0X3B0ZShwdGVwLCBwZm5fcHRlKFBGTl9ET1dOKF9fcGEobmV4dF9wdGVwKSksCiAJCQkJX19wZ3Byb3QoX1BBR0VfVEFCTEUpKSk7CiAKIAkJaWYgKGZsdXNoKQogCQkJZ3N0YWdlX3RsYl9mbHVzaChnc3RhZ2UsIGN1cnJlbnRfbGV2ZWwsIGFkZHIpOwomIzQzOwkJZWxzZQomIzQzOwkJCW5lZWRfZmx1c2ggPSB0cnVlOwogCiAJCWN1cnJlbnRfbGV2ZWwtLTsKIAl9CiAKLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIG5lZWRfZmx1c2g7CiB9CiAKIGJvb2wga3ZtX3Jpc2N2X2dzdGFnZV9vcF9wdGUoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwgZ3BhX3QgYWRkciwKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmMKaW5kZXggOGEwYWE1ZTBlMjE2ZS4uNDMxNDc1M2ZjNDdhOCAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9rdm0vbW11LmMKQEAgLTE2LDYgJiM0MzsxNiw5IEBACiAjaW5jbHVkZSAmbHQ7YXNtL2t2bV9tbXUuaCZndDsKICNpbmNsdWRlICZsdDthc20va3ZtX25hY2wuaCZndDsKIAomIzQzO3N0YXRpYyBib29sIF9fcmVhZF9tb3N0bHkgZWFnZXJfcGFnZV9zcGxpdCA9IHRydWU7CiYjNDM7bW9kdWxlX3BhcmFtKGVhZ2VyX3BhZ2Vfc3BsaXQsIGJvb2wsIDA2NDQpOwomIzQzOwogc3RhdGljIHZvaWQgbW11X3dwX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgc2xvdCkKIHsKIAlzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pOwpAQCAtOTgsNiAmIzQzOzEwMSw2MiBAQCB2b2lkIGt2bV9yaXNjdl9tbXVfaW91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBzaXplKQogCQkJCQkgICAgc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIG5lZWRfdG9wdXBfc3BsaXRfY2FjaGVzX29yX3Jlc2NoZWQoc3RydWN0IGt2bSAqa3ZtLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlOwomIzQzOwomIzQzOwlpZiAobmVlZF9yZXNjaGVkKCkgfHwgcndsb2NrX25lZWRicmVhaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CWNhY2hlID0gJmFtcDtrdm0tJmd0O2FyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGU7CiYjNDM7CXJldHVybiBrdm1fbW11X21lbW9yeV9jYWNoZV9ucl9mcmVlX29iamVjdHMoY2FjaGUpICZsdDsgY291bnQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIG1tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsCiYjNDM7CQkJCSBwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kKQomIzQzO3sKJiM0MzsJc3RydWN0IGt2bSAqa3ZtID0gZ3N0YWdlLSZndDtrdm07CiYjNDM7CXN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlID0gJmFtcDtrdm0tJmd0O2FyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGU7CiYjNDM7CXBoeXNfYWRkcl90IGFkZHIgPSBBTElHTl9ET1dOKHN0YXJ0LCBQTURfU0laRSk7CiYjNDM7CXBoeXNfYWRkcl90IGxhc3RfZmx1c2hfZ2ZuID0gYWRkciAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwlpbnQgY291bnQgPSBnc3RhZ2UtJmd0O3BnZF9sZXZlbHM7CiYjNDM7CWJvb2wgZmx1c2ggPSBmYWxzZTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSgmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwl3aGlsZSAoYWRkciAmbHQ7IGVuZCkgewomIzQzOwkJaWYgKG5lZWRfdG9wdXBfc3BsaXRfY2FjaGVzX29yX3Jlc2NoZWQoa3ZtLCBjb3VudCkpIHsKJiM0MzsJCQlpZiAoZmx1c2gpIHsKJiM0MzsJCQkJa3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKGt2bSwgbGFzdF9mbHVzaF9nZm4sCiYjNDM7CQkJCQkgIChhZGRyICZndDsmZ3Q7IFBBR0VfU0hJRlQpIC0gbGFzdF9mbHVzaF9nZm4pOwomIzQzOwkJCQlsYXN0X2ZsdXNoX2dmbiA9IGFkZHIgJmd0OyZndDsgUEFHRV9TSElGVDsKJiM0MzsJCQkJZmx1c2ggPSBmYWxzZTsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJd3JpdGVfdW5sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiYjNDM7CQkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CiYjNDM7CQkJcmV0ID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUocGNhY2hlLCBjb3VudCk7CiYjNDM7CQkJaWYgKHJldCkgewomIzQzOwkJCQlrdm1fZXJyKCYjMzQ7RmFpbGVkIHRvIHRvdXAgc3BsaXQgcGFnZSBjYWNoZVxuJiMzNDspOwomIzQzOwkJCQl3cml0ZV9sb2NrKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiYjNDM7CQkJCXJldHVybiBmbHVzaDsKJiM0MzsJCQl9CiYjNDM7CQkJd3JpdGVfbG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWYgKCFrdm0tJmd0O2FyY2gucGdkKQomIzQzOwkJCXJldHVybiBmbHVzaDsKJiM0MzsKJiM0MzsJCWZsdXNoIHw9IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgYWRkciwgMCwgZmFsc2UpOwomIzQzOwomIzQzOwkJYWRkciAmIzQzOz0gUE1EX1NJWkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGZsdXNoOwomIzQzO30KJiM0MzsKIHZvaWQga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkJICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LAogCQkJCQkgICAgIGdmbl90IGdmbl9vZmZzZXQsCkBAIC0xMDcsMTQgJiM0MzsxNjYsMjAgQEAgdm9pZCBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoc3RydWN0IGt2bSAqa3ZtLAogCXBoeXNfYWRkcl90IHN0YXJ0ID0gKGJhc2VfZ2ZuICYjNDM7ICBfX2ZmcyhtYXNrKSkgJmx0OyZsdDsgUEFHRV9TSElGVDsKIAlwaHlzX2FkZHJfdCBlbmQgPSAoYmFzZV9nZm4gJiM0MzsgX19mbHMobWFzaykgJiM0MzsgMSkgJmx0OyZsdDsgUEFHRV9TSElGVDsKIAlzdHJ1Y3Qga3ZtX2dzdGFnZSBnc3RhZ2U7Ci0JYm9vbCBmbHVzaDsKIAogCWt2bV9yaXNjdl9nc3RhZ2VfaW5pdCgmYW1wO2dzdGFnZSwga3ZtKTsKIAotCWZsdXNoID0ga3ZtX3Jpc2N2X2dzdGFnZV93cF9yYW5nZSgmYW1wO2dzdGFnZSwgc3RhcnQsIGVuZCk7Ci0JaWYgKGZsdXNoKQotCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoa3ZtLCBzdGFydCAmZ3Q7Jmd0OyBQQUdFX1NISUZULAotCQkJCQkgICAgKGVuZCAtIHN0YXJ0KSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKJiM0MzsJa3ZtX3Jpc2N2X2dzdGFnZV93cF9yYW5nZSgmYW1wO2dzdGFnZSwgc3RhcnQsIGVuZCk7CiYjNDM7CiYjNDM7CWlmIChrdm1fZGlydHlfbG9nX21hbnVhbF9wcm90ZWN0X2FuZF9pbml0X3NldChrdm0pKSB7CiYjNDM7CQlpZiAoUkVBRF9PTkNFKGVhZ2VyX3BhZ2Vfc3BsaXQpKQomIzQzOwkJCW1tdV9zcGxpdF9odWdlX3BhZ2VzKCZhbXA7Z3N0YWdlLCBzdGFydCwgZW5kKTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiByZW1vdGUgVExCIGZsdXNoIGlzIG5vdCBuZWVkZWQgaGVyZSBzaW5jZSBjYWxsZXJzIG9mCiYjNDM7CSAqIGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZCgpIGFscmVhZHkgZG8gaXQuCiYjNDM7CSAqLwogfQogCiB2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCkKQEAgLTE1Miw2ICYjNDM7MjE3LDI1IEBAIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLAogCQkJCQkgICAgc2l6ZSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIG1tdV9zcGxpdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bV9tZW1zbG90cyhrdm0pOwomIzQzOwlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90ID0gaWRfdG9fbWVtc2xvdChzbG90cywgc2xvdCk7CiYjNDM7CXBoeXNfYWRkcl90IHN0YXJ0ID0gbWVtc2xvdC0mZ3Q7YmFzZV9nZm4gJmx0OyZsdDsgUEFHRV9TSElGVDsKJiM0MzsJcGh5c19hZGRyX3QgZW5kID0gKG1lbXNsb3QtJmd0O2Jhc2VfZ2ZuICYjNDM7IG1lbXNsb3QtJmd0O25wYWdlcykgJmx0OyZsdDsgUEFHRV9TSElGVDsKJiM0MzsJc3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlOwomIzQzOwlib29sIGZsdXNoOwomIzQzOwomIzQzOwlrdm1fcmlzY3ZfZ3N0YWdlX2luaXQoJmFtcDtnc3RhZ2UsIGt2bSk7CiYjNDM7CiYjNDM7CXdyaXRlX2xvY2soJmFtcDtrdm0tJmd0O21tdV9sb2NrKTsKJiM0MzsJZmx1c2ggPSBtbXVfc3BsaXRfaHVnZV9wYWdlcygmYW1wO2dzdGFnZSwgc3RhcnQsIGVuZCk7CiYjNDM7CXdyaXRlX3VubG9jaygmYW1wO2t2bS0mZ3Q7bW11X2xvY2spOwomIzQzOwomIzQzOwlpZiAoZmx1c2gpCiYjNDM7CQlrdm1fZmx1c2hfcmVtb3RlX3RsYnNfbWVtc2xvdChrdm0sIG1lbXNsb3QpOwomIzQzO30KJiM0MzsKIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAogCQkJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm9sZCwKIAkJCQljb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsCkBAIC0xNjUsNiAmIzQzOzI0OSw5IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAogCQlpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSkKIAkJCXJldHVybjsKIAkJbW11X3dwX21lbW9yeV9yZWdpb24oa3ZtLCBuZXctJmd0O2lkKTsKJiM0MzsKJiM0MzsJCWlmIChSRUFEX09OQ0UoZWFnZXJfcGFnZV9zcGxpdCkpCiYjNDM7CQkJbW11X3NwbGl0X21lbW9yeV9yZWdpb24oa3ZtLCBuZXctJmd0O2lkKTsKIAl9CiB9CiAKQEAgLTY3Nyw2ICYjNDM7NzY0LDcgQEAgaW50IGt2bV9yaXNjdl9tbXVfYWxsb2NfcGdkKHN0cnVjdCBrdm0gKmt2bSkKIAlrdm0tJmd0O2FyY2gucGdkID0gcGFnZV90b192aXJ0KHBnZF9wYWdlKTsKIAlrdm0tJmd0O2FyY2gucGdkX3BoeXMgPSBwYWdlX3RvX3BoeXMocGdkX3BhZ2UpOwogCWt2bS0mZ3Q7YXJjaC5wZ2RfbGV2ZWxzID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXhfcGdkX2xldmVsczsKJiM0MzsJa3ZtLSZndDthcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlLmdmcF96ZXJvID0gX19HRlBfWkVSTzsKIAogCXJldHVybiAwOwogfQpAQCAtNzA0LDYgJiM0Mzs3OTIsOCBAQCB2b2lkIGt2bV9yaXNjdl9tbXVfZnJlZV9wZ2Qoc3RydWN0IGt2bSAqa3ZtKQogCiAJaWYgKHBnZCkKIAkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwZ2QsIGdldF9vcmRlcihrdm1fcmlzY3ZfZ3N0YWdlX3BnZF9zaXplKSk7CiYjNDM7CiYjNDM7CWt2bV9tbXVfZnJlZV9tZW1vcnlfY2FjaGUoJmFtcDtrdm0tJmd0O2FyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGUpOwogfQogCiB2b2lkIGt2bV9yaXNjdl9tbXVfdXBkYXRlX2hnYXRwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0NwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEVhZ2VyIFBhZ2UgU3BsaXR0aW5nIFBhdGNoIGZvciBSSVNDLVYgS1ZNKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIGEgbmV3IHBhdGNoIG91dCB0aGVyZSwgaW1wbGVtZW50aW5nIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGZvciBLVk0gb24gUklTQy1WLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gSXQmIzM5O3MgdG91Y2hpbmcgYGFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jYCBhbmQgYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgY29yZSBrZXJuZWwgbG9naWMgd2l0aGluIHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uLiAqVGhhdCYjMzk7cyBwcm9taXNpbmcgZm9yIGZ1enppbmcgLSBhIGRlZmluaXRlICYjMzQ7eWVzLiYjMzQ7KgoKTm93LCBsZXQmIzM5O3MgZHJpbGwgZG93biBhbmQgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgYWx0ZXJlZC4gSSBzZWUgdGhlIGFkZGl0aW9uIG9mIGBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2VgIGFuZCBgbW11X3NwbGl0X2h1Z2VfcGFnZXNgLCBhbG9uZ3NpZGUgdGhlIGludHJvZHVjdGlvbiBvZiBga3ZtLmVhZ2VyX3BhZ2Vfc3BsaXRgIGFzIGEgUklTQy1WIHNwZWNpZmljIHBhcmFtZXRlci4gRnVuY3Rpb24gYGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZWAgcmV0dXJuIHR5cGUgaXMgY2hhbmdlZCB0byBib29sLiBNb2RpZmljYXRpb25zIGFyZSBtYWRlIHRvIGBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWRgIGFuZCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLiBDaGFuZ2VzIGFyZSBhbHNvIG1hZGUgdG8gdGhlIFBHRCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gZnVuY3Rpb25zOiBga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2RgIGFuZCBga3ZtX3Jpc2N2X21tdV9mcmVlX3BnZGAuIFRoaXMgaXMgY2xlYXJseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyB0aGUgTU1VJiMzOTtzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlIGxvb2sgYXQgYm90aCBgYXJjaC9yaXNjdi9rdm0vbW11LmNgIGFuZCBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM9MjA3PWludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4tLVxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjc4LVx0XHRpZiAocHRlcF9sZXZlbCBcdTAwM2Ugb3V0X21hcC1cdTAwM2VsZXZlbCkge1xuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM6Mjc5Olx0XHRcdGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgZ3BhLFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMjgwLVx0XHRcdFx0XHRcdCAgICBvdXRfbWFwLVx1MDAzZWxldmVsLCB0cnVlKTtcbi0tXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYz0yOTM9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1ha2VfY2hpbGRfcHRlKHVuc2lnbmVkIGxvbmcgaHVnZV9wdGUsIGludCBpbmRleCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0zMDktXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYzozMTA6Ym9vbCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTMxMS1cdFx0XHRcdCBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz0xMTU9c3RhdGljIGJvb2wgbW11X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy0xNTEtXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzoxNTI6XHRcdGZsdXNoIHw9IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShnc3RhZ2UsIHBjYWNoZSwgYWRkciwgMCwgZmFsc2UpO1xuYXJjaC9yaXNjdi9rdm0vbW11LmMtMTUzLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4NjUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIFJJU0MtViBLVk0gRnVuY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIFJJU0MtViBLVk0gY29kZSBhbmQgbWFraW5nIHNvbWUgaW5pdGlhbCBvYnNlcnZhdGlvbnMuIEkmIzM5O20gc2VlaW5nIHRoYXQgYGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZWAsIGBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWRgLCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2RgLCBhbmQgYGt2bV9yaXNjdl9tbXVfZnJlZV9wZ2RgIGFyZSBhbGwgZXhwb3J0ZWQg4oCTIHRoYXQgaXMsIHRoZXkmIzM5O3JlIG5vbi1zdGF0aWMuIFRoaXMgbWVhbnMgdGhleSYjMzk7cmUgbGlrZWx5IGRlc2lnbmVkIGZvciB1c2Ugb3V0c2lkZSBvZiB0aGVpciBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdCwgd2hpY2ggdGVsbHMgbWUgdGhleSYjMzk7cmUga2V5IGludGVyZmFjZXMgb3IgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IG90aGVyIHBhcnRzIG9mIHRoZSBLVk0gaW1wbGVtZW50YXRpb24sIG9yIHBvdGVudGlhbGx5IGV2ZW4gb3RoZXIgbW9kdWxlcywgd291bGQgbmVlZCBhY2Nlc3MgdG8uIFRoaXMgaXMgaW1wb3J0YW50IGNvbnRleHQuCgpOZXh0IHN0ZXA6IEkgc2hvdWxkIHZlcmlmeSB0aGlzIGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBLVk0gc3VwcG9ydCBvbiBSSVNDLVYuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIEtWTSBjb25maWd1cmF0aW9uIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBtaWdodCBiZSBhdCBwbGF5LiBJJiMzOTttIGtlZW4gdG8gdW5kZXJzdGFuZCBob3cgdGhleeKAmXJlIGVuYWJsZWQvZGlzYWJsZWQgYmFzZWQgb24gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTVxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0yMS1cdHRyaXN0YXRlIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDczNzcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmN5OiBLVk0qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBLVk1gIOKAkyB0aGF0JiMzOTtzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBlbGVtZW50IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IHN1cmZhY2VzIGlzOiB3aGF0IGRvZXMgdGhpcyBkZXBlbmQgb24/IFdoYXQgYXJlIGl0cyBwcmVyZXF1aXNpdGVzPyBJcyBpdCBzZWxmLWNvbnRhaW5lZCwgb3IgYXJlIHRoZXJlIHVuZGVybHlpbmcgbGlicmFyaWVzLCBoYXJkd2FyZSBmZWF0dXJlcywgb3Iga2VybmVsIG1vZHVsZXMgdGhhdCAqbXVzdCogYmUgcHJlc2VudCBhbmQgY29ycmVjdGx5IGNvbmZpZ3VyZWQgZm9yIGBLVk1gIHRvIGZ1bmN0aW9uIGFzIGV4cGVjdGVkPyBJcyB0aGVyZSBhIGtub3duIG1pbmltdW0gb3IgY29tcGF0aWJsZSB2ZXJzaW9uIHRvIGNvbnNpZGVyLCBzdWNoIGFzIGtlcm5lbCB2ZXJzaW9uIG9yIFFFTVUgdmVyc2lvbj8gVW5kZXJzdGFuZGluZyB0aG9zZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgYW55IHRyb3VibGVzaG9vdGluZyBvciBtb2RpZmljYXRpb24gZWZmb3J0cy4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctMjEtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6MjI6XHRkZXBlbmRzIG9uIFJJU0NWX1NCSSBcdTAwMjZcdTAwMjYgTU1VXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIzLVx0c2VsZWN0IEhBVkVfS1ZNX0lSUUNISVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Njk3CgkJCQkJCQlvdXRwdXQ6IDQ5CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktWTSBGdW5jdGlvbiBJZGVudGlmaWNhdGlvbiBQcm9jZXNzKioKClJpZ2h0LCBzbyBpdCYjMzk7cyBsb29raW5nIGxpa2UgYEtWTWAgaXMgdGhlIGNydWNpYWwgcGllY2UgaGVyZS4gTm93IEkgbmVlZCB0byBuYWlsIGRvd24gdGhlICpleGFjdCogZnVuY3Rpb24gbmFtZXMgSSYjMzk7bGwgYmUgd29ya2luZyB3aXRoLiBJIGNhbiYjMzk7dCBhZmZvcmQgYW55IGFtYmlndWl0eSBvciByZWxpYW5jZSBvbiBmdXp6eSByZWNhbGwuIE15IG5leHQgc3RlcCBpcyB0byBtZXRpY3Vsb3VzbHkgaWRlbnRpZnkgZWFjaCBuZWNlc3NhcnkgZnVuY3Rpb24sIGVuc3VyaW5nIEkmIzM5O20gcmVmZXJlbmNpbmcgdGhlIHByZWNpc2UgaW50ZXJmYWNlIEkmIzM5O20gdGFyZ2V0aW5nLiBObyByb29tIGZvciBndWVzc3dvcmssIGp1c3QgcHJlY2lzZSBmdW5jdGlvbiBuYW1lcy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZ2V0IHRoZSByaWdodCBzeW50YXguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jPTExNT1zdGF0aWMgYm9vbCBtbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuLS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTE1OS1cbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjE2MDp2b2lkIGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChzdHJ1Y3Qga3ZtICprdm0sXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy0xNjEtXHRcdFx0XHRcdCAgICAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCxcbi0tXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy0xODAtXHQgKiByZW1vdGUgVExCIGZsdXNoIGlzIG5vdCBuZWVkZWQgaGVyZSBzaW5jZSBjYWxsZXJzIG9mXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzoxODE6XHQgKiBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoKSBhbHJlYWR5IGRvIGl0LlxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMTgyLVx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMzQKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcy4gV2hlbiBJIHNlZSBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLCBteSBtaW5kIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIGFyY2hpdGVjdHVyYWwgc3BlY2lmaWNzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgS1ZNIGh5cGVydmlzb3IuIE15IGZpcnN0IHRob3VnaHQgaXM6IHRoaXMgaXMgYSBjcml0aWNhbCBmdW5jdGlvbi4gSXQmIzM5O3MgdGhlIHBvaW50IHdoZXJlIGNoYW5nZXMgdG8gdGhlIGd1ZXN0JiMzOTtzIG1lbW9yeSBtYXAgYXJlICphY3R1YWxseSogbWFkZSBwZXJtYW5lbnQuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHRoZSBmaW5hbCB2YWxpZGF0aW9uIGFuZCBhcHBsaWNhdGlvbiBvZiBtZW1vcnkgcmVnaW9uIGNoYW5nZXMsIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgVExCIGludmFsaWRhdGlvbnMsIHBhZ2UgdGFibGUgdXBkYXRlcywgYW5kIGFsbCB0aGUgYXNzb2NpYXRlZCBoYXJkd2FyZSBzeW5jaHJvbml6YXRpb24uCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLiBIb3cgZWZmaWNpZW50bHkgaXMgdGhpcyBpbXBsZW1lbnRlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaGVyZT8gSXMgdGhlIGRlc2lnbiBvcHRpbWl6ZWQgZm9yIG1pbmltYWwgbGF0ZW5jeSwgZXNwZWNpYWxseSBkdXJpbmcgbGl2ZSBtaWdyYXRpb24gb3IgVk0gY3JlYXRpb24/IFRoZSBjb250ZXh0IGFyb3VuZCBpdCBtYXR0ZXJzIC0gd2hhdOKAmXMgdGhlIGNhbGxpbmcgcGF0aD8gSXMgaXQgY2FsbGVkIGZyZXF1ZW50bHk/IEluZnJlcXVlbnRseT8gV2hhdCBhcmUgdGhlIGNvbW1vbiBzY2VuYXJpb3MgdGhhdCB0cmlnZ2VyIGl0PwoKSeKAmW0gYWxzbyB3b25kZXJpbmcgYWJvdXQgdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBpbnZvbHZlZC4gV2hhdCBraW5kIG9mIHNwaW5sb2NrcywgbXV0ZXhlcywgb3IgUkNVIHN0cnVjdHVyZXMgYXJlIHVzZWQgdG8gcHJvdGVjdCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzPyBBcmUgdGhleSBlZmZlY3RpdmU/IElzIHRoZXJlIGFueSBwb3RlbnRpYWwgZm9yIGNvbnRlbnRpb24sIGRlYWRsb2Nrcywgb3IgbGl2ZWxvY2tzPyBIb3cgZG9lcyB0aGUgY29kZSBoYW5kbGUgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgKHg4NiwgQVJNLCBldGMuKSBpbiB0aGlzIGZ1bmN0aW9uPyBUaGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGxvZ2ljIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIGlzIG9mdGVuIHdoZXJlIHN1YnRsZSwgaGFyZC10by1kZWJ1ZyBpc3N1ZXMgYXJpc2UuCgpTZWN1cml0eSBpcyBhbm90aGVyIGltbWVkaWF0ZSBjb25jZXJuLiBXaGF0IGNoZWNrcyBhcmUgaW4gcGxhY2UgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbiBvciBwcml2aWxlZ2UgZXNjYWxhdGlvbj8gQXJlIHRoZXJlIHJvYnVzdCBib3VuZHMgY2hlY2tzIGFuZCB2YWxpZGF0aW9uIG9mIHRoZSByZWdpb24gcGFyYW1ldGVycz8gVGhpcyBpcyBhIGhpZ2gtcHJpdmlsZWdlIGZ1bmN0aW9uLCBzbyB2dWxuZXJhYmlsaXRpZXMgaGVyZSBjb3VsZCBiZSBjYXRhc3Ryb3BoaWMuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHBvdGVudGlhbCBUT0NUT1UgKFRpbWUtb2YtQ2hlY2stdG8tVGltZS1vZi1Vc2UpIHZ1bG5lcmFiaWxpdGllcyBvciBvdGhlciBzZWN1cml0eSBpc3N1ZXMgaW4gdGhlIG1lbW9yeSByZWdpb24gY29tbWl0LiBXaGF0IHR5cGUgb2YgaXNvbGF0aW9uIGd1YXJhbnRlZXMgYXJlIGJlaW5nIG1hZGUgZm9yIHRoZSBndWVzdD8KCkZpbmFsbHksIEnigJltIG1lbnRhbGx5IGNoYXJ0aW5nIHRoZSBpbnRlcmFjdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIHdpdGggb3RoZXIgS1ZNIHN1YnN5c3RlbXMuIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIE1NVSBlbXVsYXRpb24sIHRoZSB2aXJ0dWFsaXplZCBpbnRlcnJ1cHQgY29udHJvbGxlciwgYW5kIHRoZSBkZXZpY2UgZW11bGF0aW9uIGxheWVycz8gSXQgaGFzIHRvIGludGVncmF0ZSB3aXRoIGFsbCBvZiB0aGVtIHRvIG9wZXJhdGUgcHJvcGVybHkuIEl0IGlzIHRoZSBjb3JlIG9mIG1lbW9yeS1yZWxhdGVkIG9wZXJhdGlvbnMuIEl0IGlzIGxpa2VseSBjYWxsZWQgZnJvbSBtYW55IHN1YnN5c3RlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vbW11LmM9MjIwPXN0YXRpYyB2b2lkIG1tdV9zcGxpdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMjM4LVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6MjM5OnZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMjQwLVx0XHRcdFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODEwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBSSVNDLVYgUGFnZSBTcGxpdHRpbmcgUGF0Y2gqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBlYWdlciBwYWdlIHNwbGl0dGluZyB3aXRoaW4gS1ZNIG9uIFJJU0MtViwgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgS1ZNIE1NVSBsb2dpYy4gQmFzZWQgb24gdGhlIHN5bWJvbHMgbGlzdGVkLCB0aGUga2V5IGFyZWFzIGFmZmVjdGVkIGFyZSBga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlYCwgYGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZGAsIGFuZCBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gLgoKTXkgcHJpbWFyeSBjb25jZXJuLCBhcyBhbHdheXMgd2l0aCBNTVUgY2hhbmdlcywgaXMgbWVtb3J5IHNhZmV0eS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBlYWdlciBzcGxpdHRpbmcgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgb3IsIGV2ZW4gd29yc2UsIGNhdXNlIGtlcm5lbCBjcmFzaGVzLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBjb250ZXh0cyBvZiBkaXJ0eSBsb2dnaW5nLiBGdXp6aW5nIGlzIHRoZSBvYnZpb3VzIG5leHQgc3RlcCwgYWJzb2x1dGVseSBjcml0aWNhbCwgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBuZXcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRpcnR5IGxvZ2dpbmcgYmVoYXZpb3JzLiBJJiMzOTtsbCBuZWVkIHRvIGRldmVsb3AgZnV6emluZyBoYXJuZXNzZXMgdGFpbG9yZWQgdG8gdGhlc2Ugc3BlY2lmaWMgZnVuY3Rpb25zLgoKTm93LCBsZXQmIzM5O3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgS1ZNYCBpcywgb2YgY291cnNlLCBhIGdpdmVuLiBJJiMzOTtsbCBjb25maXJtIHRoYXQgYFJJU0NWX1NCSWAgYW5kIGBNTVVgIGFyZSBwcmVzZW50LCB3aGljaCBhcmUgcHJldHR5IG11Y2ggc3RhbmRhcmQgb24gYW55IFJJU0MtViBLVk0gc2V0dXAuIEkmIzM5O2xsIGFsc28gZG91YmxlLWNoZWNrIHRoYXQgYFZJUlRVQUxJWkFUSU9OYCBpcyBjb3JyZWN0bHkgZGVmaW5lZCBhcyBhIHByZXJlcXVpc2l0ZSBmb3IgYEtWTWAsIGVzcGVjaWFsbHkgd2l0aGluIGBhcmNoL3Jpc2N2L2t2bS9LY29uZmlnYCB0byBlbnN1cmUgbm8gYnVpbGQgaXNzdWVzIGFyaXNlLiBNeSBnb2FsIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBpcyBjb3JyZWN0IGFuZCBjb21wbGV0ZSBmb3IgcHJvcGVyIHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZJUlRVQUxJWkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTY6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM2OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqS2NvbmZpZyBSZXZpZXcgLSBSSVNDLVYgS1ZNKioKCkFscmlnaHQsIHRpbWUgdG8gcmV2aXNpdCBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AuIEkmIzM5O3ZlIGJlZW4gb3ZlciBpdCBiZWZvcmUsIGJ1dCBnaXZlbiB0aGUgcmVjZW50IGRpc2N1c3Npb25zIGFuZCBkZXZlbG9wbWVudHMgaW4gUklTQy1WIEtWTSwgaXQmIzM5O3MgcHJ1ZGVudCB0byBnaXZlIGl0IGFub3RoZXIsIGZvY3VzZWQgbG9vay4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHN0aWxsIHNvdW5kLCBwcm9wZXJseSBwbGFjZWQsIGFuZCByZWZsZWN0aW5nIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydC4gQXJlIHRoZXJlIGFueSBuZXcgZGVwZW5kZW5jaWVzIEkgbWlzc2VkPyBIYXZlIGFueSBleGlzdGluZyBvcHRpb25zIGJlY29tZSBvYnNvbGV0ZSBvciByZXF1aXJlIHJlZmluZW1lbnQ/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gaG93IHJlY2VudCBwYXRjaGVzIGhhdmUgaW1wYWN0ZWQgdGhlIGV4aXN0aW5nIG9wdGlvbnMgYW5kIGlmIHRoZXJlIGFyZSBhbnkgbmV3IG9wcG9ydHVuaXRpZXMgdG8gaW1wcm92ZSB0aGUgdXNlciBleHBlcmllbmNlIHdpdGggbmV3IG9wdGlvbnMuIEEgdGhvcm91Z2ggY2hlY2sgaXMgZXNzZW50aWFsIHRvIG1haW50YWluIHRoZSBpbnRlZ3JpdHkgYW5kIHVzYWJpbGl0eSBvZiBvdXIgY29uZmlndXJhdGlvbiBzeXN0ZW0gZm9yIHRoZSBSSVNDLVYgS1ZNIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9rdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTY9c291cmNlIFwmIzM0O3ZpcnQva3ZtL0tjb25maWdcJiMzNDtcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWctNy1cbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTktXHRib29sIFwmIzM0O1ZpcnR1YWxpemF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDE2OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2ODgKCQkJCQkJCW91dHB1dDogMTM5CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzoKCioqVmlydHVhbGl6YXRpb24gQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpBbHJpZ2h0LCB0aGUgY29yZSByZXF1aXJlbWVudCBpcyBjbGVhcjogd2UgYWJzb2x1dGVseSBuZWVkIGBWSVJUVUFMSVpBVElPTmAuIE5vdywgdGhlIG5leHQgcXVlc3Rpb24gaXMgYWJvdXQgaW1wbGVtZW50YXRpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGRldGVybWluZSBpZiBgS1ZNYCBhbG9uZSB3aWxsIHN1ZmZpY2UsIG9yIGlmIHRoZXJlIGFyZSBhZGRpdGlvbmFsIHZpcnR1YWxpemF0aW9uIGNvbXBvbmVudHMgbmVjZXNzYXJ5LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYEtWTWAgaXMgb2Z0ZW4gc3lub255bW91cyB3aXRoIGEgdmlydHVhbGl6YXRpb24gY2FwYWJpbGl0eSwgYnV0IEkgbmVlZCB0byBjb25maXJtLiBMZXQgbWUgY2xhcmlmeSAtIGBLVk1gIGlzIG5lc3RlZCAqd2l0aGluKiBgVklSVFVBTElaQVRJT05gLCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuIFRoaXMgbWVhbnMgdGhhdCBzaW1wbHkgZW5hYmxpbmcgYEtWTWAgaXMgbm90IGF1dG9tYXRpY2FsbHkgZW5hYmxpbmcgYFZJUlRVQUxJWkFUSU9OYC4gVGhlcmVmb3JlLCB0byBtZWV0IHRoZSBpbml0aWFsIHJlcXVpcmVtZW50LCB3ZSAqZGVmaW5pdGVseSogbmVlZCBgVklSVFVBTElaQVRJT05gLiBOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlc2UgcmVzdWx0cy4gV2UmIzM5O3JlIGdldHRpbmcgc29tZXdoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxNjoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGZvciBLVk0gb24gUklTQy1WLCBtb2RpZnlpbmcgdGhlIEtWTSBNTVUgbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIHdvcmsgY29ycmVjdGx5IHdpdGhvdXQgaW50cm9kdWNpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VklSVFVBTElaQVRJT04mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlJiMzNDssCiAgICAmIzM0O2t2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZCYjMzQ7LAogICAgJiMzNDtrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbXBsZW1lbnRzIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGZvciBLVk0gb24gUklTQy1WLCBtb2RpZnlpbmcgdGhlIEtWTSBNTVUgbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIHdvcmsgY29ycmVjdGx5IHdpdGhvdXQgaW50cm9kdWNpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjIwLjAzNTY2MTY0MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NTE0MDI0NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2VcIixcbiAgICBcImt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZFwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGZvciBLVk0gb24gUklTQy1WLCBtb2RpZnlpbmcgdGhlIEtWTSBNTVUgbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIHdvcmsgY29ycmVjdGx5IHdpdGhvdXQgaW50cm9kdWNpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTY6MjM6MjAuMDM1Njc0ODIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjYyNjE0ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBlZDljOTA1ZGE2YmJhNjJjMTdmYzQzN2E3Mzk2NWQzMmQyNDQwY2UyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDEgMTY6MjM6MTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbmluZGV4IGI1NDkzYTdmOGYyMjguLmQ3OGVkYTdlZTIzYTUgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxcbkBAIC0zMDQ3LDcgKzMwNDcsNyBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXHRcXHRcXHREZWZhdWx0IGlzIDAgKGRvbid0IGlnbm9yZSwgYnV0IGluamVjdCAjR1ApXFxuIFxcbiBcXHRrdm0uZWFnZXJfcGFnZV9zcGxpdD1cXG4tXFx0XFx0XFx0W0tWTSxYODZdIENvbnRyb2xzIHdoZXRoZXIgb3Igbm90IEtWTSB3aWxsIHRyeSB0b1xcbitcXHRcXHRcXHRbS1ZNLFg4NixSSVNDVl0gQ29udHJvbHMgd2hldGhlciBvciBub3QgS1ZNIHdpbGwgdHJ5IHRvXFxuIFxcdFxcdFxcdHByb2FjdGl2ZWx5IHNwbGl0IGFsbCBodWdlIHBhZ2VzIGR1cmluZyBkaXJ0eSBsb2dnaW5nLlxcbiBcXHRcXHRcXHRFYWdlciBwYWdlIHNwbGl0dGluZyByZWR1Y2VzIGludGVycnVwdGlvbnMgdG8gdkNQVVxcbiBcXHRcXHRcXHRleGVjdXRpb24gYnkgZWxpbWluYXRpbmcgdGhlIHdyaXRlLXByb3RlY3Rpb24gZmF1bHRzXFxuQEAgLTMwNjcsNyArMzA2NywxMCBAQCBLZXJuZWwgcGFyYW1ldGVyc1xcbiBcXHRcXHRcXHR0aGUgS1ZNX0NMRUFSX0RJUlRZIGlvY3RsLCBhbmQgb25seSBmb3IgdGhlIHBhZ2VzIGJlaW5nXFxuIFxcdFxcdFxcdGNsZWFyZWQuXFxuIFxcbi1cXHRcXHRcXHRFYWdlciBwYWdlIHNwbGl0dGluZyBpcyBvbmx5IHN1cHBvcnRlZCB3aGVuIGt2bS50ZHBfbW11PVkuXFxuK1xcdFxcdFxcdE9uIHg4NiwgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgb25seSBzdXBwb3J0ZWQgd2hlblxcbitcXHRcXHRcXHRrdm0udGRwX21tdT1ZLlxcbitcXG4rXFx0XFx0XFx0T24gUklTQ1YsIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0LlxcbiBcXG4gXFx0XFx0XFx0RGVmYXVsdCBpcyBZIChvbikuXFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaCBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oXFxuaW5kZXggMjFlMjAxOWRmMGNmNS4uZjcyNjI3OTc4MDE3NyAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oXFxuQEAgLTY0LDkgKzY0LDkgQEAgaW50IGt2bV9yaXNjdl9nc3RhZ2VfbWFwX3BhZ2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG4gXFx0XFx0XFx0ICAgICAgYm9vbCBwYWdlX3Jkb25seSwgYm9vbCBwYWdlX2V4ZWMsXFxuIFxcdFxcdFxcdCAgICAgIHN0cnVjdCBrdm1fZ3N0YWdlX21hcHBpbmcgKm91dF9tYXApO1xcbiBcXG4taW50IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcXG4tXFx0XFx0XFx0XFx0Z3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaCk7XFxuK2Jvb2wga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcXG4rXFx0XFx0XFx0XFx0IGdwYV90IGFkZHIsIHUzMiB0YXJnZXRfbGV2ZWwsIGJvb2wgZmx1c2gpO1xcbiBcXG4gZW51bSBrdm1fcmlzY3ZfZ3N0YWdlX29wIHtcXG4gXFx0R1NUQUdFX09QX05PUCA9IDAsXFx0LyogTm90aGluZyAqL1xcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCBlMmQ1ODA4MTY5ZTQ0Li43MWU0NTVkMTY2OTA1IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC04Niw2ICs4Niw3IEBAIHN0cnVjdCBrdm1fYXJjaCB7XFxuIFxcdHBnZF90ICpwZ2Q7XFxuIFxcdHBoeXNfYWRkcl90IHBnZF9waHlzO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBnZF9sZXZlbHM7XFxuK1xcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBwZ2Rfc3BsaXRfcGFnZV9jYWNoZTtcXG4gXFxuIFxcdC8qIEd1ZXN0IFRpbWVyICovXFxuIFxcdHN0cnVjdCBrdm1fZ3Vlc3RfdGltZXIgdGltZXI7XFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcXG5pbmRleCBiMDQ3NGZjZjA2NWFhLi4wMTY3OWFlZjUzMjg5IDEwMDY0NFxcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jXFxuKysrIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcXG5AQCAtMzA3LDE5ICszMDcsMjAgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1ha2VfY2hpbGRfcHRlKHVuc2lnbmVkIGxvbmcgaHVnZV9wdGUsIGludCBpbmRleCxcXG4gXFx0cmV0dXJuIGNoaWxkX3B0ZTtcXG4gfVxcbiBcXG4taW50IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxcbi1cXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKnBjYWNoZSxcXG4tXFx0XFx0XFx0XFx0Z3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaClcXG4rYm9vbCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG4rXFx0XFx0XFx0XFx0IHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxcbitcXHRcXHRcXHRcXHQgZ3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaClcXG4ge1xcbiBcXHR1MzIgY3VycmVudF9sZXZlbCA9IGdzdGFnZS1cXHUwMDNlcGdkX2xldmVscyAtIDE7XFxuIFxcdHB0ZV90ICpuZXh0X3B0ZXAgPSAocHRlX3QgKilnc3RhZ2UtXFx1MDAzZXBnZDtcXG4gXFx0dW5zaWduZWQgbG9uZyBodWdlX3B0ZSwgY2hpbGRfcHRlO1xcbiBcXHR1bnNpZ25lZCBsb25nIGNoaWxkX3BhZ2Vfc2l6ZTtcXG4rXFx0Ym9vbCBuZWVkX2ZsdXNoID0gZmFsc2U7XFxuIFxcdHB0ZV90ICpwdGVwO1xcbiBcXHRpbnQgaSwgcmV0O1xcbiBcXG4gXFx0aWYgKCFwY2FjaGUpXFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHR3aGlsZShjdXJyZW50X2xldmVsIFxcdTAwM2UgdGFyZ2V0X2xldmVsKSB7XFxuIFxcdFxcdHB0ZXAgPSAocHRlX3QgKilcXHUwMDI2bmV4dF9wdGVwW2dzdGFnZV9wdGVfaW5kZXgoZ3N0YWdlLCBhZGRyLCBjdXJyZW50X2xldmVsKV07XFxuQEAgLTMzNywyNyArMzM4LDM1IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2Uoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG4gXFxuIFxcdFxcdHJldCA9IGdzdGFnZV9sZXZlbF90b19wYWdlX3NpemUoZ3N0YWdlLCBjdXJyZW50X2xldmVsIC0gMSwgXFx1MDAyNmNoaWxkX3BhZ2Vfc2l6ZSk7XFxuIFxcdFxcdGlmIChyZXQpXFxuLVxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdHJldHVybiBuZWVkX2ZsdXNoO1xcbiBcXG4gXFx0XFx0bmV4dF9wdGVwID0ga3ZtX21tdV9tZW1vcnlfY2FjaGVfYWxsb2MocGNhY2hlKTtcXG4gXFx0XFx0aWYgKCFuZXh0X3B0ZXApXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRcXHRyZXR1cm4gbmVlZF9mbHVzaDtcXG4gXFxuIFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBQVFJTX1BFUl9QVEU7IGkrKykge1xcbiBcXHRcXHRcXHRjaGlsZF9wdGUgPSBtYWtlX2NoaWxkX3B0ZShodWdlX3B0ZSwgaSwgY2hpbGRfcGFnZV9zaXplKTtcXG4gXFx0XFx0XFx0c2V0X3B0ZSgocHRlX3QgKilcXHUwMDI2bmV4dF9wdGVwW2ldLCBfX3B0ZShjaGlsZF9wdGUpKTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogRW5zdXJlIHRoZSB3cml0ZXMgdG8gdGhlIGNoaWxkIFBURXMgYXJlIHZpc2libGUgYmVmb3JlXFxuK1xcdFxcdCAqIGxpbmtpbmcgdGhlIG5ldyBwYWdlIHRhYmxlIHRvIHRoZSBwYXJlbnQgUFRFLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c21wX3dtYigpO1xcbitcXG4gXFx0XFx0c2V0X3B0ZShwdGVwLCBwZm5fcHRlKFBGTl9ET1dOKF9fcGEobmV4dF9wdGVwKSksXFxuIFxcdFxcdFxcdFxcdF9fcGdwcm90KF9QQUdFX1RBQkxFKSkpO1xcbiBcXG4gXFx0XFx0aWYgKGZsdXNoKVxcbiBcXHRcXHRcXHRnc3RhZ2VfdGxiX2ZsdXNoKGdzdGFnZSwgY3VycmVudF9sZXZlbCwgYWRkcik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0bmVlZF9mbHVzaCA9IHRydWU7XFxuIFxcbiBcXHRcXHRjdXJyZW50X2xldmVsLS07XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gbmVlZF9mbHVzaDtcXG4gfVxcbiBcXG4gYm9vbCBrdm1fcmlzY3ZfZ3N0YWdlX29wX3B0ZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLCBncGFfdCBhZGRyLFxcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuaW5kZXggOGEwYWE1ZTBlMjE2ZS4uNDMxNDc1M2ZjNDdhOCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuQEAgLTE2LDYgKzE2LDkgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm1fbW11LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX25hY2wuaFxcdTAwM2VcXG4gXFxuK3N0YXRpYyBib29sIF9fcmVhZF9tb3N0bHkgZWFnZXJfcGFnZV9zcGxpdCA9IHRydWU7XFxuK21vZHVsZV9wYXJhbShlYWdlcl9wYWdlX3NwbGl0LCBib29sLCAwNjQ0KTtcXG4rXFxuIHN0YXRpYyB2b2lkIG1tdV93cF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpXFxuIHtcXG4gXFx0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTtcXG5AQCAtOTgsNiArMTAxLDYyIEBAIHZvaWQga3ZtX3Jpc2N2X21tdV9pb3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgZ3BhX3QgZ3BhLCB1bnNpZ25lZCBsb25nIHNpemUpXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBuZWVkX3RvcHVwX3NwbGl0X2NhY2hlc19vcl9yZXNjaGVkKHN0cnVjdCBrdm0gKmt2bSwgaW50IGNvdW50KVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqY2FjaGU7XFxuK1xcbitcXHRpZiAobmVlZF9yZXNjaGVkKCkgfHwgcndsb2NrX25lZWRicmVhayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jaykpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0Y2FjaGUgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlO1xcbitcXHRyZXR1cm4ga3ZtX21tdV9tZW1vcnlfY2FjaGVfbnJfZnJlZV9vYmplY3RzKGNhY2hlKSBcXHUwMDNjIGNvdW50O1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBtbXVfc3BsaXRfaHVnZV9wYWdlcyhzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxcbitcXHRcXHRcXHRcXHQgcGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZClcXG4re1xcbitcXHRzdHJ1Y3Qga3ZtICprdm0gPSBnc3RhZ2UtXFx1MDAzZWt2bTtcXG4rXFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUgPSBcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlO1xcbitcXHRwaHlzX2FkZHJfdCBhZGRyID0gQUxJR05fRE9XTihzdGFydCwgUE1EX1NJWkUpO1xcbitcXHRwaHlzX2FkZHJfdCBsYXN0X2ZsdXNoX2dmbiA9IGFkZHIgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4rXFx0aW50IGNvdW50ID0gZ3N0YWdlLVxcdTAwM2VwZ2RfbGV2ZWxzO1xcbitcXHRib29sIGZsdXNoID0gZmFsc2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4rXFxuK1xcdHdoaWxlIChhZGRyIFxcdTAwM2MgZW5kKSB7XFxuK1xcdFxcdGlmIChuZWVkX3RvcHVwX3NwbGl0X2NhY2hlc19vcl9yZXNjaGVkKGt2bSwgY291bnQpKSB7XFxuK1xcdFxcdFxcdGlmIChmbHVzaCkge1xcbitcXHRcXHRcXHRcXHRrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoa3ZtLCBsYXN0X2ZsdXNoX2dmbixcXG4rXFx0XFx0XFx0XFx0XFx0ICAoYWRkciBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSAtIGxhc3RfZmx1c2hfZ2ZuKTtcXG4rXFx0XFx0XFx0XFx0bGFzdF9mbHVzaF9nZm4gPSBhZGRyIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcdFxcdFxcdFxcdGZsdXNoID0gZmFsc2U7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0ga3ZtX21tdV90b3B1cF9tZW1vcnlfY2FjaGUocGNhY2hlLCBjb3VudCk7XFxuK1xcdFxcdFxcdGlmIChyZXQpIHtcXG4rXFx0XFx0XFx0XFx0a3ZtX2VycihcXFwiRmFpbGVkIHRvIHRvdXAgc3BsaXQgcGFnZSBjYWNoZVxcXFxuXFxcIik7XFxuK1xcdFxcdFxcdFxcdHdyaXRlX2xvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gZmx1c2g7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0d3JpdGVfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICgha3ZtLVxcdTAwM2VhcmNoLnBnZClcXG4rXFx0XFx0XFx0cmV0dXJuIGZsdXNoO1xcbitcXG4rXFx0XFx0Zmx1c2ggfD0ga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKGdzdGFnZSwgcGNhY2hlLCBhZGRyLCAwLCBmYWxzZSk7XFxuK1xcbitcXHRcXHRhZGRyICs9IFBNRF9TSVpFO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmx1c2g7XFxuK31cXG4rXFxuIHZvaWQga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGdmbl90IGdmbl9vZmZzZXQsXFxuQEAgLTEwNywxNCArMTY2LDIwIEBAIHZvaWQga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0cGh5c19hZGRyX3Qgc3RhcnQgPSAoYmFzZV9nZm4gKyAgX19mZnMobWFzaykpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIFxcdHBoeXNfYWRkcl90IGVuZCA9IChiYXNlX2dmbiArIF9fZmxzKG1hc2spICsgMSkgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVDtcXG4gXFx0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xcbi1cXHRib29sIGZsdXNoO1xcbiBcXG4gXFx0a3ZtX3Jpc2N2X2dzdGFnZV9pbml0KFxcdTAwMjZnc3RhZ2UsIGt2bSk7XFxuIFxcbi1cXHRmbHVzaCA9IGt2bV9yaXNjdl9nc3RhZ2Vfd3BfcmFuZ2UoXFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XFxuLVxcdGlmIChmbHVzaClcXG4tXFx0XFx0a3ZtX2ZsdXNoX3JlbW90ZV90bGJzX3JhbmdlKGt2bSwgc3RhcnQgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgIChlbmQgLSBzdGFydCkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCk7XFxuK1xcdGt2bV9yaXNjdl9nc3RhZ2Vfd3BfcmFuZ2UoXFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XFxuK1xcbitcXHRpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSkge1xcbitcXHRcXHRpZiAoUkVBRF9PTkNFKGVhZ2VyX3BhZ2Vfc3BsaXQpKVxcbitcXHRcXHRcXHRtbXVfc3BsaXRfaHVnZV9wYWdlcyhcXHUwMDI2Z3N0YWdlLCBzdGFydCwgZW5kKTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogcmVtb3RlIFRMQiBmbHVzaCBpcyBub3QgbmVlZGVkIGhlcmUgc2luY2UgY2FsbGVycyBvZlxcbitcXHQgKiBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoKSBhbHJlYWR5IGRvIGl0LlxcbitcXHQgKi9cXG4gfVxcbiBcXG4gdm9pZCBrdm1fYXJjaF9zeW5jX2RpcnR5X2xvZyhzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QpXFxuQEAgLTE1Miw2ICsyMTcsMjUgQEAgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBzaXplIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQpO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBtbXVfc3BsaXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0ga3ZtX21lbXNsb3RzKGt2bSk7XFxuK1xcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QgPSBpZF90b19tZW1zbG90KHNsb3RzLCBzbG90KTtcXG4rXFx0cGh5c19hZGRyX3Qgc3RhcnQgPSBtZW1zbG90LVxcdTAwM2ViYXNlX2dmbiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbitcXHRwaHlzX2FkZHJfdCBlbmQgPSAobWVtc2xvdC1cXHUwMDNlYmFzZV9nZm4gKyBtZW1zbG90LVxcdTAwM2VucGFnZXMpIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuK1xcdHN0cnVjdCBrdm1fZ3N0YWdlIGdzdGFnZTtcXG4rXFx0Ym9vbCBmbHVzaDtcXG4rXFxuK1xcdGt2bV9yaXNjdl9nc3RhZ2VfaW5pdChcXHUwMDI2Z3N0YWdlLCBrdm0pO1xcbitcXG4rXFx0d3JpdGVfbG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcdGZsdXNoID0gbW11X3NwbGl0X2h1Z2VfcGFnZXMoXFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XFxuK1xcdHdyaXRlX3VubG9jayhcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuK1xcbitcXHRpZiAoZmx1c2gpXFxuK1xcdFxcdGt2bV9mbHVzaF9yZW1vdGVfdGxic19tZW1zbG90KGt2bSwgbWVtc2xvdCk7XFxuK31cXG4rXFxuIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXFxuIFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm5ldyxcXG5AQCAtMTY1LDYgKzI0OSw5IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRtbXVfd3BfbWVtb3J5X3JlZ2lvbihrdm0sIG5ldy1cXHUwMDNlaWQpO1xcbitcXG4rXFx0XFx0aWYgKFJFQURfT05DRShlYWdlcl9wYWdlX3NwbGl0KSlcXG4rXFx0XFx0XFx0bW11X3NwbGl0X21lbW9yeV9yZWdpb24oa3ZtLCBuZXctXFx1MDAzZWlkKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC02NzcsNiArNzY0LDcgQEAgaW50IGt2bV9yaXNjdl9tbXVfYWxsb2NfcGdkKHN0cnVjdCBrdm0gKmt2bSlcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLnBnZCA9IHBhZ2VfdG9fdmlydChwZ2RfcGFnZSk7XFxuIFxcdGt2bS1cXHUwMDNlYXJjaC5wZ2RfcGh5cyA9IHBhZ2VfdG9fcGh5cyhwZ2RfcGFnZSk7XFxuIFxcdGt2bS1cXHUwMDNlYXJjaC5wZ2RfbGV2ZWxzID0ga3ZtX3Jpc2N2X2dzdGFnZV9tYXhfcGdkX2xldmVscztcXG4rXFx0a3ZtLVxcdTAwM2VhcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlLmdmcF96ZXJvID0gX19HRlBfWkVSTztcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTcwNCw2ICs3OTIsOCBAQCB2b2lkIGt2bV9yaXNjdl9tbXVfZnJlZV9wZ2Qoc3RydWN0IGt2bSAqa3ZtKVxcbiBcXG4gXFx0aWYgKHBnZClcXG4gXFx0XFx0ZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwZ2QsIGdldF9vcmRlcihrdm1fcmlzY3ZfZ3N0YWdlX3BnZF9zaXplKSk7XFxuK1xcbitcXHRrdm1fbW11X2ZyZWVfbWVtb3J5X2NhY2hlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGUpO1xcbiB9XFxuIFxcbiB2b2lkIGt2bV9yaXNjdl9tbXVfdXBkYXRlX2hnYXRwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTY6MjM6MjAuNjYzMDMyNjM0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzM4ODY1ODc2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVFVBTElaQVRJT05cIixcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZVwiLFxuICAgIFwia3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgZWFnZXIgcGFnZSBzcGxpdHRpbmcgZm9yIEtWTSBvbiBSSVNDLVYsIG1vZGlmeWluZyB0aGUgS1ZNIE1NVSBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRpcnR5IGxvZ2dpbmcgd29yayBjb3JyZWN0bHkgd2l0aG91dCBpbnRyb2R1Y2luZyBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlZDljOTA1ZGE2YmJhNjJjMTdmYzQzN2E3Mzk2NWQzMmQyNDQwY2UyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxNjoyMzoxOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUva2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbmluZGV4IGI1NDkzYTdmOGYyMjguLmQ3OGVkYTdlZTIzYTUgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9rZXJuZWwtcGFyYW1ldGVycy50eHRcbkBAIC0zMDQ3LDcgKzMwNDcsNyBAQCBLZXJuZWwgcGFyYW1ldGVyc1xuIFx0XHRcdERlZmF1bHQgaXMgMCAoZG9uJ3QgaWdub3JlLCBidXQgaW5qZWN0ICNHUClcbiBcbiBcdGt2bS5lYWdlcl9wYWdlX3NwbGl0PVxuLVx0XHRcdFtLVk0sWDg2XSBDb250cm9scyB3aGV0aGVyIG9yIG5vdCBLVk0gd2lsbCB0cnkgdG9cbitcdFx0XHRbS1ZNLFg4NixSSVNDVl0gQ29udHJvbHMgd2hldGhlciBvciBub3QgS1ZNIHdpbGwgdHJ5IHRvXG4gXHRcdFx0cHJvYWN0aXZlbHkgc3BsaXQgYWxsIGh1Z2UgcGFnZXMgZHVyaW5nIGRpcnR5IGxvZ2dpbmcuXG4gXHRcdFx0RWFnZXIgcGFnZSBzcGxpdHRpbmcgcmVkdWNlcyBpbnRlcnJ1cHRpb25zIHRvIHZDUFVcbiBcdFx0XHRleGVjdXRpb24gYnkgZWxpbWluYXRpbmcgdGhlIHdyaXRlLXByb3RlY3Rpb24gZmF1bHRzXG5AQCAtMzA2Nyw3ICszMDY3LDEwIEBAIEtlcm5lbCBwYXJhbWV0ZXJzXG4gXHRcdFx0dGhlIEtWTV9DTEVBUl9ESVJUWSBpb2N0bCwgYW5kIG9ubHkgZm9yIHRoZSBwYWdlcyBiZWluZ1xuIFx0XHRcdGNsZWFyZWQuXG4gXG4tXHRcdFx0RWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgb25seSBzdXBwb3J0ZWQgd2hlbiBrdm0udGRwX21tdT1ZLlxuK1x0XHRcdE9uIHg4NiwgZWFnZXIgcGFnZSBzcGxpdHRpbmcgaXMgb25seSBzdXBwb3J0ZWQgd2hlblxuK1x0XHRcdGt2bS50ZHBfbW11PVkuXG4rXG4rXHRcdFx0T24gUklTQ1YsIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGlzIHN1cHBvcnRlZCBieSBkZWZhdWx0LlxuIFxuIFx0XHRcdERlZmF1bHQgaXMgWSAob24pLlxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2dzdGFnZS5oIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmhcbmluZGV4IDIxZTIwMTlkZjBjZjUuLmY3MjYyNzk3ODAxNzcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9nc3RhZ2UuaFxuKysrIGIvYXJjaC9yaXNjdi9pbmNsdWRlL2FzbS9rdm1fZ3N0YWdlLmhcbkBAIC02NCw5ICs2NCw5IEBAIGludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXHRcdFx0ICAgICAgYm9vbCBwYWdlX3Jkb25seSwgYm9vbCBwYWdlX2V4ZWMsXG4gXHRcdFx0ICAgICAgc3RydWN0IGt2bV9nc3RhZ2VfbWFwcGluZyAqb3V0X21hcCk7XG4gXG4taW50IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuLVx0XHRcdFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG4tXHRcdFx0XHRncGFfdCBhZGRyLCB1MzIgdGFyZ2V0X2xldmVsLCBib29sIGZsdXNoKTtcbitib29sIGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuK1x0XHRcdFx0IHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqcGNhY2hlLFxuK1x0XHRcdFx0IGdwYV90IGFkZHIsIHUzMiB0YXJnZXRfbGV2ZWwsIGJvb2wgZmx1c2gpO1xuIFxuIGVudW0ga3ZtX3Jpc2N2X2dzdGFnZV9vcCB7XG4gXHRHU1RBR0VfT1BfTk9QID0gMCxcdC8qIE5vdGhpbmcgKi9cbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGUyZDU4MDgxNjllNDQuLjcxZTQ1NWQxNjY5MDUgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gvcmlzY3YvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTg2LDYgKzg2LDcgQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdHBnZF90ICpwZ2Q7XG4gXHRwaHlzX2FkZHJfdCBwZ2RfcGh5cztcbiBcdHVuc2lnbmVkIGxvbmcgcGdkX2xldmVscztcbitcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSBwZ2Rfc3BsaXRfcGFnZV9jYWNoZTtcbiBcbiBcdC8qIEd1ZXN0IFRpbWVyICovXG4gXHRzdHJ1Y3Qga3ZtX2d1ZXN0X3RpbWVyIHRpbWVyO1xuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbmluZGV4IGIwNDc0ZmNmMDY1YWEuLjAxNjc5YWVmNTMyODkgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNcbkBAIC0zMDcsMTkgKzMwNywyMCBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWFrZV9jaGlsZF9wdGUodW5zaWduZWQgbG9uZyBodWdlX3B0ZSwgaW50IGluZGV4LFxuIFx0cmV0dXJuIGNoaWxkX3B0ZTtcbiB9XG4gXG4taW50IGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxuLVx0XHRcdFx0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG4tXHRcdFx0XHRncGFfdCBhZGRyLCB1MzIgdGFyZ2V0X2xldmVsLCBib29sIGZsdXNoKVxuK2Jvb2wga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4rXHRcdFx0XHQgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXG4rXHRcdFx0XHQgZ3BhX3QgYWRkciwgdTMyIHRhcmdldF9sZXZlbCwgYm9vbCBmbHVzaClcbiB7XG4gXHR1MzIgY3VycmVudF9sZXZlbCA9IGdzdGFnZS1cdTAwM2VwZ2RfbGV2ZWxzIC0gMTtcbiBcdHB0ZV90ICpuZXh0X3B0ZXAgPSAocHRlX3QgKilnc3RhZ2UtXHUwMDNlcGdkO1xuIFx0dW5zaWduZWQgbG9uZyBodWdlX3B0ZSwgY2hpbGRfcHRlO1xuIFx0dW5zaWduZWQgbG9uZyBjaGlsZF9wYWdlX3NpemU7XG4rXHRib29sIG5lZWRfZmx1c2ggPSBmYWxzZTtcbiBcdHB0ZV90ICpwdGVwO1xuIFx0aW50IGksIHJldDtcbiBcbiBcdGlmICghcGNhY2hlKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0d2hpbGUoY3VycmVudF9sZXZlbCBcdTAwM2UgdGFyZ2V0X2xldmVsKSB7XG4gXHRcdHB0ZXAgPSAocHRlX3QgKilcdTAwMjZuZXh0X3B0ZXBbZ3N0YWdlX3B0ZV9pbmRleChnc3RhZ2UsIGFkZHIsIGN1cnJlbnRfbGV2ZWwpXTtcbkBAIC0zMzcsMjcgKzMzOCwzNSBAQCBpbnQga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4gXG4gXHRcdHJldCA9IGdzdGFnZV9sZXZlbF90b19wYWdlX3NpemUoZ3N0YWdlLCBjdXJyZW50X2xldmVsIC0gMSwgXHUwMDI2Y2hpbGRfcGFnZV9zaXplKTtcbiBcdFx0aWYgKHJldClcbi1cdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRcdHJldHVybiBuZWVkX2ZsdXNoO1xuIFxuIFx0XHRuZXh0X3B0ZXAgPSBrdm1fbW11X21lbW9yeV9jYWNoZV9hbGxvYyhwY2FjaGUpO1xuIFx0XHRpZiAoIW5leHRfcHRlcClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbitcdFx0XHRyZXR1cm4gbmVlZF9mbHVzaDtcbiBcbiBcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUFRSU19QRVJfUFRFOyBpKyspIHtcbiBcdFx0XHRjaGlsZF9wdGUgPSBtYWtlX2NoaWxkX3B0ZShodWdlX3B0ZSwgaSwgY2hpbGRfcGFnZV9zaXplKTtcbiBcdFx0XHRzZXRfcHRlKChwdGVfdCAqKVx1MDAyNm5leHRfcHRlcFtpXSwgX19wdGUoY2hpbGRfcHRlKSk7XG4gXHRcdH1cbiBcbitcdFx0LypcbitcdFx0ICogRW5zdXJlIHRoZSB3cml0ZXMgdG8gdGhlIGNoaWxkIFBURXMgYXJlIHZpc2libGUgYmVmb3JlXG4rXHRcdCAqIGxpbmtpbmcgdGhlIG5ldyBwYWdlIHRhYmxlIHRvIHRoZSBwYXJlbnQgUFRFLlxuK1x0XHQgKi9cbitcdFx0c21wX3dtYigpO1xuK1xuIFx0XHRzZXRfcHRlKHB0ZXAsIHBmbl9wdGUoUEZOX0RPV04oX19wYShuZXh0X3B0ZXApKSxcbiBcdFx0XHRcdF9fcGdwcm90KF9QQUdFX1RBQkxFKSkpO1xuIFxuIFx0XHRpZiAoZmx1c2gpXG4gXHRcdFx0Z3N0YWdlX3RsYl9mbHVzaChnc3RhZ2UsIGN1cnJlbnRfbGV2ZWwsIGFkZHIpO1xuK1x0XHRlbHNlXG4rXHRcdFx0bmVlZF9mbHVzaCA9IHRydWU7XG4gXG4gXHRcdGN1cnJlbnRfbGV2ZWwtLTtcbiBcdH1cbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIG5lZWRfZmx1c2g7XG4gfVxuIFxuIGJvb2wga3ZtX3Jpc2N2X2dzdGFnZV9vcF9wdGUoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSwgZ3BhX3QgYWRkcixcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG5pbmRleCA4YTBhYTVlMGUyMTZlLi40MzE0NzUzZmM0N2E4IDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9rdm0vbW11LmNcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG5AQCAtMTYsNiArMTYsOSBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX25hY2wuaFx1MDAzZVxuIFxuK3N0YXRpYyBib29sIF9fcmVhZF9tb3N0bHkgZWFnZXJfcGFnZV9zcGxpdCA9IHRydWU7XG4rbW9kdWxlX3BhcmFtKGVhZ2VyX3BhZ2Vfc3BsaXQsIGJvb2wsIDA2NDQpO1xuK1xuIHN0YXRpYyB2b2lkIG1tdV93cF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpXG4ge1xuIFx0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTtcbkBAIC05OCw2ICsxMDEsNjIgQEAgdm9pZCBrdm1fcmlzY3ZfbW11X2lvdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCBncGFfdCBncGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSlcbiBcdFx0XHRcdFx0ICAgIHNpemUgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBuZWVkX3RvcHVwX3NwbGl0X2NhY2hlc19vcl9yZXNjaGVkKHN0cnVjdCBrdm0gKmt2bSwgaW50IGNvdW50KVxuK3tcbitcdHN0cnVjdCBrdm1fbW11X21lbW9yeV9jYWNoZSAqY2FjaGU7XG4rXG4rXHRpZiAobmVlZF9yZXNjaGVkKCkgfHwgcndsb2NrX25lZWRicmVhayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdGNhY2hlID0gXHUwMDI2a3ZtLVx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGU7XG4rXHRyZXR1cm4ga3ZtX21tdV9tZW1vcnlfY2FjaGVfbnJfZnJlZV9vYmplY3RzKGNhY2hlKSBcdTAwM2MgY291bnQ7XG4rfVxuK1xuK3N0YXRpYyBib29sIG1tdV9zcGxpdF9odWdlX3BhZ2VzKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXG4rXHRcdFx0XHQgcGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZClcbit7XG4rXHRzdHJ1Y3Qga3ZtICprdm0gPSBnc3RhZ2UtXHUwMDNla3ZtO1xuK1x0c3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUgPSBcdTAwMjZrdm0tXHUwMDNlYXJjaC5wZ2Rfc3BsaXRfcGFnZV9jYWNoZTtcbitcdHBoeXNfYWRkcl90IGFkZHIgPSBBTElHTl9ET1dOKHN0YXJ0LCBQTURfU0laRSk7XG4rXHRwaHlzX2FkZHJfdCBsYXN0X2ZsdXNoX2dmbiA9IGFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRpbnQgY291bnQgPSBnc3RhZ2UtXHUwMDNlcGdkX2xldmVscztcbitcdGJvb2wgZmx1c2ggPSBmYWxzZTtcbitcdGludCByZXQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXG4rXHR3aGlsZSAoYWRkciBcdTAwM2MgZW5kKSB7XG4rXHRcdGlmIChuZWVkX3RvcHVwX3NwbGl0X2NhY2hlc19vcl9yZXNjaGVkKGt2bSwgY291bnQpKSB7XG4rXHRcdFx0aWYgKGZsdXNoKSB7XG4rXHRcdFx0XHRrdm1fZmx1c2hfcmVtb3RlX3RsYnNfcmFuZ2Uoa3ZtLCBsYXN0X2ZsdXNoX2dmbixcbitcdFx0XHRcdFx0ICAoYWRkciBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgLSBsYXN0X2ZsdXNoX2dmbik7XG4rXHRcdFx0XHRsYXN0X2ZsdXNoX2dmbiA9IGFkZHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4rXHRcdFx0XHRmbHVzaCA9IGZhbHNlO1xuK1x0XHRcdH1cbitcbitcdFx0XHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbitcbitcdFx0XHRyZXQgPSBrdm1fbW11X3RvcHVwX21lbW9yeV9jYWNoZShwY2FjaGUsIGNvdW50KTtcbitcdFx0XHRpZiAocmV0KSB7XG4rXHRcdFx0XHRrdm1fZXJyKFwiRmFpbGVkIHRvIHRvdXAgc3BsaXQgcGFnZSBjYWNoZVxcblwiKTtcbitcdFx0XHRcdHdyaXRlX2xvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcdFx0XHRcdHJldHVybiBmbHVzaDtcbitcdFx0XHR9XG4rXHRcdFx0d3JpdGVfbG9jayhcdTAwMjZrdm0tXHUwMDNlbW11X2xvY2spO1xuK1x0XHR9XG4rXG4rXHRcdGlmICgha3ZtLVx1MDAzZWFyY2gucGdkKVxuK1x0XHRcdHJldHVybiBmbHVzaDtcbitcbitcdFx0Zmx1c2ggfD0ga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKGdzdGFnZSwgcGNhY2hlLCBhZGRyLCAwLCBmYWxzZSk7XG4rXG4rXHRcdGFkZHIgKz0gUE1EX1NJWkU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmx1c2g7XG4rfVxuK1xuIHZvaWQga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LFxuIFx0XHRcdFx0XHQgICAgIGdmbl90IGdmbl9vZmZzZXQsXG5AQCAtMTA3LDE0ICsxNjYsMjAgQEAgdm9pZCBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoc3RydWN0IGt2bSAqa3ZtLFxuIFx0cGh5c19hZGRyX3Qgc3RhcnQgPSAoYmFzZV9nZm4gKyAgX19mZnMobWFzaykpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIFx0cGh5c19hZGRyX3QgZW5kID0gKGJhc2VfZ2ZuICsgX19mbHMobWFzaykgKyAxKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiBcdHN0cnVjdCBrdm1fZ3N0YWdlIGdzdGFnZTtcbi1cdGJvb2wgZmx1c2g7XG4gXG4gXHRrdm1fcmlzY3ZfZ3N0YWdlX2luaXQoXHUwMDI2Z3N0YWdlLCBrdm0pO1xuIFxuLVx0Zmx1c2ggPSBrdm1fcmlzY3ZfZ3N0YWdlX3dwX3JhbmdlKFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XG4tXHRpZiAoZmx1c2gpXG4tXHRcdGt2bV9mbHVzaF9yZW1vdGVfdGxic19yYW5nZShrdm0sIHN0YXJ0IFx1MDAzZVx1MDAzZSBQQUdFX1NISUZULFxuLVx0XHRcdFx0XHQgICAgKGVuZCAtIHN0YXJ0KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXHRrdm1fcmlzY3ZfZ3N0YWdlX3dwX3JhbmdlKFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XG4rXG4rXHRpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSkge1xuK1x0XHRpZiAoUkVBRF9PTkNFKGVhZ2VyX3BhZ2Vfc3BsaXQpKVxuK1x0XHRcdG1tdV9zcGxpdF9odWdlX3BhZ2VzKFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogcmVtb3RlIFRMQiBmbHVzaCBpcyBub3QgbmVlZGVkIGhlcmUgc2luY2UgY2FsbGVycyBvZlxuK1x0ICoga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkKCkgYWxyZWFkeSBkbyBpdC5cbitcdCAqL1xuIH1cbiBcbiB2b2lkIGt2bV9hcmNoX3N5bmNfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdClcbkBAIC0xNTIsNiArMjE3LDI1IEBAIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdFx0XHQgICAgc2l6ZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIG1tdV9zcGxpdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpXG4re1xuK1x0c3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSBrdm1fbWVtc2xvdHMoa3ZtKTtcbitcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QgPSBpZF90b19tZW1zbG90KHNsb3RzLCBzbG90KTtcbitcdHBoeXNfYWRkcl90IHN0YXJ0ID0gbWVtc2xvdC1cdTAwM2ViYXNlX2dmbiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbitcdHBoeXNfYWRkcl90IGVuZCA9IChtZW1zbG90LVx1MDAzZWJhc2VfZ2ZuICsgbWVtc2xvdC1cdTAwM2VucGFnZXMpIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuK1x0c3RydWN0IGt2bV9nc3RhZ2UgZ3N0YWdlO1xuK1x0Ym9vbCBmbHVzaDtcbitcbitcdGt2bV9yaXNjdl9nc3RhZ2VfaW5pdChcdTAwMjZnc3RhZ2UsIGt2bSk7XG4rXG4rXHR3cml0ZV9sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4rXHRmbHVzaCA9IG1tdV9zcGxpdF9odWdlX3BhZ2VzKFx1MDAyNmdzdGFnZSwgc3RhcnQsIGVuZCk7XG4rXHR3cml0ZV91bmxvY2soXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbitcbitcdGlmIChmbHVzaClcbitcdFx0a3ZtX2ZsdXNoX3JlbW90ZV90bGJzX21lbXNsb3Qoa3ZtLCBtZW1zbG90KTtcbit9XG4rXG4gdm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sXG4gXHRcdFx0XHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpvbGQsXG4gXHRcdFx0XHRjb25zdCBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpuZXcsXG5AQCAtMTY1LDYgKzI0OSw5IEBAIHZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRpZiAoa3ZtX2RpcnR5X2xvZ19tYW51YWxfcHJvdGVjdF9hbmRfaW5pdF9zZXQoa3ZtKSlcbiBcdFx0XHRyZXR1cm47XG4gXHRcdG1tdV93cF9tZW1vcnlfcmVnaW9uKGt2bSwgbmV3LVx1MDAzZWlkKTtcbitcbitcdFx0aWYgKFJFQURfT05DRShlYWdlcl9wYWdlX3NwbGl0KSlcbitcdFx0XHRtbXVfc3BsaXRfbWVtb3J5X3JlZ2lvbihrdm0sIG5ldy1cdTAwM2VpZCk7XG4gXHR9XG4gfVxuIFxuQEAgLTY3Nyw2ICs3NjQsNyBAQCBpbnQga3ZtX3Jpc2N2X21tdV9hbGxvY19wZ2Qoc3RydWN0IGt2bSAqa3ZtKVxuIFx0a3ZtLVx1MDAzZWFyY2gucGdkID0gcGFnZV90b192aXJ0KHBnZF9wYWdlKTtcbiBcdGt2bS1cdTAwM2VhcmNoLnBnZF9waHlzID0gcGFnZV90b19waHlzKHBnZF9wYWdlKTtcbiBcdGt2bS1cdTAwM2VhcmNoLnBnZF9sZXZlbHMgPSBrdm1fcmlzY3ZfZ3N0YWdlX21heF9wZ2RfbGV2ZWxzO1xuK1x0a3ZtLVx1MDAzZWFyY2gucGdkX3NwbGl0X3BhZ2VfY2FjaGUuZ2ZwX3plcm8gPSBfX0dGUF9aRVJPO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTcwNCw2ICs3OTIsOCBAQCB2b2lkIGt2bV9yaXNjdl9tbXVfZnJlZV9wZ2Qoc3RydWN0IGt2bSAqa3ZtKVxuIFxuIFx0aWYgKHBnZClcbiBcdFx0ZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwZ2QsIGdldF9vcmRlcihrdm1fcmlzY3ZfZ3N0YWdlX3BnZF9zaXplKSk7XG4rXG4rXHRrdm1fbW11X2ZyZWVfbWVtb3J5X2NhY2hlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnBnZF9zcGxpdF9wYWdlX2NhY2hlKTtcbiB9XG4gXG4gdm9pZCBrdm1fcmlzY3ZfbW11X3VwZGF0ZV9oZ2F0cChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzoyMC42NjMwMzUzNDRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODc2MjAxNDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRWFnZXIgUGFnZSBTcGxpdHRpbmcgUGF0Y2ggZm9yIFJJU0MtViBLVk0qKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgbmV3IHBhdGNoIG91dCB0aGVyZSwgaW1wbGVtZW50aW5nIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGZvciBLVk0gb24gUklTQy1WLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gSXQncyB0b3VjaGluZyBgYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmNgIGFuZCBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBjb3JlIGtlcm5lbCBsb2dpYyB3aXRoaW4gdGhlIFJJU0MtViBLVk0gaW1wbGVtZW50YXRpb24uICpUaGF0J3MgcHJvbWlzaW5nIGZvciBmdXp6aW5nIC0gYSBkZWZpbml0ZSBcInllcy5cIipcblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGFuZCBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBhbHRlcmVkLiBJIHNlZSB0aGUgYWRkaXRpb24gb2YgYGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZWAgYW5kIGBtbXVfc3BsaXRfaHVnZV9wYWdlc2AsIGFsb25nc2lkZSB0aGUgaW50cm9kdWN0aW9uIG9mIGBrdm0uZWFnZXJfcGFnZV9zcGxpdGAgYXMgYSBSSVNDLVYgc3BlY2lmaWMgcGFyYW1ldGVyLiBGdW5jdGlvbiBga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlYCByZXR1cm4gdHlwZSBpcyBjaGFuZ2VkIHRvIGJvb2wuIE1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgdG8gYGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZGAgYW5kIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAuIENoYW5nZXMgYXJlIGFsc28gbWFkZSB0byB0aGUgUEdEIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiBmdW5jdGlvbnM6IGBrdm1fcmlzY3ZfbW11X2FsbG9jX3BnZGAgYW5kIGBrdm1fcmlzY3ZfbW11X2ZyZWVfcGdkYC4gVGhpcyBpcyBjbGVhcmx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIHRoZSBNTVUncyBiZWhhdmlvci4gSSBuZWVkIHRvIHRha2UgYSBjbG9zZSBsb29rIGF0IGJvdGggYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCBhbmQgYGFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jYCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NDcsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzoyNi41MzkyNDIwMDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1NTU0OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmM9MjA3PWludCBrdm1fcmlzY3ZfZ3N0YWdlX21hcF9wYWdlKHN0cnVjdCBrdm1fZ3N0YWdlICpnc3RhZ2UsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yNzgtXFx0XFx0aWYgKHB0ZXBfbGV2ZWwgXFx1MDAzZSBvdXRfbWFwLVxcdTAwM2VsZXZlbCkge1xcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jOjI3OTpcXHRcXHRcXHRrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2UoZ3N0YWdlLCBwY2FjaGUsIGdwYSxcXG5hcmNoL3Jpc2N2L2t2bS9nc3RhZ2UuYy0yODAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIG91dF9tYXAtXFx1MDAzZWxldmVsLCB0cnVlKTtcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jPTI5Mz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWFrZV9jaGlsZF9wdGUodW5zaWduZWQgbG9uZyBodWdlX3B0ZSwgaW50IGluZGV4LFxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vZ3N0YWdlLmMtMzA5LVxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jOjMxMDpib29sIGt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZShzdHJ1Y3Qga3ZtX2dzdGFnZSAqZ3N0YWdlLFxcbmFyY2gvcmlzY3Yva3ZtL2dzdGFnZS5jLTMxMS1cXHRcXHRcXHRcXHQgc3RydWN0IGt2bV9tbXVfbWVtb3J5X2NhY2hlICpwY2FjaGUsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYz0xMTU9c3RhdGljIGJvb2wgbW11X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTE1MS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzoxNTI6XFx0XFx0Zmx1c2ggfD0ga3ZtX3Jpc2N2X2dzdGFnZV9zcGxpdF9odWdlKGdzdGFnZSwgcGNhY2hlLCBhZGRyLCAwLCBmYWxzZSk7XFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMTUzLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzoyNi42NTQ4MDc1MThaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjcyNTE0MDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBSSVNDLVYgS1ZNIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgUklTQy1WIEtWTSBjb2RlIGFuZCBtYWtpbmcgc29tZSBpbml0aWFsIG9ic2VydmF0aW9ucy4gSSdtIHNlZWluZyB0aGF0IGBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2VgLCBga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkYCwgYGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uYCwgYGt2bV9yaXNjdl9tbXVfYWxsb2NfcGdkYCwgYW5kIGBrdm1fcmlzY3ZfbW11X2ZyZWVfcGdkYCBhcmUgYWxsIGV4cG9ydGVkIOKAkyB0aGF0IGlzLCB0aGV5J3JlIG5vbi1zdGF0aWMuIFRoaXMgbWVhbnMgdGhleSdyZSBsaWtlbHkgZGVzaWduZWQgZm9yIHVzZSBvdXRzaWRlIG9mIHRoZWlyIGltbWVkaWF0ZSBjb21waWxhdGlvbiB1bml0LCB3aGljaCB0ZWxscyBtZSB0aGV5J3JlIGtleSBpbnRlcmZhY2VzIG9yIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBvdGhlciBwYXJ0cyBvZiB0aGUgS1ZNIGltcGxlbWVudGF0aW9uLCBvciBwb3RlbnRpYWxseSBldmVuIG90aGVyIG1vZHVsZXMsIHdvdWxkIG5lZWQgYWNjZXNzIHRvLiBUaGlzIGlzIGltcG9ydGFudCBjb250ZXh0LlxuXG5OZXh0IHN0ZXA6IEkgc2hvdWxkIHZlcmlmeSB0aGlzIGJ5IGNoZWNraW5nIHRoZSBLY29uZmlnIG9wdGlvbnMgcmVsYXRlZCB0byBLVk0gc3VwcG9ydCBvbiBSSVNDLVYuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIGZ1bmN0aW9ucyBmaXQgaW50byB0aGUgbGFyZ2VyIEtWTSBjb25maWd1cmF0aW9uIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBtaWdodCBiZSBhdCBwbGF5LiBJJ20ga2VlbiB0byB1bmRlcnN0YW5kIGhvdyB0aGV54oCZcmUgZW5hYmxlZC9kaXNhYmxlZCBiYXNlZCBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg2NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzozMC45MjczMjQ5MjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NzU0OTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjMxLjA2NTA4Njk5OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjc1NjE0OTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3k6IEtWTSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGBLVk1gIOKAkyB0aGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIGVsZW1lbnQgd2UncmUgZGVhbGluZyB3aXRoLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBzdXJmYWNlcyBpczogd2hhdCBkb2VzIHRoaXMgZGVwZW5kIG9uPyBXaGF0IGFyZSBpdHMgcHJlcmVxdWlzaXRlcz8gSXMgaXQgc2VsZi1jb250YWluZWQsIG9yIGFyZSB0aGVyZSB1bmRlcmx5aW5nIGxpYnJhcmllcywgaGFyZHdhcmUgZmVhdHVyZXMsIG9yIGtlcm5lbCBtb2R1bGVzIHRoYXQgKm11c3QqIGJlIHByZXNlbnQgYW5kIGNvcnJlY3RseSBjb25maWd1cmVkIGZvciBgS1ZNYCB0byBmdW5jdGlvbiBhcyBleHBlY3RlZD8gSXMgdGhlcmUgYSBrbm93biBtaW5pbXVtIG9yIGNvbXBhdGlibGUgdmVyc2lvbiB0byBjb25zaWRlciwgc3VjaCBhcyBrZXJuZWwgdmVyc2lvbiBvciBRRU1VIHZlcnNpb24/IFVuZGVyc3RhbmRpbmcgdGhvc2UgZGVwZW5kZW5jaWVzIHdpbGwgYmUgY3JpdGljYWwgZm9yIGFueSB0cm91Ymxlc2hvb3Rpbmcgb3IgbW9kaWZpY2F0aW9uIGVmZm9ydHMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjczNzcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzozNC4xMzI2NTE4NTFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MjA4MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnPTIwPWNvbmZpZyBLVk1cXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIxLVxcdHRyaXN0YXRlIFxcXCJLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcXFwiXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZzoyMjpcXHRkZXBlbmRzIG9uIFJJU0NWX1NCSSBcXHUwMDI2XFx1MDAyNiBNTVVcXG5hcmNoL3Jpc2N2L2t2bS9LY29uZmlnLTIzLVxcdHNlbGVjdCBIQVZFX0tWTV9JUlFDSElQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjM0LjMzOTg2NzE1OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODE4OTMzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipLVk0gRnVuY3Rpb24gSWRlbnRpZmljYXRpb24gUHJvY2VzcyoqXG5cblJpZ2h0LCBzbyBpdCdzIGxvb2tpbmcgbGlrZSBgS1ZNYCBpcyB0aGUgY3J1Y2lhbCBwaWVjZSBoZXJlLiBOb3cgSSBuZWVkIHRvIG5haWwgZG93biB0aGUgKmV4YWN0KiBmdW5jdGlvbiBuYW1lcyBJJ2xsIGJlIHdvcmtpbmcgd2l0aC4gSSBjYW4ndCBhZmZvcmQgYW55IGFtYmlndWl0eSBvciByZWxpYW5jZSBvbiBmdXp6eSByZWNhbGwuIE15IG5leHQgc3RlcCBpcyB0byBtZXRpY3Vsb3VzbHkgaWRlbnRpZnkgZWFjaCBuZWNlc3NhcnkgZnVuY3Rpb24sIGVuc3VyaW5nIEknbSByZWZlcmVuY2luZyB0aGUgcHJlY2lzZSBpbnRlcmZhY2UgSSdtIHRhcmdldGluZy4gTm8gcm9vbSBmb3IgZ3Vlc3N3b3JrLCBqdXN0IHByZWNpc2UgZnVuY3Rpb24gbmFtZXMuIExldCdzIGRpZyBpbiBhbmQgZ2V0IHRoZSByaWdodCBzeW50YXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTcsIk91dHB1dFRva2VucyI6NDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzozNy4zMjE3NjQzNTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MTkzOTM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Jpc2N2L2t2bS9tbXUuYz0xMTU9c3RhdGljIGJvb2wgbW11X3NwbGl0X2h1Z2VfcGFnZXMoc3RydWN0IGt2bV9nc3RhZ2UgKmdzdGFnZSxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTE1OS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzoxNjA6dm9pZCBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTE2MS1cXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy0xODAtXFx0ICogcmVtb3RlIFRMQiBmbHVzaCBpcyBub3QgbmVlZGVkIGhlcmUgc2luY2UgY2FsbGVycyBvZlxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjE4MTpcXHQgKiBrdm1fYXJjaF9tbXVfZW5hYmxlX2xvZ19kaXJ0eV9wdF9tYXNrZWQoKSBhbHJlYWR5IGRvIGl0LlxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTE4Mi1cXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTY6MjM6MzcuNDE5MDEzNDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNDMzODIzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyBga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25gKipcblxuQWxyaWdodCwgbGV0J3MgZGlzc2VjdCB0aGlzLiBXaGVuIEkgc2VlIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAsIG15IG1pbmQgaW1tZWRpYXRlbHkgZ29lcyB0byB0aGUgYXJjaGl0ZWN0dXJhbCBzcGVjaWZpY3Mgb2YgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBLVk0gaHlwZXJ2aXNvci4gTXkgZmlyc3QgdGhvdWdodCBpczogdGhpcyBpcyBhIGNyaXRpY2FsIGZ1bmN0aW9uLiBJdCdzIHRoZSBwb2ludCB3aGVyZSBjaGFuZ2VzIHRvIHRoZSBndWVzdCdzIG1lbW9yeSBtYXAgYXJlICphY3R1YWxseSogbWFkZSBwZXJtYW5lbnQuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgdGhlIGZpbmFsIHZhbGlkYXRpb24gYW5kIGFwcGxpY2F0aW9uIG9mIG1lbW9yeSByZWdpb24gY2hhbmdlcywgcG90ZW50aWFsbHkgdHJpZ2dlcmluZyBUTEIgaW52YWxpZGF0aW9ucywgcGFnZSB0YWJsZSB1cGRhdGVzLCBhbmQgYWxsIHRoZSBhc3NvY2lhdGVkIGhhcmR3YXJlIHN5bmNocm9uaXphdGlvbi5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgZm9yIHBlcmZvcm1hbmNlLiBIb3cgZWZmaWNpZW50bHkgaXMgdGhpcyBpbXBsZW1lbnRlZD8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MgaGVyZT8gSXMgdGhlIGRlc2lnbiBvcHRpbWl6ZWQgZm9yIG1pbmltYWwgbGF0ZW5jeSwgZXNwZWNpYWxseSBkdXJpbmcgbGl2ZSBtaWdyYXRpb24gb3IgVk0gY3JlYXRpb24/IFRoZSBjb250ZXh0IGFyb3VuZCBpdCBtYXR0ZXJzIC0gd2hhdOKAmXMgdGhlIGNhbGxpbmcgcGF0aD8gSXMgaXQgY2FsbGVkIGZyZXF1ZW50bHk/IEluZnJlcXVlbnRseT8gV2hhdCBhcmUgdGhlIGNvbW1vbiBzY2VuYXJpb3MgdGhhdCB0cmlnZ2VyIGl0P1xuXG5J4oCZbSBhbHNvIHdvbmRlcmluZyBhYm91dCB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGludm9sdmVkLiBXaGF0IGtpbmQgb2Ygc3BpbmxvY2tzLCBtdXRleGVzLCBvciBSQ1Ugc3RydWN0dXJlcyBhcmUgdXNlZCB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIHN0cnVjdHVyZXM/IEFyZSB0aGV5IGVmZmVjdGl2ZT8gSXMgdGhlcmUgYW55IHBvdGVudGlhbCBmb3IgY29udGVudGlvbiwgZGVhZGxvY2tzLCBvciBsaXZlbG9ja3M/IEhvdyBkb2VzIHRoZSBjb2RlIGhhbmRsZSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlcyAoeDg2LCBBUk0sIGV0Yy4pIGluIHRoaXMgZnVuY3Rpb24/IFRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgbG9naWMgd2l0aGluIHRoaXMgZnVuY3Rpb24gaXMgb2Z0ZW4gd2hlcmUgc3VidGxlLCBoYXJkLXRvLWRlYnVnIGlzc3VlcyBhcmlzZS5cblxuU2VjdXJpdHkgaXMgYW5vdGhlciBpbW1lZGlhdGUgY29uY2Vybi4gV2hhdCBjaGVja3MgYXJlIGluIHBsYWNlIHRvIHByZXZlbnQgbWVtb3J5IGNvcnJ1cHRpb24gb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24/IEFyZSB0aGVyZSByb2J1c3QgYm91bmRzIGNoZWNrcyBhbmQgdmFsaWRhdGlvbiBvZiB0aGUgcmVnaW9uIHBhcmFtZXRlcnM/IFRoaXMgaXMgYSBoaWdoLXByaXZpbGVnZSBmdW5jdGlvbiwgc28gdnVsbmVyYWJpbGl0aWVzIGhlcmUgY291bGQgYmUgY2F0YXN0cm9waGljLiBJJ20gbG9va2luZyBmb3IgYW55IHNpZ25zIG9mIHBvdGVudGlhbCBUT0NUT1UgKFRpbWUtb2YtQ2hlY2stdG8tVGltZS1vZi1Vc2UpIHZ1bG5lcmFiaWxpdGllcyBvciBvdGhlciBzZWN1cml0eSBpc3N1ZXMgaW4gdGhlIG1lbW9yeSByZWdpb24gY29tbWl0LiBXaGF0IHR5cGUgb2YgaXNvbGF0aW9uIGd1YXJhbnRlZXMgYXJlIGJlaW5nIG1hZGUgZm9yIHRoZSBndWVzdD9cblxuRmluYWxseSwgSeKAmW0gbWVudGFsbHkgY2hhcnRpbmcgdGhlIGludGVyYWN0aW9uIG9mIHRoaXMgZnVuY3Rpb24gd2l0aCBvdGhlciBLVk0gc3Vic3lzdGVtcy4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgTU1VIGVtdWxhdGlvbiwgdGhlIHZpcnR1YWxpemVkIGludGVycnVwdCBjb250cm9sbGVyLCBhbmQgdGhlIGRldmljZSBlbXVsYXRpb24gbGF5ZXJzPyBJdCBoYXMgdG8gaW50ZWdyYXRlIHdpdGggYWxsIG9mIHRoZW0gdG8gb3BlcmF0ZSBwcm9wZXJseS4gSXQgaXMgdGhlIGNvcmUgb2YgbWVtb3J5LXJlbGF0ZWQgb3BlcmF0aW9ucy4gSXQgaXMgbGlrZWx5IGNhbGxlZCBmcm9tIG1hbnkgc3Vic3lzdGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODEzNCwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjQyLjE0MzM1NjY0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzcyOTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcmlzY3Yva3ZtL21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL21tdS5jPTIyMD1zdGF0aWMgdm9pZCBtbXVfc3BsaXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIGludCBzbG90KVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMjM4LVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jOjIzOTp2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSxcXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy0yNDAtXFx0XFx0XFx0XFx0c3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqb2xkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzo0Mi4yNzA3Mzc2NjRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYzMTM3MDQ1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLVk0gUklTQy1WIFBhZ2UgU3BsaXR0aW5nIFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIHdpdGhpbiBLVk0gb24gUklTQy1WLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBLVk0gTU1VIGxvZ2ljLiBCYXNlZCBvbiB0aGUgc3ltYm9scyBsaXN0ZWQsIHRoZSBrZXkgYXJlYXMgYWZmZWN0ZWQgYXJlIGBrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2VgLCBga3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkYCwgYW5kIGBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbmAuXG5cbk15IHByaW1hcnkgY29uY2VybiwgYXMgYWx3YXlzIHdpdGggTU1VIGNoYW5nZXMsIGlzIG1lbW9yeSBzYWZldHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoaXMgZWFnZXIgc3BsaXR0aW5nIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMgb3IsIGV2ZW4gd29yc2UsIGNhdXNlIGtlcm5lbCBjcmFzaGVzLCBwYXJ0aWN1bGFybHkgd2l0aGluIHRoZSBjb250ZXh0cyBvZiBkaXJ0eSBsb2dnaW5nLiBGdXp6aW5nIGlzIHRoZSBvYnZpb3VzIG5leHQgc3RlcCwgYWJzb2x1dGVseSBjcml0aWNhbCwgdG8gdGhvcm91Z2hseSB0ZXN0IHRoZSBuZXcgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRpcnR5IGxvZ2dpbmcgYmVoYXZpb3JzLiBJJ2xsIG5lZWQgdG8gZGV2ZWxvcCBmdXp6aW5nIGhhcm5lc3NlcyB0YWlsb3JlZCB0byB0aGVzZSBzcGVjaWZpYyBmdW5jdGlvbnMuXG5cbk5vdywgbGV0J3MgdGFrZSBhIHF1aWNrIGxvb2sgYXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgS1ZNYCBpcywgb2YgY291cnNlLCBhIGdpdmVuLiBJJ2xsIGNvbmZpcm0gdGhhdCBgUklTQ1ZfU0JJYCBhbmQgYE1NVWAgYXJlIHByZXNlbnQsIHdoaWNoIGFyZSBwcmV0dHkgbXVjaCBzdGFuZGFyZCBvbiBhbnkgUklTQy1WIEtWTSBzZXR1cC4gSSdsbCBhbHNvIGRvdWJsZS1jaGVjayB0aGF0IGBWSVJUVUFMSVpBVElPTmAgaXMgY29ycmVjdGx5IGRlZmluZWQgYXMgYSBwcmVyZXF1aXNpdGUgZm9yIGBLVk1gLCBlc3BlY2lhbGx5IHdpdGhpbiBgYXJjaC9yaXNjdi9rdm0vS2NvbmZpZ2AgdG8gZW5zdXJlIG5vIGJ1aWxkIGlzc3VlcyBhcmlzZS4gTXkgZ29hbCBpcyB0byBlbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgaXMgY29ycmVjdCBhbmQgY29tcGxldGUgZm9yIHByb3BlciB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODEwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjQ2LjkwMjExMTQ5MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNzE5MTU0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVFVBTElaQVRJT05cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzo0Ny4wMDI4NDY1NjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAxMDY1NDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipLY29uZmlnIFJldmlldyAtIFJJU0MtViBLVk0qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHJldmlzaXQgYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgLiBJJ3ZlIGJlZW4gb3ZlciBpdCBiZWZvcmUsIGJ1dCBnaXZlbiB0aGUgcmVjZW50IGRpc2N1c3Npb25zIGFuZCBkZXZlbG9wbWVudHMgaW4gUklTQy1WIEtWTSwgaXQncyBwcnVkZW50IHRvIGdpdmUgaXQgYW5vdGhlciwgZm9jdXNlZCBsb29rLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgc3RpbGwgc291bmQsIHByb3Blcmx5IHBsYWNlZCwgYW5kIHJlZmxlY3RpbmcgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFyY2hpdGVjdHVyZSBzdXBwb3J0LiBBcmUgdGhlcmUgYW55IG5ldyBkZXBlbmRlbmNpZXMgSSBtaXNzZWQ/IEhhdmUgYW55IGV4aXN0aW5nIG9wdGlvbnMgYmVjb21lIG9ic29sZXRlIG9yIHJlcXVpcmUgcmVmaW5lbWVudD8gSSdtIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGhvdyByZWNlbnQgcGF0Y2hlcyBoYXZlIGltcGFjdGVkIHRoZSBleGlzdGluZyBvcHRpb25zIGFuZCBpZiB0aGVyZSBhcmUgYW55IG5ldyBvcHBvcnR1bml0aWVzIHRvIGltcHJvdmUgdGhlIHVzZXIgZXhwZXJpZW5jZSB3aXRoIG5ldyBvcHRpb25zLiBBIHRob3JvdWdoIGNoZWNrIGlzIGVzc2VudGlhbCB0byBtYWludGFpbiB0aGUgaW50ZWdyaXR5IGFuZCB1c2FiaWxpdHkgb2Ygb3VyIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGZvciB0aGUgUklTQy1WIEtWTSBpbXBsZW1lbnRhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM2OSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjUwLjAxMzUwNTYzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUyODc4OTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBWSVJUVUFMSVpBVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Jpc2N2L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3Yva3ZtL0tjb25maWc9Nj1zb3VyY2UgXFxcInZpcnQva3ZtL0tjb25maWdcXFwiXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy03LVxcbmFyY2gvcmlzY3Yva3ZtL0tjb25maWc6ODptZW51Y29uZmlnIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC9yaXNjdi9rdm0vS2NvbmZpZy05LVxcdGJvb2wgXFxcIlZpcnR1YWxpemF0aW9uXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxNjoyMzo1MC4wOTg4MDAyNTVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIwNzU0NDg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqVmlydHVhbGl6YXRpb24gQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHRoZSBjb3JlIHJlcXVpcmVtZW50IGlzIGNsZWFyOiB3ZSBhYnNvbHV0ZWx5IG5lZWQgYFZJUlRVQUxJWkFUSU9OYC4gTm93LCB0aGUgbmV4dCBxdWVzdGlvbiBpcyBhYm91dCBpbXBsZW1lbnRhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGBLVk1gIGFsb25lIHdpbGwgc3VmZmljZSwgb3IgaWYgdGhlcmUgYXJlIGFkZGl0aW9uYWwgdmlydHVhbGl6YXRpb24gY29tcG9uZW50cyBuZWNlc3NhcnkuIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgS1ZNYCBpcyBvZnRlbiBzeW5vbnltb3VzIHdpdGggYSB2aXJ0dWFsaXphdGlvbiBjYXBhYmlsaXR5LCBidXQgSSBuZWVkIHRvIGNvbmZpcm0uIExldCBtZSBjbGFyaWZ5IC0gYEtWTWAgaXMgbmVzdGVkICp3aXRoaW4qIGBWSVJUVUFMSVpBVElPTmAsIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4gVGhpcyBtZWFucyB0aGF0IHNpbXBseSBlbmFibGluZyBgS1ZNYCBpcyBub3QgYXV0b21hdGljYWxseSBlbmFibGluZyBgVklSVFVBTElaQVRJT05gLiBUaGVyZWZvcmUsIHRvIG1lZXQgdGhlIGluaXRpYWwgcmVxdWlyZW1lbnQsIHdlICpkZWZpbml0ZWx5KiBuZWVkIGBWSVJUVUFMSVpBVElPTmAuIE5vdywgbGV0J3MgbmFpbCBkb3duIHRoZXNlIHJlc3VsdHMuIFdlJ3JlIGdldHRpbmcgc29tZXdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg4LCJPdXRwdXRUb2tlbnMiOjEzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDE2OjIzOjU0LjMwNjM0OTA2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MzI2NDE3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVklSVFVBTElaQVRJT05cIixcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9yaXNjdl9nc3RhZ2Vfc3BsaXRfaHVnZVwiLFxuICAgIFwia3ZtX2FyY2hfbW11X2VuYWJsZV9sb2dfZGlydHlfcHRfbWFza2VkXCIsXG4gICAgXCJrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvblwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGltcGxlbWVudHMgZWFnZXIgcGFnZSBzcGxpdHRpbmcgZm9yIEtWTSBvbiBSSVNDLVYsIG1vZGlmeWluZyB0aGUgS1ZNIE1NVSBsb2dpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGRpcnR5IGxvZ2dpbmcgd29yayBjb3JyZWN0bHkgd2l0aG91dCBpbnRyb2R1Y2luZyBtZW1vcnkgY29ycnVwdGlvbiBvciBjcmFzaGVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZJUlRVQUxJWkFUSU9OXCIsXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1fcmlzY3ZfZ3N0YWdlX3NwbGl0X2h1Z2VcIixcbiAgICBcImt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZFwiLFxuICAgIFwia3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb25cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbXBsZW1lbnRzIGVhZ2VyIHBhZ2Ugc3BsaXR0aW5nIGZvciBLVk0gb24gUklTQy1WLCBtb2RpZnlpbmcgdGhlIEtWTSBNTVUgbG9naWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBkaXJ0eSBsb2dnaW5nIHdvcmsgY29ycmVjdGx5IHdpdGhvdXQgaW50cm9kdWNpbmcgbWVtb3J5IGNvcnJ1cHRpb24gb3IgY3Jhc2hlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow865sk[1] Phase: Succeeded StartedAt: 2026-08-01 16:24:06 +0000 UTC FinishedAt: 2026-08-01 16:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 16:24:06 +0000 UTC FinishedAt: 2026-08-01 16:24:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2] Phase: Succeeded StartedAt: 2026-08-01 16:24:06 +0000 UTC FinishedAt: 2026-08-01 17:21:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 16:24:07 +0000 UTC FinishedAt: 2026-08-01 17:21:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 16:24:07 +0000 UTC FinishedAt: 2026-08-01 16:24:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 16:24:07 +0000 UTC FinishedAt: 2026-08-01 16:24:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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-workflow865sk/series-workflow865sk-convert-artifact-1541828515/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 16:24:29 +0000 UTC FinishedAt: 2026-08-01 16:49:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 16:24:29 +0000 UTC FinishedAt: 2026-08-01 16:49:19 +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:*8eb4683f-69b6-47ef-a931-d92e6038d51d,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-workflow865sk/series-workflow865sk-convert-artifact-1541828515/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": "f8d9663e-0a3f-4c25-9451-f67b7fd14a45", "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-workflow865sk/series-workflow865sk-build-action-4221625361/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 16:24:29 +0000 UTC FinishedAt: 2026-08-01 16:49: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:*8eb4683f-69b6-47ef-a931-d92e6038d51d,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-workflow865sk/series-workflow865sk-convert-artifact-1541828515/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": "f8d9663e-0a3f-4c25-9451-f67b7fd14a45", "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-workflow865sk/series-workflow865sk-build-action-4221625361/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 16:49:19 +0000 UTC FinishedAt: 2026-08-01 16:49:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 16:49:19 +0000 UTC FinishedAt: 2026-08-01 16:49:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 16:49:19 +0000 UTC FinishedAt: 2026-08-01 16:49:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 16:49:19 +0000 UTC FinishedAt: 2026-08-01 16:49:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-workflow865sk/series-workflow865sk-convert-artifact-3785820378/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 16:49:42 +0000 UTC FinishedAt: 2026-08-01 16:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 16:49:42 +0000 UTC FinishedAt: 2026-08-01 16:51:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f8d9663e-0a3f-4c25-9451-f67b7fd14a45,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-workflow865sk/series-workflow865sk-build-action-4221625361/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-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 16:51:36 +0000 UTC FinishedAt: 2026-08-01 16:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 16:51:36 +0000 UTC FinishedAt: 2026-08-01 16:51:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 16:51:36 +0000 UTC FinishedAt: 2026-08-01 17:16:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 16:51:36 +0000 UTC FinishedAt: 2026-08-01 17:16:25 +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:*8eb4683f-69b6-47ef-a931-d92e6038d51d,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-workflow865sk/series-workflow865sk-convert-artifact-3785820378/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": "651fbe75-b331-4e5b-bd6c-5d8392a24ef5", "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-workflow865sk/series-workflow865sk-build-action-1459246526/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 16:51:36 +0000 UTC FinishedAt: 2026-08-01 17:16:14 +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:*8eb4683f-69b6-47ef-a931-d92e6038d51d,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-workflow865sk/series-workflow865sk-convert-artifact-3785820378/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": "651fbe75-b331-4e5b-bd6c-5d8392a24ef5", "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-workflow865sk/series-workflow865sk-build-action-1459246526/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 17:16:25 +0000 UTC FinishedAt: 2026-08-01 17:16:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 17:16:25 +0000 UTC FinishedAt: 2026-08-01 17:16:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 17:16:25 +0000 UTC FinishedAt: 2026-08-01 17:18:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 17:16:25 +0000 UTC FinishedAt: 2026-08-01 17:18:14 +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:*651fbe75-b331-4e5b-bd6c-5d8392a24ef5,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-workflow865sk/series-workflow865sk-build-action-1459246526/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-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 17:18:24 +0000 UTC FinishedAt: 2026-08-01 17:21:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 17:18:24 +0000 UTC FinishedAt: 2026-08-01 17:21:42 +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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"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:*f8d9663e-0a3f-4c25-9451-f67b7fd14a45,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*651fbe75-b331-4e5b-bd6c-5d8392a24ef5,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-workflow865sk/series-workflow865sk-build-action-4221625361/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-workflow865sk/series-workflow865sk-build-action-1459246526/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 17:18:24 +0000 UTC FinishedAt: 2026-08-01 17:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 17:18:24 +0000 UTC FinishedAt: 2026-08-01 17:18:40 +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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"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-workflow865sk/series-workflow865sk-convert-artifact-2678616207/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 17:18:24 +0000 UTC FinishedAt: 2026-08-01 17:18:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 17:18:24 +0000 UTC FinishedAt: 2026-08-01 17:18:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 17:18:24 +0000 UTC FinishedAt: 2026-08-01 17:18:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 17:18:48 +0000 UTC FinishedAt: 2026-08-01 17:21:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow865sk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"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_riscv_gstage_split_huge","kvm_arch_mmu_enable_log_dirty_pt_masked","kvm_arch_commit_memory_region"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["VIRTUALIZATION","KVM"],"series_id":"92ef5cd8-346a-4465-9b4e-4f8692ebb892","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-08-01 17:18:48 +0000 UTC FinishedAt: 2026-08-01 17:21:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f8d9663e-0a3f-4c25-9451-f67b7fd14a45,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*651fbe75-b331-4e5b-bd6c-5d8392a24ef5,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-workflow865sk/series-workflow865sk-build-action-4221625361/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-workflow865sk/series-workflow865sk-build-action-1459246526/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-workflow865sk/series-workflow865sk-convert-artifact-2678616207/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,}