Name: series-workflow2mvmr Phase: Succeeded StartedAt: 2026-08-02 12:37:34 +0000 UTC FinishedAt: 2026-08-02 13:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[0] Phase: Succeeded StartedAt: 2026-08-02 12:37:34 +0000 UTC FinishedAt: 2026-08-02 13:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[0].run-triage Phase: Succeeded StartedAt: 2026-08-02 12:37:34 +0000 UTC FinishedAt: 2026-08-02 13:01:28 +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": [ "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": [ "KVM" ], "series_id": "7311056a-fe2f-49db-8048-1d949acbbebb" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_handle_vncr_abort", "kvm_handle_s1e2_tlbi", "kvm_nested_s2_wp", "kvm_nested_s2_unmap", "compute_tlb_inval_range", "kvm_vcpu_allocate_vncr_tlb" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9oYW5kbGVfdm5jcl9hYm9ydCYjMzQ7LAogICAgJiMzNDtrdm1faGFuZGxlX3MxZTJfdGxiaSYjMzQ7LAogICAgJiMzNDtrdm1fbmVzdGVkX3MyX3dwJiMzNDssCiAgICAmIzM0O2t2bV9uZXN0ZWRfczJfdW5tYXAmIzM0OywKICAgICYjMzQ7Y29tcHV0ZV90bGJfaW52YWxfcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIFZOQ1IgKFZpcnR1YWwgTmVzdGVkIENvbnRyb2wgUmVnaXN0ZXIpIFRMQiBoYW5kbGluZyBhbmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyB0cmFja2luZyBtZWNoYW5pc21zIGFuZCBtb2RpZmllcyBob3cgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvbXB1dGVkIGFuZCBhcHBsaWVkLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTI6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlOWQ1YWU5ZDQ4YjgxNGU4YzhmNjdlNDMzMjVjMmVmYzI4ODA4YmRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxMjo1ODoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGJhZTJjNGY5MmVmNWMuLjEwODk2NmE5ZGIxMmIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQxMSw4ICYjNDM7NDExLDggQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdC8qIE1hc2tzIGZvciBWTkNSLWJhY2tlZCBhbmQgZ2VuZXJhbCBFTDIgc3lzcmVncyAqL1xuIFx0c3RydWN0IGt2bV9zeXNyZWdfbWFza3NcdCpzeXNyZWdfbWFza3M7XG4gXG4tXHQvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIGN1cnJlbnRseSBtYXBwZWQgKi9cbi1cdGF0b21pY190IHZuY3JfbWFwX2NvdW50O1xuJiM0MztcdC8qIENvdW50IHRoZSBudW1iZXIgb2YgVk5DUl9FTDIgVExCcyAqL1xuJiM0MztcdGF0b21pY190IHZuY3JfdGxiX2NvdW50O1xuIFxuIFx0LypcbiBcdCAqIEZvciBhbiB1bnRydXN0ZWQgaG9zdCBWTSwgJiMzOTtwa3ZtLmhhbmRsZSYjMzk7IGlzIHVzZWQgdG8gbG9va3VwXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaFxuaW5kZXggMDEyZDcxMTAzNGQxNy4uY2M0ODgxN2E1YmY3YSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaFxuQEAgLTM4OCw2ICYjNDM7Mzg4LDggQEAgc3RydWN0IHMxX3dhbGtfcmVzdWx0IHtcbiBcdGJvb2xcdGZhaWxlZDtcbiB9O1xuIFxuJiM0MzsjZGVmaW5lIFMxX01NVV9ESVNBQkxFRFx0XHQoLTEyNylcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGZhaWxfczFfd2FsayhzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1OCBmc3QsIGJvb2wgczFwdHcpXG4ge1xuIFx0d3ItXHUwMDNlZnN0XHRcdD0gZnN0O1xuQEAgLTM5Niw2ICYjNDM7Mzk4LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KVxuIFx0d3ItXHUwMDNlZmFpbGVkXHQ9IHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgczFfbW11X2Rpc2FibGVkKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gd3ItXHUwMDNlbGV2ZWwgPT0gUzFfTU1VX0RJU0FCTEVEO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBfX2t2bV90cmFuc2xhdGVfdmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSxcbiBcdFx0ICAgICAgIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU2NCB2YSk7XG4gaW50IF9fa3ZtX2ZpbmRfczFfZGVzY19sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YSwgdTY0IGlwYSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hdC5jIGIvYXJjaC9hcm02NC9rdm0vYXQuY1xuaW5kZXggNjQwZjJkYzAwYThiYS4uMDkyNjQyNmI4Nzk4OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2F0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2F0LmNcbkBAIC0xMSw4ICYjNDM7MTEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbHN1aS5oXHUwMDNlXG4gXG4tI2RlZmluZSBTMV9NTVVfRElTQUJMRURcdFx0KC0xMjcpXG4tXG4gc3RhdGljIGludCBnZXRfaWFfc2l6ZShzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSlcbiB7XG4gXHRyZXR1cm4gNjQgLSB3aS1cdTAwM2V0eHN6O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5pbmRleCBiYmU5Y2ViZDNkOWQ1Li5lYjU5NTQ5ZWMyMTcyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuQEAgLTQyNCwxMSAmIzQzOzQyNCwxMSBAQCBzdGF0aWMgYm9vbCBrdm1faHlwX2hhbmRsZV90bGJpX2VsMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKlxuLVx0ICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgbWFwcGluZyBiZWluZyBpbnZhbGlkYXRlZCxcbiYjNDM7XHQgKiBJZiB3ZSBoYXZlIHRvIGNoZWNrIGZvciBhbnkgVk5DUiBUTEIgYmVpbmcgaW52YWxpZGF0ZWQsXG4gXHQgKiBnbyBiYWNrIHRvIHRoZSBzbG93IHBhdGggZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiBcdCAqL1xuIFx0aWYgKHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX3RnZV9pc19zZXQodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgYXRvbWljX3JlYWQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX21hcF9jb3VudCkpXG4mIzQzO1x0ICAgIGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRfX2t2bV9za2lwX2luc3RyKHZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbmluZGV4IGRmYjk2ZWRiZGM0M2MuLjFlM2ZkOThmNjU4OWIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbkBAIC00OCw3ICYjNDM7NDgsNyBAQCB2b2lkIGt2bV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0a3ZtLVx1MDAzZWFyY2gubmVzdGVkX21tdXMgPSBOVUxMO1xuIFx0a3ZtLVx1MDAzZWFyY2gubmVzdGVkX21tdXNfc2l6ZSA9IDA7XG4tXHRhdG9taWNfc2V0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50LCAwKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50LCAwKTtcbiB9XG4gXG4gc3RhdGljIGludCBpbml0X25lc3RlZF9zMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxuQEAgLTUwNiw3ICYjNDM7NTA2LDcgQEAgaW50IGt2bV93YWxrX25lc3RlZF9zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGdpcGEsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBfX3R0bF90b19zaXplKHU4IHR0bClcbiB7XG4gXHRpbnQgbGV2ZWwgPSB0dGwgXHUwMDI2IDM7XG4gXHRpbnQgZ3JhbiA9ICh0dGwgXHUwMDNlXHUwMDNlIDIpIFx1MDAyNiAzO1xuQEAgLTU2MiwxMCAmIzQzOzU2MiwyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bClcbiBcdHJldHVybiBtYXhfc2l6ZTtcbiB9XG4gXG4tc3RhdGljIHU4IHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHUxNiBzaGlmdCwgdTggbGV2ZWwpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fdHRsX3RvX3NpemUodHRsKSA/OiBTWl8xRztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHU4IHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHUxNiBzaGlmdCwgczggbGV2ZWwpXG4ge1xuIFx0dTggdHRsO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgd2UgZG9uJiMzOTt0IGhhdmUgYSBwcm9wZXIgbGV2ZWwsIGZhbGxiYWNrIHRvIHRoZSBtYXhpbXVtXG4mIzQzO1x0ICogc2l6ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobGV2ZWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRzd2l0Y2goc2hpZnQpIHtcbiBcdGNhc2UgMTI6XG4gXHRcdHR0bCA9IFRMQklfVFRMX1RHXzRLO1xuQEAgLTY3Niw3ICYjNDM7Njg4LDExIEBAIHVuc2lnbmVkIGxvbmcgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2Uoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdTY0IHZhbClcbiBcdFx0dHRsID0gZ2V0X2d1ZXN0X21hcHBpbmdfdHRsKG1tdSwgYWRkcik7XG4gXHR9XG4gXG4tXHRtYXhfc2l6ZSA9IHR0bF90b19zaXplKHR0bCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEb24mIzM5O3QgdXNlIHRoZSBkZWZhdWx0IDFHQiBmYWxsYmFjaywgYXMgd2UgY2FuIGFkYXB0IHRvIHRoZVxuJiM0MztcdCAqIG1heCBtYXBwaW5nIHNpemUgd2UgYWxsb3cgYXQgUzIuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWF4X3NpemUgPSBfX3R0bF90b19zaXplKHR0bCk7XG4gXG4gXHRpZiAoIW1heF9zaXplKSB7XG4gXHRcdC8qIENvbXB1dGUgdGhlIG1heGltdW0gZXh0ZW50IG9mIHRoZSBpbnZhbGlkYXRpb24gKi9cbkBAIC04NzksNiAmIzQzOzg5NSwxMiBAQCB2b2lkIGt2bV92Y3B1X2xvYWRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHVubWFwX2wxX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dClcbiYjNDM7e1xuJiM0MztcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC1cdTAwM2VjcHUpKTtcbiYjNDM7XHR2dC1cdTAwM2VjcHUgPSAtMTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0aWYgKCFob3N0X2RhdGFfdGVzdF9mbGFnKEwxX1ZOQ1JfTUFQUEVEKSlcbkBAIC04ODcsMTAgJiM0Mzs5MDksOCBAQCBzdGF0aWMgdm9pZCB0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRCVUdfT04odmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiLVx1MDAzZWNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpO1xuIFx0QlVHX09OKGlzX2h5cF9jdHh0KHZjcHUpKTtcbiBcbi1cdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGItXHUwMDNlY3B1KSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGItXHUwMDNlY3B1ID0gLTE7XG4mIzQzO1x0dW5tYXBfbDFfdm5jcih2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGIpO1xuIFx0aG9zdF9kYXRhX2NsZWFyX2ZsYWcoTDFfVk5DUl9NQVBQRUQpO1xuLVx0YXRvbWljX2RlYyhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KTtcbiB9XG4gXG4gdm9pZCBrdm1fdmNwdV9wdXRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC05NzgsMTEgJiM0Mzs5OTgsMjcgQEAgdTE2IGdldF9hc2lkX2J5X3JlZ2ltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gdHJhbnNfcmVnaW1lIHJlZ2ltZSlcbiBcdHJldHVybiBhc2lkO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dClcbiYjNDM7c3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZuY3JfdGxiICp2dClcbiB7XG4mIzQzO1x0QlVHX09OKCF2dC1cdTAwM2V2YWxpZCk7XG4gXHR2dC1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuJiM0MztcdGF0b21pY19kZWMoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpO1xuIFx0aWYgKHZ0LVx1MDAzZWNwdSAhPSAtMSlcbi1cdFx0Y2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKHZ0LVx1MDAzZWNwdSkpO1xuJiM0MztcdFx0dW5tYXBfbDFfdm5jcih2dCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsXG4mIzQzO1x0XHRcdFx0dTY0IHNjb3BlX3N0YXJ0LCB1NjQgc2NvcGVfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHU2NCB0bGJfc2l6ZSwgdGxiX3N0YXJ0LCB0bGJfZW5kLCBzY29wZV9lbmQ7XG4mIzQzO1xuJiM0MztcdHRsYl9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXHUwMDNld2kucGdzaGlmdCwgdnQtXHUwMDNld3IubGV2ZWwpKTtcbiYjNDM7XG4mIzQzO1x0dGxiX3N0YXJ0ID0gYWRkciBcdTAwMjYgfih0bGJfc2l6ZSAtIDEpO1xuJiM0MztcdHRsYl9lbmQgPSB0bGJfc3RhcnQgJiM0MzsgdGxiX3NpemUgLSAxO1xuJiM0MztcdHNjb3BlX2VuZCA9IHNjb3BlX3N0YXJ0ICYjNDM7IHNjb3BlX3NpemUgLSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gISh0bGJfZW5kIFx1MDAzYyBzY29wZV9zdGFydCB8fCB0bGJfc3RhcnQgXHUwMDNlIHNjb3BlX2VuZCk7XG4gfVxuIFxuIC8qXG5AQCAtMTAwNywxOSAmIzQzOzEwNDMsOSBAQCBzdGF0aWMgdm9pZCBrdm1faW52YWxpZGF0ZV92bmNyX2lwYShzdHJ1Y3Qga3ZtICprdm0sIHU2NCBzdGFydCwgdTY0IGVuZClcbiBcdGlmICgha3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyX09OTFkpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xuLVx0XHR1NjQgaXBhX3N0YXJ0LCBpcGFfZW5kLCBpcGFfc2l6ZTtcbi1cbi1cdFx0aXBhX3NpemUgPSB0dGxfdG9fc2l6ZShwZ3NoaWZ0X2xldmVsX3RvX3R0bCh2dC1cdTAwM2V3aS5wZ3NoaWZ0LFxuLVx0XHRcdFx0XHRcdFx0ICAgIHZ0LVx1MDAzZXdyLmxldmVsKSk7XG4tXHRcdGlwYV9zdGFydCA9IHZ0LVx1MDAzZXdyLnBhIFx1MDAyNiB+KGlwYV9zaXplIC0gMSk7XG4tXHRcdGlwYV9lbmQgPSBpcGFfc3RhcnQgJiM0MzsgaXBhX3NpemU7XG4tXG4tXHRcdGlmIChpcGFfZW5kIFx1MDAzYz0gc3RhcnQgfHwgaXBhX3N0YXJ0IFx1MDAzZT0gZW5kKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpbnZhbGlkYXRlX3ZuY3IodnQpO1xuLVx0fVxuJiM0MztcdGt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKVxuJiM0MztcdFx0aWYgKHZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVx1MDAzZXdyLnBhLCBzdGFydCwgZW5kIC0gc3RhcnQpKVxuJiM0MztcdFx0XHRpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7XG4gfVxuIFxuIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUge1xuQEAgLTEwNDUsMjggJiM0MzsxMDcxLDE5IEBAIHN0YXRpYyB2b2lkIGludmFsaWRhdGVfdm5jcl92YShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4gXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xuLVx0XHR1NjQgdmFfc3RhcnQsIHZhX2VuZCwgdmFfc2l6ZTtcbi1cbi1cdFx0dmFfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LVx1MDAzZXdpLnBnc2hpZnQsXG4tXHRcdFx0XHRcdFx0XHQgICB2dC1cdTAwM2V3ci5sZXZlbCkpO1xuLVx0XHR2YV9zdGFydCA9IHZ0LVx1MDAzZWd2YSBcdTAwMjYgfih2YV9zaXplIC0gMSk7XG4tXHRcdHZhX2VuZCA9IHZhX3N0YXJ0ICYjNDM7IHZhX3NpemU7XG4tXG4gXHRcdHN3aXRjaCAoc2NvcGUtXHUwMDNldHlwZSkge1xuIFx0XHRjYXNlIFRMQklfQUxMOlxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRjYXNlIFRMQklfVkE6XG4tXHRcdFx0aWYgKHZhX2VuZCBcdTAwM2M9IHNjb3BlLVx1MDAzZXZhIHx8XG4tXHRcdFx0ICAgIHZhX3N0YXJ0IFx1MDAzZT0gKHNjb3BlLVx1MDAzZXZhICYjNDM7IHNjb3BlLVx1MDAzZXNpemUpKVxuJiM0MztcdFx0XHRpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVx1MDAzZWd2YSwgc2NvcGUtXHUwMDNldmEsIHNjb3BlLVx1MDAzZXNpemUpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKHZ0LVx1MDAzZXdyLm5HIFx1MDAyNlx1MDAyNiB2dC1cdTAwM2V3ci5hc2lkICE9IHNjb3BlLVx1MDAzZWFzaWQpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Y2FzZSBUTEJJX1ZBQTpcbi1cdFx0XHRpZiAodmFfZW5kIFx1MDAzYz0gc2NvcGUtXHUwMDNldmEgfHxcbi1cdFx0XHQgICAgdmFfc3RhcnQgXHUwMDNlPSAoc2NvcGUtXHUwMDNldmEgJiM0Mzsgc2NvcGUtXHUwMDNlc2l6ZSkpXG4mIzQzO1x0XHRcdGlmICghdm5jcl90bGJfaW50ZXJzZWN0cyh2dCwgdnQtXHUwMDNlZ3ZhLCBzY29wZS1cdTAwM2V2YSwgc2NvcGUtXHUwMDNlc2l6ZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0xMDc2LDcgJiM0MzsxMDkzLDcgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHRpbnZhbGlkYXRlX3ZuY3IodnQpO1xuJiM0MztcdFx0aW52YWxpZGF0ZV92bmNyKGt2bSwgdnQpO1xuIFx0fVxuIH1cbiBcbkBAIC0xMTI2LDggJiM0MzsxMTQzLDYgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9zMV90bGJpX3JhbmdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwsXG4gXHRjYXNlIE9QX1RMQklfVkFMRTFPU05YUzpcbiBcdFx0c2NvcGUtXHUwMDNldHlwZSA9IFRMQklfVkE7XG4gXHRcdHNjb3BlLVx1MDAzZXNpemUgPSB0dGxfdG9fc2l6ZShGSUVMRF9HRVQoVExCSV9UVExfTUFTSywgdmFsKSk7XG4tXHRcdGlmICghc2NvcGUtXHUwMDNlc2l6ZSlcbi1cdFx0XHRzY29wZS1cdTAwM2VzaXplID0gU1pfMUc7XG4gXHRcdHNjb3BlLVx1MDAzZXZhID0gdGxiaV92YV9zMV90b192YSh2YWwpIFx1MDAyNiB+KHNjb3BlLVx1MDAzZXNpemUgLSAxKTtcbiBcdFx0c2NvcGUtXHUwMDNlYXNpZCA9IEZJRUxEX0dFVChUTEJJUl9BU0lEX01BU0ssIHZhbCk7XG4gXHRcdGJyZWFrO1xuQEAgLTExNTQsOCAmIzQzOzExNjksNiBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX3MxX3RsYmlfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbCxcbiBcdGNhc2UgT1BfVExCSV9WQUFMRTFPU05YUzpcbiBcdFx0c2NvcGUtXHUwMDNldHlwZSA9IFRMQklfVkFBO1xuIFx0XHRzY29wZS1cdTAwM2VzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpO1xuLVx0XHRpZiAoIXNjb3BlLVx1MDAzZXNpemUpXG4tXHRcdFx0c2NvcGUtXHUwMDNlc2l6ZSA9IFNaXzFHO1xuIFx0XHRzY29wZS1cdTAwM2V2YSA9IHRsYmlfdmFfczFfdG9fdmEodmFsKSBcdTAwMjYgfihzY29wZS1cdTAwM2VzaXplIC0gMSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBPUF9UTEJJX1JWQUUyOlxuQEAgLTEzMTYsMTMgJiM0MzsxMzI5LDIwIEBAIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4gICogICBpbnRlcnNlY3RzIHdpdGggdGhlIFRMQkkgcmVxdWVzdCwgaW52YWxpZGF0ZSBpdCwgYW5kIHVubWFwIHRoZSBwYWdlXG4gICogICBmcm9tIHRoZSBmaXhtYXAuIEJlY2F1c2Ugd2UgbmVlZCB0byBsb29rIGF0IGFsbCB0aGUgdmNwdS1wcml2YXRlIFRMQnMsXG4gICogICB0aGlzIHJlcXVpcmVzIHNvbWUgd2lkZS1yYW5naW5nIGxvY2tpbmcgdG8gZW5zdXJlIHRoYXQgbm90aGluZyByYWNlc1xuLSAqICAgYWdhaW5zdCBpdC4gVGhpcyBtYXkgcmVxdWlyZSBzb21lIHJlZmNvdW50aW5nIHRvIGF2b2lkIHRoZSBzZWFyY2ggd2hlblxuLSAqICAgbm8gc3VjaCBUTEIgaXMgcHJlc2VudC5cbiYjNDM7ICogICBhZ2FpbnN0IGl0LiBUaGlzIHJlcXVpcmVzIHNvbWUgcmVmY291bnRpbmcgdG8gYXZvaWQgdGhlIHNlYXJjaCB3aGVuXG4mIzQzOyAqICAgbm8gc3VjaCBUTEIgaXMgcHJlc2VudCAoc2VlIGJlbG93KS5cbiAgKlxuICAqIC0gT24gTU1VIG5vdGlmaWVycywgd2UgbXVzdCBpbnZhbGlkYXRlIG91ciBUTEIgaW4gYSBzaW1pbGFyIHdheSwgYnV0XG4gICogICBsb29raW5nIGF0IHRoZSBJUEEgaW5zdGVhZC4gVGhlIGZ1bm55IHBhcnQgaXMgdGhhdCB0aGVyZSBtYXkgbm90IGJlIGFcbiAgKiAgIHN0YWdlLTIgbWFwcGluZyBmb3IgdGhpcyBwYWdlIGlmIEwxIGhhc24mIzM5O3QgYWNjZXNzZWQgaXQgdXNpbmcgTEQvU1RcbiAgKiAgIGluc3RydWN0aW9ucy5cbiYjNDM7ICpcbiYjNDM7ICogLSB2bmNyX3RsYl9jb3VudCB0cmFja3MgdGhlIG51bWJlciBvZiB2YWxpZCBWTkNSIFRMQnMgVk0td2lkZS4gVGhpcyBpc24mIzM5O3RcbiYjNDM7ICogICB0aGUgbnVtYmVyIG9mICptYXBwZWQqIEwxIFZOQ1IgcGFnZXMsIHdoaWNoIGlzIGxpa2VseSBiZSBhIHN1YnNldCAoYW5kXG4mIzQzOyAqICAgYnkgZGVmaW5pdGlvbiwgYSBUTEJJIGhhbmRsZWQgZnJvbSBMMSBydW5zIHdpdGggdGhlIGNhbm9uaWNhbCBWTkNSXG4mIzQzOyAqICAgcGFnZSwgbm90IHRoZSBMMSYjMzk7cykuIFRoZSBpbm5lcm1vc3QgdHJhcCBoYW5kbGluZyBjb2RlIGNoZWNrcyB0aGlzIHRvXG4mIzQzOyAqICAgZmluZCBvdXQgd2hldGhlciB0byByZXR1cm4gdG8gdGhlIGd1ZXN0IEFTQVAgKG5vIEwxIFRMQnMpIG9yIHRvIHZpc2l0XG4mIzQzOyAqICAgdGhpcyBwYXJ0IG9mIHRoZSB3b3JsZCBmb3Igc29tZSBleHRyYSBpbnZhbGlkYXRpb24gd29yay5cbiAgKi9cbiBcbiBpbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTEzNzcsNyAmIzQzOzEzOTcsOCBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHQgKi9cbiBcdHNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaykge1xuIFx0XHR0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcCh2Y3B1KTtcbi1cdFx0dnQtXHUwMDNldmFsaWQgPSBmYWxzZTtcbiYjNDM7XHRcdGlmICh2dC1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdFx0aW52YWxpZGF0ZV92bmNyKHZjcHUtXHUwMDNla3ZtLCB2dCk7XG4gXG4gXHRcdHZ0LVx1MDAzZXdpID0gKHN0cnVjdCBzMV93YWxrX2luZm8pIHtcbiBcdFx0XHQucmVnaW1lXHQ9IFRSX0VMMjAsXG5AQCAtMTQ0OSw2ICYjNDM7MTQ3MCw4IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcdFx0dnQtXHUwMDNldmFsaWQgPSB0cnVlO1xuIFx0XHR2dC1cdTAwM2VjcHUgPSAtMTtcbiBcbiYjNDM7XHRcdGF0b21pY19pbmMoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX3RsYl9jb3VudCk7XG4mIzQzO1xuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfTUFQX0wxX1ZOQ1JfRUwyLCB2Y3B1KTtcbiBcdFx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHZjcHUtXHUwMDNla3ZtLCBwYWdlLCBmYWxzZSwgdnQtXHUwMDNld3IucHcgXHUwMDI2XHUwMDI2IHZ0LVx1MDAzZWhwYV93cml0YWJsZSk7XG4gXHR9XG5AQCAtMTU2OCw2ICYjNDM7MTU5MSw5IEBAIHN0YXRpYyB2b2lkIGt2bV9tYXBfbDFfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIXZ0LVx1MDAzZXZhbGlkKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0aWYgKCEodmNwdV9yZWFkX3N5c19yZWcodmNwdSwgU0NUTFJfRUwyKSBcdTAwMjYgU0NUTFJfRUx4X00pICE9IHMxX21tdV9kaXNhYmxlZChcdTAwMjZ2dC1cdTAwM2V3cikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKHJlYWRfdm5jcl9lbDIodmNwdSkgIT0gdnQtXHUwMDNlZ3ZhKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTU5Miw3ICYjNDM7MTYxOCw2IEBAIHN0YXRpYyB2b2lkIGt2bV9tYXBfbDFfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKFBBR0VfTk9ORSkpIHtcbiBcdFx0X19zZXRfZml4bWFwKHZuY3JfZml4bWFwKHZ0LVx1MDAzZWNwdSksIHZ0LVx1MDAzZWhwYSwgcHJvdCk7XG4gXHRcdGhvc3RfZGF0YV9zZXRfZmxhZyhMMV9WTkNSX01BUFBFRCk7XG4tXHRcdGF0b21pY19pbmMoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX21hcF9jb3VudCk7XG4gXHR9XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faGFuZGxlX3ZuY3JfYWJvcnQmIzM0OywKICAgICYjMzQ7a3ZtX2hhbmRsZV9zMWUyX3RsYmkmIzM0OywKICAgICYjMzQ7a3ZtX25lc3RlZF9zMl93cCYjMzQ7LAogICAgJiMzNDtrdm1fbmVzdGVkX3MyX3VubWFwJiMzNDssCiAgICAmIzM0O2NvbXB1dGVfdGxiX2ludmFsX3JhbmdlJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBWTkNSIChWaXJ0dWFsIE5lc3RlZCBDb250cm9sIFJlZ2lzdGVyKSBUTEIgaGFuZGxpbmcgYW5kIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgdHJhY2tpbmcgbWVjaGFuaXNtcyBhbmQgbW9kaWZpZXMgaG93IFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIGFyZSBjb21wdXRlZCBhbmQgYXBwbGllZC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTlkNWFlOWQ0OGI4MTRlOGM4ZjY3ZTQzMzI1YzJlZmMyODgwOGJkYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMTI6NTg6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggYmFlMmM0ZjkyZWY1Yy4uMTA4OTY2YTlkYjEyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNDExLDggJiM0Mzs0MTEsOCBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogCS8qIE1hc2tzIGZvciBWTkNSLWJhY2tlZCBhbmQgZ2VuZXJhbCBFTDIgc3lzcmVncyAqLwogCXN0cnVjdCBrdm1fc3lzcmVnX21hc2tzCSpzeXNyZWdfbWFza3M7CiAKLQkvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIGN1cnJlbnRseSBtYXBwZWQgKi8KLQlhdG9taWNfdCB2bmNyX21hcF9jb3VudDsKJiM0MzsJLyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovCiYjNDM7CWF0b21pY190IHZuY3JfdGxiX2NvdW50OwogCiAJLyoKIAkgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICYjMzk7cGt2bS5oYW5kbGUmIzM5OyBpcyB1c2VkIHRvIGxvb2t1cApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaAppbmRleCAwMTJkNzExMDM0ZDE3Li5jYzQ4ODE3YTViZjdhIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaApAQCAtMzg4LDYgJiM0MzszODgsOCBAQCBzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgewogCWJvb2wJZmFpbGVkOwogfTsKIAomIzQzOyNkZWZpbmUgUzFfTU1VX0RJU0FCTEVECQkoLTEyNykKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KQogewogCXdyLSZndDtmc3QJCT0gZnN0OwpAQCAtMzk2LDYgJiM0MzszOTgsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGZhaWxfczFfd2FsayhzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1OCBmc3QsIGJvb2wgczFwdHcpCiAJd3ItJmd0O2ZhaWxlZAk9IHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgczFfbW11X2Rpc2FibGVkKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IpCiYjNDM7ewomIzQzOwlyZXR1cm4gd3ItJmd0O2xldmVsID09IFMxX01NVV9ESVNBQkxFRDsKJiM0Mzt9CiYjNDM7CiBpbnQgX19rdm1fdHJhbnNsYXRlX3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHMxX3dhbGtfaW5mbyAqd2ksCiAJCSAgICAgICBzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1NjQgdmEpOwogaW50IF9fa3ZtX2ZpbmRfczFfZGVzY19sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YSwgdTY0IGlwYSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2F0LmMgYi9hcmNoL2FybTY0L2t2bS9hdC5jCmluZGV4IDY0MGYyZGMwMGE4YmEuLjA5MjY0MjZiODc5ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2F0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXQuYwpAQCAtMTEsOCAmIzQzOzExLDYgQEAKICNpbmNsdWRlICZsdDthc20va3ZtX21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9sc3VpLmgmZ3Q7CiAKLSNkZWZpbmUgUzFfTU1VX0RJU0FCTEVECQkoLTEyNykKLQogc3RhdGljIGludCBnZXRfaWFfc2l6ZShzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSkKIHsKIAlyZXR1cm4gNjQgLSB3aS0mZ3Q7dHhzejsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jCmluZGV4IGJiZTljZWJkM2Q5ZDUuLmViNTk1NDllYzIxNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYwpAQCAtNDI0LDExICYjNDM7NDI0LDExIEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX3RsYmlfZWwyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCi0JICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgbWFwcGluZyBiZWluZyBpbnZhbGlkYXRlZCwKJiM0MzsJICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgVExCIGJlaW5nIGludmFsaWRhdGVkLAogCSAqIGdvIGJhY2sgdG8gdGhlIHNsb3cgcGF0aCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgogCSAqLwogCWlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpICZhbXA7JmFtcDsgdmNwdV9lbDJfdGdlX2lzX3NldCh2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgIGF0b21pY19yZWFkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZuY3JfbWFwX2NvdW50KSkKJiM0MzsJICAgIGF0b21pY19yZWFkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZuY3JfdGxiX2NvdW50KSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJX19rdm1fc2tpcF9pbnN0cih2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKaW5kZXggZGZiOTZlZGJkYzQzYy4uMWUzZmQ5OGY2NTg5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKQEAgLTQ4LDcgJiM0Mzs0OCw3IEBAIHZvaWQga3ZtX2luaXRfbmVzdGVkKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlrdm0tJmd0O2FyY2gubmVzdGVkX21tdXMgPSBOVUxMOwogCWt2bS0mZ3Q7YXJjaC5uZXN0ZWRfbW11c19zaXplID0gMDsKLQlhdG9taWNfc2V0KCZhbXA7a3ZtLSZndDthcmNoLnZuY3JfbWFwX2NvdW50LCAwKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO2t2bS0mZ3Q7YXJjaC52bmNyX3RsYl9jb3VudCwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgaW5pdF9uZXN0ZWRfczJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSkKQEAgLTUwNiw3ICYjNDM7NTA2LDcgQEAgaW50IGt2bV93YWxrX25lc3RlZF9zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGdpcGEsCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBfX3R0bF90b19zaXplKHU4IHR0bCkKIHsKIAlpbnQgbGV2ZWwgPSB0dGwgJmFtcDsgMzsKIAlpbnQgZ3JhbiA9ICh0dGwgJmd0OyZndDsgMikgJmFtcDsgMzsKQEAgLTU2MiwxMCAmIzQzOzU2MiwyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bCkKIAlyZXR1cm4gbWF4X3NpemU7CiB9CiAKLXN0YXRpYyB1OCBwZ3NoaWZ0X2xldmVsX3RvX3R0bCh1MTYgc2hpZnQsIHU4IGxldmVsKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fdHRsX3RvX3NpemUodHRsKSA/OiBTWl8xRzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHU4IHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHUxNiBzaGlmdCwgczggbGV2ZWwpCiB7CiAJdTggdHRsOwogCiYjNDM7CS8qCiYjNDM7CSAqIElmIHdlIGRvbiYjMzk7dCBoYXZlIGEgcHJvcGVyIGxldmVsLCBmYWxsYmFjayB0byB0aGUgbWF4aW11bQomIzQzOwkgKiBzaXplLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxldmVsICZsdDsgMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCXN3aXRjaChzaGlmdCkgewogCWNhc2UgMTI6CiAJCXR0bCA9IFRMQklfVFRMX1RHXzRLOwpAQCAtNjc2LDcgJiM0Mzs2ODgsMTEgQEAgdW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKQogCQl0dGwgPSBnZXRfZ3Vlc3RfbWFwcGluZ190dGwobW11LCBhZGRyKTsKIAl9CiAKLQltYXhfc2l6ZSA9IHR0bF90b19zaXplKHR0bCk7CiYjNDM7CS8qCiYjNDM7CSAqIERvbiYjMzk7dCB1c2UgdGhlIGRlZmF1bHQgMUdCIGZhbGxiYWNrLCBhcyB3ZSBjYW4gYWRhcHQgdG8gdGhlCiYjNDM7CSAqIG1heCBtYXBwaW5nIHNpemUgd2UgYWxsb3cgYXQgUzIuCiYjNDM7CSAqLwomIzQzOwltYXhfc2l6ZSA9IF9fdHRsX3RvX3NpemUodHRsKTsKIAogCWlmICghbWF4X3NpemUpIHsKIAkJLyogQ29tcHV0ZSB0aGUgbWF4aW11bSBleHRlbnQgb2YgdGhlIGludmFsaWRhdGlvbiAqLwpAQCAtODc5LDYgJiM0Mzs4OTUsMTIgQEAgdm9pZCBrdm1fdmNwdV9sb2FkX2h3X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgdW5tYXBfbDFfdm5jcihzdHJ1Y3Qgdm5jcl90bGIgKnZ0KQomIzQzO3sKJiM0MzsJY2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKHZ0LSZndDtjcHUpKTsKJiM0MzsJdnQtJmd0O2NwdSA9IC0xOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpZiAoIWhvc3RfZGF0YV90ZXN0X2ZsYWcoTDFfVk5DUl9NQVBQRUQpKQpAQCAtODg3LDEwICYjNDM7OTA5LDggQEAgc3RhdGljIHZvaWQgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCUJVR19PTih2Y3B1LSZndDthcmNoLnZuY3JfdGxiLSZndDtjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlCVUdfT04oaXNfaHlwX2N0eHQodmNwdSkpOwogCi0JY2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKHZjcHUtJmd0O2FyY2gudm5jcl90bGItJmd0O2NwdSkpOwotCXZjcHUtJmd0O2FyY2gudm5jcl90bGItJmd0O2NwdSA9IC0xOwomIzQzOwl1bm1hcF9sMV92bmNyKHZjcHUtJmd0O2FyY2gudm5jcl90bGIpOwogCWhvc3RfZGF0YV9jbGVhcl9mbGFnKEwxX1ZOQ1JfTUFQUEVEKTsKLQlhdG9taWNfZGVjKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZuY3JfbWFwX2NvdW50KTsKIH0KIAogdm9pZCBrdm1fdmNwdV9wdXRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTk3OCwxMSAmIzQzOzk5OCwyNyBAQCB1MTYgZ2V0X2FzaWRfYnlfcmVnaW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB0cmFuc19yZWdpbWUgcmVnaW1lKQogCXJldHVybiBhc2lkOwogfQogCi1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dCkKJiM0MztzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qgdm5jcl90bGIgKnZ0KQogewomIzQzOwlCVUdfT04oIXZ0LSZndDt2YWxpZCk7CiAJdnQtJmd0O3ZhbGlkID0gZmFsc2U7CiYjNDM7CWF0b21pY19kZWMoJmFtcDtrdm0tJmd0O2FyY2gudm5jcl90bGJfY291bnQpOwogCWlmICh2dC0mZ3Q7Y3B1ICE9IC0xKQotCQljbGVhcl9maXhtYXAodm5jcl9maXhtYXAodnQtJmd0O2NwdSkpOwomIzQzOwkJdW5tYXBfbDFfdm5jcih2dCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsCiYjNDM7CQkJCXU2NCBzY29wZV9zdGFydCwgdTY0IHNjb3BlX3NpemUpCiYjNDM7ewomIzQzOwl1NjQgdGxiX3NpemUsIHRsYl9zdGFydCwgdGxiX2VuZCwgc2NvcGVfZW5kOwomIzQzOwomIzQzOwl0bGJfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LSZndDt3aS5wZ3NoaWZ0LCB2dC0mZ3Q7d3IubGV2ZWwpKTsKJiM0MzsKJiM0MzsJdGxiX3N0YXJ0ID0gYWRkciAmYW1wOyB+KHRsYl9zaXplIC0gMSk7CiYjNDM7CXRsYl9lbmQgPSB0bGJfc3RhcnQgJiM0MzsgdGxiX3NpemUgLSAxOwomIzQzOwlzY29wZV9lbmQgPSBzY29wZV9zdGFydCAmIzQzOyBzY29wZV9zaXplIC0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuICEodGxiX2VuZCAmbHQ7IHNjb3BlX3N0YXJ0IHx8IHRsYl9zdGFydCAmZ3Q7IHNjb3BlX2VuZCk7CiB9CiAKIC8qCkBAIC0xMDA3LDE5ICYjNDM7MTA0Myw5IEBAIHN0YXRpYyB2b2lkIGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHN0YXJ0LCB1NjQgZW5kKQogCWlmICgha3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyX09OTFkpKQogCQlyZXR1cm47CiAKLQlrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkgewotCQl1NjQgaXBhX3N0YXJ0LCBpcGFfZW5kLCBpcGFfc2l6ZTsKLQotCQlpcGFfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LSZndDt3aS5wZ3NoaWZ0LAotCQkJCQkJCSAgICB2dC0mZ3Q7d3IubGV2ZWwpKTsKLQkJaXBhX3N0YXJ0ID0gdnQtJmd0O3dyLnBhICZhbXA7IH4oaXBhX3NpemUgLSAxKTsKLQkJaXBhX2VuZCA9IGlwYV9zdGFydCAmIzQzOyBpcGFfc2l6ZTsKLQotCQlpZiAoaXBhX2VuZCAmbHQ7PSBzdGFydCB8fCBpcGFfc3RhcnQgJmd0Oz0gZW5kKQotCQkJY29udGludWU7Ci0KLQkJaW52YWxpZGF0ZV92bmNyKHZ0KTsKLQl9CiYjNDM7CWt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKQomIzQzOwkJaWYgKHZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LSZndDt3ci5wYSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSkKJiM0MzsJCQlpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7CiB9CiAKIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUgewpAQCAtMTA0NSwyOCAmIzQzOzEwNzEsMTkgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSwKIAlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiAKIAlrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkgewotCQl1NjQgdmFfc3RhcnQsIHZhX2VuZCwgdmFfc2l6ZTsKLQotCQl2YV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtJmd0O3dpLnBnc2hpZnQsCi0JCQkJCQkJICAgdnQtJmd0O3dyLmxldmVsKSk7Ci0JCXZhX3N0YXJ0ID0gdnQtJmd0O2d2YSAmYW1wOyB+KHZhX3NpemUgLSAxKTsKLQkJdmFfZW5kID0gdmFfc3RhcnQgJiM0MzsgdmFfc2l6ZTsKLQogCQlzd2l0Y2ggKHNjb3BlLSZndDt0eXBlKSB7CiAJCWNhc2UgVExCSV9BTEw6CiAJCQlicmVhazsKIAogCQljYXNlIFRMQklfVkE6Ci0JCQlpZiAodmFfZW5kICZsdDs9IHNjb3BlLSZndDt2YSB8fAotCQkJICAgIHZhX3N0YXJ0ICZndDs9IChzY29wZS0mZ3Q7dmEgJiM0Mzsgc2NvcGUtJmd0O3NpemUpKQomIzQzOwkJCWlmICghdm5jcl90bGJfaW50ZXJzZWN0cyh2dCwgdnQtJmd0O2d2YSwgc2NvcGUtJmd0O3ZhLCBzY29wZS0mZ3Q7c2l6ZSkpCiAJCQkJY29udGludWU7CiAJCQlpZiAodnQtJmd0O3dyLm5HICZhbXA7JmFtcDsgdnQtJmd0O3dyLmFzaWQgIT0gc2NvcGUtJmd0O2FzaWQpCiAJCQkJY29udGludWU7CiAJCQlicmVhazsKIAogCQljYXNlIFRMQklfVkFBOgotCQkJaWYgKHZhX2VuZCAmbHQ7PSBzY29wZS0mZ3Q7dmEgfHwKLQkJCSAgICB2YV9zdGFydCAmZ3Q7PSAoc2NvcGUtJmd0O3ZhICYjNDM7IHNjb3BlLSZndDtzaXplKSkKJiM0MzsJCQlpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LSZndDtndmEsIHNjb3BlLSZndDt2YSwgc2NvcGUtJmd0O3NpemUpKQogCQkJCWNvbnRpbnVlOwogCQkJYnJlYWs7CiAKQEAgLTEwNzYsNyAmIzQzOzEwOTMsNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLAogCQkJYnJlYWs7CiAJCX0KIAotCQlpbnZhbGlkYXRlX3ZuY3IodnQpOwomIzQzOwkJaW52YWxpZGF0ZV92bmNyKGt2bSwgdnQpOwogCX0KIH0KIApAQCAtMTEyNiw4ICYjNDM7MTE0Myw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLAogCWNhc2UgT1BfVExCSV9WQUxFMU9TTlhTOgogCQlzY29wZS0mZ3Q7dHlwZSA9IFRMQklfVkE7CiAJCXNjb3BlLSZndDtzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpOwotCQlpZiAoIXNjb3BlLSZndDtzaXplKQotCQkJc2NvcGUtJmd0O3NpemUgPSBTWl8xRzsKIAkJc2NvcGUtJmd0O3ZhID0gdGxiaV92YV9zMV90b192YSh2YWwpICZhbXA7IH4oc2NvcGUtJmd0O3NpemUgLSAxKTsKIAkJc2NvcGUtJmd0O2FzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpOwogCQlicmVhazsKQEAgLTExNTQsOCAmIzQzOzExNjksNiBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX3MxX3RsYmlfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbCwKIAljYXNlIE9QX1RMQklfVkFBTEUxT1NOWFM6CiAJCXNjb3BlLSZndDt0eXBlID0gVExCSV9WQUE7CiAJCXNjb3BlLSZndDtzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpOwotCQlpZiAoIXNjb3BlLSZndDtzaXplKQotCQkJc2NvcGUtJmd0O3NpemUgPSBTWl8xRzsKIAkJc2NvcGUtJmd0O3ZhID0gdGxiaV92YV9zMV90b192YSh2YWwpICZhbXA7IH4oc2NvcGUtJmd0O3NpemUgLSAxKTsKIAkJYnJlYWs7CiAJY2FzZSBPUF9UTEJJX1JWQUUyOgpAQCAtMTMxNiwxMyAmIzQzOzEzMjksMjAgQEAgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSkKICAqICAgaW50ZXJzZWN0cyB3aXRoIHRoZSBUTEJJIHJlcXVlc3QsIGludmFsaWRhdGUgaXQsIGFuZCB1bm1hcCB0aGUgcGFnZQogICogICBmcm9tIHRoZSBmaXhtYXAuIEJlY2F1c2Ugd2UgbmVlZCB0byBsb29rIGF0IGFsbCB0aGUgdmNwdS1wcml2YXRlIFRMQnMsCiAgKiAgIHRoaXMgcmVxdWlyZXMgc29tZSB3aWRlLXJhbmdpbmcgbG9ja2luZyB0byBlbnN1cmUgdGhhdCBub3RoaW5nIHJhY2VzCi0gKiAgIGFnYWluc3QgaXQuIFRoaXMgbWF5IHJlcXVpcmUgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW4KLSAqICAgbm8gc3VjaCBUTEIgaXMgcHJlc2VudC4KJiM0MzsgKiAgIGFnYWluc3QgaXQuIFRoaXMgcmVxdWlyZXMgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW4KJiM0MzsgKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQgKHNlZSBiZWxvdykuCiAgKgogICogLSBPbiBNTVUgbm90aWZpZXJzLCB3ZSBtdXN0IGludmFsaWRhdGUgb3VyIFRMQiBpbiBhIHNpbWlsYXIgd2F5LCBidXQKICAqICAgbG9va2luZyBhdCB0aGUgSVBBIGluc3RlYWQuIFRoZSBmdW5ueSBwYXJ0IGlzIHRoYXQgdGhlcmUgbWF5IG5vdCBiZSBhCiAgKiAgIHN0YWdlLTIgbWFwcGluZyBmb3IgdGhpcyBwYWdlIGlmIEwxIGhhc24mIzM5O3QgYWNjZXNzZWQgaXQgdXNpbmcgTEQvU1QKICAqICAgaW5zdHJ1Y3Rpb25zLgomIzQzOyAqCiYjNDM7ICogLSB2bmNyX3RsYl9jb3VudCB0cmFja3MgdGhlIG51bWJlciBvZiB2YWxpZCBWTkNSIFRMQnMgVk0td2lkZS4gVGhpcyBpc24mIzM5O3QKJiM0MzsgKiAgIHRoZSBudW1iZXIgb2YgKm1hcHBlZCogTDEgVk5DUiBwYWdlcywgd2hpY2ggaXMgbGlrZWx5IGJlIGEgc3Vic2V0IChhbmQKJiM0MzsgKiAgIGJ5IGRlZmluaXRpb24sIGEgVExCSSBoYW5kbGVkIGZyb20gTDEgcnVucyB3aXRoIHRoZSBjYW5vbmljYWwgVk5DUgomIzQzOyAqICAgcGFnZSwgbm90IHRoZSBMMSYjMzk7cykuIFRoZSBpbm5lcm1vc3QgdHJhcCBoYW5kbGluZyBjb2RlIGNoZWNrcyB0aGlzIHRvCiYjNDM7ICogICBmaW5kIG91dCB3aGV0aGVyIHRvIHJldHVybiB0byB0aGUgZ3Vlc3QgQVNBUCAobm8gTDEgVExCcykgb3IgdG8gdmlzaXQKJiM0MzsgKiAgIHRoaXMgcGFydCBvZiB0aGUgd29ybGQgZm9yIHNvbWUgZXh0cmEgaW52YWxpZGF0aW9uIHdvcmsuCiAgKi8KIAogaW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTEzNzcsNyAmIzQzOzEzOTcsOCBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJICovCiAJc2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykgewogCQl0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcCh2Y3B1KTsKLQkJdnQtJmd0O3ZhbGlkID0gZmFsc2U7CiYjNDM7CQlpZiAodnQtJmd0O3ZhbGlkKQomIzQzOwkJCWludmFsaWRhdGVfdm5jcih2Y3B1LSZndDtrdm0sIHZ0KTsKIAogCQl2dC0mZ3Q7d2kgPSAoc3RydWN0IHMxX3dhbGtfaW5mbykgewogCQkJLnJlZ2ltZQk9IFRSX0VMMjAsCkBAIC0xNDQ5LDYgJiM0MzsxNDcwLDggQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKQogCQl2dC0mZ3Q7dmFsaWQgPSB0cnVlOwogCQl2dC0mZ3Q7Y3B1ID0gLTE7CiAKJiM0MzsJCWF0b21pY19pbmMoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2gudm5jcl90bGJfY291bnQpOwomIzQzOwogCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfTUFQX0wxX1ZOQ1JfRUwyLCB2Y3B1KTsKIAkJa3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHZjcHUtJmd0O2t2bSwgcGFnZSwgZmFsc2UsIHZ0LSZndDt3ci5wdyAmYW1wOyZhbXA7IHZ0LSZndDtocGFfd3JpdGFibGUpOwogCX0KQEAgLTE1NjgsNiAmIzQzOzE1OTEsOSBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghdnQtJmd0O3ZhbGlkKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCEodmNwdV9yZWFkX3N5c19yZWcodmNwdSwgU0NUTFJfRUwyKSAmYW1wOyBTQ1RMUl9FTHhfTSkgIT0gczFfbW11X2Rpc2FibGVkKCZhbXA7dnQtJmd0O3dyKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAocmVhZF92bmNyX2VsMih2Y3B1KSAhPSB2dC0mZ3Q7Z3ZhKQogCQlyZXR1cm47CiAKQEAgLTE1OTIsNyAmIzQzOzE2MTgsNiBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmIChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoUEFHRV9OT05FKSkgewogCQlfX3NldF9maXhtYXAodm5jcl9maXhtYXAodnQtJmd0O2NwdSksIHZ0LSZndDtocGEsIHByb3QpOwogCQlob3N0X2RhdGFfc2V0X2ZsYWcoTDFfVk5DUl9NQVBQRUQpOwotCQlhdG9taWNfaW5jKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZuY3JfbWFwX2NvdW50KTsKIAl9CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIEtWTSBBUk02NCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHBva2luZyBhcm91bmQgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQVJNNjQsIHNwZWNpZmljYWxseSB0aGUgVk5DUiAoVmlydHVhbCBOZXN0ZWQgQ29udHJvbCBSZWdpc3RlcikgVExCIGhhbmRsaW5nLiBJdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0aGF0IHNlZW0gcHJldHR5IGZ1bmRhbWVudGFsLCBsaWtlIHJlbmFtaW5nIGB2bmNyX21hcF9jb3VudGAgdG8gYHZuY3JfdGxiX2NvdW50YCwgYW5kIGFkanVzdGluZyBob3cgdGhlc2UgVk5DUiBUTEJzIGFyZSBpbnZhbGlkYXRlZCBhbmQgdHJhY2tlZC4gSSBzZWUgbmV3IGZ1bmN0aW9ucyBiZWluZyBpbnRyb2R1Y2VkOiBgczFfbW11X2Rpc2FibGVkKClgIGFuZCBgX190dGxfdG9fc2l6ZSgpYCwgcGx1cyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcgbG9naWMgaW4gYHR0bF90b19zaXplKClgLiBUaGVuLCB3ZSBoYXZlIGNoYW5nZXMgaW4gZnVuY3Rpb25zIGxpa2UgYGludmFsaWRhdGVfdm5jcl92YSgpYCwgYGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhKClgLCBgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAoKWAsIGBpbnZhbGlkYXRlX3ZuY3IoKWAsIGBrdm1fdHJhbnNsYXRlX3ZuY3IoKWAsIGFuZCBga3ZtX21hcF9sMV92bmNyKClgLiBUaGVzZSBhcmUgYWxsIGNvcmUgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBmdW5jdGlvbnMuCgpUaGlzIGlzIGNyaXRpY2FsIGtlcm5lbCBsb2dpYywgbm8gZG91YnQgYWJvdXQgaXQsIGFuZCBpdCBkZWZpbml0ZWx5IG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gV2UgYWJzb2x1dGVseSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLgoKTXkgZmlyc3Qgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMgYW5kIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfQVJNNjRgLCB3aGljaCBpcyBpbXBsaWNpdCBnaXZlbiB0aGUgYXJjaGl0ZWN0dXJlLCBvZiBjb3Vyc2UuIEZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc3BlY2lmaWNhbGx5LCB0aGVyZSBtaWdodCBiZSBhIG1vcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgb3IgdHdvLCBidXQgdGhlIHN0YW5kYXJkIEtWTSBBUk02NCBjb25maWcgdHlwaWNhbGx5IGNvdmVycyB0aGF0LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgYXJjaC9hcm02NC9rdm0vS2NvbmZpZ2AgdG8gYmUgc3VyZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY29uZmlybSBhbGwgcmVxdWlyZWQgY29uZmlnIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXHRib29sIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgZm9yIEFSTTY0IE5lc3RlZCBLVk0gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgc29tZXRoaW5nIG9idmlvdXMuIFRoZSBnb2FsIGlzIG5lc3RlZCBLVk0gb24gQVJNNjQsIHJpZ2h0PyBTbywgdGhlIGltbWVkaWF0ZSwgKm11c3QtY2hlY2sqIGl0ZW0gb24gbXkgbWVudGFsIGNoZWNrbGlzdCBpczogSXMgdGhlcmUgYW55IHNwZWNpZmljIG9yIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIGd1aWRhbmNlLCBwZXJoYXBzIHNwZWNpZmljIHF1aXJrcywgb3Iga25vd24gZ290Y2hhcywgZm9yIHJ1bm5pbmcgbmVzdGVkIEtWTSBvbiBhbiBBUk02NCBhcmNoaXRlY3R1cmUgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiwgYmVmb3JlIHdhc3RpbmcgdmFsdWFibGUgdGltZSByZWludmVudGluZyBhIHdoZWVsPyBMZXQgbWUgZ28gYW5kIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBvbiBBUk02NCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3RhdHVzIG9mIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0IGluIEtWTSBvbiBBUk02NC4gSW5zdGVhZCBvZiBtYW51YWxseSBzaWZ0aW5nIHRocm91Z2ggdGhlIHNvdXJjZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCBsZXQmIzM5O3MgYmUgZWZmaWNpZW50LiBUaGUgcXVpY2tlc3Qgd2F5IHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBhdmFpbGFibGUgY29uZmlndXJhdGlvbnMgaXMgb2Z0ZW4gdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBpbiBgYXJjaC9hcm02NC9rdm0vS2NvbmZpZ2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhhdCBmaWxlIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSB0ZXJtICYjMzQ7TkVTVEVELiYjMzQ7IFRoYXQgc2hvdWxkIGhpZ2hsaWdodCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGZlYXR1cmUuIFRoYXQmIzM5O3MgYSBtdWNoIGZhc3RlciBhbmQgZm9jdXNlZCBhcHByb2FjaCB0aGFuIHN0YXJ0aW5nIGEgZGVlcCBkaXZlIGZyb20gc2NyYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FU1RFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipOZXN0ZWQgVmlydHVhbGl6YXRpb24gb24gQVJNNjQgLSBEaWdnaW5nIGludG8gdGhlIENvZGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb24gQVJNNjQuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBpdCBoYXZlIGl0cyBvd24gZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBpcyBpdCBqdXN0IGltcGxpY2l0bHkgZW5hYmxlZCBhcyBwYXJ0IG9mIHRoZSBLVk0gc2V0dXAgb24gdGhhdCBhcmNoaXRlY3R1cmU/IEkgdmFndWVseSByZWNhbGwgdGhhdCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb24geDg2IGhhcyBpdHMgb3duIHNwZWNpYWwga25vYiwgYnV0IEkmIzM5O20gZHJhd2luZyBhIGJsYW5rIG9uIEFSTTY0LiBJIHNob3VsZCByZWFsbHkgYnJ1c2ggdXAgb24gbXkgS1ZNIGludGVybmFscyBhZ2Fpbi4uLgoKVG8gZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgIGZpbGUgc2hvdWxkIGJlIHRoZSBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgaW4gdGhlcmUsIHNvbWV0aGluZyBsaWtlIGAjaWZkZWYgQ09ORklHX1NPTUVUSElOR19ORVNURURfQVJNNjRgLiBJZiBpdCAqaXMqIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHRoYXQgd2lsbCBnaXZlIG1lIG15IGFuc3dlciBxdWlja2x5LiBJZiBub3QsIGl0IG1lYW5zIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBtaWdodCBiZSBhIHN0YW5kYXJkIHBhcnQgb2YgS1ZNJiMzOTtzIEFSTTY0IHN1cHBvcnQsIHdoaWNoIGlzIHN0aWxsIGltcG9ydGFudCB0byBkZXRlcm1pbmUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICYjNDM7PSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuLS1cbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTE5LVx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MjA6XHQgYXJjaF90aW1lci5vIHRybmcubyB2bWlkLm8gZW11bGF0ZS1uZXN0ZWQubyBuZXN0ZWQubyBhdC5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yMS1cdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXG4tLVxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjUtXHQgdmdpYy92Z2ljLW1taW8tdjMubyB2Z2ljL3ZnaWMta3ZtLWRldmljZS5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZToyNjpcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yNy1cdCB2Z2ljL3ZnaWMtdjUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTQxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoIGZvciBLZXkgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgcmVsYXRlZCB0byBLVk0sIHNwZWNpZmljYWxseSB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFzcGVjdHMsIHNpbmNlIGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIEtWTSBpcyBlbmFibGVkLiBTbywgYEtWTWAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0aGF0IGRyaXZlcyB0aGlzLiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29yZSBjaGFuZ2VzLgoKTGV0JiMzOTtzIHNlZSwgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gdGhlIGZvbGxvd2luZzoKCi0gICBga3ZtX2luaXRfbmVzdGVkYAotICAgYHR0bF90b19zaXplYAotICAgYHBnc2hpZnRfbGV2ZWxfdG9fdHRsYAotICAgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYAotICAgYGt2bV92Y3B1X2xvYWRfaHdfbW11YCAobm90IGRpcmVjdGx5LCBqdXN0IGNvbnRleHQgaW4gYSBmdW5jdGlvbiBjYWxsKQotICAgYHVubWFwX2wxX3ZuY3JgCi0gICBgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXBgCi0gICBgaW52YWxpZGF0ZV92bmNyYAotICAgYHZuY3JfdGxiX2ludGVyc2VjdHNgCi0gICBga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGFgCi0gICBgaW52YWxpZGF0ZV92bmNyX3ZhYAotICAgYGNvbXB1dGVfczFfdGxiaV9yYW5nZWAKLSAgIGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAKLSAgIGBrdm1fdHJhbnNsYXRlX3ZuY3JgCi0gICBga3ZtX21hcF9sMV92bmNyYAoKTm93LCB0byB1bmRlcnN0YW5kIHRoZSBBUEkgaW50ZXJhY3Rpb25zLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGVudHJ5IHBvaW50cyB0aGF0IGFyZSAqbm90KiBzdGF0aWMsIG9yIGlubGluZWQuIFRob3NlIGFyZSB0aGUgb25lcyBvdGhlcnMgYXJlIGxpa2VseSB0byBjYWxsLiBTbywgSSBzZWU6CgotICAgYGt2bV9pbml0X25lc3RlZGAKLSAgIGBrdm1fd2Fsa19uZXN0ZWRfczJgIChjb250ZXh0KQotICAgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYAotICAgYGt2bV92Y3B1X3B1dF9od19tbXVgIChjb250ZXh0KQotICAgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGxgIChjb250ZXh0KQotICAgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYAoKV2FpdCwgYGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhYCBpcyBzdGF0aWM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdDsgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSBJIG5lZWQgdG8gdHJhY2sgZG93biBvdGhlciBjYWxsZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faW52YWxpZGF0ZV92bmNyX2lwYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEwMTA9c3RhdGljIGJvb2wgdm5jcl90bGJfaW50ZXJzZWN0cyhzdHJ1Y3Qgdm5jcl90bGIgKnZ0LCB1NjQgYWRkcixcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMDM0LVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTAzNTpzdGF0aWMgdm9pZCBrdm1faW52YWxpZGF0ZV92bmNyX2lwYShzdHJ1Y3Qga3ZtICprdm0sIHU2NCBzdGFydCwgdTY0IGVuZClcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEwMzYte1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEyMjk9dm9pZCBrdm1fbmVzdGVkX3MyX3dwKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjQ0LVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTI0NTpcdGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhKGt2bSwgMCwgQklUKGt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QtXHUwMDNlaWFfYml0cykpO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTI0Ni19XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTI0OD12b2lkIGt2bV9uZXN0ZWRfczJfdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCBib29sIG1heV9ibG9jaylcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjYzLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTI2NDpcdGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhKGt2bSwgMCwgQklUKGt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QtXHUwMDNlaWFfYml0cykpO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTI2NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS1ZNIFZpcnR1YWxpemF0aW9uIElucXVpcnkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgS1ZNIGNvZGUuLi4gYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBrdm1faW52YWxpZGF0ZV92bmNyX2lwYWAgaXMgZGVmaW5pdGVseSBhIHN0YXRpYyBmdW5jdGlvbi4gTm8gc3VycHJpc2VzIHRoZXJlLCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpczogV2hhdCBhYm91dCBga3ZtX3RyYW5zbGF0ZV92bmNyYD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBzY29wZSBhbmQgdXNhZ2UuIElzIGl0IHN0YXRpYyBhcyB3ZWxsLCBvciBpcyBpdCBleHBvc2VkIG1vcmUgYnJvYWRseT8gVW5kZXJzdGFuZGluZyB0aGF0IGZ1bmN0aW9uJiMzOTtzIHZpc2liaWxpdHkgd2lsbCBiZSBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmUuIE5lZWQgdG8ga2VlcCBkaWdnaW5nLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV90cmFuc2xhdGVfdm5jciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEzNzM9c3RhdGljIHU2NCByZWFkX3ZuY3JfZWwyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzc3LVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTM3ODpzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzc5LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNTEwPWludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE1MjctXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNTI4Olx0cmV0ID0ga3ZtX3RyYW5zbGF0ZV92bmNyKHZjcHUsIFx1MDAyNmlzX2dtZW0pO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUyOS1cdHN3aXRjaCAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzAxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFZOQ1IgQWJvcnQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBWaXJ0dWFsIE5lc3RlZCBDb2RlIFJlLWVudHJ5IChWTkNSKSBhYm9ydHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBLVk0gaHlwZXJ2aXNvci4gSSBzZWUgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAgaXMgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSBjb25jZXJuZWQgd2l0aCBpbml0aWFsbHkuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0IGNhbGxzIGBrdm1fdHJhbnNsYXRlX3ZuY3JgLiBUaGF0IG1ha2VzIHNlbnNlIC0gd2UgbmVlZCB0byB0cmFuc2xhdGUgdGhlIGZhdWx0aW5nIGFkZHJlc3MgdG8gZmlndXJlIG91dCB3aGF0IHdlbnQgd3JvbmcuCgpCdXQsIGFuZCB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2ssIHdoYXQmIzM5O3MgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBrdm1fbWFwX2wxX3ZuY3JgPyBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5lc3RlZCBwYWdpbmcgaGVyZSwgYW5kIEkgc3VzcGVjdCBga3ZtX21hcF9sMV92bmNyYCBtaWdodCBiZSBjcnVjaWFsIGluIGVzdGFibGlzaGluZyBvciBtYWludGFpbmluZyB0aGUgTDEgbWFwcGluZ3MgdGhhdCBhcmUgcmVsZXZhbnQgaW4gdGhpcyBzY2VuYXJpby4gSXMgdGhlIGFib3J0IGhhcHBlbmluZyBiZWNhdXNlIG9mIGFuIGlzc3VlIGR1cmluZyB0aGUgbWFwcGluZyBwcm9jZXNzIGRvbmUgYnkgYGt2bV9tYXBfbDFfdm5jcmAsIG9yIGlzIHRoaXMgZnVuY3Rpb24gbW9yZSBvZiBhIHNldHVwLCBhbmQgdGhlIGFjdHVhbCB0cmFuc2xhdGlvbiBkb25lIGJ5IGBrdm1fdHJhbnNsYXRlX3ZuY3JgIGlzIHRoZSBjdWxwcml0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgdGhlIGFib3J0IGhhbmRsaW5nIGZsb3cuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBwYXRocyBhbmQgY29uc2lkZXIgdGhlIHNwZWNpZmljIGNvbnRleHQgb2YgdGhlIFZOQ1IgYWJvcnQgdG8gc2VlIGhvdyB0aGUgTDEgbWFwcGluZ3MgcGxheSBhIHJvbGUuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbWFwX2wxX3ZuY3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNTEwPWludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE1NjktXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNTcwOnN0YXRpYyB2b2lkIGt2bV9tYXBfbDFfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTcxLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xOTU3PXZvaWQgY2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE5NzAtXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDIsIHZjcHUpKVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTk3MTpcdFx0a3ZtX21hcF9sMV92bmNyKHZjcHUpO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTk3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGNvbnNpZGVyaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIEtWTSBWaXJ0dWFsaXphdGlvbiBJbnRlcm5hbHMqKgoKT2theSwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIHRyYWNpbmcgdGhlIGZsb3cgb2YgbmVzdGVkIHZpcnR1YWxpemF0aW9uIFZDUFUgcmVxdWVzdHMuIFJpZ2h0LCBgY2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHNgIGlzIHVsdGltYXRlbHkgdXNpbmcgYGt2bV9tYXBfbDFfdm5jcmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBjb3JlIG1hcHBpbmcgZnVuY3Rpb24gZm9yIHRoZSBMMSBWTkNyIChOZXN0ZWQgVmlydHVhbCBDUFUgUmVxdWVzdCkgc3RydWN0dXJlLiBCdXQgbXkgbWluZCBkcmlmdHMuIFRoYXQmIzM5O3MgZmluZS4KCkhvbGQgb24uLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGBpbnZhbGlkYXRlX3ZuY3JfdmFgLiBUaGF0JiMzOTtzIGNyaXRpY2FsIHRvby4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhlIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGUgVk5DUi4gVGhpcyBjb3VsZCBoYXBwZW4gb24gYSBWTSBleGl0LCBhbiBpbnZhbGlkYXRpb24gb2YgdGhlIGd1ZXN0IHBhZ2UgdGFibGVzLCBvciBzb21lIG90aGVyIGV2ZW50IHRoYXQgcmVxdWlyZXMgdGhlIG9sZCBWTkNSIHRvIGJlIHJlLW1hcHBlZCBvbiBhIHJlLWVudHJ5IGV2ZW50LiBJIG5lZWQgdG8ga2VlcCB0aGF0IG9uZSBmcmVzaCBpbiBteSBoZWFkIGFzIEkgY29udGludWUuIExldCBtZSBtZW50YWxseSBsaW5rIHRob3NlIHR3byBmb3Igbm93LCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBsb3NlIHRoZSB0aHJlYWQuLi4gYGNoZWNrX25lc3RlZF92Y3B1X3JlcXVlc3RzYCB3aXRoIGl0cyBkZXBlbmRlbmN5IG9uIGBrdm1fbWFwX2wxX3ZuY3JgLCBhbmQgdGhlbiBjb25zaWRlciB0aGUgaW52YWxpZGF0aW9uIGxvZ2ljIG9mIGBpbnZhbGlkYXRlX3ZuY3JfdmFgLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludmFsaWRhdGVfdm5jcl92YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEwNTE9c3RydWN0IHMxZTJfdGxiaV9zY29wZSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTA2My1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEwNjQ6c3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEwNjUtXHRcdFx0ICAgICAgIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUgKnNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEyMTk9dm9pZCBrdm1faGFuZGxlX3MxZTJfdGxiaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsKVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyMjUtXHRndWFyZCh3cml0ZV9sb2NrKShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jayk7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMjI2Olx0aW52YWxpZGF0ZV92bmNyX3ZhKHZjcHUtXHUwMDNla3ZtLCBcdTAwMjZzY29wZSk7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjI3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRMQiBJbnZhbGlkYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBga3ZtX2hhbmRsZV9zMWUyX3RsYmlgIHVsdGltYXRlbHkgY2FsbHMgYGludmFsaWRhdGVfdm5jcl92YWAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IG1vdmUgaXMgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgbW9kaWZpZWQgdGhlbXNlbHZlcywgb3IgY2FsbCBhbnkgc3RhdGljIGZ1bmN0aW9ucyB0aGF0ICpoYXZlKiBiZWVuIGNoYW5nZWQuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSByaXBwbGUgZWZmZWN0LgoKTGV0JiMzOTtzIHNlZS4uLiB0aGUgbGlzdCBJJiMzOTt2ZSBnb3QgaXM6Ci0gYGt2bV9pbml0X25lc3RlZGAKLSBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgCi0gYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYAotIGBrdm1fbmVzdGVkX3MyX3dwYAotIGBrdm1fbmVzdGVkX3MyX3VubWFwYAotIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgCi0gYGNoZWNrX25lc3RlZF92Y3B1X3JlcXVlc3RzYAotIGBrdm1faGFuZGxlX3MxZTJfdGxiaWAKLSBga3ZtX3ZjcHVfcHV0X2h3X21tdWAKLSBga3ZtX3ZjcHVfbG9hZF9od19tbXVgCgpUaGVzZSBhbGwgbG9vayBsaWtlIHBvdGVudGlhbCBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gbXkgYEZvY3VzU3ltYm9sc2Agc2V0LiBCdXQgSSBuZWVkIHRvIHJlZmluZSB0aGF0IGluaXRpYWwgbGlzdC4gSSBuZWVkIHRvIHdlZWQgb3V0IGFueXRoaW5nIHRoYXQmIzM5O3MgdG9vIGdlbmVyaWMgb3IsIG1vcmUgaW1wb3J0YW50bHksIGluIGEgaG90IHBhdGguCgpBbHJpZ2h0LCBga3ZtX3ZjcHVfcHV0X2h3X21tdWAgYW5kIGBrdm1fdmNwdV9sb2FkX2h3X21tdWAgYXJlIGRlZmluaXRlbHkgcGVyZm9ybWFuY2UgY3JpdGljYWwsIHNvIHRoYXQgaXMgb2ZmIHRoZSBsaXN0LiBUaGVuIGBjaGVja19uZXN0ZWRfdmNwdV9yZXF1ZXN0c2AgaXMgY2FsbGVkIG9uIGV2ZXJ5IHZDUFUgcnVuIC0gb2J2aW91c2x5IGEgaG90IHBhdGguCgpOb3csIHRoYXQgbGVhdmVzIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgIGFzIGEgZmF1bHQgaGFuZGxlciAtIHRoYXQmIzM5O3MgZ29vZC4gQW5kIGBrdm1faGFuZGxlX3MxZTJfdGxiaWAgaXMgYW4gaW5zdHJ1Y3Rpb24gaGFuZGxlciwgd2hpY2ggSSBhbHNvIGxpa2UuIFRoZW4gYGt2bV9uZXN0ZWRfczJfd3BgIGFuZCBga3ZtX25lc3RlZF9zMl91bm1hcGAgbG9vayByZWxldmFudCwgYW5kIGZpbmFsbHkgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCBhbmQgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCBhcmUgZ29vZCBwaWNrcy4KCk5leHQgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCBhbmQgYGt2bV9oYW5kbGVfczFlMl90bGJpYCBhcmUgZXhwb3J0ZWQsIG9yIHNpbXBseSBub24tc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faGFuZGxlX3ZuY3JfYWJvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYz0zNzY9c3RhdGljIGV4aXRfaGFuZGxlX2ZuIGFybV9leGl0X2hhbmRsZXJzW10gPSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYy0zOTUtXHRbRVNSX0VMeF9FQ19EQUJUX0xPV11cdD0ga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydCxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmM6Mzk2Olx0W0VTUl9FTHhfRUNfREFCVF9DVVJdXHQ9IGt2bV9oYW5kbGVfdm5jcl9hYm9ydCxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmMtMzk3LVx0W0VTUl9FTHhfRUNfU09GVFNUUF9MT1ddPSBrdm1faGFuZGxlX2d1ZXN0X2RlYnVnLFxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0ODU9c3RhdGljIHZvaWQgaGFuZGxlX3ZuY3JfcGVybShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUwOS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE1MTA6aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTExLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NzEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgRXhpdCBIYW5kbGVycyBpbiBLVk0qKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZXhpdCBoYW5kbGVycywgY29uZmlybWVkLiBHb29kLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCB0byBnZXQgdG8gdGhlIHNwZWNpZmljcyBhbmQgdW5kZXJzdGFuZCB0aGUgZmxvdywgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBga3ZtX2hhbmRsZV9zMWUyX3RsYmlgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoaXMgbWlnaHQgYmUgYSBrZXkgaGFuZGxlci4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBUTEJJIG9wZXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGl0IG1pZ2h0IGhvbGQuIEkgYW50aWNpcGF0ZSB0aGF0IHRoaXMgd2lsbCBiZSBhIHdvcnRod2hpbGUgcGF0aCB0byB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faGFuZGxlX3MxZTJfdGxiaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMTAyPXN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLFxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyMTgtXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMjE5OnZvaWQga3ZtX2hhbmRsZV9zMWUyX3RsYmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbClcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyMjAte1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NDEzNT1zdGF0aWMgYm9vbCBoYW5kbGVfdGxiaV9lbDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTQyLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MTQzOlx0a3ZtX2hhbmRsZV9zMWUyX3RsYmkodmNwdSwgc3lzX2VuY29kaW5nLCBwLVx1MDAzZXJlZ3ZhbCk7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxNDQtXHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTQxNDc9c3RhdGljIGJvb2wgaGFuZGxlX3RsYmlfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDE3Ny1cdGlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpIFx1MDAyNlx1MDAyNiB2Y3B1X2VsMl90Z2VfaXNfc2V0KHZjcHUpKSB7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQxNzg6XHRcdGt2bV9oYW5kbGVfczFlMl90bGJpKHZjcHUsIHN5c19lbmNvZGluZywgcC1cdTAwM2VyZWd2YWwpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTc5LVx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgU3lzdGVtIFJlZ2lzdGVyIEhhbmRsZXIgQ2FsbCoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY2FsbHMgb3JpZ2luYXRpbmcgZnJvbSB0aGUgYHN5c19yZWdzYCBoYW5kbGVycy4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoYXQgd2UgbmVlZCB0byBsb29rIGF0LiBXZSYjMzk7cmUgY2xlYXJseSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gc3lzdGVtIHJlZ2lzdGVyIGFjY2VzcywgbGlrZWx5IHdpdGhpbiBhIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIGZvY3VzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uLgoKVGhlIG5leHQgdGhpbmcgdG8gY2hlY2sgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBga3ZtX25lc3RlZF9zMl93cGAgYW5kIGBrdm1fbmVzdGVkX3MyX3VubWFwYC4gVGhlc2UgYXJlIGhpZ2hseSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgYmVpbmcgaW52b2x2ZWQuIFRoZSAmIzM0O1dQJiMzNDsgc3VnZ2VzdHMgJiMzNDt3cml0ZSBwcm90ZWN0aW9uLCYjMzQ7IHdoaWNoIGlzIGEgY29tbW9uIGNvbmNlcm4gaW4gaHlwZXJ2aXNvciBlbnZpcm9ubWVudHMuIFdlIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgd3JpdGUgcHJvdGVjdGlvbiBhbmQgbWVtb3J5IHVubWFwcGluZyB3aXRoIG5lc3RlZCBwYWdpbmcuIFRoZXNlIGFyZSB0aGUgcGllY2VzIG9mIHRoZSBwdXp6bGUgdGhhdCBhbG1vc3QgY2VydGFpbmx5IGRlZmluZSB0aGUgYmVoYXZpb3VyIGFuZCBsaWtlbHkgcG9pbnQgdG8gdGhlIHJvb3QgY2F1c2Ugb2Ygd2hhdGV2ZXIgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGd1ZXN0JiMzOTtzIHZpZXcgb2YgbWVtb3J5IHdpdGhpbiB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbmVzdGVkX3MyX3dwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL21tdS5jPTEyNjc9c3RhdGljIHZvaWQga3ZtX21tdV93cF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTI4MC1cdGt2bV9zdGFnZTJfd3BfcmFuZ2UoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11LCBzdGFydCwgZW5kKTtcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEyODE6XHRrdm1fbmVzdGVkX3MyX3dwKGt2bSk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMjgyLVx0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTMyNT12b2lkIGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTM0Ny1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEzNDg6XHRrdm1fbmVzdGVkX3MyX3dwKGt2bSk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMzQ5LX1cbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMjE5PXZvaWQga3ZtX2hhbmRsZV9zMWUyX3RsYmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbClcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjI4LVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTIyOTp2b2lkIGt2bV9uZXN0ZWRfczJfd3Aoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTIzMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjk1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkFuYWx5emluZyBNTVUgQ29kZSBhbmQgVExCIEludmFsaWRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgTU1VIGNvZGUuIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gZGVhbGluZyB3aXRoIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHBlcmhhcHMgc29tZSBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUsIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gY29udGV4dCBzd2l0Y2hpbmcgb3IgY29uY3VycmVudCBhY2Nlc3MuIFNwZWNpZmljYWxseSwgbXkgZm9jdXMgaXMgY3VycmVudGx5IG9uIHRoZSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkICpmcm9tKiB0aGUgTU1VIGNvZGUgaXRzZWxmLiBUaGlzIGlzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgdG8gZXhhbWluZSwgYXMgZWZmaWNpZW5jeSBoZXJlIGRpcmVjdGx5IGltcGFjdHMgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UuCgpMZXQmIzM5O3Mgem9vbSBpbiBvbiBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgY2x1ZXMgbWUgaW4gdG8gVExCIGludmFsaWRhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gYWRkcmVzcyBzcGFjZSBtb2RpZmljYXRpb25zIChtYXBwaW5ncyBiZWluZyBhbHRlcmVkLCB1bm1hcHBlZCwgb3IgaW52YWxpZGF0ZWQgZHVlIHRvIG1lbW9yeSBwcm90ZWN0aW9uIGNoYW5nZXMsIGZvciBleGFtcGxlKS4gYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCAqc3VnZ2VzdHMqIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgc3BlY2lmaWMgKnJhbmdlKiBvZiBUTEIgZW50cmllcyB0aGF0IG5lZWQgaW52YWxpZGF0aW9uIOKAkyBhIGtleSBvcHRpbWl6YXRpb24uIEl0IHdpbGwgcHJvYmFibHkgZGV0ZXJtaW5lIHRoZSBtaW5pbWFsbHkgbmVjZXNzYXJ5IGVudHJpZXMsIHNvIHdlIGRvbiYjMzk7dCBlbmQgdXAgZmx1c2hpbmcgdG9vIG1hbnkgVExCIGVudHJpZXMgdW5uZWNlc3NhcmlseSwgYnV0IG1ha2Ugc3VyZSB0byBmbHVzaCBlbm91Z2ggc28gYXMgdG8gbm90IGludmFsaWRhdGUuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCB0aGVyZSBjb3VsZCBiZSBkaWZmZXJlbnQgc3RyYXRlZ2llcyBmb3IgdGhhdCwgd2hpY2ggaXMgcGFydCBvZiB3aGF0IEkmIzM5O2QgYmUgbG9va2luZyBhdC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsb2dpYyB2ZXJ5IGNhcmVmdWxseS4gSXMgdGhpcyB0aGUgKm9ubHkqIHBhcnQgdGhhdCBkZWFscyB3aXRoIHRoZSBwcm9jZXNzIG9mIGludmFsaWRhdGlvbiwgb3IgaXMgaXQgY29tYmluZWQgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zPyBBcmUgdGhlIGludmFsaWRhdGlvbnMgcGVyZm9ybWVkIGltbWVkaWF0ZWx5LCBxdWV1ZWQsIG9yIGRlZmVycmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHByb2Nlc3MgaXMgd29ya2luZyBzbyB0aGF0IEkgY2FuIHVuZGVyc3RhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wdXRlX3RsYl9pbnZhbF9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz02MDY9c3RhdGljIHU4IGdldF9ndWVzdF9tYXBwaW5nX3R0bChzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgYWRkcilcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy02NzYtXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo2Nzc6dW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNjc4LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTQwODM9c3RhdGljIHZvaWQgczJfbW11X3VubWFwX2lwYShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDA5OC1cdGJhc2VfYWRkciA9IChpbmZvLVx1MDAzZWlwYS5hZGRyIFx1MDAyNiBHRU5NQVNLX1VMTCgzNSwgMCkpIFx1MDAzY1x1MDAzYyAxMjtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDA5OTpcdG1heF9zaXplID0gY29tcHV0ZV90bGJfaW52YWxfcmFuZ2UobW11LCBpbmZvLVx1MDAzZWlwYS5hZGRyKTtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDEwMC1cdGJhc2VfYWRkciBcdTAwMjY9IH4obWF4X3NpemUgLSAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMjIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBNYW5hZ2VtZW50IElzc3VlKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyB0aGF0IHNlZW1zIHRvIG9yaWdpbmF0ZSBmcm9tIGBzMl9tbXVfdW5tYXBfaXBhYC4gVGhpcyBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIHRoZSBzeXN0ZW0gcmVnaXN0ZXIgaGFuZGxlcnMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHByZXR0eSBsb3ctbGV2ZWwgYW5kIGxpa2VseSBwZXJmb3JtYW5jZS1zZW5zaXRpdmUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgcGF0aCBiYWNrd2FyZC4gV2hlcmUgZG9lcyBgczJfbW11X3VubWFwX2lwYWAgZ2V0IGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhlIG5leHQgc3RlcCBpcyBjbGVhciDigJMgSSB3YW50IHRvIGxvb2sgYXQgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYC4gSSBzdXNwZWN0IHRoZXJlJiMzOTtzIGEgY29ubmVjdGlvbiB0aGVyZSwgcHJvYmFibHkgcmVsYXRlZCB0byBhbGxvY2F0aW5nIG9yIG1hbmFnaW5nIHRoZSBWaXJ0dWFsIE5ldHdvcmsgQ29udGV4dCBSZWdpb24gKFZOQ1IpIFRMQi4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgdW5tYXBwaW5nIGlzIGFjdHVhbGx5IGluaXRpYXRlZCBvciB0cmlnZ2VyZWQsIG9yIHBlcmhhcHMgd2hlcmUgdGhlIFRMQiBlbnRyaWVzIHJlbGF0ZWQgdG8gdGhlIElQQSBtYXBwaW5nIGFyZSBhbGxvY2F0ZWQuIFRoaXMgZmVlbHMgbGlrZSBhIGdvb2QgbGVhZCBpbiBuYXJyb3dpbmcgZG93biB3aGVyZSB0byBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9hcm0uYz05MjE9aW50IGt2bV9hcmNoX3ZjcHVfcnVuX3BpZF9jaGFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTk1MS1cdGlmICh2Y3B1X2hhc19udih2Y3B1KSkge1xuYXJjaC9hcm02NC9rdm0vYXJtLmM6OTUyOlx0XHRyZXQgPSBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYih2Y3B1KTtcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTk1My1cdFx0aWYgKHJldClcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMjg0PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTM0Ny1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEzNDg6aW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzNDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU5NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlY2VudCBDaGFuZ2VzIGluIHRoZSBLVk0gQXJjaGl0ZWN0dXJlKioKCk9rYXksIHNvIHRoaXMgY2hhbmdlIHN0ZW1zIGZyb20gYSBjYWxsIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9ydW5fcGlkX2NoYW5nZWAuIFRoYXQgbmFycm93cyB0aGUgZm9jdXMgY29uc2lkZXJhYmx5LiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBzeW1ib2xzOiBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCwgYGt2bV9oYW5kbGVfczFlMl90bGJpYCwgYGt2bV9uZXN0ZWRfczJfd3BgLCBga3ZtX25lc3RlZF9zMl91bm1hcGAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGFuZCBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgaG90IHpvbmUuCgpIb2xkIG9uLi4uIEkgbm90aWNlZCBzb21ldGhpbmcuIGBrdm1fbmVzdGVkX3MyX3VubWFwYCBpdHNlbGYgd2FzbiYjMzk7dCBkaXJlY3RseSB0b3VjaGVkLiBCdXQsIGBrdm1faW52YWxpZGF0ZV92bmNyX2lwYWAsIHdoaWNoIGl0IGNhbGxzLCAqd2FzKiBtb2RpZmllZC4gVGhhdCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gSSBzaG91bGQgcmVhbGx5IGNvbmZpcm0gdGhlIGludGVyYWN0aW9uIHdpdGggYGt2bV9uZXN0ZWRfczJfdW5tYXBgIGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBpbXBhY3RzIG9mIHRoYXQgaW5kaXJlY3QgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbmVzdGVkX3MyX3VubWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL21tdS5jPTExMDQ9dm9pZCBzdGFnZTJfdW5tYXBfdm0oc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExMTctXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTE4Olx0a3ZtX25lc3RlZF9zMl91bm1hcChrdm0sIHRydWUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTExOS1cbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNDM0PWJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNDQyLVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjQ0MzpcdGt2bV9uZXN0ZWRfczJfdW5tYXAoa3ZtLCByYW5nZS1cdTAwM2VtYXlfYmxvY2spO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMjQ0NC1cdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNzE3PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI3MjQtXHRrdm1fc3RhZ2UyX3VubWFwX3JhbmdlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSwgZ3BhLCBzaXplLCB0cnVlKTtcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI3MjU6XHRrdm1fbmVzdGVkX3MyX3VubWFwKGt2bSwgdHJ1ZSk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNzI2LVx0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTIyOT12b2lkIGt2bV9uZXN0ZWRfczJfd3Aoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyNDctXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMjQ4OnZvaWQga3ZtX25lc3RlZF9zMl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgbWF5X2Jsb2NrKVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTI0OS17XG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0zOTM4PXN0YXRpYyBib29sIGhhbmRsZV9hbGxlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzk1MS1cdCAqL1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzozOTUyOlx0a3ZtX25lc3RlZF9zMl91bm1hcCh2Y3B1LVx1MDAzZWt2bSwgdHJ1ZSk7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTM5NTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzIwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqTmF2aWdhdGluZyB0aGUgS1ZNIEluaXRpYWxpemF0aW9uIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2FsbCBvcmlnaW5hdGVkIGZyb20gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKE1NVSkgYW5kIHN5c3RlbSByZWdpc3RlcnMsIHdoaWNoIGlzIGdvb2QgY29udGV4dC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIEtWTSBpbml0aWFsaXphdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBga3ZtX2luaXRfbmVzdGVkYC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGFuZCBpdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIHBpZWNlcyBjb25uZWN0aW5nIHRoZSBNTVUgYW5kIHN5c3RlbSByZWdpc3RlciBpbnRlcmFjdGlvbnMgY29tZSB0b2dldGhlciBpbiB0aGlzIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBteSBpbnR1aXRpb24gaXMgY29ycmVjdCBhbmQgZHJpbGwgZG93biBpbnRvIGBrdm1faW5pdF9uZXN0ZWRgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGlzIHNwZWNpZmljIGNhbGwgcGF0aC4gSSYjMzk7bGwgYWxzbyBjaGVjayBpZiBJIGhhdmUgZW5jb3VudGVyZWQgdGhpcyBjYWxsIHByZXZpb3VzbHksIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiBhbnkgdHJpY2t5IHBhcnRzIG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIE1NVSwgdGhlIHN5c3RlbSByZWdpc3RlcnMsIGFuZCB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNldHVwIHdpdGhpbiBLVk0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9pbml0X25lc3RlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9hcm0uYz0yMjI9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMjM4LVxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MjM5Olx0a3ZtX2luaXRfbmVzdGVkKGt2bSk7XG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yNDAtXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9OTgxPWludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMzYtXHRpZiAoa3ZtX2lzX25lc3RlZF9zMl9tbXUoa3ZtLCBtbXUpKVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTAzNzpcdFx0a3ZtX2luaXRfbmVzdGVkX3MyX21tdShtbXUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAzOC1cbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xMTI1PXZvaWQga3ZtX2ZyZWVfc3RhZ2UyX3BnZChzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExMzgtXHRpZiAoa3ZtX2lzX25lc3RlZF9zMl9tbXUoa3ZtLCBtbXUpKVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTEzOTpcdFx0a3ZtX2luaXRfbmVzdGVkX3MyX21tdShtbXUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE0MC1cbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0yMD1zdHJ1Y3Qgdm5jcl90bGIge1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTQ2LVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6NDc6dm9pZCBrdm1faW5pdF9uZXN0ZWQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNDgte1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTgwNT1zdGF0aWMgc3RydWN0IGt2bV9zMl9tbXUgKmdldF9zMl9tbXVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy04NjktXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo4NzA6dm9pZCBrdm1faW5pdF9uZXN0ZWRfczJfbW11KHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy04NzEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYzMgoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiA3NDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBLVk0gQVJNNjQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBga3ZtX2luaXRfbmVzdGVkYCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gY2FsbGVkIGZyb20gYGt2bV9hcmNoX2luaXRfdm1gLiBJdCYjMzk7cyBiYXNpY2FsbHkgdGhlIHNldHVwIGZ1bmN0aW9uIGZvciB0aGlzIHNwZWNpZmljIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LgoKTXkgaW5pdGlhbCBmb2N1cyBoZXJlLCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZXMsIGlzIGFyb3VuZCBob3cgVmlydHVhbCBOZXN0ZWQgQ29udHJvbCBSZWdpc3RlcnMgKFZOQ1IpIGFuZCBUTEIgaW52YWxpZGF0aW9uIGFyZSBoYW5kbGVkLiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIHNlZW1zIHRvIHRvdWNoOiBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCwgYGt2bV9oYW5kbGVfczFlMl90bGJpYCwgYGt2bV9uZXN0ZWRfczJfd3BgLCBga3ZtX25lc3RlZF9zMl91bm1hcGAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGFuZCBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY29uZmlybSB0aGVzZSBzeW1ib2wgbmFtZXMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBZZXAsIHRoZXkgY2hlY2sgb3V0LgoKQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgIGFuZCBgYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY2AuIENsZWFybHksIHRoaXMgaXMgY29yZSBLVk0gQVJNNjQgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBJJiMzOTttIG5vdGluZyB0aGF0IGBDT05GSUdfS1ZNYCBpcyB0aGUgZW5jb21wYXNzaW5nIGNvbmZpZyBvcHRpb24uCgpUaGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIFZOQ1IgVExCIGhhbmRsaW5nIGFuZCB0aGUgY29tcHV0YXRpb24vYXBwbGljYXRpb24gb2YgVExCIGludmFsaWRhdGlvbiByYW5nZXMgd2l0aGluIHRoZSBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzdWJ0bGUsIGJ1dCBjcml0aWNhbCwgYnVncy4gU28sIEkgbmVlZCB0byBmbGFnIHRoaXMgZm9yIGZ1enppbmcuIFRoZXNlIGFyZSByZWFjaGFibGUsIGtlcm5lbCBwYXRocyB0aGF0IG5lZWQgcmlnb3JvdXMgdGVzdGluZyB0byBwcmV2ZW50IHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpUaGVyZWZvcmUsIEkmIzM5O20gbWFya2luZyB0aGlzIGZvciBmdXp6aW5nLCB1c2luZyBgS1ZNYCBhcyB0aGUgY29uZmlnLiBNeSBhbmFseXNpcyBpZGVudGlmaWVzIHRoZSBmb2xsb3dpbmcgc3ltYm9sczoKLSBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YAotIGBrdm1faGFuZGxlX3MxZTJfdGxiaWAKLSBga3ZtX25lc3RlZF9zMl93cGAKLSBga3ZtX25lc3RlZF9zMl91bm1hcGAKLSBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgCi0gYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYAphbmQgSSYjMzk7bGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gcmVsYXkgdGhlc2UgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faGFuZGxlX3ZuY3JfYWJvcnQmIzM0OywKICAgICYjMzQ7a3ZtX2hhbmRsZV9zMWUyX3RsYmkmIzM0OywKICAgICYjMzQ7a3ZtX25lc3RlZF9zMl93cCYjMzQ7LAogICAgJiMzNDtrdm1fbmVzdGVkX3MyX3VubWFwJiMzNDssCiAgICAmIzM0O2NvbXB1dGVfdGxiX2ludmFsX3JhbmdlJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBWTkNSIChWaXJ0dWFsIE5lc3RlZCBDb250cm9sIFJlZ2lzdGVyKSBUTEIgaGFuZGxpbmcgYW5kIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgdHJhY2tpbmcgbWVjaGFuaXNtcyBhbmQgbW9kaWZpZXMgaG93IFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIGFyZSBjb21wdXRlZCBhbmQgYXBwbGllZC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faGFuZGxlX3ZuY3JfYWJvcnQmIzM0OywKICAgICYjMzQ7a3ZtX2hhbmRsZV9zMWUyX3RsYmkmIzM0OywKICAgICYjMzQ7a3ZtX25lc3RlZF9zMl93cCYjMzQ7LAogICAgJiMzNDtrdm1fbmVzdGVkX3MyX3VubWFwJiMzNDssCiAgICAmIzM0O2NvbXB1dGVfdGxiX2ludmFsX3JhbmdlJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBWTkNSIChWaXJ0dWFsIE5lc3RlZCBDb250cm9sIFJlZ2lzdGVyKSBUTEIgaGFuZGxpbmcgYW5kIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgdHJhY2tpbmcgbWVjaGFuaXNtcyBhbmQgbW9kaWZpZXMgaG93IFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIGFyZSBjb21wdXRlZCBhbmQgYXBwbGllZC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTI6NTg6MjkuMTUzNDUxMjgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MTI2MTQwMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9oYW5kbGVfdm5jcl9hYm9ydFwiLFxuICAgIFwia3ZtX2hhbmRsZV9zMWUyX3RsYmlcIixcbiAgICBcImt2bV9uZXN0ZWRfczJfd3BcIixcbiAgICBcImt2bV9uZXN0ZWRfczJfdW5tYXBcIixcbiAgICBcImNvbXB1dGVfdGxiX2ludmFsX3JhbmdlXCIsXG4gICAgXCJrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBWTkNSIChWaXJ0dWFsIE5lc3RlZCBDb250cm9sIFJlZ2lzdGVyKSBUTEIgaGFuZGxpbmcgYW5kIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgdHJhY2tpbmcgbWVjaGFuaXNtcyBhbmQgbW9kaWZpZXMgaG93IFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIGFyZSBjb21wdXRlZCBhbmQgYXBwbGllZC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1ODoyOS4xNTM0NjU5MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTc4NjU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5ZDVhZTlkNDhiODE0ZThjOGY2N2U0MzMyNWMyZWZjMjg4MDhiZGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAxMjo1ODoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCBiYWUyYzRmOTJlZjVjLi4xMDg5NjZhOWRiMTJiIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC00MTEsOCArNDExLDggQEAgc3RydWN0IGt2bV9hcmNoIHtcXG4gXFx0LyogTWFza3MgZm9yIFZOQ1ItYmFja2VkIGFuZCBnZW5lcmFsIEVMMiBzeXNyZWdzICovXFxuIFxcdHN0cnVjdCBrdm1fc3lzcmVnX21hc2tzXFx0KnN5c3JlZ19tYXNrcztcXG4gXFxuLVxcdC8qIENvdW50IHRoZSBudW1iZXIgb2YgVk5DUl9FTDIgY3VycmVudGx5IG1hcHBlZCAqL1xcbi1cXHRhdG9taWNfdCB2bmNyX21hcF9jb3VudDtcXG4rXFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovXFxuK1xcdGF0b21pY190IHZuY3JfdGxiX2NvdW50O1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRm9yIGFuIHVudHJ1c3RlZCBob3N0IFZNLCAncGt2bS5oYW5kbGUnIGlzIHVzZWQgdG8gbG9va3VwXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmhcXG5pbmRleCAwMTJkNzExMDM0ZDE3Li5jYzQ4ODE3YTViZjdhIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmhcXG5AQCAtMzg4LDYgKzM4OCw4IEBAIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCB7XFxuIFxcdGJvb2xcXHRmYWlsZWQ7XFxuIH07XFxuIFxcbisjZGVmaW5lIFMxX01NVV9ESVNBQkxFRFxcdFxcdCgtMTI3KVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGZhaWxfczFfd2FsayhzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1OCBmc3QsIGJvb2wgczFwdHcpXFxuIHtcXG4gXFx0d3ItXFx1MDAzZWZzdFxcdFxcdD0gZnN0O1xcbkBAIC0zOTYsNiArMzk4LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KVxcbiBcXHR3ci1cXHUwMDNlZmFpbGVkXFx0PSB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgczFfbW11X2Rpc2FibGVkKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IpXFxuK3tcXG4rXFx0cmV0dXJuIHdyLVxcdTAwM2VsZXZlbCA9PSBTMV9NTVVfRElTQUJMRUQ7XFxuK31cXG4rXFxuIGludCBfX2t2bV90cmFuc2xhdGVfdmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU2NCB2YSk7XFxuIGludCBfX2t2bV9maW5kX3MxX2Rlc2NfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmEsIHU2NCBpcGEsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2F0LmMgYi9hcmNoL2FybTY0L2t2bS9hdC5jXFxuaW5kZXggNjQwZjJkYzAwYThiYS4uMDkyNjQyNmI4Nzk4OSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hdC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vYXQuY1xcbkBAIC0xMSw4ICsxMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX21tdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2xzdWkuaFxcdTAwM2VcXG4gXFxuLSNkZWZpbmUgUzFfTU1VX0RJU0FCTEVEXFx0XFx0KC0xMjcpXFxuLVxcbiBzdGF0aWMgaW50IGdldF9pYV9zaXplKHN0cnVjdCBzMV93YWxrX2luZm8gKndpKVxcbiB7XFxuIFxcdHJldHVybiA2NCAtIHdpLVxcdTAwM2V0eHN6O1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xcbmluZGV4IGJiZTljZWJkM2Q5ZDUuLmViNTk1NDllYzIxNzIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcXG5AQCAtNDI0LDExICs0MjQsMTEgQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgbWFwcGluZyBiZWluZyBpbnZhbGlkYXRlZCxcXG4rXFx0ICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgVExCIGJlaW5nIGludmFsaWRhdGVkLFxcbiBcXHQgKiBnbyBiYWNrIHRvIHRoZSBzbG93IHBhdGggZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cXG4gXFx0ICovXFxuIFxcdGlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpIFxcdTAwMjZcXHUwMDI2IHZjcHVfZWwyX3RnZV9pc19zZXQodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQpKVxcbitcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bmNyX3RsYl9jb3VudCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdF9fa3ZtX3NraXBfaW5zdHIodmNwdSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcXG5pbmRleCBkZmI5NmVkYmRjNDNjLi4xZTNmZDk4ZjY1ODliIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcXG5AQCAtNDgsNyArNDgsNyBAQCB2b2lkIGt2bV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLm5lc3RlZF9tbXVzID0gTlVMTDtcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLm5lc3RlZF9tbXVzX3NpemUgPSAwO1xcbi1cXHRhdG9taWNfc2V0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQsIDApO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudm5jcl90bGJfY291bnQsIDApO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGluaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUpXFxuQEAgLTUwNiw3ICs1MDYsNyBAQCBpbnQga3ZtX3dhbGtfbmVzdGVkX3MyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGh5c19hZGRyX3QgZ2lwYSxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgX190dGxfdG9fc2l6ZSh1OCB0dGwpXFxuIHtcXG4gXFx0aW50IGxldmVsID0gdHRsIFxcdTAwMjYgMztcXG4gXFx0aW50IGdyYW4gPSAodHRsIFxcdTAwM2VcXHUwMDNlIDIpIFxcdTAwMjYgMztcXG5AQCAtNTYyLDEwICs1NjIsMjIgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpXFxuIFxcdHJldHVybiBtYXhfc2l6ZTtcXG4gfVxcbiBcXG4tc3RhdGljIHU4IHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHUxNiBzaGlmdCwgdTggbGV2ZWwpXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxcbit7XFxuK1xcdHJldHVybiBfX3R0bF90b19zaXplKHR0bCkgPzogU1pfMUc7XFxuK31cXG4rXFxuK3N0YXRpYyB1OCBwZ3NoaWZ0X2xldmVsX3RvX3R0bCh1MTYgc2hpZnQsIHM4IGxldmVsKVxcbiB7XFxuIFxcdHU4IHR0bDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIElmIHdlIGRvbid0IGhhdmUgYSBwcm9wZXIgbGV2ZWwsIGZhbGxiYWNrIHRvIHRoZSBtYXhpbXVtXFxuK1xcdCAqIHNpemUuXFxuK1xcdCAqL1xcbitcXHRpZiAobGV2ZWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdHN3aXRjaChzaGlmdCkge1xcbiBcXHRjYXNlIDEyOlxcbiBcXHRcXHR0dGwgPSBUTEJJX1RUTF9UR180SztcXG5AQCAtNjc2LDcgKzY4OCwxMSBAQCB1bnNpZ25lZCBsb25nIGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHU2NCB2YWwpXFxuIFxcdFxcdHR0bCA9IGdldF9ndWVzdF9tYXBwaW5nX3R0bChtbXUsIGFkZHIpO1xcbiBcXHR9XFxuIFxcbi1cXHRtYXhfc2l6ZSA9IHR0bF90b19zaXplKHR0bCk7XFxuK1xcdC8qXFxuK1xcdCAqIERvbid0IHVzZSB0aGUgZGVmYXVsdCAxR0IgZmFsbGJhY2ssIGFzIHdlIGNhbiBhZGFwdCB0byB0aGVcXG4rXFx0ICogbWF4IG1hcHBpbmcgc2l6ZSB3ZSBhbGxvdyBhdCBTMi5cXG4rXFx0ICovXFxuK1xcdG1heF9zaXplID0gX190dGxfdG9fc2l6ZSh0dGwpO1xcbiBcXG4gXFx0aWYgKCFtYXhfc2l6ZSkge1xcbiBcXHRcXHQvKiBDb21wdXRlIHRoZSBtYXhpbXVtIGV4dGVudCBvZiB0aGUgaW52YWxpZGF0aW9uICovXFxuQEAgLTg3OSw2ICs4OTUsMTIgQEAgdm9pZCBrdm1fdmNwdV9sb2FkX2h3X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdW5tYXBfbDFfdm5jcihzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxcbit7XFxuK1xcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC1cXHUwMDNlY3B1KSk7XFxuK1xcdHZ0LVxcdTAwM2VjcHUgPSAtMTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdGlmICghaG9zdF9kYXRhX3Rlc3RfZmxhZyhMMV9WTkNSX01BUFBFRCkpXFxuQEAgLTg4NywxMCArOTA5LDggQEAgc3RhdGljIHZvaWQgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRCVUdfT04odmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYi1cXHUwMDNlY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7XFxuIFxcdEJVR19PTihpc19oeXBfY3R4dCh2Y3B1KSk7XFxuIFxcbi1cXHRjbGVhcl9maXhtYXAodm5jcl9maXhtYXAodmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYi1cXHUwMDNlY3B1KSk7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGItXFx1MDAzZWNwdSA9IC0xO1xcbitcXHR1bm1hcF9sMV92bmNyKHZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGIpO1xcbiBcXHRob3N0X2RhdGFfY2xlYXJfZmxhZyhMMV9WTkNSX01BUFBFRCk7XFxuLVxcdGF0b21pY19kZWMoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bmNyX21hcF9jb3VudCk7XFxuIH1cXG4gXFxuIHZvaWQga3ZtX3ZjcHVfcHV0X2h3X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuQEAgLTk3OCwxMSArOTk4LDI3IEBAIHUxNiBnZXRfYXNpZF9ieV9yZWdpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHRyYW5zX3JlZ2ltZSByZWdpbWUpXFxuIFxcdHJldHVybiBhc2lkO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dClcXG4rc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZuY3JfdGxiICp2dClcXG4ge1xcbitcXHRCVUdfT04oIXZ0LVxcdTAwM2V2YWxpZCk7XFxuIFxcdHZ0LVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbitcXHRhdG9taWNfZGVjKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpO1xcbiBcXHRpZiAodnQtXFx1MDAzZWNwdSAhPSAtMSlcXG4tXFx0XFx0Y2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKHZ0LVxcdTAwM2VjcHUpKTtcXG4rXFx0XFx0dW5tYXBfbDFfdm5jcih2dCk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsXFxuK1xcdFxcdFxcdFxcdHU2NCBzY29wZV9zdGFydCwgdTY0IHNjb3BlX3NpemUpXFxuK3tcXG4rXFx0dTY0IHRsYl9zaXplLCB0bGJfc3RhcnQsIHRsYl9lbmQsIHNjb3BlX2VuZDtcXG4rXFxuK1xcdHRsYl9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXFx1MDAzZXdpLnBnc2hpZnQsIHZ0LVxcdTAwM2V3ci5sZXZlbCkpO1xcbitcXG4rXFx0dGxiX3N0YXJ0ID0gYWRkciBcXHUwMDI2IH4odGxiX3NpemUgLSAxKTtcXG4rXFx0dGxiX2VuZCA9IHRsYl9zdGFydCArIHRsYl9zaXplIC0gMTtcXG4rXFx0c2NvcGVfZW5kID0gc2NvcGVfc3RhcnQgKyBzY29wZV9zaXplIC0gMTtcXG4rXFxuK1xcdHJldHVybiAhKHRsYl9lbmQgXFx1MDAzYyBzY29wZV9zdGFydCB8fCB0bGJfc3RhcnQgXFx1MDAzZSBzY29wZV9lbmQpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xMDA3LDE5ICsxMDQzLDkgQEAgc3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgc3RhcnQsIHU2NCBlbmQpXFxuIFxcdGlmICgha3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyX09OTFkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xcbi1cXHRcXHR1NjQgaXBhX3N0YXJ0LCBpcGFfZW5kLCBpcGFfc2l6ZTtcXG4tXFxuLVxcdFxcdGlwYV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXFx1MDAzZXdpLnBnc2hpZnQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB2dC1cXHUwMDNld3IubGV2ZWwpKTtcXG4tXFx0XFx0aXBhX3N0YXJ0ID0gdnQtXFx1MDAzZXdyLnBhIFxcdTAwMjYgfihpcGFfc2l6ZSAtIDEpO1xcbi1cXHRcXHRpcGFfZW5kID0gaXBhX3N0YXJ0ICsgaXBhX3NpemU7XFxuLVxcbi1cXHRcXHRpZiAoaXBhX2VuZCBcXHUwMDNjPSBzdGFydCB8fCBpcGFfc3RhcnQgXFx1MDAzZT0gZW5kKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGludmFsaWRhdGVfdm5jcih2dCk7XFxuLVxcdH1cXG4rXFx0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pXFxuK1xcdFxcdGlmICh2bmNyX3RsYl9pbnRlcnNlY3RzKHZ0LCB2dC1cXHUwMDNld3IucGEsIHN0YXJ0LCBlbmQgLSBzdGFydCkpXFxuK1xcdFxcdFxcdGludmFsaWRhdGVfdm5jcihrdm0sIHZ0KTtcXG4gfVxcbiBcXG4gc3RydWN0IHMxZTJfdGxiaV9zY29wZSB7XFxuQEAgLTEwNDUsMjggKzEwNzEsMTkgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuIFxcbiBcXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xcbi1cXHRcXHR1NjQgdmFfc3RhcnQsIHZhX2VuZCwgdmFfc2l6ZTtcXG4tXFxuLVxcdFxcdHZhX3NpemUgPSB0dGxfdG9fc2l6ZShwZ3NoaWZ0X2xldmVsX3RvX3R0bCh2dC1cXHUwMDNld2kucGdzaGlmdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdnQtXFx1MDAzZXdyLmxldmVsKSk7XFxuLVxcdFxcdHZhX3N0YXJ0ID0gdnQtXFx1MDAzZWd2YSBcXHUwMDI2IH4odmFfc2l6ZSAtIDEpO1xcbi1cXHRcXHR2YV9lbmQgPSB2YV9zdGFydCArIHZhX3NpemU7XFxuLVxcbiBcXHRcXHRzd2l0Y2ggKHNjb3BlLVxcdTAwM2V0eXBlKSB7XFxuIFxcdFxcdGNhc2UgVExCSV9BTEw6XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0Y2FzZSBUTEJJX1ZBOlxcbi1cXHRcXHRcXHRpZiAodmFfZW5kIFxcdTAwM2M9IHNjb3BlLVxcdTAwM2V2YSB8fFxcbi1cXHRcXHRcXHQgICAgdmFfc3RhcnQgXFx1MDAzZT0gKHNjb3BlLVxcdTAwM2V2YSArIHNjb3BlLVxcdTAwM2VzaXplKSlcXG4rXFx0XFx0XFx0aWYgKCF2bmNyX3RsYl9pbnRlcnNlY3RzKHZ0LCB2dC1cXHUwMDNlZ3ZhLCBzY29wZS1cXHUwMDNldmEsIHNjb3BlLVxcdTAwM2VzaXplKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdGlmICh2dC1cXHUwMDNld3IubkcgXFx1MDAyNlxcdTAwMjYgdnQtXFx1MDAzZXdyLmFzaWQgIT0gc2NvcGUtXFx1MDAzZWFzaWQpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGNhc2UgVExCSV9WQUE6XFxuLVxcdFxcdFxcdGlmICh2YV9lbmQgXFx1MDAzYz0gc2NvcGUtXFx1MDAzZXZhIHx8XFxuLVxcdFxcdFxcdCAgICB2YV9zdGFydCBcXHUwMDNlPSAoc2NvcGUtXFx1MDAzZXZhICsgc2NvcGUtXFx1MDAzZXNpemUpKVxcbitcXHRcXHRcXHRpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVxcdTAwM2VndmEsIHNjb3BlLVxcdTAwM2V2YSwgc2NvcGUtXFx1MDAzZXNpemUpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0xMDc2LDcgKzEwOTMsNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aW52YWxpZGF0ZV92bmNyKHZ0KTtcXG4rXFx0XFx0aW52YWxpZGF0ZV92bmNyKGt2bSwgdnQpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTExMjYsOCArMTE0Myw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLFxcbiBcXHRjYXNlIE9QX1RMQklfVkFMRTFPU05YUzpcXG4gXFx0XFx0c2NvcGUtXFx1MDAzZXR5cGUgPSBUTEJJX1ZBO1xcbiBcXHRcXHRzY29wZS1cXHUwMDNlc2l6ZSA9IHR0bF90b19zaXplKEZJRUxEX0dFVChUTEJJX1RUTF9NQVNLLCB2YWwpKTtcXG4tXFx0XFx0aWYgKCFzY29wZS1cXHUwMDNlc2l6ZSlcXG4tXFx0XFx0XFx0c2NvcGUtXFx1MDAzZXNpemUgPSBTWl8xRztcXG4gXFx0XFx0c2NvcGUtXFx1MDAzZXZhID0gdGxiaV92YV9zMV90b192YSh2YWwpIFxcdTAwMjYgfihzY29wZS1cXHUwMDNlc2l6ZSAtIDEpO1xcbiBcXHRcXHRzY29wZS1cXHUwMDNlYXNpZCA9IEZJRUxEX0dFVChUTEJJUl9BU0lEX01BU0ssIHZhbCk7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xMTU0LDggKzExNjksNiBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX3MxX3RsYmlfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbCxcXG4gXFx0Y2FzZSBPUF9UTEJJX1ZBQUxFMU9TTlhTOlxcbiBcXHRcXHRzY29wZS1cXHUwMDNldHlwZSA9IFRMQklfVkFBO1xcbiBcXHRcXHRzY29wZS1cXHUwMDNlc2l6ZSA9IHR0bF90b19zaXplKEZJRUxEX0dFVChUTEJJX1RUTF9NQVNLLCB2YWwpKTtcXG4tXFx0XFx0aWYgKCFzY29wZS1cXHUwMDNlc2l6ZSlcXG4tXFx0XFx0XFx0c2NvcGUtXFx1MDAzZXNpemUgPSBTWl8xRztcXG4gXFx0XFx0c2NvcGUtXFx1MDAzZXZhID0gdGxiaV92YV9zMV90b192YSh2YWwpIFxcdTAwMjYgfihzY29wZS1cXHUwMDNlc2l6ZSAtIDEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBPUF9UTEJJX1JWQUUyOlxcbkBAIC0xMzE2LDEzICsxMzI5LDIwIEBAIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pXFxuICAqICAgaW50ZXJzZWN0cyB3aXRoIHRoZSBUTEJJIHJlcXVlc3QsIGludmFsaWRhdGUgaXQsIGFuZCB1bm1hcCB0aGUgcGFnZVxcbiAgKiAgIGZyb20gdGhlIGZpeG1hcC4gQmVjYXVzZSB3ZSBuZWVkIHRvIGxvb2sgYXQgYWxsIHRoZSB2Y3B1LXByaXZhdGUgVExCcyxcXG4gICogICB0aGlzIHJlcXVpcmVzIHNvbWUgd2lkZS1yYW5naW5nIGxvY2tpbmcgdG8gZW5zdXJlIHRoYXQgbm90aGluZyByYWNlc1xcbi0gKiAgIGFnYWluc3QgaXQuIFRoaXMgbWF5IHJlcXVpcmUgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW5cXG4tICogICBubyBzdWNoIFRMQiBpcyBwcmVzZW50LlxcbisgKiAgIGFnYWluc3QgaXQuIFRoaXMgcmVxdWlyZXMgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW5cXG4rICogICBubyBzdWNoIFRMQiBpcyBwcmVzZW50IChzZWUgYmVsb3cpLlxcbiAgKlxcbiAgKiAtIE9uIE1NVSBub3RpZmllcnMsIHdlIG11c3QgaW52YWxpZGF0ZSBvdXIgVExCIGluIGEgc2ltaWxhciB3YXksIGJ1dFxcbiAgKiAgIGxvb2tpbmcgYXQgdGhlIElQQSBpbnN0ZWFkLiBUaGUgZnVubnkgcGFydCBpcyB0aGF0IHRoZXJlIG1heSBub3QgYmUgYVxcbiAgKiAgIHN0YWdlLTIgbWFwcGluZyBmb3IgdGhpcyBwYWdlIGlmIEwxIGhhc24ndCBhY2Nlc3NlZCBpdCB1c2luZyBMRC9TVFxcbiAgKiAgIGluc3RydWN0aW9ucy5cXG4rICpcXG4rICogLSB2bmNyX3RsYl9jb3VudCB0cmFja3MgdGhlIG51bWJlciBvZiB2YWxpZCBWTkNSIFRMQnMgVk0td2lkZS4gVGhpcyBpc24ndFxcbisgKiAgIHRoZSBudW1iZXIgb2YgKm1hcHBlZCogTDEgVk5DUiBwYWdlcywgd2hpY2ggaXMgbGlrZWx5IGJlIGEgc3Vic2V0IChhbmRcXG4rICogICBieSBkZWZpbml0aW9uLCBhIFRMQkkgaGFuZGxlZCBmcm9tIEwxIHJ1bnMgd2l0aCB0aGUgY2Fub25pY2FsIFZOQ1JcXG4rICogICBwYWdlLCBub3QgdGhlIEwxJ3MpLiBUaGUgaW5uZXJtb3N0IHRyYXAgaGFuZGxpbmcgY29kZSBjaGVja3MgdGhpcyB0b1xcbisgKiAgIGZpbmQgb3V0IHdoZXRoZXIgdG8gcmV0dXJuIHRvIHRoZSBndWVzdCBBU0FQIChubyBMMSBUTEJzKSBvciB0byB2aXNpdFxcbisgKiAgIHRoaXMgcGFydCBvZiB0aGUgd29ybGQgZm9yIHNvbWUgZXh0cmEgaW52YWxpZGF0aW9uIHdvcmsuXFxuICAqL1xcbiBcXG4gaW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtMTM3Nyw3ICsxMzk3LDggQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxcbiBcXHQgKi9cXG4gXFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKSB7XFxuIFxcdFxcdHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwKHZjcHUpO1xcbi1cXHRcXHR2dC1cXHUwMDNldmFsaWQgPSBmYWxzZTtcXG4rXFx0XFx0aWYgKHZ0LVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0XFx0aW52YWxpZGF0ZV92bmNyKHZjcHUtXFx1MDAzZWt2bSwgdnQpO1xcbiBcXG4gXFx0XFx0dnQtXFx1MDAzZXdpID0gKHN0cnVjdCBzMV93YWxrX2luZm8pIHtcXG4gXFx0XFx0XFx0LnJlZ2ltZVxcdD0gVFJfRUwyMCxcXG5AQCAtMTQ0OSw2ICsxNDcwLDggQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxcbiBcXHRcXHR2dC1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbiBcXHRcXHR2dC1cXHUwMDNlY3B1ID0gLTE7XFxuIFxcbitcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpO1xcbitcXG4gXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX01BUF9MMV9WTkNSX0VMMiwgdmNwdSk7XFxuIFxcdFxcdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZSh2Y3B1LVxcdTAwM2Vrdm0sIHBhZ2UsIGZhbHNlLCB2dC1cXHUwMDNld3IucHcgXFx1MDAyNlxcdTAwMjYgdnQtXFx1MDAzZWhwYV93cml0YWJsZSk7XFxuIFxcdH1cXG5AQCAtMTU2OCw2ICsxNTkxLDkgQEAgc3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKCF2dC1cXHUwMDNldmFsaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGlmICghKHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIFNDVExSX0VMMikgXFx1MDAyNiBTQ1RMUl9FTHhfTSkgIT0gczFfbW11X2Rpc2FibGVkKFxcdTAwMjZ2dC1cXHUwMDNld3IpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAocmVhZF92bmNyX2VsMih2Y3B1KSAhPSB2dC1cXHUwMDNlZ3ZhKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC0xNTkyLDcgKzE2MTgsNiBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKFBBR0VfTk9ORSkpIHtcXG4gXFx0XFx0X19zZXRfZml4bWFwKHZuY3JfZml4bWFwKHZ0LVxcdTAwM2VjcHUpLCB2dC1cXHUwMDNlaHBhLCBwcm90KTtcXG4gXFx0XFx0aG9zdF9kYXRhX3NldF9mbGFnKEwxX1ZOQ1JfTUFQUEVEKTtcXG4tXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KTtcXG4gXFx0fVxcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1ODoyOS43MDQzNDgzOTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTM1NzUyMjU3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2hhbmRsZV92bmNyX2Fib3J0XCIsXG4gICAgXCJrdm1faGFuZGxlX3MxZTJfdGxiaVwiLFxuICAgIFwia3ZtX25lc3RlZF9zMl93cFwiLFxuICAgIFwia3ZtX25lc3RlZF9zMl91bm1hcFwiLFxuICAgIFwiY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VcIixcbiAgICBcImt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIFZOQ1IgKFZpcnR1YWwgTmVzdGVkIENvbnRyb2wgUmVnaXN0ZXIpIFRMQiBoYW5kbGluZyBhbmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyB0cmFja2luZyBtZWNoYW5pc21zIGFuZCBtb2RpZmllcyBob3cgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvbXB1dGVkIGFuZCBhcHBsaWVkLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU5ZDVhZTlkNDhiODE0ZThjOGY2N2U0MzMyNWMyZWZjMjg4MDhiZGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDEyOjU4OjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBiYWUyYzRmOTJlZjVjLi4xMDg5NjZhOWRiMTJiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC00MTEsOCArNDExLDggQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdC8qIE1hc2tzIGZvciBWTkNSLWJhY2tlZCBhbmQgZ2VuZXJhbCBFTDIgc3lzcmVncyAqL1xuIFx0c3RydWN0IGt2bV9zeXNyZWdfbWFza3NcdCpzeXNyZWdfbWFza3M7XG4gXG4tXHQvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIGN1cnJlbnRseSBtYXBwZWQgKi9cbi1cdGF0b21pY190IHZuY3JfbWFwX2NvdW50O1xuK1x0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovXG4rXHRhdG9taWNfdCB2bmNyX3RsYl9jb3VudDtcbiBcbiBcdC8qXG4gXHQgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICdwa3ZtLmhhbmRsZScgaXMgdXNlZCB0byBsb29rdXBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG5pbmRleCAwMTJkNzExMDM0ZDE3Li5jYzQ4ODE3YTViZjdhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG5AQCAtMzg4LDYgKzM4OCw4IEBAIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCB7XG4gXHRib29sXHRmYWlsZWQ7XG4gfTtcbiBcbisjZGVmaW5lIFMxX01NVV9ESVNBQkxFRFx0XHQoLTEyNylcbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgZmFpbF9zMV93YWxrKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU4IGZzdCwgYm9vbCBzMXB0dylcbiB7XG4gXHR3ci1cdTAwM2Vmc3RcdFx0PSBmc3Q7XG5AQCAtMzk2LDYgKzM5OCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmFpbF9zMV93YWxrKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU4IGZzdCwgYm9vbCBzMXB0dylcbiBcdHdyLVx1MDAzZWZhaWxlZFx0PSB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgczFfbW11X2Rpc2FibGVkKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IpXG4re1xuK1x0cmV0dXJuIHdyLVx1MDAzZWxldmVsID09IFMxX01NVV9ESVNBQkxFRDtcbit9XG4rXG4gaW50IF9fa3ZtX3RyYW5zbGF0ZV92YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzMV93YWxrX2luZm8gKndpLFxuIFx0XHQgICAgICAgc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTY0IHZhKTtcbiBpbnQgX19rdm1fZmluZF9zMV9kZXNjX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhLCB1NjQgaXBhLFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2F0LmMgYi9hcmNoL2FybTY0L2t2bS9hdC5jXG5pbmRleCA2NDBmMmRjMDBhOGJhLi4wOTI2NDI2Yjg3OTg5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXQuY1xuQEAgLTExLDggKzExLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2xzdWkuaFx1MDAzZVxuIFxuLSNkZWZpbmUgUzFfTU1VX0RJU0FCTEVEXHRcdCgtMTI3KVxuLVxuIHN0YXRpYyBpbnQgZ2V0X2lhX3NpemUoc3RydWN0IHMxX3dhbGtfaW5mbyAqd2kpXG4ge1xuIFx0cmV0dXJuIDY0IC0gd2ktXHUwMDNldHhzejtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuaW5kZXggYmJlOWNlYmQzZDlkNS4uZWI1OTU0OWVjMjE3MiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbkBAIC00MjQsMTEgKzQyNCwxMSBAQCBzdGF0aWMgYm9vbCBrdm1faHlwX2hhbmRsZV90bGJpX2VsMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKlxuLVx0ICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgbWFwcGluZyBiZWluZyBpbnZhbGlkYXRlZCxcbitcdCAqIElmIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGFueSBWTkNSIFRMQiBiZWluZyBpbnZhbGlkYXRlZCxcbiBcdCAqIGdvIGJhY2sgdG8gdGhlIHNsb3cgcGF0aCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuIFx0ICovXG4gXHRpZiAodmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcdTAwMjZcdTAwMjYgdmNwdV9lbDJfdGdlX2lzX3NldCh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBhdG9taWNfcmVhZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KSlcbitcdCAgICBhdG9taWNfcmVhZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0X19rdm1fc2tpcF9pbnN0cih2Y3B1KTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG5pbmRleCBkZmI5NmVkYmRjNDNjLi4xZTNmZDk4ZjY1ODliIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG5AQCAtNDgsNyArNDgsNyBAQCB2b2lkIGt2bV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0a3ZtLVx1MDAzZWFyY2gubmVzdGVkX21tdXMgPSBOVUxMO1xuIFx0a3ZtLVx1MDAzZWFyY2gubmVzdGVkX21tdXNfc2l6ZSA9IDA7XG4tXHRhdG9taWNfc2V0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50LCAwKTtcbitcdGF0b21pY19zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQsIDApO1xuIH1cbiBcbiBzdGF0aWMgaW50IGluaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG5AQCAtNTA2LDcgKzUwNiw3IEBAIGludCBrdm1fd2Fsa19uZXN0ZWRfczIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBnaXBhLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX3R0bF90b19zaXplKHU4IHR0bClcbiB7XG4gXHRpbnQgbGV2ZWwgPSB0dGwgXHUwMDI2IDM7XG4gXHRpbnQgZ3JhbiA9ICh0dGwgXHUwMDNlXHUwMDNlIDIpIFx1MDAyNiAzO1xuQEAgLTU2MiwxMCArNTYyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxuIFx0cmV0dXJuIG1heF9zaXplO1xuIH1cbiBcbi1zdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCB1OCBsZXZlbClcbitzdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bClcbit7XG4rXHRyZXR1cm4gX190dGxfdG9fc2l6ZSh0dGwpID86IFNaXzFHO1xuK31cbitcbitzdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCBzOCBsZXZlbClcbiB7XG4gXHR1OCB0dGw7XG4gXG4rXHQvKlxuK1x0ICogSWYgd2UgZG9uJ3QgaGF2ZSBhIHByb3BlciBsZXZlbCwgZmFsbGJhY2sgdG8gdGhlIG1heGltdW1cbitcdCAqIHNpemUuXG4rXHQgKi9cbitcdGlmIChsZXZlbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRzd2l0Y2goc2hpZnQpIHtcbiBcdGNhc2UgMTI6XG4gXHRcdHR0bCA9IFRMQklfVFRMX1RHXzRLO1xuQEAgLTY3Niw3ICs2ODgsMTEgQEAgdW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxuIFx0XHR0dGwgPSBnZXRfZ3Vlc3RfbWFwcGluZ190dGwobW11LCBhZGRyKTtcbiBcdH1cbiBcbi1cdG1heF9zaXplID0gdHRsX3RvX3NpemUodHRsKTtcbitcdC8qXG4rXHQgKiBEb24ndCB1c2UgdGhlIGRlZmF1bHQgMUdCIGZhbGxiYWNrLCBhcyB3ZSBjYW4gYWRhcHQgdG8gdGhlXG4rXHQgKiBtYXggbWFwcGluZyBzaXplIHdlIGFsbG93IGF0IFMyLlxuK1x0ICovXG4rXHRtYXhfc2l6ZSA9IF9fdHRsX3RvX3NpemUodHRsKTtcbiBcbiBcdGlmICghbWF4X3NpemUpIHtcbiBcdFx0LyogQ29tcHV0ZSB0aGUgbWF4aW11bSBleHRlbnQgb2YgdGhlIGludmFsaWRhdGlvbiAqL1xuQEAgLTg3OSw2ICs4OTUsMTIgQEAgdm9pZCBrdm1fdmNwdV9sb2FkX2h3X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHVubWFwX2wxX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dClcbit7XG4rXHRjbGVhcl9maXhtYXAodm5jcl9maXhtYXAodnQtXHUwMDNlY3B1KSk7XG4rXHR2dC1cdTAwM2VjcHUgPSAtMTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGlmICghaG9zdF9kYXRhX3Rlc3RfZmxhZyhMMV9WTkNSX01BUFBFRCkpXG5AQCAtODg3LDEwICs5MDksOCBAQCBzdGF0aWMgdm9pZCB0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRCVUdfT04odmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiLVx1MDAzZWNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpO1xuIFx0QlVHX09OKGlzX2h5cF9jdHh0KHZjcHUpKTtcbiBcbi1cdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGItXHUwMDNlY3B1KSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGItXHUwMDNlY3B1ID0gLTE7XG4rXHR1bm1hcF9sMV92bmNyKHZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYik7XG4gXHRob3N0X2RhdGFfY2xlYXJfZmxhZyhMMV9WTkNSX01BUFBFRCk7XG4tXHRhdG9taWNfZGVjKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQpO1xuIH1cbiBcbiB2b2lkIGt2bV92Y3B1X3B1dF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTk3OCwxMSArOTk4LDI3IEBAIHUxNiBnZXRfYXNpZF9ieV9yZWdpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHRyYW5zX3JlZ2ltZSByZWdpbWUpXG4gXHRyZXR1cm4gYXNpZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyKHN0cnVjdCB2bmNyX3RsYiAqdnQpXG4rc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZuY3JfdGxiICp2dClcbiB7XG4rXHRCVUdfT04oIXZ0LVx1MDAzZXZhbGlkKTtcbiBcdHZ0LVx1MDAzZXZhbGlkID0gZmFsc2U7XG4rXHRhdG9taWNfZGVjKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KTtcbiBcdGlmICh2dC1cdTAwM2VjcHUgIT0gLTEpXG4tXHRcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC1cdTAwM2VjcHUpKTtcbitcdFx0dW5tYXBfbDFfdm5jcih2dCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsXG4rXHRcdFx0XHR1NjQgc2NvcGVfc3RhcnQsIHU2NCBzY29wZV9zaXplKVxuK3tcbitcdHU2NCB0bGJfc2l6ZSwgdGxiX3N0YXJ0LCB0bGJfZW5kLCBzY29wZV9lbmQ7XG4rXG4rXHR0bGJfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LVx1MDAzZXdpLnBnc2hpZnQsIHZ0LVx1MDAzZXdyLmxldmVsKSk7XG4rXG4rXHR0bGJfc3RhcnQgPSBhZGRyIFx1MDAyNiB+KHRsYl9zaXplIC0gMSk7XG4rXHR0bGJfZW5kID0gdGxiX3N0YXJ0ICsgdGxiX3NpemUgLSAxO1xuK1x0c2NvcGVfZW5kID0gc2NvcGVfc3RhcnQgKyBzY29wZV9zaXplIC0gMTtcbitcbitcdHJldHVybiAhKHRsYl9lbmQgXHUwMDNjIHNjb3BlX3N0YXJ0IHx8IHRsYl9zdGFydCBcdTAwM2Ugc2NvcGVfZW5kKTtcbiB9XG4gXG4gLypcbkBAIC0xMDA3LDE5ICsxMDQzLDkgQEAgc3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgc3RhcnQsIHU2NCBlbmQpXG4gXHRpZiAoIWt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pIHtcbi1cdFx0dTY0IGlwYV9zdGFydCwgaXBhX2VuZCwgaXBhX3NpemU7XG4tXG4tXHRcdGlwYV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXHUwMDNld2kucGdzaGlmdCxcbi1cdFx0XHRcdFx0XHRcdCAgICB2dC1cdTAwM2V3ci5sZXZlbCkpO1xuLVx0XHRpcGFfc3RhcnQgPSB2dC1cdTAwM2V3ci5wYSBcdTAwMjYgfihpcGFfc2l6ZSAtIDEpO1xuLVx0XHRpcGFfZW5kID0gaXBhX3N0YXJ0ICsgaXBhX3NpemU7XG4tXG4tXHRcdGlmIChpcGFfZW5kIFx1MDAzYz0gc3RhcnQgfHwgaXBhX3N0YXJ0IFx1MDAzZT0gZW5kKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpbnZhbGlkYXRlX3ZuY3IodnQpO1xuLVx0fVxuK1x0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pXG4rXHRcdGlmICh2bmNyX3RsYl9pbnRlcnNlY3RzKHZ0LCB2dC1cdTAwM2V3ci5wYSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSlcbitcdFx0XHRpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7XG4gfVxuIFxuIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUge1xuQEAgLTEwNDUsMjggKzEwNzEsMTkgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcbiBcdGt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKSB7XG4tXHRcdHU2NCB2YV9zdGFydCwgdmFfZW5kLCB2YV9zaXplO1xuLVxuLVx0XHR2YV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXHUwMDNld2kucGdzaGlmdCxcbi1cdFx0XHRcdFx0XHRcdCAgIHZ0LVx1MDAzZXdyLmxldmVsKSk7XG4tXHRcdHZhX3N0YXJ0ID0gdnQtXHUwMDNlZ3ZhIFx1MDAyNiB+KHZhX3NpemUgLSAxKTtcbi1cdFx0dmFfZW5kID0gdmFfc3RhcnQgKyB2YV9zaXplO1xuLVxuIFx0XHRzd2l0Y2ggKHNjb3BlLVx1MDAzZXR5cGUpIHtcbiBcdFx0Y2FzZSBUTEJJX0FMTDpcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Y2FzZSBUTEJJX1ZBOlxuLVx0XHRcdGlmICh2YV9lbmQgXHUwMDNjPSBzY29wZS1cdTAwM2V2YSB8fFxuLVx0XHRcdCAgICB2YV9zdGFydCBcdTAwM2U9IChzY29wZS1cdTAwM2V2YSArIHNjb3BlLVx1MDAzZXNpemUpKVxuK1x0XHRcdGlmICghdm5jcl90bGJfaW50ZXJzZWN0cyh2dCwgdnQtXHUwMDNlZ3ZhLCBzY29wZS1cdTAwM2V2YSwgc2NvcGUtXHUwMDNlc2l6ZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRpZiAodnQtXHUwMDNld3IubkcgXHUwMDI2XHUwMDI2IHZ0LVx1MDAzZXdyLmFzaWQgIT0gc2NvcGUtXHUwMDNlYXNpZClcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRjYXNlIFRMQklfVkFBOlxuLVx0XHRcdGlmICh2YV9lbmQgXHUwMDNjPSBzY29wZS1cdTAwM2V2YSB8fFxuLVx0XHRcdCAgICB2YV9zdGFydCBcdTAwM2U9IChzY29wZS1cdTAwM2V2YSArIHNjb3BlLVx1MDAzZXNpemUpKVxuK1x0XHRcdGlmICghdm5jcl90bGJfaW50ZXJzZWN0cyh2dCwgdnQtXHUwMDNlZ3ZhLCBzY29wZS1cdTAwM2V2YSwgc2NvcGUtXHUwMDNlc2l6ZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0xMDc2LDcgKzEwOTMsNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdGludmFsaWRhdGVfdm5jcih2dCk7XG4rXHRcdGludmFsaWRhdGVfdm5jcihrdm0sIHZ0KTtcbiBcdH1cbiB9XG4gXG5AQCAtMTEyNiw4ICsxMTQzLDYgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9zMV90bGJpX3JhbmdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwsXG4gXHRjYXNlIE9QX1RMQklfVkFMRTFPU05YUzpcbiBcdFx0c2NvcGUtXHUwMDNldHlwZSA9IFRMQklfVkE7XG4gXHRcdHNjb3BlLVx1MDAzZXNpemUgPSB0dGxfdG9fc2l6ZShGSUVMRF9HRVQoVExCSV9UVExfTUFTSywgdmFsKSk7XG4tXHRcdGlmICghc2NvcGUtXHUwMDNlc2l6ZSlcbi1cdFx0XHRzY29wZS1cdTAwM2VzaXplID0gU1pfMUc7XG4gXHRcdHNjb3BlLVx1MDAzZXZhID0gdGxiaV92YV9zMV90b192YSh2YWwpIFx1MDAyNiB+KHNjb3BlLVx1MDAzZXNpemUgLSAxKTtcbiBcdFx0c2NvcGUtXHUwMDNlYXNpZCA9IEZJRUxEX0dFVChUTEJJUl9BU0lEX01BU0ssIHZhbCk7XG4gXHRcdGJyZWFrO1xuQEAgLTExNTQsOCArMTE2OSw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLFxuIFx0Y2FzZSBPUF9UTEJJX1ZBQUxFMU9TTlhTOlxuIFx0XHRzY29wZS1cdTAwM2V0eXBlID0gVExCSV9WQUE7XG4gXHRcdHNjb3BlLVx1MDAzZXNpemUgPSB0dGxfdG9fc2l6ZShGSUVMRF9HRVQoVExCSV9UVExfTUFTSywgdmFsKSk7XG4tXHRcdGlmICghc2NvcGUtXHUwMDNlc2l6ZSlcbi1cdFx0XHRzY29wZS1cdTAwM2VzaXplID0gU1pfMUc7XG4gXHRcdHNjb3BlLVx1MDAzZXZhID0gdGxiaV92YV9zMV90b192YSh2YWwpIFx1MDAyNiB+KHNjb3BlLVx1MDAzZXNpemUgLSAxKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE9QX1RMQklfUlZBRTI6XG5AQCAtMTMxNiwxMyArMTMyOSwyMCBAQCB2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKVxuICAqICAgaW50ZXJzZWN0cyB3aXRoIHRoZSBUTEJJIHJlcXVlc3QsIGludmFsaWRhdGUgaXQsIGFuZCB1bm1hcCB0aGUgcGFnZVxuICAqICAgZnJvbSB0aGUgZml4bWFwLiBCZWNhdXNlIHdlIG5lZWQgdG8gbG9vayBhdCBhbGwgdGhlIHZjcHUtcHJpdmF0ZSBUTEJzLFxuICAqICAgdGhpcyByZXF1aXJlcyBzb21lIHdpZGUtcmFuZ2luZyBsb2NraW5nIHRvIGVuc3VyZSB0aGF0IG5vdGhpbmcgcmFjZXNcbi0gKiAgIGFnYWluc3QgaXQuIFRoaXMgbWF5IHJlcXVpcmUgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW5cbi0gKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQuXG4rICogICBhZ2FpbnN0IGl0LiBUaGlzIHJlcXVpcmVzIHNvbWUgcmVmY291bnRpbmcgdG8gYXZvaWQgdGhlIHNlYXJjaCB3aGVuXG4rICogICBubyBzdWNoIFRMQiBpcyBwcmVzZW50IChzZWUgYmVsb3cpLlxuICAqXG4gICogLSBPbiBNTVUgbm90aWZpZXJzLCB3ZSBtdXN0IGludmFsaWRhdGUgb3VyIFRMQiBpbiBhIHNpbWlsYXIgd2F5LCBidXRcbiAgKiAgIGxvb2tpbmcgYXQgdGhlIElQQSBpbnN0ZWFkLiBUaGUgZnVubnkgcGFydCBpcyB0aGF0IHRoZXJlIG1heSBub3QgYmUgYVxuICAqICAgc3RhZ2UtMiBtYXBwaW5nIGZvciB0aGlzIHBhZ2UgaWYgTDEgaGFzbid0IGFjY2Vzc2VkIGl0IHVzaW5nIExEL1NUXG4gICogICBpbnN0cnVjdGlvbnMuXG4rICpcbisgKiAtIHZuY3JfdGxiX2NvdW50IHRyYWNrcyB0aGUgbnVtYmVyIG9mIHZhbGlkIFZOQ1IgVExCcyBWTS13aWRlLiBUaGlzIGlzbid0XG4rICogICB0aGUgbnVtYmVyIG9mICptYXBwZWQqIEwxIFZOQ1IgcGFnZXMsIHdoaWNoIGlzIGxpa2VseSBiZSBhIHN1YnNldCAoYW5kXG4rICogICBieSBkZWZpbml0aW9uLCBhIFRMQkkgaGFuZGxlZCBmcm9tIEwxIHJ1bnMgd2l0aCB0aGUgY2Fub25pY2FsIFZOQ1JcbisgKiAgIHBhZ2UsIG5vdCB0aGUgTDEncykuIFRoZSBpbm5lcm1vc3QgdHJhcCBoYW5kbGluZyBjb2RlIGNoZWNrcyB0aGlzIHRvXG4rICogICBmaW5kIG91dCB3aGV0aGVyIHRvIHJldHVybiB0byB0aGUgZ3Vlc3QgQVNBUCAobm8gTDEgVExCcykgb3IgdG8gdmlzaXRcbisgKiAgIHRoaXMgcGFydCBvZiB0aGUgd29ybGQgZm9yIHNvbWUgZXh0cmEgaW52YWxpZGF0aW9uIHdvcmsuXG4gICovXG4gXG4gaW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0xMzc3LDcgKzEzOTcsOCBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHQgKi9cbiBcdHNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaykge1xuIFx0XHR0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcCh2Y3B1KTtcbi1cdFx0dnQtXHUwMDNldmFsaWQgPSBmYWxzZTtcbitcdFx0aWYgKHZ0LVx1MDAzZXZhbGlkKVxuK1x0XHRcdGludmFsaWRhdGVfdm5jcih2Y3B1LVx1MDAzZWt2bSwgdnQpO1xuIFxuIFx0XHR2dC1cdTAwM2V3aSA9IChzdHJ1Y3QgczFfd2Fsa19pbmZvKSB7XG4gXHRcdFx0LnJlZ2ltZVx0PSBUUl9FTDIwLFxuQEAgLTE0NDksNiArMTQ3MCw4IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcdFx0dnQtXHUwMDNldmFsaWQgPSB0cnVlO1xuIFx0XHR2dC1cdTAwM2VjcHUgPSAtMTtcbiBcbitcdFx0YXRvbWljX2luYyhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KTtcbitcbiBcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX01BUF9MMV9WTkNSX0VMMiwgdmNwdSk7XG4gXHRcdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZSh2Y3B1LVx1MDAzZWt2bSwgcGFnZSwgZmFsc2UsIHZ0LVx1MDAzZXdyLnB3IFx1MDAyNlx1MDAyNiB2dC1cdTAwM2VocGFfd3JpdGFibGUpO1xuIFx0fVxuQEAgLTE1NjgsNiArMTU5MSw5IEBAIHN0YXRpYyB2b2lkIGt2bV9tYXBfbDFfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIXZ0LVx1MDAzZXZhbGlkKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAoISh2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBTQ1RMUl9FTDIpIFx1MDAyNiBTQ1RMUl9FTHhfTSkgIT0gczFfbW11X2Rpc2FibGVkKFx1MDAyNnZ0LVx1MDAzZXdyKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKHJlYWRfdm5jcl9lbDIodmNwdSkgIT0gdnQtXHUwMDNlZ3ZhKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTU5Miw3ICsxNjE4LDYgQEAgc3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmIChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoUEFHRV9OT05FKSkge1xuIFx0XHRfX3NldF9maXhtYXAodm5jcl9maXhtYXAodnQtXHUwMDNlY3B1KSwgdnQtXHUwMDNlaHBhLCBwcm90KTtcbiBcdFx0aG9zdF9kYXRhX3NldF9mbGFnKEwxX1ZOQ1JfTUFQUEVEKTtcbi1cdFx0YXRvbWljX2luYyhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KTtcbiBcdH1cbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1ODoyOS43MDQzNTA4ODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODcxMDIzOTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIEtWTSBBUk02NCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhcm91bmQgaW4gS1ZNJ3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGltcGxlbWVudGF0aW9uIGZvciBBUk02NCwgc3BlY2lmaWNhbGx5IHRoZSBWTkNSIChWaXJ0dWFsIE5lc3RlZCBDb250cm9sIFJlZ2lzdGVyKSBUTEIgaGFuZGxpbmcuIEl0J3MgbWFraW5nIGNoYW5nZXMgdGhhdCBzZWVtIHByZXR0eSBmdW5kYW1lbnRhbCwgbGlrZSByZW5hbWluZyBgdm5jcl9tYXBfY291bnRgIHRvIGB2bmNyX3RsYl9jb3VudGAsIGFuZCBhZGp1c3RpbmcgaG93IHRoZXNlIFZOQ1IgVExCcyBhcmUgaW52YWxpZGF0ZWQgYW5kIHRyYWNrZWQuIEkgc2VlIG5ldyBmdW5jdGlvbnMgYmVpbmcgaW50cm9kdWNlZDogYHMxX21tdV9kaXNhYmxlZCgpYCBhbmQgYF9fdHRsX3RvX3NpemUoKWAsIHBsdXMgc29tZSBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGxvZ2ljIGluIGB0dGxfdG9fc2l6ZSgpYC4gVGhlbiwgd2UgaGF2ZSBjaGFuZ2VzIGluIGZ1bmN0aW9ucyBsaWtlIGBpbnZhbGlkYXRlX3ZuY3JfdmEoKWAsIGBrdm1faW52YWxpZGF0ZV92bmNyX2lwYSgpYCwgYHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwKClgLCBgaW52YWxpZGF0ZV92bmNyKClgLCBga3ZtX3RyYW5zbGF0ZV92bmNyKClgLCBhbmQgYGt2bV9tYXBfbDFfdm5jcigpYC4gVGhlc2UgYXJlIGFsbCBjb3JlIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gZnVuY3Rpb25zLlxuXG5UaGlzIGlzIGNyaXRpY2FsIGtlcm5lbCBsb2dpYywgbm8gZG91YnQgYWJvdXQgaXQsIGFuZCBpdCBkZWZpbml0ZWx5IG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gV2UgYWJzb2x1dGVseSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IGZpcnN0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzIGFuZCByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBhc3N1bWluZyB3ZSdsbCBuZWVkIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19BUk02NGAsIHdoaWNoIGlzIGltcGxpY2l0IGdpdmVuIHRoZSBhcmNoaXRlY3R1cmUsIG9mIGNvdXJzZS4gRm9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzcGVjaWZpY2FsbHksIHRoZXJlIG1pZ2h0IGJlIGEgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBvciB0d28sIGJ1dCB0aGUgc3RhbmRhcmQgS1ZNIEFSTTY0IGNvbmZpZyB0eXBpY2FsbHkgY292ZXJzIHRoYXQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBhcmNoL2FybTY0L2t2bS9LY29uZmlnYCB0byBiZSBzdXJlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbmZpcm0gYWxsIHJlcXVpcmVkIGNvbmZpZyBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njk5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTI6NTg6NDguNDE0NTkzNjg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODg0NjM4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1ODo0OC41NDM0NDU1NDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDk1NzU0MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIEFSTTY0IE5lc3RlZCBLVk0gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0IHRoaW5ncyBmaXJzdCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIG9idmlvdXMuIFRoZSBnb2FsIGlzIG5lc3RlZCBLVk0gb24gQVJNNjQsIHJpZ2h0PyBTbywgdGhlIGltbWVkaWF0ZSwgKm11c3QtY2hlY2sqIGl0ZW0gb24gbXkgbWVudGFsIGNoZWNrbGlzdCBpczogSXMgdGhlcmUgYW55IHNwZWNpZmljIG9yIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIGd1aWRhbmNlLCBwZXJoYXBzIHNwZWNpZmljIHF1aXJrcywgb3Iga25vd24gZ290Y2hhcywgZm9yIHJ1bm5pbmcgbmVzdGVkIEtWTSBvbiBhbiBBUk02NCBhcmNoaXRlY3R1cmUgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiwgYmVmb3JlIHdhc3RpbmcgdmFsdWFibGUgdGltZSByZWludmVudGluZyBhIHdoZWVsPyBMZXQgbWUgZ28gYW5kIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1ODo1OC4wMzkyMDI1MDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3MTIwNTUwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1ODo1OC4zNTYzMzU5NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgwNTgwNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBvbiBBUk02NCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzdGF0dXMgb2YgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgaW4gS1ZNIG9uIEFSTTY0LiBJbnN0ZWFkIG9mIG1hbnVhbGx5IHNpZnRpbmcgdGhyb3VnaCB0aGUgc291cmNlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIGxldCdzIGJlIGVmZmljaWVudC4gVGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb25zIGlzIG9mdGVuIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgaW4gYGFyY2gvYXJtNjQva3ZtL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhhdCBmaWxlIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSB0ZXJtIFwiTkVTVEVELlwiIFRoYXQgc2hvdWxkIGhpZ2hsaWdodCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGZlYXR1cmUuIFRoYXQncyBhIG11Y2ggZmFzdGVyIGFuZCBmb2N1c2VkIGFwcHJvYWNoIHRoYW4gc3RhcnRpbmcgYSBkZWVwIGRpdmUgZnJvbSBzY3JhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTI6NTk6MDEuODM2OTE5Mzk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTY2NDAzMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVTVEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEyOjU5OjAxLjk1MjU4OTMxMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDgzNDcxMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKk5lc3RlZCBWaXJ0dWFsaXphdGlvbiBvbiBBUk02NCAtIERpZ2dpbmcgaW50byB0aGUgQ29kZSoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb24gQVJNNjQuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBpdCBoYXZlIGl0cyBvd24gZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBpcyBpdCBqdXN0IGltcGxpY2l0bHkgZW5hYmxlZCBhcyBwYXJ0IG9mIHRoZSBLVk0gc2V0dXAgb24gdGhhdCBhcmNoaXRlY3R1cmU/IEkgdmFndWVseSByZWNhbGwgdGhhdCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb24geDg2IGhhcyBpdHMgb3duIHNwZWNpYWwga25vYiwgYnV0IEknbSBkcmF3aW5nIGEgYmxhbmsgb24gQVJNNjQuIEkgc2hvdWxkIHJlYWxseSBicnVzaCB1cCBvbiBteSBLVk0gaW50ZXJuYWxzIGFnYWluLi4uXG5cblRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyLCBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgIGZpbGUgc2hvdWxkIGJlIHRoZSBwbGFjZSB0byBzdGFydC4gSSdtIGhvcGluZyB0byBmaW5kIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBpbiB0aGVyZSwgc29tZXRoaW5nIGxpa2UgYCNpZmRlZiBDT05GSUdfU09NRVRISU5HX05FU1RFRF9BUk02NGAuIElmIGl0ICppcyogY29uZGl0aW9uYWxseSBjb21waWxlZCwgdGhhdCB3aWxsIGdpdmUgbWUgbXkgYW5zd2VyIHF1aWNrbHkuIElmIG5vdCwgaXQgbWVhbnMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG1pZ2h0IGJlIGEgc3RhbmRhcmQgcGFydCBvZiBLVk0ncyBBUk02NCBzdXBwb3J0LCB3aGljaCBpcyBzdGlsbCBpbXBvcnRhbnQgdG8gZGV0ZXJtaW5lLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEyOjU5OjA2LjY2MDkzODQ3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4ODAxMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU9MTY9a3ZtLXkgKz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXFxcXFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMTktXFx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MjA6XFx0IGFyY2hfdGltZXIubyB0cm5nLm8gdm1pZC5vIGVtdWxhdGUtbmVzdGVkLm8gbmVzdGVkLm8gYXQubyBcXFxcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjEtXFx0IHZnaWMvdmdpYy5vIHZnaWMvdmdpYy1pbml0Lm8gXFxcXFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjUtXFx0IHZnaWMvdmdpYy1tbWlvLXYzLm8gdmdpYy92Z2ljLWt2bS1kZXZpY2UubyBcXFxcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MjY6XFx0IHZnaWMvdmdpYy1pdHMubyB2Z2ljL3ZnaWMtZGVidWcubyB2Z2ljL3ZnaWMtdjMtbmVzdGVkLm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTI3LVxcdCB2Z2ljL3ZnaWMtdjUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1OTowNi43NTI4Mjk5MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODEyMzI3OTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCBmb3IgS2V5IE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgcmVsYXRlZCB0byBLVk0sIHNwZWNpZmljYWxseSB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFzcGVjdHMsIHNpbmNlIGl0J3MgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIHdoZW4gS1ZNIGlzIGVuYWJsZWQuIFNvLCBgS1ZNYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRoYXQgZHJpdmVzIHRoaXMuIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjb3JlIGNoYW5nZXMuXG5cbkxldCdzIHNlZSwgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gdGhlIGZvbGxvd2luZzpcblxuLSAgIGBrdm1faW5pdF9uZXN0ZWRgXG4tICAgYHR0bF90b19zaXplYFxuLSAgIGBwZ3NoaWZ0X2xldmVsX3RvX3R0bGBcbi0gICBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgXG4tICAgYGt2bV92Y3B1X2xvYWRfaHdfbW11YCAobm90IGRpcmVjdGx5LCBqdXN0IGNvbnRleHQgaW4gYSBmdW5jdGlvbiBjYWxsKVxuLSAgIGB1bm1hcF9sMV92bmNyYFxuLSAgIGB0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcGBcbi0gICBgaW52YWxpZGF0ZV92bmNyYFxuLSAgIGB2bmNyX3RsYl9pbnRlcnNlY3RzYFxuLSAgIGBrdm1faW52YWxpZGF0ZV92bmNyX2lwYWBcbi0gICBgaW52YWxpZGF0ZV92bmNyX3ZhYFxuLSAgIGBjb21wdXRlX3MxX3RsYmlfcmFuZ2VgXG4tICAgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYFxuLSAgIGBrdm1fdHJhbnNsYXRlX3ZuY3JgXG4tICAgYGt2bV9tYXBfbDFfdm5jcmBcblxuTm93LCB0byB1bmRlcnN0YW5kIHRoZSBBUEkgaW50ZXJhY3Rpb25zLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGVudHJ5IHBvaW50cyB0aGF0IGFyZSAqbm90KiBzdGF0aWMsIG9yIGlubGluZWQuIFRob3NlIGFyZSB0aGUgb25lcyBvdGhlcnMgYXJlIGxpa2VseSB0byBjYWxsLiBTbywgSSBzZWU6XG5cbi0gICBga3ZtX2luaXRfbmVzdGVkYFxuLSAgIGBrdm1fd2Fsa19uZXN0ZWRfczJgIChjb250ZXh0KVxuLSAgIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWBcbi0gICBga3ZtX3ZjcHVfcHV0X2h3X21tdWAgKGNvbnRleHQpXG4tICAgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGxgIChjb250ZXh0KVxuLSAgIGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmBcblxuV2FpdCwgYGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhYCBpcyBzdGF0aWM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdDsgdGhlcmUncyBhIGdvb2QgY2hhbmNlIEkgbmVlZCB0byB0cmFjayBkb3duIG90aGVyIGNhbGxlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTI6NTk6MTQuODc2MTEzMjc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTExNjU2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faW52YWxpZGF0ZV92bmNyX2lwYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMDEwPXN0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMDM0LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEwMzU6c3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgc3RhcnQsIHU2NCBlbmQpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTAzNi17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMjI5PXZvaWQga3ZtX25lc3RlZF9zMl93cChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjQ0LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEyNDU6XFx0a3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoa3ZtLCAwLCBCSVQoa3ZtLVxcdTAwM2VhcmNoLm1tdS5wZ3QtXFx1MDAzZWlhX2JpdHMpKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjQ2LX1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEyNDg9dm9pZCBrdm1fbmVzdGVkX3MyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBtYXlfYmxvY2spXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjYzLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEyNjQ6XFx0a3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoa3ZtLCAwLCBCSVQoa3ZtLVxcdTAwM2VhcmNoLm1tdS5wZ3QtXFx1MDAzZWlhX2JpdHMpKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjY1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTI6NTk6MTQuOTU1MjM3MzIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTAwNTUwODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS1ZNIFZpcnR1YWxpemF0aW9uIElucXVpcnkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEtWTSBjb2RlLi4uIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGFgIGlzIGRlZmluaXRlbHkgYSBzdGF0aWMgZnVuY3Rpb24uIE5vIHN1cnByaXNlcyB0aGVyZSwgbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXM6IFdoYXQgYWJvdXQgYGt2bV90cmFuc2xhdGVfdm5jcmA/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgc2NvcGUgYW5kIHVzYWdlLiBJcyBpdCBzdGF0aWMgYXMgd2VsbCwgb3IgaXMgaXQgZXhwb3NlZCBtb3JlIGJyb2FkbHk/IFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbidzIHZpc2liaWxpdHkgd2lsbCBiZSBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmUuIE5lZWQgdG8ga2VlcCBkaWdnaW5nLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1OTo0Mi44NTU3OTQwMzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDk2NDI5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdHJhbnNsYXRlX3ZuY3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTM3Mz1zdGF0aWMgdTY0IHJlYWRfdm5jcl9lbDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTM3Ny1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzc4OnN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzc5LXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE1MTA9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTI3LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE1Mjg6XFx0cmV0ID0ga3ZtX3RyYW5zbGF0ZV92bmNyKHZjcHUsIFxcdTAwMjZpc19nbWVtKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTI5LVxcdHN3aXRjaCAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEyOjU5OjQzLjEzMDc2NTA2M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTQ5MTA0MTMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gVk5DUiBBYm9ydCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBWaXJ0dWFsIE5lc3RlZCBDb2RlIFJlLWVudHJ5IChWTkNSKSBhYm9ydHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBLVk0gaHlwZXJ2aXNvci4gSSBzZWUgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAgaXMgdGhlIGZ1bmN0aW9uIHdlJ3JlIGNvbmNlcm5lZCB3aXRoIGluaXRpYWxseS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQgY2FsbHMgYGt2bV90cmFuc2xhdGVfdm5jcmAuIFRoYXQgbWFrZXMgc2Vuc2UgLSB3ZSBuZWVkIHRvIHRyYW5zbGF0ZSB0aGUgZmF1bHRpbmcgYWRkcmVzcyB0byBmaWd1cmUgb3V0IHdoYXQgd2VudCB3cm9uZy5cblxuQnV0LCBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rLCB3aGF0J3MgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBrdm1fbWFwX2wxX3ZuY3JgPyBXZSdyZSBkZWFsaW5nIHdpdGggbmVzdGVkIHBhZ2luZyBoZXJlLCBhbmQgSSBzdXNwZWN0IGBrdm1fbWFwX2wxX3ZuY3JgIG1pZ2h0IGJlIGNydWNpYWwgaW4gZXN0YWJsaXNoaW5nIG9yIG1haW50YWluaW5nIHRoZSBMMSBtYXBwaW5ncyB0aGF0IGFyZSByZWxldmFudCBpbiB0aGlzIHNjZW5hcmlvLiBJcyB0aGUgYWJvcnQgaGFwcGVuaW5nIGJlY2F1c2Ugb2YgYW4gaXNzdWUgZHVyaW5nIHRoZSBtYXBwaW5nIHByb2Nlc3MgZG9uZSBieSBga3ZtX21hcF9sMV92bmNyYCwgb3IgaXMgdGhpcyBmdW5jdGlvbiBtb3JlIG9mIGEgc2V0dXAsIGFuZCB0aGUgYWN0dWFsIHRyYW5zbGF0aW9uIGRvbmUgYnkgYGt2bV90cmFuc2xhdGVfdm5jcmAgaXMgdGhlIGN1bHByaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0d28gZnVuY3Rpb25zIGludGVyYWN0IHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgYWJvcnQgaGFuZGxpbmcgZmxvdy4gSSdsbCBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgcGF0aHMgYW5kIGNvbnNpZGVyIHRoZSBzcGVjaWZpYyBjb250ZXh0IG9mIHRoZSBWTkNSIGFib3J0IHRvIHNlZSBob3cgdGhlIEwxIG1hcHBpbmdzIHBsYXkgYSByb2xlLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMwMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEyOjU5OjU4LjYyMTgxMDc4NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE1MzkwOTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9tYXBfbDFfdm5jclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNTEwPWludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTU2OS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNTcwOnN0YXRpYyB2b2lkIGt2bV9tYXBfbDFfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTU3MS17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xOTU3PXZvaWQgY2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTk3MC1cXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDIsIHZjcHUpKVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE5NzE6XFx0XFx0a3ZtX21hcF9sMV92bmNyKHZjcHUpO1xcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE5NzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEyOjU5OjU4LjkzNzIwNjg5NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTUzMjUwOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBjb25zaWRlcmluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgS1ZNIFZpcnR1YWxpemF0aW9uIEludGVybmFscyoqXG5cbk9rYXksIGxldCBtZSBzZWUuLi4gSSdtIHRyYWNpbmcgdGhlIGZsb3cgb2YgbmVzdGVkIHZpcnR1YWxpemF0aW9uIFZDUFUgcmVxdWVzdHMuIFJpZ2h0LCBgY2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHNgIGlzIHVsdGltYXRlbHkgdXNpbmcgYGt2bV9tYXBfbDFfdm5jcmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGNvcmUgbWFwcGluZyBmdW5jdGlvbiBmb3IgdGhlIEwxIFZOQ3IgKE5lc3RlZCBWaXJ0dWFsIENQVSBSZXF1ZXN0KSBzdHJ1Y3R1cmUuIEJ1dCBteSBtaW5kIGRyaWZ0cy4gVGhhdCdzIGZpbmUuXG5cbkhvbGQgb24uLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGBpbnZhbGlkYXRlX3ZuY3JfdmFgLiBUaGF0J3MgY3JpdGljYWwgdG9vLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyB0aGUgdmlydHVhbCBhZGRyZXNzIG1hcHBpbmcgYXNzb2NpYXRlZCB3aXRoIHRoZSBWTkNSLiBUaGlzIGNvdWxkIGhhcHBlbiBvbiBhIFZNIGV4aXQsIGFuIGludmFsaWRhdGlvbiBvZiB0aGUgZ3Vlc3QgcGFnZSB0YWJsZXMsIG9yIHNvbWUgb3RoZXIgZXZlbnQgdGhhdCByZXF1aXJlcyB0aGUgb2xkIFZOQ1IgdG8gYmUgcmUtbWFwcGVkIG9uIGEgcmUtZW50cnkgZXZlbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgb25lIGZyZXNoIGluIG15IGhlYWQgYXMgSSBjb250aW51ZS4gTGV0IG1lIG1lbnRhbGx5IGxpbmsgdGhvc2UgdHdvIGZvciBub3csIGp1c3QgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbG9zZSB0aGUgdGhyZWFkLi4uIGBjaGVja19uZXN0ZWRfdmNwdV9yZXF1ZXN0c2Agd2l0aCBpdHMgZGVwZW5kZW5jeSBvbiBga3ZtX21hcF9sMV92bmNyYCwgYW5kIHRoZW4gY29uc2lkZXIgdGhlIGludmFsaWRhdGlvbiBsb2dpYyBvZiBgaW52YWxpZGF0ZV92bmNyX3ZhYC4gVGhhdCdzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTcxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTM6MDA6MDQuMDkwNDcxNDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDM2NDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnZhbGlkYXRlX3ZuY3JfdmFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTA1MT1zdHJ1Y3QgczFlMl90bGJpX3Njb3BlIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEwNjMtXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTA2NDpzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEwNjUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUgKnNjb3BlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTIxOT12b2lkIGt2bV9oYW5kbGVfczFlMl90bGJpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjI1LVxcdGd1YXJkKHdyaXRlX2xvY2spKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMjI2OlxcdGludmFsaWRhdGVfdm5jcl92YSh2Y3B1LVxcdTAwM2Vrdm0sIFxcdTAwMjZzY29wZSk7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTIyNy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAwOjA0LjE5MDg1ODgzNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzUzODU3NTY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVExCIEludmFsaWRhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gYGt2bV9oYW5kbGVfczFlMl90bGJpYCB1bHRpbWF0ZWx5IGNhbGxzIGBpbnZhbGlkYXRlX3ZuY3JfdmFgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IG1vdmUgaXMgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgbW9kaWZpZWQgdGhlbXNlbHZlcywgb3IgY2FsbCBhbnkgc3RhdGljIGZ1bmN0aW9ucyB0aGF0ICpoYXZlKiBiZWVuIGNoYW5nZWQuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSByaXBwbGUgZWZmZWN0LlxuXG5MZXQncyBzZWUuLi4gdGhlIGxpc3QgSSd2ZSBnb3QgaXM6XG4tIGBrdm1faW5pdF9uZXN0ZWRgXG4tIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWBcbi0gYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYFxuLSBga3ZtX25lc3RlZF9zMl93cGBcbi0gYGt2bV9uZXN0ZWRfczJfdW5tYXBgXG4tIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgXG4tIGBjaGVja19uZXN0ZWRfdmNwdV9yZXF1ZXN0c2Bcbi0gYGt2bV9oYW5kbGVfczFlMl90bGJpYFxuLSBga3ZtX3ZjcHVfcHV0X2h3X21tdWBcbi0gYGt2bV92Y3B1X2xvYWRfaHdfbW11YFxuXG5UaGVzZSBhbGwgbG9vayBsaWtlIHBvdGVudGlhbCBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gbXkgYEZvY3VzU3ltYm9sc2Agc2V0LiBCdXQgSSBuZWVkIHRvIHJlZmluZSB0aGF0IGluaXRpYWwgbGlzdC4gSSBuZWVkIHRvIHdlZWQgb3V0IGFueXRoaW5nIHRoYXQncyB0b28gZ2VuZXJpYyBvciwgbW9yZSBpbXBvcnRhbnRseSwgaW4gYSBob3QgcGF0aC5cblxuQWxyaWdodCwgYGt2bV92Y3B1X3B1dF9od19tbXVgIGFuZCBga3ZtX3ZjcHVfbG9hZF9od19tbXVgIGFyZSBkZWZpbml0ZWx5IHBlcmZvcm1hbmNlIGNyaXRpY2FsLCBzbyB0aGF0IGlzIG9mZiB0aGUgbGlzdC4gVGhlbiBgY2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHNgIGlzIGNhbGxlZCBvbiBldmVyeSB2Q1BVIHJ1biAtIG9idmlvdXNseSBhIGhvdCBwYXRoLlxuXG5Ob3csIHRoYXQgbGVhdmVzIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgIGFzIGEgZmF1bHQgaGFuZGxlciAtIHRoYXQncyBnb29kLiBBbmQgYGt2bV9oYW5kbGVfczFlMl90bGJpYCBpcyBhbiBpbnN0cnVjdGlvbiBoYW5kbGVyLCB3aGljaCBJIGFsc28gbGlrZS4gVGhlbiBga3ZtX25lc3RlZF9zMl93cGAgYW5kIGBrdm1fbmVzdGVkX3MyX3VubWFwYCBsb29rIHJlbGV2YW50LCBhbmQgZmluYWxseSBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgIGFuZCBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgIGFyZSBnb29kIHBpY2tzLlxuXG5OZXh0IEknbGwgcXVpY2tseSBjaGVjayBpZiBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCBhbmQgYGt2bV9oYW5kbGVfczFlMl90bGJpYCBhcmUgZXhwb3J0ZWQsIG9yIHNpbXBseSBub24tc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYwMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMzowMDoyMS43Mjk0Mzc1NzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODcyMTc0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faGFuZGxlX3ZuY3JfYWJvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmM9Mzc2PXN0YXRpYyBleGl0X2hhbmRsZV9mbiBhcm1fZXhpdF9oYW5kbGVyc1tdID0ge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYy0zOTUtXFx0W0VTUl9FTHhfRUNfREFCVF9MT1ddXFx0PSBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0LFxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmM6Mzk2OlxcdFtFU1JfRUx4X0VDX0RBQlRfQ1VSXVxcdD0ga3ZtX2hhbmRsZV92bmNyX2Fib3J0LFxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmMtMzk3LVxcdFtFU1JfRUx4X0VDX1NPRlRTVFBfTE9XXT0ga3ZtX2hhbmRsZV9ndWVzdF9kZWJ1ZyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0ODU9c3RhdGljIHZvaWQgaGFuZGxlX3ZuY3JfcGVybShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTA5LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE1MTA6aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUxMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAwOjIxLjg1ODE2OTYzOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY2OTMxNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgRXhpdCBIYW5kbGVycyBpbiBLVk0qKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGV4aXQgaGFuZGxlcnMsIGNvbmZpcm1lZC4gR29vZCwgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCB0byBnZXQgdG8gdGhlIHNwZWNpZmljcyBhbmQgdW5kZXJzdGFuZCB0aGUgZmxvdywgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBga3ZtX2hhbmRsZV9zMWUyX3RsYmlgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoaXMgbWlnaHQgYmUgYSBrZXkgaGFuZGxlci4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpdCdzIHJlc3BvbnNpYmxlIGZvciwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIFRMQkkgb3BlcmF0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBpdCBtaWdodCBob2xkLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIHdpbGwgYmUgYSB3b3J0aHdoaWxlIHBhdGggdG8gdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMzowMDoyNS4wMjUxMDUyNzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTI5Nzg0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faGFuZGxlX3MxZTJfdGxiaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTEwMj1zdGF0aWMgdm9pZCBjb21wdXRlX3MxX3RsYmlfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyMTgtXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTIxOTp2b2lkIGt2bV9oYW5kbGVfczFlMl90bGJpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTIyMC17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTQxMzU9c3RhdGljIGJvb2wgaGFuZGxlX3RsYmlfZWwyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTQyLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDE0MzpcXHRrdm1faGFuZGxlX3MxZTJfdGxiaSh2Y3B1LCBzeXNfZW5jb2RpbmcsIHAtXFx1MDAzZXJlZ3ZhbCk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTQ0LVxcdHJldHVybiB0cnVlO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz00MTQ3PXN0YXRpYyBib29sIGhhbmRsZV90bGJpX2VsMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDE3Ny1cXHRpZiAodmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiB2Y3B1X2VsMl90Z2VfaXNfc2V0KHZjcHUpKSB7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MTc4OlxcdFxcdGt2bV9oYW5kbGVfczFlMl90bGJpKHZjcHUsIHN5c19lbmNvZGluZywgcC1cXHUwMDNlcmVndmFsKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxNzktXFx0XFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAwOjI1LjE0NjQxNzE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTA3ODk1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFN5c3RlbSBSZWdpc3RlciBIYW5kbGVyIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBjYWxscyBvcmlnaW5hdGluZyBmcm9tIHRoZSBgc3lzX3JlZ3NgIGhhbmRsZXJzLiBUaGF0IGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2Ygd2hhdCB3ZSBuZWVkIHRvIGxvb2sgYXQuIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIHN5c3RlbSByZWdpc3RlciBhY2Nlc3MsIGxpa2VseSB3aXRoaW4gYSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29udGV4dC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi5cblxuVGhlIG5leHQgdGhpbmcgdG8gY2hlY2sgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBga3ZtX25lc3RlZF9zMl93cGAgYW5kIGBrdm1fbmVzdGVkX3MyX3VubWFwYC4gVGhlc2UgYXJlIGhpZ2hseSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgYmVpbmcgaW52b2x2ZWQuIFRoZSBcIldQXCIgc3VnZ2VzdHMgXCJ3cml0ZSBwcm90ZWN0aW9uLFwiIHdoaWNoIGlzIGEgY29tbW9uIGNvbmNlcm4gaW4gaHlwZXJ2aXNvciBlbnZpcm9ubWVudHMuIFdlIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgd3JpdGUgcHJvdGVjdGlvbiBhbmQgbWVtb3J5IHVubWFwcGluZyB3aXRoIG5lc3RlZCBwYWdpbmcuIFRoZXNlIGFyZSB0aGUgcGllY2VzIG9mIHRoZSBwdXp6bGUgdGhhdCBhbG1vc3QgY2VydGFpbmx5IGRlZmluZSB0aGUgYmVoYXZpb3VyIGFuZCBsaWtlbHkgcG9pbnQgdG8gdGhlIHJvb3QgY2F1c2Ugb2Ygd2hhdGV2ZXIgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGd1ZXN0J3MgdmlldyBvZiBtZW1vcnkgd2l0aGluIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTYxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTM6MDA6MjguNzk3MjExNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY1NzcxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX25lc3RlZF9zMl93cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbW11LmM9MTI2Nz1zdGF0aWMgdm9pZCBrdm1fbW11X3dwX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgc2xvdClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEyODAtXFx0a3ZtX3N0YWdlMl93cF9yYW5nZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLm1tdSwgc3RhcnQsIGVuZCk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTI4MTpcXHRrdm1fbmVzdGVkX3MyX3dwKGt2bSk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTI4Mi1cXHR3cml0ZV91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTMyNT12b2lkIGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMzQ3LVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEzNDg6XFx0a3ZtX25lc3RlZF9zMl93cChrdm0pO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEzNDktfVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTIxOT12b2lkIGt2bV9oYW5kbGVfczFlMl90bGJpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjI4LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEyMjk6dm9pZCBrdm1fbmVzdGVkX3MyX3dwKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjMwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTM6MDA6MjguODYzNzk3MzM2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyODk0MTYzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipBbmFseXppbmcgTU1VIENvZGUgYW5kIFRMQiBJbnZhbGlkYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBNTVUgY29kZS4gVGhpcyBsaWtlbHkgbWVhbnMgSSdtIGRlYWxpbmcgd2l0aCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBwZXJoYXBzIHNvbWUgc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGNvbnRleHQgc3dpdGNoaW5nIG9yIGNvbmN1cnJlbnQgYWNjZXNzLiBTcGVjaWZpY2FsbHksIG15IGZvY3VzIGlzIGN1cnJlbnRseSBvbiB0aGUgZnVuY3Rpb25zIGJlaW5nIGNhbGxlZCAqZnJvbSogdGhlIE1NVSBjb2RlIGl0c2VsZi4gVGhpcyBpcyBhbHdheXMgYSBjcml0aWNhbCBhcmVhIHRvIGV4YW1pbmUsIGFzIGVmZmljaWVuY3kgaGVyZSBkaXJlY3RseSBpbXBhY3RzIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLlxuXG5MZXQncyB6b29tIGluIG9uIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAuIFRoaXMgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSBjbHVlcyBtZSBpbiB0byBUTEIgaW52YWxpZGF0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBhZGRyZXNzIHNwYWNlIG1vZGlmaWNhdGlvbnMgKG1hcHBpbmdzIGJlaW5nIGFsdGVyZWQsIHVubWFwcGVkLCBvciBpbnZhbGlkYXRlZCBkdWUgdG8gbWVtb3J5IHByb3RlY3Rpb24gY2hhbmdlcywgZm9yIGV4YW1wbGUpLiBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgICpzdWdnZXN0cyogaXQncyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIHNwZWNpZmljICpyYW5nZSogb2YgVExCIGVudHJpZXMgdGhhdCBuZWVkIGludmFsaWRhdGlvbiDigJMgYSBrZXkgb3B0aW1pemF0aW9uLiBJdCB3aWxsIHByb2JhYmx5IGRldGVybWluZSB0aGUgbWluaW1hbGx5IG5lY2Vzc2FyeSBlbnRyaWVzLCBzbyB3ZSBkb24ndCBlbmQgdXAgZmx1c2hpbmcgdG9vIG1hbnkgVExCIGVudHJpZXMgdW5uZWNlc3NhcmlseSwgYnV0IG1ha2Ugc3VyZSB0byBmbHVzaCBlbm91Z2ggc28gYXMgdG8gbm90IGludmFsaWRhdGUuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCB0aGVyZSBjb3VsZCBiZSBkaWZmZXJlbnQgc3RyYXRlZ2llcyBmb3IgdGhhdCwgd2hpY2ggaXMgcGFydCBvZiB3aGF0IEknZCBiZSBsb29raW5nIGF0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMgdmVyeSBjYXJlZnVsbHkuIElzIHRoaXMgdGhlICpvbmx5KiBwYXJ0IHRoYXQgZGVhbHMgd2l0aCB0aGUgcHJvY2VzcyBvZiBpbnZhbGlkYXRpb24sIG9yIGlzIGl0IGNvbWJpbmVkIHdpdGggdGhlIGluc3RydWN0aW9ucz8gQXJlIHRoZSBpbnZhbGlkYXRpb25zIHBlcmZvcm1lZCBpbW1lZGlhdGVseSwgcXVldWVkLCBvciBkZWZlcnJlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwcm9jZXNzIGlzIHdvcmtpbmcgc28gdGhhdCBJIGNhbiB1bmRlcnN0YW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyOTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMzowMDozNC4xNTMyMTgyNzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNjQwNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXB1dGVfdGxiX2ludmFsX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz02MDY9c3RhdGljIHU4IGdldF9ndWVzdF9tYXBwaW5nX3R0bChzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgYWRkcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTY3Ni1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo2Nzc6dW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTY3OC17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTQwODM9c3RhdGljIHZvaWQgczJfbW11X3VubWFwX2lwYShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDk4LVxcdGJhc2VfYWRkciA9IChpbmZvLVxcdTAwM2VpcGEuYWRkciBcXHUwMDI2IEdFTk1BU0tfVUxMKDM1LCAwKSkgXFx1MDAzY1xcdTAwM2MgMTI7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MDk5OlxcdG1heF9zaXplID0gY29tcHV0ZV90bGJfaW52YWxfcmFuZ2UobW11LCBpbmZvLVxcdTAwM2VpcGEuYWRkcik7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTAwLVxcdGJhc2VfYWRkciBcXHUwMDI2PSB+KG1heF9zaXplIC0gMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAwOjM0LjI0NTg2NjM1NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Nzc0NzI5MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBNYW5hZ2VtZW50IElzc3VlKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBzb21ldGhpbmcgdGhhdCBzZWVtcyB0byBvcmlnaW5hdGUgZnJvbSBgczJfbW11X3VubWFwX2lwYWAuIFRoaXMgZnVuY3Rpb24gaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIHRyaWdnZXJlZCBmcm9tIHRoZSBzeXN0ZW0gcmVnaXN0ZXIgaGFuZGxlcnMsIHdoaWNoIG1lYW5zIGl0J3MgcHJldHR5IGxvdy1sZXZlbCBhbmQgbGlrZWx5IHBlcmZvcm1hbmNlLXNlbnNpdGl2ZS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHBhdGggYmFja3dhcmQuIFdoZXJlIGRvZXMgYHMyX21tdV91bm1hcF9pcGFgIGdldCBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoZSBuZXh0IHN0ZXAgaXMgY2xlYXIg4oCTIEkgd2FudCB0byBsb29rIGF0IGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAuIEkgc3VzcGVjdCB0aGVyZSdzIGEgY29ubmVjdGlvbiB0aGVyZSwgcHJvYmFibHkgcmVsYXRlZCB0byBhbGxvY2F0aW5nIG9yIG1hbmFnaW5nIHRoZSBWaXJ0dWFsIE5ldHdvcmsgQ29udGV4dCBSZWdpb24gKFZOQ1IpIFRMQi4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgdW5tYXBwaW5nIGlzIGFjdHVhbGx5IGluaXRpYXRlZCBvciB0cmlnZ2VyZWQsIG9yIHBlcmhhcHMgd2hlcmUgdGhlIFRMQiBlbnRyaWVzIHJlbGF0ZWQgdG8gdGhlIElQQSBtYXBwaW5nIGFyZSBhbGxvY2F0ZWQuIFRoaXMgZmVlbHMgbGlrZSBhIGdvb2QgbGVhZCBpbiBuYXJyb3dpbmcgZG93biB3aGVyZSB0byBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAyMiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAwOjQxLjAyMDYwMTI0OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0OTM3NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcm0uYz05MjE9aW50IGt2bV9hcmNoX3ZjcHVfcnVuX3BpZF9jaGFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtOTUxLVxcdGlmICh2Y3B1X2hhc19udih2Y3B1KSkge1xcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjk1MjpcXHRcXHRyZXQgPSBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYih2Y3B1KTtcXG5hcmNoL2FybTY0L2t2bS9hcm0uYy05NTMtXFx0XFx0aWYgKHJldClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEyODQ9dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzNDctXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTM0ODppbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzNDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMzowMDo0MS4xNDU1NDY4MTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1MTE1OTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlY2VudCBDaGFuZ2VzIGluIHRoZSBLVk0gQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gdGhpcyBjaGFuZ2Ugc3RlbXMgZnJvbSBhIGNhbGwgd2l0aGluIGBrdm1fYXJjaF92Y3B1X3J1bl9waWRfY2hhbmdlYC4gVGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHM6IGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLCBga3ZtX2hhbmRsZV9zMWUyX3RsYmlgLCBga3ZtX25lc3RlZF9zMl93cGAsIGBrdm1fbmVzdGVkX3MyX3VubWFwYCwgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCwgYW5kIGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAuIFRoYXQncyB0aGUgbGlrZWx5IGhvdCB6b25lLlxuXG5Ib2xkIG9uLi4uIEkgbm90aWNlZCBzb21ldGhpbmcuIGBrdm1fbmVzdGVkX3MyX3VubWFwYCBpdHNlbGYgd2Fzbid0IGRpcmVjdGx5IHRvdWNoZWQuIEJ1dCwgYGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhYCwgd2hpY2ggaXQgY2FsbHMsICp3YXMqIG1vZGlmaWVkLiBUaGF0IGNoYW5nZXMgdGhpbmdzIGEgYml0LiBJIHNob3VsZCByZWFsbHkgY29uZmlybSB0aGUgaW50ZXJhY3Rpb24gd2l0aCBga3ZtX25lc3RlZF9zMl91bm1hcGAgaXRzZWxmLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBzdWJ0bGUgaW1wYWN0cyBvZiB0aGF0IGluZGlyZWN0IGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1OTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTM6MDA6NDcuNzk2NzEwMTkyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTkzOTU3MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX25lc3RlZF9zMl91bm1hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbW11LmM9MTEwND12b2lkIHN0YWdlMl91bm1hcF92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTE3LVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExMTg6XFx0a3ZtX25lc3RlZF9zMl91bm1hcChrdm0sIHRydWUpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExMTktXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNDM0PWJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI0NDItXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjQ0MzpcXHRrdm1fbmVzdGVkX3MyX3VubWFwKGt2bSwgcmFuZ2UtXFx1MDAzZW1heV9ibG9jayk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjQ0NC1cXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNzE3PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjcyNC1cXHRrdm1fc3RhZ2UyX3VubWFwX3JhbmdlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gubW11LCBncGEsIHNpemUsIHRydWUpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI3MjU6XFx0a3ZtX25lc3RlZF9zMl91bm1hcChrdm0sIHRydWUpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI3MjYtXFx0d3JpdGVfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEyMjk9dm9pZCBrdm1fbmVzdGVkX3MyX3dwKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyNDctXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTI0ODp2b2lkIGt2bV9uZXN0ZWRfczJfdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCBib29sIG1heV9ibG9jaylcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjQ5LXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MzkzOD1zdGF0aWMgYm9vbCBoYW5kbGVfYWxsZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzk1MS1cXHQgKi9cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjM5NTI6XFx0a3ZtX25lc3RlZF9zMl91bm1hcCh2Y3B1LVxcdTAwM2Vrdm0sIHRydWUpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzk1My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTM6MDA6NDguMDU2MTEyNjU1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjEwNzcwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtWTSBJbml0aWFsaXphdGlvbiBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2FsbCBvcmlnaW5hdGVkIGZyb20gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKE1NVSkgYW5kIHN5c3RlbSByZWdpc3RlcnMsIHdoaWNoIGlzIGdvb2QgY29udGV4dC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIEtWTSBpbml0aWFsaXphdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBga3ZtX2luaXRfbmVzdGVkYC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGFuZCBpdCdzIGxpa2VseSB3aGVyZSB0aGUgcGllY2VzIGNvbm5lY3RpbmcgdGhlIE1NVSBhbmQgc3lzdGVtIHJlZ2lzdGVyIGludGVyYWN0aW9ucyBjb21lIHRvZ2V0aGVyIGluIHRoaXMgY29udGV4dC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QgYW5kIGRyaWxsIGRvd24gaW50byBga3ZtX2luaXRfbmVzdGVkYCB0byBzZWUgaG93IGl0IGhhbmRsZXMgdGhpcyBzcGVjaWZpYyBjYWxsIHBhdGguIEknbGwgYWxzbyBjaGVjayBpZiBJIGhhdmUgZW5jb3VudGVyZWQgdGhpcyBjYWxsIHByZXZpb3VzbHksIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiBhbnkgdHJpY2t5IHBhcnRzIG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIE1NVSwgdGhlIHN5c3RlbSByZWdpc3RlcnMsIGFuZCB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNldHVwIHdpdGhpbiBLVk0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzIwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTM6MDA6NTEuNzE3MTk0MDg0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQyNjU1MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2luaXRfbmVzdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcm0uYz0yMjI9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yMzgtXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MjM5OlxcdGt2bV9pbml0X25lc3RlZChrdm0pO1xcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTI0MC1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTk4MT1pbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMzYtXFx0aWYgKGt2bV9pc19uZXN0ZWRfczJfbW11KGt2bSwgbW11KSlcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMDM3OlxcdFxcdGt2bV9pbml0X25lc3RlZF9zMl9tbXUobW11KTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDM4LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTEyNT12b2lkIGt2bV9mcmVlX3N0YWdlMl9wZ2Qoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExMzgtXFx0aWYgKGt2bV9pc19uZXN0ZWRfczJfbW11KGt2bSwgbW11KSlcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTM5OlxcdFxcdGt2bV9pbml0X25lc3RlZF9zMl9tbXUobW11KTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTQwLVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MjA9c3RydWN0IHZuY3JfdGxiIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTQ2LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjQ3OnZvaWQga3ZtX2luaXRfbmVzdGVkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy00OC17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz04MDU9c3RhdGljIHN0cnVjdCBrdm1fczJfbW11ICpnZXRfczJfbW11X25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy04NjktXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6ODcwOnZvaWQga3ZtX2luaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTg3MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAwOjUxLjg0MTQ2NjQ3NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTI5NjU5NTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIEtWTSBBUk02NCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBrdm1faW5pdF9uZXN0ZWRgIGlzIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfaW5pdF92bWAuIEl0J3MgYmFzaWNhbGx5IHRoZSBzZXR1cCBmdW5jdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29udGV4dC5cblxuTXkgaW5pdGlhbCBmb2N1cyBoZXJlLCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZXMsIGlzIGFyb3VuZCBob3cgVmlydHVhbCBOZXN0ZWQgQ29udHJvbCBSZWdpc3RlcnMgKFZOQ1IpIGFuZCBUTEIgaW52YWxpZGF0aW9uIGFyZSBoYW5kbGVkLiBJJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggc2VlbXMgdG8gdG91Y2g6IGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLCBga3ZtX2hhbmRsZV9zMWUyX3RsYmlgLCBga3ZtX25lc3RlZF9zMl93cGAsIGBrdm1fbmVzdGVkX3MyX3VubWFwYCwgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCwgYW5kIGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAuIEknbSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhlc2Ugc3ltYm9sIG5hbWVzIHdpdGggdGhlIGRlZmluaXRpb25zIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gWWVwLCB0aGV5IGNoZWNrIG91dC5cblxuQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgIGFuZCBgYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY2AuIENsZWFybHksIHRoaXMgaXMgY29yZSBLVk0gQVJNNjQgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBJJ20gbm90aW5nIHRoYXQgYENPTkZJR19LVk1gIGlzIHRoZSBlbmNvbXBhc3NpbmcgY29uZmlnIG9wdGlvbi5cblxuVGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgZnVuZGFtZW50YWwgYXNwZWN0cyBvZiBWTkNSIFRMQiBoYW5kbGluZyBhbmQgdGhlIGNvbXB1dGF0aW9uL2FwcGxpY2F0aW9uIG9mIFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIHdpdGhpbiB0aGUgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlLCBidXQgY3JpdGljYWwsIGJ1Z3MuIFNvLCBJIG5lZWQgdG8gZmxhZyB0aGlzIGZvciBmdXp6aW5nLiBUaGVzZSBhcmUgcmVhY2hhYmxlLCBrZXJuZWwgcGF0aHMgdGhhdCBuZWVkIHJpZ29yb3VzIHRlc3RpbmcgdG8gcHJldmVudCByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5UaGVyZWZvcmUsIEknbSBtYXJraW5nIHRoaXMgZm9yIGZ1enppbmcsIHVzaW5nIGBLVk1gIGFzIHRoZSBjb25maWcuIE15IGFuYWx5c2lzIGlkZW50aWZpZXMgdGhlIGZvbGxvd2luZyBzeW1ib2xzOlxuLSBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YFxuLSBga3ZtX2hhbmRsZV9zMWUyX3RsYmlgXG4tIGBrdm1fbmVzdGVkX3MyX3dwYFxuLSBga3ZtX25lc3RlZF9zMl91bm1hcGBcbi0gYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYFxuLSBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgXG5hbmQgSSdsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byByZWxheSB0aGVzZSBmaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MzIsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAxOjAzLjEzODA2NTMzNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTUwMTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2hhbmRsZV92bmNyX2Fib3J0XCIsXG4gICAgXCJrdm1faGFuZGxlX3MxZTJfdGxiaVwiLFxuICAgIFwia3ZtX25lc3RlZF9zMl93cFwiLFxuICAgIFwia3ZtX25lc3RlZF9zMl91bm1hcFwiLFxuICAgIFwiY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VcIixcbiAgICBcImt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIFZOQ1IgKFZpcnR1YWwgTmVzdGVkIENvbnRyb2wgUmVnaXN0ZXIpIFRMQiBoYW5kbGluZyBhbmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyB0cmFja2luZyBtZWNoYW5pc21zIGFuZCBtb2RpZmllcyBob3cgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvbXB1dGVkIGFuZCBhcHBsaWVkLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2hhbmRsZV92bmNyX2Fib3J0XCIsXG4gICAgXCJrdm1faGFuZGxlX3MxZTJfdGxiaVwiLFxuICAgIFwia3ZtX25lc3RlZF9zMl93cFwiLFxuICAgIFwia3ZtX25lc3RlZF9zMl91bm1hcFwiLFxuICAgIFwiY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VcIixcbiAgICBcImt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIFZOQ1IgKFZpcnR1YWwgTmVzdGVkIENvbnRyb2wgUmVnaXN0ZXIpIFRMQiBoYW5kbGluZyBhbmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyB0cmFja2luZyBtZWNoYW5pc21zIGFuZCBtb2RpZmllcyBob3cgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvbXB1dGVkIGFuZCBhcHBsaWVkLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-02 12:37:34 +0000 UTC FinishedAt: 2026-08-02 13:01:05 +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": [ "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": [ "KVM" ], "series_id": "7311056a-fe2f-49db-8048-1d949acbbebb" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_handle_vncr_abort", "kvm_handle_s1e2_tlbi", "kvm_nested_s2_wp", "kvm_nested_s2_unmap", "compute_tlb_inval_range", "kvm_vcpu_allocate_vncr_tlb" ], "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+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bV9oYW5kbGVfdm5jcl9hYm9ydCYjMzQ7LAogICAgJiMzNDtrdm1faGFuZGxlX3MxZTJfdGxiaSYjMzQ7LAogICAgJiMzNDtrdm1fbmVzdGVkX3MyX3dwJiMzNDssCiAgICAmIzM0O2t2bV9uZXN0ZWRfczJfdW5tYXAmIzM0OywKICAgICYjMzQ7Y29tcHV0ZV90bGJfaW52YWxfcmFuZ2UmIzM0OywKICAgICYjMzQ7a3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIFZOQ1IgKFZpcnR1YWwgTmVzdGVkIENvbnRyb2wgUmVnaXN0ZXIpIFRMQiBoYW5kbGluZyBhbmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyB0cmFja2luZyBtZWNoYW5pc21zIGFuZCBtb2RpZmllcyBob3cgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvbXB1dGVkIGFuZCBhcHBsaWVkLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTI6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBlOWQ1YWU5ZDQ4YjgxNGU4YzhmNjdlNDMzMjVjMmVmYzI4ODA4YmRhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMiAxMjo1ODoyOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IGJhZTJjNGY5MmVmNWMuLjEwODk2NmE5ZGIxMmIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuQEAgLTQxMSw4ICYjNDM7NDExLDggQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdC8qIE1hc2tzIGZvciBWTkNSLWJhY2tlZCBhbmQgZ2VuZXJhbCBFTDIgc3lzcmVncyAqL1xuIFx0c3RydWN0IGt2bV9zeXNyZWdfbWFza3NcdCpzeXNyZWdfbWFza3M7XG4gXG4tXHQvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIGN1cnJlbnRseSBtYXBwZWQgKi9cbi1cdGF0b21pY190IHZuY3JfbWFwX2NvdW50O1xuJiM0MztcdC8qIENvdW50IHRoZSBudW1iZXIgb2YgVk5DUl9FTDIgVExCcyAqL1xuJiM0MztcdGF0b21pY190IHZuY3JfdGxiX2NvdW50O1xuIFxuIFx0LypcbiBcdCAqIEZvciBhbiB1bnRydXN0ZWQgaG9zdCBWTSwgJiMzOTtwa3ZtLmhhbmRsZSYjMzk7IGlzIHVzZWQgdG8gbG9va3VwXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaFxuaW5kZXggMDEyZDcxMTAzNGQxNy4uY2M0ODgxN2E1YmY3YSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaFxuQEAgLTM4OCw2ICYjNDM7Mzg4LDggQEAgc3RydWN0IHMxX3dhbGtfcmVzdWx0IHtcbiBcdGJvb2xcdGZhaWxlZDtcbiB9O1xuIFxuJiM0MzsjZGVmaW5lIFMxX01NVV9ESVNBQkxFRFx0XHQoLTEyNylcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIGZhaWxfczFfd2FsayhzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1OCBmc3QsIGJvb2wgczFwdHcpXG4ge1xuIFx0d3ItXHUwMDNlZnN0XHRcdD0gZnN0O1xuQEAgLTM5Niw2ICYjNDM7Mzk4LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KVxuIFx0d3ItXHUwMDNlZmFpbGVkXHQ9IHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgczFfbW11X2Rpc2FibGVkKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gd3ItXHUwMDNlbGV2ZWwgPT0gUzFfTU1VX0RJU0FCTEVEO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBfX2t2bV90cmFuc2xhdGVfdmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSxcbiBcdFx0ICAgICAgIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU2NCB2YSk7XG4gaW50IF9fa3ZtX2ZpbmRfczFfZGVzY19sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YSwgdTY0IGlwYSxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9hdC5jIGIvYXJjaC9hcm02NC9rdm0vYXQuY1xuaW5kZXggNjQwZjJkYzAwYThiYS4uMDkyNjQyNmI4Nzk4OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2F0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva3ZtL2F0LmNcbkBAIC0xMSw4ICYjNDM7MTEsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2FzbS9rdm1fbW11LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2Nhc20vbHN1aS5oXHUwMDNlXG4gXG4tI2RlZmluZSBTMV9NTVVfRElTQUJMRURcdFx0KC0xMjcpXG4tXG4gc3RhdGljIGludCBnZXRfaWFfc2l6ZShzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSlcbiB7XG4gXHRyZXR1cm4gNjQgLSB3aS1cdTAwM2V0eHN6O1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jXG5pbmRleCBiYmU5Y2ViZDNkOWQ1Li5lYjU5NTQ5ZWMyMTcyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuQEAgLTQyNCwxMSAmIzQzOzQyNCwxMSBAQCBzdGF0aWMgYm9vbCBrdm1faHlwX2hhbmRsZV90bGJpX2VsMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKlxuLVx0ICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgbWFwcGluZyBiZWluZyBpbnZhbGlkYXRlZCxcbiYjNDM7XHQgKiBJZiB3ZSBoYXZlIHRvIGNoZWNrIGZvciBhbnkgVk5DUiBUTEIgYmVpbmcgaW52YWxpZGF0ZWQsXG4gXHQgKiBnbyBiYWNrIHRvIHRoZSBzbG93IHBhdGggZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiBcdCAqL1xuIFx0aWYgKHZjcHVfZWwyX2UyaF9pc19zZXQodmNwdSkgXHUwMDI2XHUwMDI2IHZjcHVfZWwyX3RnZV9pc19zZXQodmNwdSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgYXRvbWljX3JlYWQoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX21hcF9jb3VudCkpXG4mIzQzO1x0ICAgIGF0b21pY19yZWFkKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRfX2t2bV9za2lwX2luc3RyKHZjcHUpO1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbmluZGV4IGRmYjk2ZWRiZGM0M2MuLjFlM2ZkOThmNjU4OWIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbkBAIC00OCw3ICYjNDM7NDgsNyBAQCB2b2lkIGt2bV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0a3ZtLVx1MDAzZWFyY2gubmVzdGVkX21tdXMgPSBOVUxMO1xuIFx0a3ZtLVx1MDAzZWFyY2gubmVzdGVkX21tdXNfc2l6ZSA9IDA7XG4tXHRhdG9taWNfc2V0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50LCAwKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50LCAwKTtcbiB9XG4gXG4gc3RhdGljIGludCBpbml0X25lc3RlZF9zMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxuQEAgLTUwNiw3ICYjNDM7NTA2LDcgQEAgaW50IGt2bV93YWxrX25lc3RlZF9zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGdpcGEsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBfX3R0bF90b19zaXplKHU4IHR0bClcbiB7XG4gXHRpbnQgbGV2ZWwgPSB0dGwgXHUwMDI2IDM7XG4gXHRpbnQgZ3JhbiA9ICh0dGwgXHUwMDNlXHUwMDNlIDIpIFx1MDAyNiAzO1xuQEAgLTU2MiwxMCAmIzQzOzU2MiwyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bClcbiBcdHJldHVybiBtYXhfc2l6ZTtcbiB9XG4gXG4tc3RhdGljIHU4IHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHUxNiBzaGlmdCwgdTggbGV2ZWwpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIF9fdHRsX3RvX3NpemUodHRsKSA/OiBTWl8xRztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHU4IHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHUxNiBzaGlmdCwgczggbGV2ZWwpXG4ge1xuIFx0dTggdHRsO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgd2UgZG9uJiMzOTt0IGhhdmUgYSBwcm9wZXIgbGV2ZWwsIGZhbGxiYWNrIHRvIHRoZSBtYXhpbXVtXG4mIzQzO1x0ICogc2l6ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobGV2ZWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4gXHRzd2l0Y2goc2hpZnQpIHtcbiBcdGNhc2UgMTI6XG4gXHRcdHR0bCA9IFRMQklfVFRMX1RHXzRLO1xuQEAgLTY3Niw3ICYjNDM7Njg4LDExIEBAIHVuc2lnbmVkIGxvbmcgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2Uoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdTY0IHZhbClcbiBcdFx0dHRsID0gZ2V0X2d1ZXN0X21hcHBpbmdfdHRsKG1tdSwgYWRkcik7XG4gXHR9XG4gXG4tXHRtYXhfc2l6ZSA9IHR0bF90b19zaXplKHR0bCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBEb24mIzM5O3QgdXNlIHRoZSBkZWZhdWx0IDFHQiBmYWxsYmFjaywgYXMgd2UgY2FuIGFkYXB0IHRvIHRoZVxuJiM0MztcdCAqIG1heCBtYXBwaW5nIHNpemUgd2UgYWxsb3cgYXQgUzIuXG4mIzQzO1x0ICovXG4mIzQzO1x0bWF4X3NpemUgPSBfX3R0bF90b19zaXplKHR0bCk7XG4gXG4gXHRpZiAoIW1heF9zaXplKSB7XG4gXHRcdC8qIENvbXB1dGUgdGhlIG1heGltdW0gZXh0ZW50IG9mIHRoZSBpbnZhbGlkYXRpb24gKi9cbkBAIC04NzksNiAmIzQzOzg5NSwxMiBAQCB2b2lkIGt2bV92Y3B1X2xvYWRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHVubWFwX2wxX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dClcbiYjNDM7e1xuJiM0MztcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC1cdTAwM2VjcHUpKTtcbiYjNDM7XHR2dC1cdTAwM2VjcHUgPSAtMTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4ge1xuIFx0aWYgKCFob3N0X2RhdGFfdGVzdF9mbGFnKEwxX1ZOQ1JfTUFQUEVEKSlcbkBAIC04ODcsMTAgJiM0Mzs5MDksOCBAQCBzdGF0aWMgdm9pZCB0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRCVUdfT04odmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiLVx1MDAzZWNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpO1xuIFx0QlVHX09OKGlzX2h5cF9jdHh0KHZjcHUpKTtcbiBcbi1cdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGItXHUwMDNlY3B1KSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGItXHUwMDNlY3B1ID0gLTE7XG4mIzQzO1x0dW5tYXBfbDFfdm5jcih2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGIpO1xuIFx0aG9zdF9kYXRhX2NsZWFyX2ZsYWcoTDFfVk5DUl9NQVBQRUQpO1xuLVx0YXRvbWljX2RlYyhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KTtcbiB9XG4gXG4gdm9pZCBrdm1fdmNwdV9wdXRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC05NzgsMTEgJiM0Mzs5OTgsMjcgQEAgdTE2IGdldF9hc2lkX2J5X3JlZ2ltZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0gdHJhbnNfcmVnaW1lIHJlZ2ltZSlcbiBcdHJldHVybiBhc2lkO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dClcbiYjNDM7c3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZuY3JfdGxiICp2dClcbiB7XG4mIzQzO1x0QlVHX09OKCF2dC1cdTAwM2V2YWxpZCk7XG4gXHR2dC1cdTAwM2V2YWxpZCA9IGZhbHNlO1xuJiM0MztcdGF0b21pY19kZWMoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpO1xuIFx0aWYgKHZ0LVx1MDAzZWNwdSAhPSAtMSlcbi1cdFx0Y2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKHZ0LVx1MDAzZWNwdSkpO1xuJiM0MztcdFx0dW5tYXBfbDFfdm5jcih2dCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsXG4mIzQzO1x0XHRcdFx0dTY0IHNjb3BlX3N0YXJ0LCB1NjQgc2NvcGVfc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHU2NCB0bGJfc2l6ZSwgdGxiX3N0YXJ0LCB0bGJfZW5kLCBzY29wZV9lbmQ7XG4mIzQzO1xuJiM0MztcdHRsYl9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXHUwMDNld2kucGdzaGlmdCwgdnQtXHUwMDNld3IubGV2ZWwpKTtcbiYjNDM7XG4mIzQzO1x0dGxiX3N0YXJ0ID0gYWRkciBcdTAwMjYgfih0bGJfc2l6ZSAtIDEpO1xuJiM0MztcdHRsYl9lbmQgPSB0bGJfc3RhcnQgJiM0MzsgdGxiX3NpemUgLSAxO1xuJiM0MztcdHNjb3BlX2VuZCA9IHNjb3BlX3N0YXJ0ICYjNDM7IHNjb3BlX3NpemUgLSAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gISh0bGJfZW5kIFx1MDAzYyBzY29wZV9zdGFydCB8fCB0bGJfc3RhcnQgXHUwMDNlIHNjb3BlX2VuZCk7XG4gfVxuIFxuIC8qXG5AQCAtMTAwNywxOSAmIzQzOzEwNDMsOSBAQCBzdGF0aWMgdm9pZCBrdm1faW52YWxpZGF0ZV92bmNyX2lwYShzdHJ1Y3Qga3ZtICprdm0sIHU2NCBzdGFydCwgdTY0IGVuZClcbiBcdGlmICgha3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyX09OTFkpKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xuLVx0XHR1NjQgaXBhX3N0YXJ0LCBpcGFfZW5kLCBpcGFfc2l6ZTtcbi1cbi1cdFx0aXBhX3NpemUgPSB0dGxfdG9fc2l6ZShwZ3NoaWZ0X2xldmVsX3RvX3R0bCh2dC1cdTAwM2V3aS5wZ3NoaWZ0LFxuLVx0XHRcdFx0XHRcdFx0ICAgIHZ0LVx1MDAzZXdyLmxldmVsKSk7XG4tXHRcdGlwYV9zdGFydCA9IHZ0LVx1MDAzZXdyLnBhIFx1MDAyNiB+KGlwYV9zaXplIC0gMSk7XG4tXHRcdGlwYV9lbmQgPSBpcGFfc3RhcnQgJiM0MzsgaXBhX3NpemU7XG4tXG4tXHRcdGlmIChpcGFfZW5kIFx1MDAzYz0gc3RhcnQgfHwgaXBhX3N0YXJ0IFx1MDAzZT0gZW5kKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpbnZhbGlkYXRlX3ZuY3IodnQpO1xuLVx0fVxuJiM0MztcdGt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKVxuJiM0MztcdFx0aWYgKHZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVx1MDAzZXdyLnBhLCBzdGFydCwgZW5kIC0gc3RhcnQpKVxuJiM0MztcdFx0XHRpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7XG4gfVxuIFxuIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUge1xuQEAgLTEwNDUsMjggJiM0MzsxMDcxLDE5IEBAIHN0YXRpYyB2b2lkIGludmFsaWRhdGVfdm5jcl92YShzdHJ1Y3Qga3ZtICprdm0sXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4gXG4gXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xuLVx0XHR1NjQgdmFfc3RhcnQsIHZhX2VuZCwgdmFfc2l6ZTtcbi1cbi1cdFx0dmFfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LVx1MDAzZXdpLnBnc2hpZnQsXG4tXHRcdFx0XHRcdFx0XHQgICB2dC1cdTAwM2V3ci5sZXZlbCkpO1xuLVx0XHR2YV9zdGFydCA9IHZ0LVx1MDAzZWd2YSBcdTAwMjYgfih2YV9zaXplIC0gMSk7XG4tXHRcdHZhX2VuZCA9IHZhX3N0YXJ0ICYjNDM7IHZhX3NpemU7XG4tXG4gXHRcdHN3aXRjaCAoc2NvcGUtXHUwMDNldHlwZSkge1xuIFx0XHRjYXNlIFRMQklfQUxMOlxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRjYXNlIFRMQklfVkE6XG4tXHRcdFx0aWYgKHZhX2VuZCBcdTAwM2M9IHNjb3BlLVx1MDAzZXZhIHx8XG4tXHRcdFx0ICAgIHZhX3N0YXJ0IFx1MDAzZT0gKHNjb3BlLVx1MDAzZXZhICYjNDM7IHNjb3BlLVx1MDAzZXNpemUpKVxuJiM0MztcdFx0XHRpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVx1MDAzZWd2YSwgc2NvcGUtXHUwMDNldmEsIHNjb3BlLVx1MDAzZXNpemUpKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0aWYgKHZ0LVx1MDAzZXdyLm5HIFx1MDAyNlx1MDAyNiB2dC1cdTAwM2V3ci5hc2lkICE9IHNjb3BlLVx1MDAzZWFzaWQpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Y2FzZSBUTEJJX1ZBQTpcbi1cdFx0XHRpZiAodmFfZW5kIFx1MDAzYz0gc2NvcGUtXHUwMDNldmEgfHxcbi1cdFx0XHQgICAgdmFfc3RhcnQgXHUwMDNlPSAoc2NvcGUtXHUwMDNldmEgJiM0Mzsgc2NvcGUtXHUwMDNlc2l6ZSkpXG4mIzQzO1x0XHRcdGlmICghdm5jcl90bGJfaW50ZXJzZWN0cyh2dCwgdnQtXHUwMDNlZ3ZhLCBzY29wZS1cdTAwM2V2YSwgc2NvcGUtXHUwMDNlc2l6ZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0xMDc2LDcgJiM0MzsxMDkzLDcgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSxcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHRpbnZhbGlkYXRlX3ZuY3IodnQpO1xuJiM0MztcdFx0aW52YWxpZGF0ZV92bmNyKGt2bSwgdnQpO1xuIFx0fVxuIH1cbiBcbkBAIC0xMTI2LDggJiM0MzsxMTQzLDYgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9zMV90bGJpX3JhbmdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwsXG4gXHRjYXNlIE9QX1RMQklfVkFMRTFPU05YUzpcbiBcdFx0c2NvcGUtXHUwMDNldHlwZSA9IFRMQklfVkE7XG4gXHRcdHNjb3BlLVx1MDAzZXNpemUgPSB0dGxfdG9fc2l6ZShGSUVMRF9HRVQoVExCSV9UVExfTUFTSywgdmFsKSk7XG4tXHRcdGlmICghc2NvcGUtXHUwMDNlc2l6ZSlcbi1cdFx0XHRzY29wZS1cdTAwM2VzaXplID0gU1pfMUc7XG4gXHRcdHNjb3BlLVx1MDAzZXZhID0gdGxiaV92YV9zMV90b192YSh2YWwpIFx1MDAyNiB+KHNjb3BlLVx1MDAzZXNpemUgLSAxKTtcbiBcdFx0c2NvcGUtXHUwMDNlYXNpZCA9IEZJRUxEX0dFVChUTEJJUl9BU0lEX01BU0ssIHZhbCk7XG4gXHRcdGJyZWFrO1xuQEAgLTExNTQsOCAmIzQzOzExNjksNiBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX3MxX3RsYmlfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbCxcbiBcdGNhc2UgT1BfVExCSV9WQUFMRTFPU05YUzpcbiBcdFx0c2NvcGUtXHUwMDNldHlwZSA9IFRMQklfVkFBO1xuIFx0XHRzY29wZS1cdTAwM2VzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpO1xuLVx0XHRpZiAoIXNjb3BlLVx1MDAzZXNpemUpXG4tXHRcdFx0c2NvcGUtXHUwMDNlc2l6ZSA9IFNaXzFHO1xuIFx0XHRzY29wZS1cdTAwM2V2YSA9IHRsYmlfdmFfczFfdG9fdmEodmFsKSBcdTAwMjYgfihzY29wZS1cdTAwM2VzaXplIC0gMSk7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBPUF9UTEJJX1JWQUUyOlxuQEAgLTEzMTYsMTMgJiM0MzsxMzI5LDIwIEBAIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4gICogICBpbnRlcnNlY3RzIHdpdGggdGhlIFRMQkkgcmVxdWVzdCwgaW52YWxpZGF0ZSBpdCwgYW5kIHVubWFwIHRoZSBwYWdlXG4gICogICBmcm9tIHRoZSBmaXhtYXAuIEJlY2F1c2Ugd2UgbmVlZCB0byBsb29rIGF0IGFsbCB0aGUgdmNwdS1wcml2YXRlIFRMQnMsXG4gICogICB0aGlzIHJlcXVpcmVzIHNvbWUgd2lkZS1yYW5naW5nIGxvY2tpbmcgdG8gZW5zdXJlIHRoYXQgbm90aGluZyByYWNlc1xuLSAqICAgYWdhaW5zdCBpdC4gVGhpcyBtYXkgcmVxdWlyZSBzb21lIHJlZmNvdW50aW5nIHRvIGF2b2lkIHRoZSBzZWFyY2ggd2hlblxuLSAqICAgbm8gc3VjaCBUTEIgaXMgcHJlc2VudC5cbiYjNDM7ICogICBhZ2FpbnN0IGl0LiBUaGlzIHJlcXVpcmVzIHNvbWUgcmVmY291bnRpbmcgdG8gYXZvaWQgdGhlIHNlYXJjaCB3aGVuXG4mIzQzOyAqICAgbm8gc3VjaCBUTEIgaXMgcHJlc2VudCAoc2VlIGJlbG93KS5cbiAgKlxuICAqIC0gT24gTU1VIG5vdGlmaWVycywgd2UgbXVzdCBpbnZhbGlkYXRlIG91ciBUTEIgaW4gYSBzaW1pbGFyIHdheSwgYnV0XG4gICogICBsb29raW5nIGF0IHRoZSBJUEEgaW5zdGVhZC4gVGhlIGZ1bm55IHBhcnQgaXMgdGhhdCB0aGVyZSBtYXkgbm90IGJlIGFcbiAgKiAgIHN0YWdlLTIgbWFwcGluZyBmb3IgdGhpcyBwYWdlIGlmIEwxIGhhc24mIzM5O3QgYWNjZXNzZWQgaXQgdXNpbmcgTEQvU1RcbiAgKiAgIGluc3RydWN0aW9ucy5cbiYjNDM7ICpcbiYjNDM7ICogLSB2bmNyX3RsYl9jb3VudCB0cmFja3MgdGhlIG51bWJlciBvZiB2YWxpZCBWTkNSIFRMQnMgVk0td2lkZS4gVGhpcyBpc24mIzM5O3RcbiYjNDM7ICogICB0aGUgbnVtYmVyIG9mICptYXBwZWQqIEwxIFZOQ1IgcGFnZXMsIHdoaWNoIGlzIGxpa2VseSBiZSBhIHN1YnNldCAoYW5kXG4mIzQzOyAqICAgYnkgZGVmaW5pdGlvbiwgYSBUTEJJIGhhbmRsZWQgZnJvbSBMMSBydW5zIHdpdGggdGhlIGNhbm9uaWNhbCBWTkNSXG4mIzQzOyAqICAgcGFnZSwgbm90IHRoZSBMMSYjMzk7cykuIFRoZSBpbm5lcm1vc3QgdHJhcCBoYW5kbGluZyBjb2RlIGNoZWNrcyB0aGlzIHRvXG4mIzQzOyAqICAgZmluZCBvdXQgd2hldGhlciB0byByZXR1cm4gdG8gdGhlIGd1ZXN0IEFTQVAgKG5vIEwxIFRMQnMpIG9yIHRvIHZpc2l0XG4mIzQzOyAqICAgdGhpcyBwYXJ0IG9mIHRoZSB3b3JsZCBmb3Igc29tZSBleHRyYSBpbnZhbGlkYXRpb24gd29yay5cbiAgKi9cbiBcbiBpbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTEzNzcsNyAmIzQzOzEzOTcsOCBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHQgKi9cbiBcdHNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaykge1xuIFx0XHR0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcCh2Y3B1KTtcbi1cdFx0dnQtXHUwMDNldmFsaWQgPSBmYWxzZTtcbiYjNDM7XHRcdGlmICh2dC1cdTAwM2V2YWxpZClcbiYjNDM7XHRcdFx0aW52YWxpZGF0ZV92bmNyKHZjcHUtXHUwMDNla3ZtLCB2dCk7XG4gXG4gXHRcdHZ0LVx1MDAzZXdpID0gKHN0cnVjdCBzMV93YWxrX2luZm8pIHtcbiBcdFx0XHQucmVnaW1lXHQ9IFRSX0VMMjAsXG5AQCAtMTQ0OSw2ICYjNDM7MTQ3MCw4IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcdFx0dnQtXHUwMDNldmFsaWQgPSB0cnVlO1xuIFx0XHR2dC1cdTAwM2VjcHUgPSAtMTtcbiBcbiYjNDM7XHRcdGF0b21pY19pbmMoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX3RsYl9jb3VudCk7XG4mIzQzO1xuIFx0XHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfTUFQX0wxX1ZOQ1JfRUwyLCB2Y3B1KTtcbiBcdFx0a3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHZjcHUtXHUwMDNla3ZtLCBwYWdlLCBmYWxzZSwgdnQtXHUwMDNld3IucHcgXHUwMDI2XHUwMDI2IHZ0LVx1MDAzZWhwYV93cml0YWJsZSk7XG4gXHR9XG5AQCAtMTU2OCw2ICYjNDM7MTU5MSw5IEBAIHN0YXRpYyB2b2lkIGt2bV9tYXBfbDFfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIXZ0LVx1MDAzZXZhbGlkKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0aWYgKCEodmNwdV9yZWFkX3N5c19yZWcodmNwdSwgU0NUTFJfRUwyKSBcdTAwMjYgU0NUTFJfRUx4X00pICE9IHMxX21tdV9kaXNhYmxlZChcdTAwMjZ2dC1cdTAwM2V3cikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0aWYgKHJlYWRfdm5jcl9lbDIodmNwdSkgIT0gdnQtXHUwMDNlZ3ZhKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTU5Miw3ICYjNDM7MTYxOCw2IEBAIHN0YXRpYyB2b2lkIGt2bV9tYXBfbDFfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKFBBR0VfTk9ORSkpIHtcbiBcdFx0X19zZXRfZml4bWFwKHZuY3JfZml4bWFwKHZ0LVx1MDAzZWNwdSksIHZ0LVx1MDAzZWhwYSwgcHJvdCk7XG4gXHRcdGhvc3RfZGF0YV9zZXRfZmxhZyhMMV9WTkNSX01BUFBFRCk7XG4tXHRcdGF0b21pY19pbmMoXHUwMDI2dmNwdS1cdTAwM2Vrdm0tXHUwMDNlYXJjaC52bmNyX21hcF9jb3VudCk7XG4gXHR9XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faGFuZGxlX3ZuY3JfYWJvcnQmIzM0OywKICAgICYjMzQ7a3ZtX2hhbmRsZV9zMWUyX3RsYmkmIzM0OywKICAgICYjMzQ7a3ZtX25lc3RlZF9zMl93cCYjMzQ7LAogICAgJiMzNDtrdm1fbmVzdGVkX3MyX3VubWFwJiMzNDssCiAgICAmIzM0O2NvbXB1dGVfdGxiX2ludmFsX3JhbmdlJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBWTkNSIChWaXJ0dWFsIE5lc3RlZCBDb250cm9sIFJlZ2lzdGVyKSBUTEIgaGFuZGxpbmcgYW5kIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgdHJhY2tpbmcgbWVjaGFuaXNtcyBhbmQgbW9kaWZpZXMgaG93IFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIGFyZSBjb21wdXRlZCBhbmQgYXBwbGllZC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTlkNWFlOWQ0OGI4MTRlOGM4ZjY3ZTQzMzI1YzJlZmMyODgwOGJkYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIgMTI6NTg6MjggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggYmFlMmM0ZjkyZWY1Yy4uMTA4OTY2YTlkYjEyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaApAQCAtNDExLDggJiM0Mzs0MTEsOCBAQCBzdHJ1Y3Qga3ZtX2FyY2ggewogCS8qIE1hc2tzIGZvciBWTkNSLWJhY2tlZCBhbmQgZ2VuZXJhbCBFTDIgc3lzcmVncyAqLwogCXN0cnVjdCBrdm1fc3lzcmVnX21hc2tzCSpzeXNyZWdfbWFza3M7CiAKLQkvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIGN1cnJlbnRseSBtYXBwZWQgKi8KLQlhdG9taWNfdCB2bmNyX21hcF9jb3VudDsKJiM0MzsJLyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovCiYjNDM7CWF0b21pY190IHZuY3JfdGxiX2NvdW50OwogCiAJLyoKIAkgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICYjMzk7cGt2bS5oYW5kbGUmIzM5OyBpcyB1c2VkIHRvIGxvb2t1cApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaAppbmRleCAwMTJkNzExMDM0ZDE3Li5jYzQ4ODE3YTViZjdhIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaApAQCAtMzg4LDYgJiM0MzszODgsOCBAQCBzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgewogCWJvb2wJZmFpbGVkOwogfTsKIAomIzQzOyNkZWZpbmUgUzFfTU1VX0RJU0FCTEVECQkoLTEyNykKJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KQogewogCXdyLSZndDtmc3QJCT0gZnN0OwpAQCAtMzk2LDYgJiM0MzszOTgsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIGZhaWxfczFfd2FsayhzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1OCBmc3QsIGJvb2wgczFwdHcpCiAJd3ItJmd0O2ZhaWxlZAk9IHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgczFfbW11X2Rpc2FibGVkKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IpCiYjNDM7ewomIzQzOwlyZXR1cm4gd3ItJmd0O2xldmVsID09IFMxX01NVV9ESVNBQkxFRDsKJiM0Mzt9CiYjNDM7CiBpbnQgX19rdm1fdHJhbnNsYXRlX3ZhKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHMxX3dhbGtfaW5mbyAqd2ksCiAJCSAgICAgICBzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1NjQgdmEpOwogaW50IF9fa3ZtX2ZpbmRfczFfZGVzY19sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB2YSwgdTY0IGlwYSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2F0LmMgYi9hcmNoL2FybTY0L2t2bS9hdC5jCmluZGV4IDY0MGYyZGMwMGE4YmEuLjA5MjY0MjZiODc5ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2F0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vYXQuYwpAQCAtMTEsOCAmIzQzOzExLDYgQEAKICNpbmNsdWRlICZsdDthc20va3ZtX21tdS5oJmd0OwogI2luY2x1ZGUgJmx0O2FzbS9sc3VpLmgmZ3Q7CiAKLSNkZWZpbmUgUzFfTU1VX0RJU0FCTEVECQkoLTEyNykKLQogc3RhdGljIGludCBnZXRfaWFfc2l6ZShzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSkKIHsKIAlyZXR1cm4gNjQgLSB3aS0mZ3Q7dHhzejsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMgYi9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jCmluZGV4IGJiZTljZWJkM2Q5ZDUuLmViNTk1NDllYzIxNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guYwpAQCAtNDI0LDExICYjNDM7NDI0LDExIEBAIHN0YXRpYyBib29sIGt2bV9oeXBfaGFuZGxlX3RsYmlfZWwyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0ICpleGl0X2NvZGUpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qCi0JICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgbWFwcGluZyBiZWluZyBpbnZhbGlkYXRlZCwKJiM0MzsJICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgVExCIGJlaW5nIGludmFsaWRhdGVkLAogCSAqIGdvIGJhY2sgdG8gdGhlIHNsb3cgcGF0aCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLgogCSAqLwogCWlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpICZhbXA7JmFtcDsgdmNwdV9lbDJfdGdlX2lzX3NldCh2Y3B1KSAmYW1wOyZhbXA7Ci0JICAgIGF0b21pY19yZWFkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZuY3JfbWFwX2NvdW50KSkKJiM0MzsJICAgIGF0b21pY19yZWFkKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZuY3JfdGxiX2NvdW50KSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJX19rdm1fc2tpcF9pbnN0cih2Y3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKaW5kZXggZGZiOTZlZGJkYzQzYy4uMWUzZmQ5OGY2NTg5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMKQEAgLTQ4LDcgJiM0Mzs0OCw3IEBAIHZvaWQga3ZtX2luaXRfbmVzdGVkKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlrdm0tJmd0O2FyY2gubmVzdGVkX21tdXMgPSBOVUxMOwogCWt2bS0mZ3Q7YXJjaC5uZXN0ZWRfbW11c19zaXplID0gMDsKLQlhdG9taWNfc2V0KCZhbXA7a3ZtLSZndDthcmNoLnZuY3JfbWFwX2NvdW50LCAwKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO2t2bS0mZ3Q7YXJjaC52bmNyX3RsYl9jb3VudCwgMCk7CiB9CiAKIHN0YXRpYyBpbnQgaW5pdF9uZXN0ZWRfczJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSkKQEAgLTUwNiw3ICYjNDM7NTA2LDcgQEAgaW50IGt2bV93YWxrX25lc3RlZF9zMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBoeXNfYWRkcl90IGdpcGEsCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBfX3R0bF90b19zaXplKHU4IHR0bCkKIHsKIAlpbnQgbGV2ZWwgPSB0dGwgJmFtcDsgMzsKIAlpbnQgZ3JhbiA9ICh0dGwgJmd0OyZndDsgMikgJmFtcDsgMzsKQEAgLTU2MiwxMCAmIzQzOzU2MiwyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bCkKIAlyZXR1cm4gbWF4X3NpemU7CiB9CiAKLXN0YXRpYyB1OCBwZ3NoaWZ0X2xldmVsX3RvX3R0bCh1MTYgc2hpZnQsIHU4IGxldmVsKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKQomIzQzO3sKJiM0MzsJcmV0dXJuIF9fdHRsX3RvX3NpemUodHRsKSA/OiBTWl8xRzsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHU4IHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHUxNiBzaGlmdCwgczggbGV2ZWwpCiB7CiAJdTggdHRsOwogCiYjNDM7CS8qCiYjNDM7CSAqIElmIHdlIGRvbiYjMzk7dCBoYXZlIGEgcHJvcGVyIGxldmVsLCBmYWxsYmFjayB0byB0aGUgbWF4aW11bQomIzQzOwkgKiBzaXplLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxldmVsICZsdDsgMCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCXN3aXRjaChzaGlmdCkgewogCWNhc2UgMTI6CiAJCXR0bCA9IFRMQklfVFRMX1RHXzRLOwpAQCAtNjc2LDcgJiM0Mzs2ODgsMTEgQEAgdW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKQogCQl0dGwgPSBnZXRfZ3Vlc3RfbWFwcGluZ190dGwobW11LCBhZGRyKTsKIAl9CiAKLQltYXhfc2l6ZSA9IHR0bF90b19zaXplKHR0bCk7CiYjNDM7CS8qCiYjNDM7CSAqIERvbiYjMzk7dCB1c2UgdGhlIGRlZmF1bHQgMUdCIGZhbGxiYWNrLCBhcyB3ZSBjYW4gYWRhcHQgdG8gdGhlCiYjNDM7CSAqIG1heCBtYXBwaW5nIHNpemUgd2UgYWxsb3cgYXQgUzIuCiYjNDM7CSAqLwomIzQzOwltYXhfc2l6ZSA9IF9fdHRsX3RvX3NpemUodHRsKTsKIAogCWlmICghbWF4X3NpemUpIHsKIAkJLyogQ29tcHV0ZSB0aGUgbWF4aW11bSBleHRlbnQgb2YgdGhlIGludmFsaWRhdGlvbiAqLwpAQCAtODc5LDYgJiM0Mzs4OTUsMTIgQEAgdm9pZCBrdm1fdmNwdV9sb2FkX2h3X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiAJfQogfQogCiYjNDM7c3RhdGljIHZvaWQgdW5tYXBfbDFfdm5jcihzdHJ1Y3Qgdm5jcl90bGIgKnZ0KQomIzQzO3sKJiM0MzsJY2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKHZ0LSZndDtjcHUpKTsKJiM0MzsJdnQtJmd0O2NwdSA9IC0xOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpZiAoIWhvc3RfZGF0YV90ZXN0X2ZsYWcoTDFfVk5DUl9NQVBQRUQpKQpAQCAtODg3LDEwICYjNDM7OTA5LDggQEAgc3RhdGljIHZvaWQgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCUJVR19PTih2Y3B1LSZndDthcmNoLnZuY3JfdGxiLSZndDtjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlCVUdfT04oaXNfaHlwX2N0eHQodmNwdSkpOwogCi0JY2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKHZjcHUtJmd0O2FyY2gudm5jcl90bGItJmd0O2NwdSkpOwotCXZjcHUtJmd0O2FyY2gudm5jcl90bGItJmd0O2NwdSA9IC0xOwomIzQzOwl1bm1hcF9sMV92bmNyKHZjcHUtJmd0O2FyY2gudm5jcl90bGIpOwogCWhvc3RfZGF0YV9jbGVhcl9mbGFnKEwxX1ZOQ1JfTUFQUEVEKTsKLQlhdG9taWNfZGVjKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZuY3JfbWFwX2NvdW50KTsKIH0KIAogdm9pZCBrdm1fdmNwdV9wdXRfaHdfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTk3OCwxMSAmIzQzOzk5OCwyNyBAQCB1MTYgZ2V0X2FzaWRfYnlfcmVnaW1lKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZW51bSB0cmFuc19yZWdpbWUgcmVnaW1lKQogCXJldHVybiBhc2lkOwogfQogCi1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dCkKJiM0MztzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qgdm5jcl90bGIgKnZ0KQogewomIzQzOwlCVUdfT04oIXZ0LSZndDt2YWxpZCk7CiAJdnQtJmd0O3ZhbGlkID0gZmFsc2U7CiYjNDM7CWF0b21pY19kZWMoJmFtcDtrdm0tJmd0O2FyY2gudm5jcl90bGJfY291bnQpOwogCWlmICh2dC0mZ3Q7Y3B1ICE9IC0xKQotCQljbGVhcl9maXhtYXAodm5jcl9maXhtYXAodnQtJmd0O2NwdSkpOwomIzQzOwkJdW5tYXBfbDFfdm5jcih2dCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsCiYjNDM7CQkJCXU2NCBzY29wZV9zdGFydCwgdTY0IHNjb3BlX3NpemUpCiYjNDM7ewomIzQzOwl1NjQgdGxiX3NpemUsIHRsYl9zdGFydCwgdGxiX2VuZCwgc2NvcGVfZW5kOwomIzQzOwomIzQzOwl0bGJfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LSZndDt3aS5wZ3NoaWZ0LCB2dC0mZ3Q7d3IubGV2ZWwpKTsKJiM0MzsKJiM0MzsJdGxiX3N0YXJ0ID0gYWRkciAmYW1wOyB+KHRsYl9zaXplIC0gMSk7CiYjNDM7CXRsYl9lbmQgPSB0bGJfc3RhcnQgJiM0MzsgdGxiX3NpemUgLSAxOwomIzQzOwlzY29wZV9lbmQgPSBzY29wZV9zdGFydCAmIzQzOyBzY29wZV9zaXplIC0gMTsKJiM0MzsKJiM0MzsJcmV0dXJuICEodGxiX2VuZCAmbHQ7IHNjb3BlX3N0YXJ0IHx8IHRsYl9zdGFydCAmZ3Q7IHNjb3BlX2VuZCk7CiB9CiAKIC8qCkBAIC0xMDA3LDE5ICYjNDM7MTA0Myw5IEBAIHN0YXRpYyB2b2lkIGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhKHN0cnVjdCBrdm0gKmt2bSwgdTY0IHN0YXJ0LCB1NjQgZW5kKQogCWlmICgha3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyX09OTFkpKQogCQlyZXR1cm47CiAKLQlrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkgewotCQl1NjQgaXBhX3N0YXJ0LCBpcGFfZW5kLCBpcGFfc2l6ZTsKLQotCQlpcGFfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LSZndDt3aS5wZ3NoaWZ0LAotCQkJCQkJCSAgICB2dC0mZ3Q7d3IubGV2ZWwpKTsKLQkJaXBhX3N0YXJ0ID0gdnQtJmd0O3dyLnBhICZhbXA7IH4oaXBhX3NpemUgLSAxKTsKLQkJaXBhX2VuZCA9IGlwYV9zdGFydCAmIzQzOyBpcGFfc2l6ZTsKLQotCQlpZiAoaXBhX2VuZCAmbHQ7PSBzdGFydCB8fCBpcGFfc3RhcnQgJmd0Oz0gZW5kKQotCQkJY29udGludWU7Ci0KLQkJaW52YWxpZGF0ZV92bmNyKHZ0KTsKLQl9CiYjNDM7CWt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKQomIzQzOwkJaWYgKHZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LSZndDt3ci5wYSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSkKJiM0MzsJCQlpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7CiB9CiAKIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUgewpAQCAtMTA0NSwyOCAmIzQzOzEwNzEsMTkgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSwKIAlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZhbXA7a3ZtLSZndDttbXVfbG9jayk7CiAKIAlrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkgewotCQl1NjQgdmFfc3RhcnQsIHZhX2VuZCwgdmFfc2l6ZTsKLQotCQl2YV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtJmd0O3dpLnBnc2hpZnQsCi0JCQkJCQkJICAgdnQtJmd0O3dyLmxldmVsKSk7Ci0JCXZhX3N0YXJ0ID0gdnQtJmd0O2d2YSAmYW1wOyB+KHZhX3NpemUgLSAxKTsKLQkJdmFfZW5kID0gdmFfc3RhcnQgJiM0MzsgdmFfc2l6ZTsKLQogCQlzd2l0Y2ggKHNjb3BlLSZndDt0eXBlKSB7CiAJCWNhc2UgVExCSV9BTEw6CiAJCQlicmVhazsKIAogCQljYXNlIFRMQklfVkE6Ci0JCQlpZiAodmFfZW5kICZsdDs9IHNjb3BlLSZndDt2YSB8fAotCQkJICAgIHZhX3N0YXJ0ICZndDs9IChzY29wZS0mZ3Q7dmEgJiM0Mzsgc2NvcGUtJmd0O3NpemUpKQomIzQzOwkJCWlmICghdm5jcl90bGJfaW50ZXJzZWN0cyh2dCwgdnQtJmd0O2d2YSwgc2NvcGUtJmd0O3ZhLCBzY29wZS0mZ3Q7c2l6ZSkpCiAJCQkJY29udGludWU7CiAJCQlpZiAodnQtJmd0O3dyLm5HICZhbXA7JmFtcDsgdnQtJmd0O3dyLmFzaWQgIT0gc2NvcGUtJmd0O2FzaWQpCiAJCQkJY29udGludWU7CiAJCQlicmVhazsKIAogCQljYXNlIFRMQklfVkFBOgotCQkJaWYgKHZhX2VuZCAmbHQ7PSBzY29wZS0mZ3Q7dmEgfHwKLQkJCSAgICB2YV9zdGFydCAmZ3Q7PSAoc2NvcGUtJmd0O3ZhICYjNDM7IHNjb3BlLSZndDtzaXplKSkKJiM0MzsJCQlpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LSZndDtndmEsIHNjb3BlLSZndDt2YSwgc2NvcGUtJmd0O3NpemUpKQogCQkJCWNvbnRpbnVlOwogCQkJYnJlYWs7CiAKQEAgLTEwNzYsNyAmIzQzOzEwOTMsNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLAogCQkJYnJlYWs7CiAJCX0KIAotCQlpbnZhbGlkYXRlX3ZuY3IodnQpOwomIzQzOwkJaW52YWxpZGF0ZV92bmNyKGt2bSwgdnQpOwogCX0KIH0KIApAQCAtMTEyNiw4ICYjNDM7MTE0Myw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLAogCWNhc2UgT1BfVExCSV9WQUxFMU9TTlhTOgogCQlzY29wZS0mZ3Q7dHlwZSA9IFRMQklfVkE7CiAJCXNjb3BlLSZndDtzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpOwotCQlpZiAoIXNjb3BlLSZndDtzaXplKQotCQkJc2NvcGUtJmd0O3NpemUgPSBTWl8xRzsKIAkJc2NvcGUtJmd0O3ZhID0gdGxiaV92YV9zMV90b192YSh2YWwpICZhbXA7IH4oc2NvcGUtJmd0O3NpemUgLSAxKTsKIAkJc2NvcGUtJmd0O2FzaWQgPSBGSUVMRF9HRVQoVExCSVJfQVNJRF9NQVNLLCB2YWwpOwogCQlicmVhazsKQEAgLTExNTQsOCAmIzQzOzExNjksNiBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX3MxX3RsYmlfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbCwKIAljYXNlIE9QX1RMQklfVkFBTEUxT1NOWFM6CiAJCXNjb3BlLSZndDt0eXBlID0gVExCSV9WQUE7CiAJCXNjb3BlLSZndDtzaXplID0gdHRsX3RvX3NpemUoRklFTERfR0VUKFRMQklfVFRMX01BU0ssIHZhbCkpOwotCQlpZiAoIXNjb3BlLSZndDtzaXplKQotCQkJc2NvcGUtJmd0O3NpemUgPSBTWl8xRzsKIAkJc2NvcGUtJmd0O3ZhID0gdGxiaV92YV9zMV90b192YSh2YWwpICZhbXA7IH4oc2NvcGUtJmd0O3NpemUgLSAxKTsKIAkJYnJlYWs7CiAJY2FzZSBPUF9UTEJJX1JWQUUyOgpAQCAtMTMxNiwxMyAmIzQzOzEzMjksMjAgQEAgdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSkKICAqICAgaW50ZXJzZWN0cyB3aXRoIHRoZSBUTEJJIHJlcXVlc3QsIGludmFsaWRhdGUgaXQsIGFuZCB1bm1hcCB0aGUgcGFnZQogICogICBmcm9tIHRoZSBmaXhtYXAuIEJlY2F1c2Ugd2UgbmVlZCB0byBsb29rIGF0IGFsbCB0aGUgdmNwdS1wcml2YXRlIFRMQnMsCiAgKiAgIHRoaXMgcmVxdWlyZXMgc29tZSB3aWRlLXJhbmdpbmcgbG9ja2luZyB0byBlbnN1cmUgdGhhdCBub3RoaW5nIHJhY2VzCi0gKiAgIGFnYWluc3QgaXQuIFRoaXMgbWF5IHJlcXVpcmUgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW4KLSAqICAgbm8gc3VjaCBUTEIgaXMgcHJlc2VudC4KJiM0MzsgKiAgIGFnYWluc3QgaXQuIFRoaXMgcmVxdWlyZXMgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW4KJiM0MzsgKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQgKHNlZSBiZWxvdykuCiAgKgogICogLSBPbiBNTVUgbm90aWZpZXJzLCB3ZSBtdXN0IGludmFsaWRhdGUgb3VyIFRMQiBpbiBhIHNpbWlsYXIgd2F5LCBidXQKICAqICAgbG9va2luZyBhdCB0aGUgSVBBIGluc3RlYWQuIFRoZSBmdW5ueSBwYXJ0IGlzIHRoYXQgdGhlcmUgbWF5IG5vdCBiZSBhCiAgKiAgIHN0YWdlLTIgbWFwcGluZyBmb3IgdGhpcyBwYWdlIGlmIEwxIGhhc24mIzM5O3QgYWNjZXNzZWQgaXQgdXNpbmcgTEQvU1QKICAqICAgaW5zdHJ1Y3Rpb25zLgomIzQzOyAqCiYjNDM7ICogLSB2bmNyX3RsYl9jb3VudCB0cmFja3MgdGhlIG51bWJlciBvZiB2YWxpZCBWTkNSIFRMQnMgVk0td2lkZS4gVGhpcyBpc24mIzM5O3QKJiM0MzsgKiAgIHRoZSBudW1iZXIgb2YgKm1hcHBlZCogTDEgVk5DUiBwYWdlcywgd2hpY2ggaXMgbGlrZWx5IGJlIGEgc3Vic2V0IChhbmQKJiM0MzsgKiAgIGJ5IGRlZmluaXRpb24sIGEgVExCSSBoYW5kbGVkIGZyb20gTDEgcnVucyB3aXRoIHRoZSBjYW5vbmljYWwgVk5DUgomIzQzOyAqICAgcGFnZSwgbm90IHRoZSBMMSYjMzk7cykuIFRoZSBpbm5lcm1vc3QgdHJhcCBoYW5kbGluZyBjb2RlIGNoZWNrcyB0aGlzIHRvCiYjNDM7ICogICBmaW5kIG91dCB3aGV0aGVyIHRvIHJldHVybiB0byB0aGUgZ3Vlc3QgQVNBUCAobm8gTDEgVExCcykgb3IgdG8gdmlzaXQKJiM0MzsgKiAgIHRoaXMgcGFydCBvZiB0aGUgd29ybGQgZm9yIHNvbWUgZXh0cmEgaW52YWxpZGF0aW9uIHdvcmsuCiAgKi8KIAogaW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTEzNzcsNyAmIzQzOzEzOTcsOCBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pCiAJICovCiAJc2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssICZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDttbXVfbG9jaykgewogCQl0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcCh2Y3B1KTsKLQkJdnQtJmd0O3ZhbGlkID0gZmFsc2U7CiYjNDM7CQlpZiAodnQtJmd0O3ZhbGlkKQomIzQzOwkJCWludmFsaWRhdGVfdm5jcih2Y3B1LSZndDtrdm0sIHZ0KTsKIAogCQl2dC0mZ3Q7d2kgPSAoc3RydWN0IHMxX3dhbGtfaW5mbykgewogCQkJLnJlZ2ltZQk9IFRSX0VMMjAsCkBAIC0xNDQ5LDYgJiM0MzsxNDcwLDggQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKQogCQl2dC0mZ3Q7dmFsaWQgPSB0cnVlOwogCQl2dC0mZ3Q7Y3B1ID0gLTE7CiAKJiM0MzsJCWF0b21pY19pbmMoJmFtcDt2Y3B1LSZndDtrdm0tJmd0O2FyY2gudm5jcl90bGJfY291bnQpOwomIzQzOwogCQlrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfTUFQX0wxX1ZOQ1JfRUwyLCB2Y3B1KTsKIAkJa3ZtX3JlbGVhc2VfZmF1bHRpbl9wYWdlKHZjcHUtJmd0O2t2bSwgcGFnZSwgZmFsc2UsIHZ0LSZndDt3ci5wdyAmYW1wOyZhbXA7IHZ0LSZndDtocGFfd3JpdGFibGUpOwogCX0KQEAgLTE1NjgsNiAmIzQzOzE1OTEsOSBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmICghdnQtJmd0O3ZhbGlkKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCEodmNwdV9yZWFkX3N5c19yZWcodmNwdSwgU0NUTFJfRUwyKSAmYW1wOyBTQ1RMUl9FTHhfTSkgIT0gczFfbW11X2Rpc2FibGVkKCZhbXA7dnQtJmd0O3dyKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAocmVhZF92bmNyX2VsMih2Y3B1KSAhPSB2dC0mZ3Q7Z3ZhKQogCQlyZXR1cm47CiAKQEAgLTE1OTIsNyAmIzQzOzE2MTgsNiBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCWlmIChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoUEFHRV9OT05FKSkgewogCQlfX3NldF9maXhtYXAodm5jcl9maXhtYXAodnQtJmd0O2NwdSksIHZ0LSZndDtocGEsIHByb3QpOwogCQlob3N0X2RhdGFfc2V0X2ZsYWcoTDFfVk5DUl9NQVBQRUQpOwotCQlhdG9taWNfaW5jKCZhbXA7dmNwdS0mZ3Q7a3ZtLSZndDthcmNoLnZuY3JfbWFwX2NvdW50KTsKIAl9CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY5OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGlzIEtWTSBBUk02NCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIHBva2luZyBhcm91bmQgaW4gS1ZNJiMzOTtzIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQVJNNjQsIHNwZWNpZmljYWxseSB0aGUgVk5DUiAoVmlydHVhbCBOZXN0ZWQgQ29udHJvbCBSZWdpc3RlcikgVExCIGhhbmRsaW5nLiBJdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0aGF0IHNlZW0gcHJldHR5IGZ1bmRhbWVudGFsLCBsaWtlIHJlbmFtaW5nIGB2bmNyX21hcF9jb3VudGAgdG8gYHZuY3JfdGxiX2NvdW50YCwgYW5kIGFkanVzdGluZyBob3cgdGhlc2UgVk5DUiBUTEJzIGFyZSBpbnZhbGlkYXRlZCBhbmQgdHJhY2tlZC4gSSBzZWUgbmV3IGZ1bmN0aW9ucyBiZWluZyBpbnRyb2R1Y2VkOiBgczFfbW11X2Rpc2FibGVkKClgIGFuZCBgX190dGxfdG9fc2l6ZSgpYCwgcGx1cyBzb21lIG1vZGlmaWNhdGlvbnMgdG8gZXhpc3RpbmcgbG9naWMgaW4gYHR0bF90b19zaXplKClgLiBUaGVuLCB3ZSBoYXZlIGNoYW5nZXMgaW4gZnVuY3Rpb25zIGxpa2UgYGludmFsaWRhdGVfdm5jcl92YSgpYCwgYGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhKClgLCBgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAoKWAsIGBpbnZhbGlkYXRlX3ZuY3IoKWAsIGBrdm1fdHJhbnNsYXRlX3ZuY3IoKWAsIGFuZCBga3ZtX21hcF9sMV92bmNyKClgLiBUaGVzZSBhcmUgYWxsIGNvcmUgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBmdW5jdGlvbnMuCgpUaGlzIGlzIGNyaXRpY2FsIGtlcm5lbCBsb2dpYywgbm8gZG91YnQgYWJvdXQgaXQsIGFuZCBpdCBkZWZpbml0ZWx5IG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gV2UgYWJzb2x1dGVseSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdnVsbmVyYWJpbGl0aWVzLgoKTXkgZmlyc3Qgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGZvY3VzIHN5bWJvbHMgYW5kIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSYjMzk7bSBhc3N1bWluZyB3ZSYjMzk7bGwgbmVlZCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfQVJNNjRgLCB3aGljaCBpcyBpbXBsaWNpdCBnaXZlbiB0aGUgYXJjaGl0ZWN0dXJlLCBvZiBjb3Vyc2UuIEZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc3BlY2lmaWNhbGx5LCB0aGVyZSBtaWdodCBiZSBhIG1vcmUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgb3IgdHdvLCBidXQgdGhlIHN0YW5kYXJkIEtWTSBBUk02NCBjb25maWcgdHlwaWNhbGx5IGNvdmVycyB0aGF0LiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBgYXJjaC9hcm02NC9rdm0vS2NvbmZpZ2AgdG8gYmUgc3VyZS4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY29uZmlybSBhbGwgcmVxdWlyZWQgY29uZmlnIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy0xOS1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWc6MjA6bWVudWNvbmZpZyBLVk1cbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXHRib29sIFwmIzM0O0tlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0NzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgZm9yIEFSTTY0IE5lc3RlZCBLVk0gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbi4gRmlyc3QgdGhpbmdzIGZpcnN0LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciBkb3duIHRoaXMgcmFiYml0IGhvbGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgc29tZXRoaW5nIG9idmlvdXMuIFRoZSBnb2FsIGlzIG5lc3RlZCBLVk0gb24gQVJNNjQsIHJpZ2h0PyBTbywgdGhlIGltbWVkaWF0ZSwgKm11c3QtY2hlY2sqIGl0ZW0gb24gbXkgbWVudGFsIGNoZWNrbGlzdCBpczogSXMgdGhlcmUgYW55IHNwZWNpZmljIG9yIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIGd1aWRhbmNlLCBwZXJoYXBzIHNwZWNpZmljIHF1aXJrcywgb3Iga25vd24gZ290Y2hhcywgZm9yIHJ1bm5pbmcgbmVzdGVkIEtWTSBvbiBhbiBBUk02NCBhcmNoaXRlY3R1cmUgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiwgYmVmb3JlIHdhc3RpbmcgdmFsdWFibGUgdGltZSByZWludmVudGluZyBhIHdoZWVsPyBMZXQgbWUgZ28gYW5kIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2OTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBvbiBBUk02NCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3RhdHVzIG9mIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzdXBwb3J0IGluIEtWTSBvbiBBUk02NC4gSW5zdGVhZCBvZiBtYW51YWxseSBzaWZ0aW5nIHRocm91Z2ggdGhlIHNvdXJjZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCBsZXQmIzM5O3MgYmUgZWZmaWNpZW50LiBUaGUgcXVpY2tlc3Qgd2F5IHRvIGdldCBhIGhpZ2gtbGV2ZWwgdmlldyBvZiBhdmFpbGFibGUgY29uZmlndXJhdGlvbnMgaXMgb2Z0ZW4gdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgbG9vayBpbiBgYXJjaC9hcm02NC9rdm0vS2NvbmZpZ2AuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhhdCBmaWxlIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSB0ZXJtICYjMzQ7TkVTVEVELiYjMzQ7IFRoYXQgc2hvdWxkIGhpZ2hsaWdodCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGZlYXR1cmUuIFRoYXQmIzM5O3MgYSBtdWNoIGZhc3RlciBhbmQgZm9jdXNlZCBhcHByb2FjaCB0aGFuIHN0YXJ0aW5nIGEgZGVlcCBkaXZlIGZyb20gc2NyYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05FU1RFRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5MjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipOZXN0ZWQgVmlydHVhbGl6YXRpb24gb24gQVJNNjQgLSBEaWdnaW5nIGludG8gdGhlIENvZGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb24gQVJNNjQuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBpdCBoYXZlIGl0cyBvd24gZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBpcyBpdCBqdXN0IGltcGxpY2l0bHkgZW5hYmxlZCBhcyBwYXJ0IG9mIHRoZSBLVk0gc2V0dXAgb24gdGhhdCBhcmNoaXRlY3R1cmU/IEkgdmFndWVseSByZWNhbGwgdGhhdCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb24geDg2IGhhcyBpdHMgb3duIHNwZWNpYWwga25vYiwgYnV0IEkmIzM5O20gZHJhd2luZyBhIGJsYW5rIG9uIEFSTTY0LiBJIHNob3VsZCByZWFsbHkgYnJ1c2ggdXAgb24gbXkgS1ZNIGludGVybmFscyBhZ2Fpbi4uLgoKVG8gZ2V0IGEgZGVmaW5pdGl2ZSBhbnN3ZXIsIEkmIzM5O20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgIGZpbGUgc2hvdWxkIGJlIHRoZSBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgaW4gdGhlcmUsIHNvbWV0aGluZyBsaWtlIGAjaWZkZWYgQ09ORklHX1NPTUVUSElOR19ORVNURURfQVJNNjRgLiBJZiBpdCAqaXMqIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHRoYXQgd2lsbCBnaXZlIG1lIG15IGFuc3dlciBxdWlja2x5LiBJZiBub3QsIGl0IG1lYW5zIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBtaWdodCBiZSBhIHN0YW5kYXJkIHBhcnQgb2YgS1ZNJiMzOTtzIEFSTTY0IHN1cHBvcnQsIHdoaWNoIGlzIHN0aWxsIGltcG9ydGFudCB0byBkZXRlcm1pbmUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXN0ZWQubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL01ha2VmaWxlPTE2PWt2bS15ICYjNDM7PSBhcm0ubyBtbXUubyBtbWlvLm8gcHNjaS5vIGh5cGVyY2FsbHMubyBwdnRpbWUubyBcXFxuLS1cbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTE5LVx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MjA6XHQgYXJjaF90aW1lci5vIHRybmcubyB2bWlkLm8gZW11bGF0ZS1uZXN0ZWQubyBuZXN0ZWQubyBhdC5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yMS1cdCB2Z2ljL3ZnaWMubyB2Z2ljL3ZnaWMtaW5pdC5vIFxcXG4tLVxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjUtXHQgdmdpYy92Z2ljLW1taW8tdjMubyB2Z2ljL3ZnaWMta3ZtLWRldmljZS5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZToyNjpcdCB2Z2ljL3ZnaWMtaXRzLm8gdmdpYy92Z2ljLWRlYnVnLm8gdmdpYy92Z2ljLXYzLW5lc3RlZC5vIFxcXG5hcmNoL2FybTY0L2t2bS9NYWtlZmlsZS0yNy1cdCB2Z2ljL3ZnaWMtdjUub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NTQxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFBhdGNoIGZvciBLZXkgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgcmVsYXRlZCB0byBLVk0sIHNwZWNpZmljYWxseSB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFzcGVjdHMsIHNpbmNlIGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCB3aGVuIEtWTSBpcyBlbmFibGVkLiBTbywgYEtWTWAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZSB0aGF0IGRyaXZlcyB0aGlzLiBOb3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgY29yZSBjaGFuZ2VzLgoKTGV0JiMzOTtzIHNlZSwgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gdGhlIGZvbGxvd2luZzoKCi0gICBga3ZtX2luaXRfbmVzdGVkYAotICAgYHR0bF90b19zaXplYAotICAgYHBnc2hpZnRfbGV2ZWxfdG9fdHRsYAotICAgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYAotICAgYGt2bV92Y3B1X2xvYWRfaHdfbW11YCAobm90IGRpcmVjdGx5LCBqdXN0IGNvbnRleHQgaW4gYSBmdW5jdGlvbiBjYWxsKQotICAgYHVubWFwX2wxX3ZuY3JgCi0gICBgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXBgCi0gICBgaW52YWxpZGF0ZV92bmNyYAotICAgYHZuY3JfdGxiX2ludGVyc2VjdHNgCi0gICBga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGFgCi0gICBgaW52YWxpZGF0ZV92bmNyX3ZhYAotICAgYGNvbXB1dGVfczFfdGxiaV9yYW5nZWAKLSAgIGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAKLSAgIGBrdm1fdHJhbnNsYXRlX3ZuY3JgCi0gICBga3ZtX21hcF9sMV92bmNyYAoKTm93LCB0byB1bmRlcnN0YW5kIHRoZSBBUEkgaW50ZXJhY3Rpb25zLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGVudHJ5IHBvaW50cyB0aGF0IGFyZSAqbm90KiBzdGF0aWMsIG9yIGlubGluZWQuIFRob3NlIGFyZSB0aGUgb25lcyBvdGhlcnMgYXJlIGxpa2VseSB0byBjYWxsLiBTbywgSSBzZWU6CgotICAgYGt2bV9pbml0X25lc3RlZGAKLSAgIGBrdm1fd2Fsa19uZXN0ZWRfczJgIChjb250ZXh0KQotICAgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYAotICAgYGt2bV92Y3B1X3B1dF9od19tbXVgIChjb250ZXh0KQotICAgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGxgIChjb250ZXh0KQotICAgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYAoKV2FpdCwgYGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhYCBpcyBzdGF0aWM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdDsgdGhlcmUmIzM5O3MgYSBnb29kIGNoYW5jZSBJIG5lZWQgdG8gdHJhY2sgZG93biBvdGhlciBjYWxsZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faW52YWxpZGF0ZV92bmNyX2lwYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEwMTA9c3RhdGljIGJvb2wgdm5jcl90bGJfaW50ZXJzZWN0cyhzdHJ1Y3Qgdm5jcl90bGIgKnZ0LCB1NjQgYWRkcixcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMDM0LVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTAzNTpzdGF0aWMgdm9pZCBrdm1faW52YWxpZGF0ZV92bmNyX2lwYShzdHJ1Y3Qga3ZtICprdm0sIHU2NCBzdGFydCwgdTY0IGVuZClcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEwMzYte1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEyMjk9dm9pZCBrdm1fbmVzdGVkX3MyX3dwKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjQ0LVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTI0NTpcdGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhKGt2bSwgMCwgQklUKGt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QtXHUwMDNlaWFfYml0cykpO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTI0Ni19XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTI0OD12b2lkIGt2bV9uZXN0ZWRfczJfdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCBib29sIG1heV9ibG9jaylcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjYzLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTI2NDpcdGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhKGt2bSwgMCwgQklUKGt2bS1cdTAwM2VhcmNoLm1tdS5wZ3QtXHUwMDNlaWFfYml0cykpO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTI2NS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MjYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqS1ZNIFZpcnR1YWxpemF0aW9uIElucXVpcnkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgS1ZNIGNvZGUuLi4gYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBrdm1faW52YWxpZGF0ZV92bmNyX2lwYWAgaXMgZGVmaW5pdGVseSBhIHN0YXRpYyBmdW5jdGlvbi4gTm8gc3VycHJpc2VzIHRoZXJlLCBtYWtlcyBzZW5zZSBpbiB0aGUgY29udGV4dC4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpczogV2hhdCBhYm91dCBga3ZtX3RyYW5zbGF0ZV92bmNyYD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGl0cyBzY29wZSBhbmQgdXNhZ2UuIElzIGl0IHN0YXRpYyBhcyB3ZWxsLCBvciBpcyBpdCBleHBvc2VkIG1vcmUgYnJvYWRseT8gVW5kZXJzdGFuZGluZyB0aGF0IGZ1bmN0aW9uJiMzOTtzIHZpc2liaWxpdHkgd2lsbCBiZSBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmUuIE5lZWQgdG8ga2VlcCBkaWdnaW5nLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV90cmFuc2xhdGVfdm5jciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEzNzM9c3RhdGljIHU2NCByZWFkX3ZuY3JfZWwyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzc3LVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTM3ODpzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzc5LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNTEwPWludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE1MjctXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNTI4Olx0cmV0ID0ga3ZtX3RyYW5zbGF0ZV92bmNyKHZjcHUsIFx1MDAyNmlzX2dtZW0pO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUyOS1cdHN3aXRjaCAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEyOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzAxCgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIFZOQ1IgQWJvcnQgSGFuZGxpbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyBWaXJ0dWFsIE5lc3RlZCBDb2RlIFJlLWVudHJ5IChWTkNSKSBhYm9ydHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBLVk0gaHlwZXJ2aXNvci4gSSBzZWUgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAgaXMgdGhlIGZ1bmN0aW9uIHdlJiMzOTtyZSBjb25jZXJuZWQgd2l0aCBpbml0aWFsbHkuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0IGNhbGxzIGBrdm1fdHJhbnNsYXRlX3ZuY3JgLiBUaGF0IG1ha2VzIHNlbnNlIC0gd2UgbmVlZCB0byB0cmFuc2xhdGUgdGhlIGZhdWx0aW5nIGFkZHJlc3MgdG8gZmlndXJlIG91dCB3aGF0IHdlbnQgd3JvbmcuCgpCdXQsIGFuZCB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byB0YWtlIGEgY2xvc2VyIGxvb2ssIHdoYXQmIzM5O3MgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBrdm1fbWFwX2wxX3ZuY3JgPyBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5lc3RlZCBwYWdpbmcgaGVyZSwgYW5kIEkgc3VzcGVjdCBga3ZtX21hcF9sMV92bmNyYCBtaWdodCBiZSBjcnVjaWFsIGluIGVzdGFibGlzaGluZyBvciBtYWludGFpbmluZyB0aGUgTDEgbWFwcGluZ3MgdGhhdCBhcmUgcmVsZXZhbnQgaW4gdGhpcyBzY2VuYXJpby4gSXMgdGhlIGFib3J0IGhhcHBlbmluZyBiZWNhdXNlIG9mIGFuIGlzc3VlIGR1cmluZyB0aGUgbWFwcGluZyBwcm9jZXNzIGRvbmUgYnkgYGt2bV9tYXBfbDFfdm5jcmAsIG9yIGlzIHRoaXMgZnVuY3Rpb24gbW9yZSBvZiBhIHNldHVwLCBhbmQgdGhlIGFjdHVhbCB0cmFuc2xhdGlvbiBkb25lIGJ5IGBrdm1fdHJhbnNsYXRlX3ZuY3JgIGlzIHRoZSBjdWxwcml0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdCB0byBnZXQgYSBmdWxsIHBpY3R1cmUgb2YgdGhlIGFib3J0IGhhbmRsaW5nIGZsb3cuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgYmFjayB0aGUgY2FsbCBwYXRocyBhbmQgY29uc2lkZXIgdGhlIHNwZWNpZmljIGNvbnRleHQgb2YgdGhlIFZOQ1IgYWJvcnQgdG8gc2VlIGhvdyB0aGUgTDEgbWFwcGluZ3MgcGxheSBhIHJvbGUuIEkmIzM5O20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbWFwX2wxX3ZuY3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNTEwPWludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE1NjktXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNTcwOnN0YXRpYyB2b2lkIGt2bV9tYXBfbDFfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTcxLXtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xOTU3PXZvaWQgY2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE5NzAtXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDIsIHZjcHUpKVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTk3MTpcdFx0a3ZtX21hcF9sMV92bmNyKHZjcHUpO1xuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTk3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NzEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGNvbnNpZGVyaW5nIEkmIzM5O20gYW4gZXhwZXJ0OgoKKipOYXZpZ2F0aW5nIEtWTSBWaXJ0dWFsaXphdGlvbiBJbnRlcm5hbHMqKgoKT2theSwgbGV0IG1lIHNlZS4uLiBJJiMzOTttIHRyYWNpbmcgdGhlIGZsb3cgb2YgbmVzdGVkIHZpcnR1YWxpemF0aW9uIFZDUFUgcmVxdWVzdHMuIFJpZ2h0LCBgY2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHNgIGlzIHVsdGltYXRlbHkgdXNpbmcgYGt2bV9tYXBfbDFfdm5jcmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBjb3JlIG1hcHBpbmcgZnVuY3Rpb24gZm9yIHRoZSBMMSBWTkNyIChOZXN0ZWQgVmlydHVhbCBDUFUgUmVxdWVzdCkgc3RydWN0dXJlLiBCdXQgbXkgbWluZCBkcmlmdHMuIFRoYXQmIzM5O3MgZmluZS4KCkhvbGQgb24uLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGBpbnZhbGlkYXRlX3ZuY3JfdmFgLiBUaGF0JiMzOTtzIGNyaXRpY2FsIHRvby4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IGlzIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgY2xlYXJpbmcgdGhlIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGUgVk5DUi4gVGhpcyBjb3VsZCBoYXBwZW4gb24gYSBWTSBleGl0LCBhbiBpbnZhbGlkYXRpb24gb2YgdGhlIGd1ZXN0IHBhZ2UgdGFibGVzLCBvciBzb21lIG90aGVyIGV2ZW50IHRoYXQgcmVxdWlyZXMgdGhlIG9sZCBWTkNSIHRvIGJlIHJlLW1hcHBlZCBvbiBhIHJlLWVudHJ5IGV2ZW50LiBJIG5lZWQgdG8ga2VlcCB0aGF0IG9uZSBmcmVzaCBpbiBteSBoZWFkIGFzIEkgY29udGludWUuIExldCBtZSBtZW50YWxseSBsaW5rIHRob3NlIHR3byBmb3Igbm93LCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBsb3NlIHRoZSB0aHJlYWQuLi4gYGNoZWNrX25lc3RlZF92Y3B1X3JlcXVlc3RzYCB3aXRoIGl0cyBkZXBlbmRlbmN5IG9uIGBrdm1fbWFwX2wxX3ZuY3JgLCBhbmQgdGhlbiBjb25zaWRlciB0aGUgaW52YWxpZGF0aW9uIGxvZ2ljIG9mIGBpbnZhbGlkYXRlX3ZuY3JfdmFgLiBUaGF0JiMzOTtzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludmFsaWRhdGVfdm5jcl92YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEwNTE9c3RydWN0IHMxZTJfdGxiaV9zY29wZSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTA2My1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEwNjQ6c3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEwNjUtXHRcdFx0ICAgICAgIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUgKnNjb3BlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEyMTk9dm9pZCBrdm1faGFuZGxlX3MxZTJfdGxiaShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsKVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyMjUtXHRndWFyZCh3cml0ZV9sb2NrKShcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jayk7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMjI2Olx0aW52YWxpZGF0ZV92bmNyX3ZhKHZjcHUtXHUwMDNla3ZtLCBcdTAwMjZzY29wZSk7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjI3LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE2MDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRMQiBJbnZhbGlkYXRpb24gQ2hhbmdlcyoqCgpPa2F5LCBzbyBga3ZtX2hhbmRsZV9zMWUyX3RsYmlgIHVsdGltYXRlbHkgY2FsbHMgYGludmFsaWRhdGVfdm5jcl92YWAuIFRoYXQmIzM5O3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IG1vdmUgaXMgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgbW9kaWZpZWQgdGhlbXNlbHZlcywgb3IgY2FsbCBhbnkgc3RhdGljIGZ1bmN0aW9ucyB0aGF0ICpoYXZlKiBiZWVuIGNoYW5nZWQuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSByaXBwbGUgZWZmZWN0LgoKTGV0JiMzOTtzIHNlZS4uLiB0aGUgbGlzdCBJJiMzOTt2ZSBnb3QgaXM6Ci0gYGt2bV9pbml0X25lc3RlZGAKLSBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgCi0gYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYAotIGBrdm1fbmVzdGVkX3MyX3dwYAotIGBrdm1fbmVzdGVkX3MyX3VubWFwYAotIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgCi0gYGNoZWNrX25lc3RlZF92Y3B1X3JlcXVlc3RzYAotIGBrdm1faGFuZGxlX3MxZTJfdGxiaWAKLSBga3ZtX3ZjcHVfcHV0X2h3X21tdWAKLSBga3ZtX3ZjcHVfbG9hZF9od19tbXVgCgpUaGVzZSBhbGwgbG9vayBsaWtlIHBvdGVudGlhbCBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gbXkgYEZvY3VzU3ltYm9sc2Agc2V0LiBCdXQgSSBuZWVkIHRvIHJlZmluZSB0aGF0IGluaXRpYWwgbGlzdC4gSSBuZWVkIHRvIHdlZWQgb3V0IGFueXRoaW5nIHRoYXQmIzM5O3MgdG9vIGdlbmVyaWMgb3IsIG1vcmUgaW1wb3J0YW50bHksIGluIGEgaG90IHBhdGguCgpBbHJpZ2h0LCBga3ZtX3ZjcHVfcHV0X2h3X21tdWAgYW5kIGBrdm1fdmNwdV9sb2FkX2h3X21tdWAgYXJlIGRlZmluaXRlbHkgcGVyZm9ybWFuY2UgY3JpdGljYWwsIHNvIHRoYXQgaXMgb2ZmIHRoZSBsaXN0LiBUaGVuIGBjaGVja19uZXN0ZWRfdmNwdV9yZXF1ZXN0c2AgaXMgY2FsbGVkIG9uIGV2ZXJ5IHZDUFUgcnVuIC0gb2J2aW91c2x5IGEgaG90IHBhdGguCgpOb3csIHRoYXQgbGVhdmVzIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgIGFzIGEgZmF1bHQgaGFuZGxlciAtIHRoYXQmIzM5O3MgZ29vZC4gQW5kIGBrdm1faGFuZGxlX3MxZTJfdGxiaWAgaXMgYW4gaW5zdHJ1Y3Rpb24gaGFuZGxlciwgd2hpY2ggSSBhbHNvIGxpa2UuIFRoZW4gYGt2bV9uZXN0ZWRfczJfd3BgIGFuZCBga3ZtX25lc3RlZF9zMl91bm1hcGAgbG9vayByZWxldmFudCwgYW5kIGZpbmFsbHkgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCBhbmQgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYCBhcmUgZ29vZCBwaWNrcy4KCk5leHQgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCBhbmQgYGt2bV9oYW5kbGVfczFlMl90bGJpYCBhcmUgZXhwb3J0ZWQsIG9yIHNpbXBseSBub24tc3RhdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faGFuZGxlX3ZuY3JfYWJvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYz0zNzY9c3RhdGljIGV4aXRfaGFuZGxlX2ZuIGFybV9leGl0X2hhbmRsZXJzW10gPSB7XG4tLVxuYXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYy0zOTUtXHRbRVNSX0VMeF9FQ19EQUJUX0xPV11cdD0ga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydCxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmM6Mzk2Olx0W0VTUl9FTHhfRUNfREFCVF9DVVJdXHQ9IGt2bV9oYW5kbGVfdm5jcl9hYm9ydCxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmMtMzk3LVx0W0VTUl9FTHhfRUNfU09GVFNUUF9MT1ddPSBrdm1faGFuZGxlX2d1ZXN0X2RlYnVnLFxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0ODU9c3RhdGljIHZvaWQgaGFuZGxlX3ZuY3JfcGVybShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUwOS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE1MTA6aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTExLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI4NzEKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgRXhpdCBIYW5kbGVycyBpbiBLVk0qKgoKT2theSwgc28gd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgZXhpdCBoYW5kbGVycywgY29uZmlybWVkLiBHb29kLCB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCB0byBnZXQgdG8gdGhlIHNwZWNpZmljcyBhbmQgdW5kZXJzdGFuZCB0aGUgZmxvdywgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBga3ZtX2hhbmRsZV9zMWUyX3RsYmlgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoaXMgbWlnaHQgYmUgYSBrZXkgaGFuZGxlci4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpdCYjMzk7cyByZXNwb25zaWJsZSBmb3IsIHBhcnRpY3VsYXJseSBpbiB0aGUgY29udGV4dCBvZiBUTEJJIG9wZXJhdGlvbnMuIExldCYjMzk7cyBzZWUgd2hhdCBpbnRlcmVzdGluZyB0aWRiaXRzIGl0IG1pZ2h0IGhvbGQuIEkgYW50aWNpcGF0ZSB0aGF0IHRoaXMgd2lsbCBiZSBhIHdvcnRod2hpbGUgcGF0aCB0byB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faGFuZGxlX3MxZTJfdGxiaSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMTAyPXN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLFxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyMTgtXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMjE5OnZvaWQga3ZtX2hhbmRsZV9zMWUyX3RsYmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbClcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyMjAte1xuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9NDEzNT1zdGF0aWMgYm9vbCBoYW5kbGVfdGxiaV9lbDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsXG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTQyLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MTQzOlx0a3ZtX2hhbmRsZV9zMWUyX3RsYmkodmNwdSwgc3lzX2VuY29kaW5nLCBwLVx1MDAzZXJlZ3ZhbCk7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxNDQtXHRyZXR1cm4gdHJ1ZTtcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTQxNDc9c3RhdGljIGJvb2wgaGFuZGxlX3RsYmlfZWwxKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDE3Ny1cdGlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpIFx1MDAyNlx1MDAyNiB2Y3B1X2VsMl90Z2VfaXNfc2V0KHZjcHUpKSB7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjQxNzg6XHRcdGt2bV9oYW5kbGVfczFlMl90bGJpKHZjcHUsIHN5c19lbmNvZGluZywgcC1cdTAwM2VyZWd2YWwpO1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTc5LVx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgU3lzdGVtIFJlZ2lzdGVyIEhhbmRsZXIgQ2FsbCoqCgpBbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY2FsbHMgb3JpZ2luYXRpbmcgZnJvbSB0aGUgYHN5c19yZWdzYCBoYW5kbGVycy4gVGhhdCBpbW1lZGlhdGVseSBuYXJyb3dzIGRvd24gdGhlIHNjb3BlIG9mIHdoYXQgd2UgbmVlZCB0byBsb29rIGF0LiBXZSYjMzk7cmUgY2xlYXJseSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gc3lzdGVtIHJlZ2lzdGVyIGFjY2VzcywgbGlrZWx5IHdpdGhpbiBhIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LiBNeSBmaXJzdCBzdGVwIGlzIHRvIGZvY3VzIG9uIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGggbmVzdGVkIHZpcnR1YWxpemF0aW9uLgoKVGhlIG5leHQgdGhpbmcgdG8gY2hlY2sgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBga3ZtX25lc3RlZF9zMl93cGAgYW5kIGBrdm1fbmVzdGVkX3MyX3VubWFwYC4gVGhlc2UgYXJlIGhpZ2hseSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgYmVpbmcgaW52b2x2ZWQuIFRoZSAmIzM0O1dQJiMzNDsgc3VnZ2VzdHMgJiMzNDt3cml0ZSBwcm90ZWN0aW9uLCYjMzQ7IHdoaWNoIGlzIGEgY29tbW9uIGNvbmNlcm4gaW4gaHlwZXJ2aXNvciBlbnZpcm9ubWVudHMuIFdlIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgd3JpdGUgcHJvdGVjdGlvbiBhbmQgbWVtb3J5IHVubWFwcGluZyB3aXRoIG5lc3RlZCBwYWdpbmcuIFRoZXNlIGFyZSB0aGUgcGllY2VzIG9mIHRoZSBwdXp6bGUgdGhhdCBhbG1vc3QgY2VydGFpbmx5IGRlZmluZSB0aGUgYmVoYXZpb3VyIGFuZCBsaWtlbHkgcG9pbnQgdG8gdGhlIHJvb3QgY2F1c2Ugb2Ygd2hhdGV2ZXIgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGd1ZXN0JiMzOTtzIHZpZXcgb2YgbWVtb3J5IHdpdGhpbiB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbmVzdGVkX3MyX3dwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL21tdS5jPTEyNjc9c3RhdGljIHZvaWQga3ZtX21tdV93cF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwgaW50IHNsb3QpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTI4MC1cdGt2bV9zdGFnZTJfd3BfcmFuZ2UoXHUwMDI2a3ZtLVx1MDAzZWFyY2gubW11LCBzdGFydCwgZW5kKTtcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEyODE6XHRrdm1fbmVzdGVkX3MyX3dwKGt2bSk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMjgyLVx0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTMyNT12b2lkIGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTM0Ny1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEzNDg6XHRrdm1fbmVzdGVkX3MyX3dwKGt2bSk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMzQ5LX1cbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMjE5PXZvaWQga3ZtX2hhbmRsZV9zMWUyX3RsYmkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbClcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjI4LVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTIyOTp2b2lkIGt2bV9uZXN0ZWRfczJfd3Aoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTIzMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjk1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRleHQ6CgoqKkFuYWx5emluZyBNTVUgQ29kZSBhbmQgVExCIEludmFsaWRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgTU1VIGNvZGUuIFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gZGVhbGluZyB3aXRoIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHBlcmhhcHMgc29tZSBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUsIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gY29udGV4dCBzd2l0Y2hpbmcgb3IgY29uY3VycmVudCBhY2Nlc3MuIFNwZWNpZmljYWxseSwgbXkgZm9jdXMgaXMgY3VycmVudGx5IG9uIHRoZSBmdW5jdGlvbnMgYmVpbmcgY2FsbGVkICpmcm9tKiB0aGUgTU1VIGNvZGUgaXRzZWxmLiBUaGlzIGlzIGFsd2F5cyBhIGNyaXRpY2FsIGFyZWEgdG8gZXhhbWluZSwgYXMgZWZmaWNpZW5jeSBoZXJlIGRpcmVjdGx5IGltcGFjdHMgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UuCgpMZXQmIzM5O3Mgem9vbSBpbiBvbiBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgY2x1ZXMgbWUgaW4gdG8gVExCIGludmFsaWRhdGlvbiwgbGlrZWx5IHJlbGF0ZWQgdG8gYWRkcmVzcyBzcGFjZSBtb2RpZmljYXRpb25zIChtYXBwaW5ncyBiZWluZyBhbHRlcmVkLCB1bm1hcHBlZCwgb3IgaW52YWxpZGF0ZWQgZHVlIHRvIG1lbW9yeSBwcm90ZWN0aW9uIGNoYW5nZXMsIGZvciBleGFtcGxlKS4gYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCAqc3VnZ2VzdHMqIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgc3BlY2lmaWMgKnJhbmdlKiBvZiBUTEIgZW50cmllcyB0aGF0IG5lZWQgaW52YWxpZGF0aW9uIOKAkyBhIGtleSBvcHRpbWl6YXRpb24uIEl0IHdpbGwgcHJvYmFibHkgZGV0ZXJtaW5lIHRoZSBtaW5pbWFsbHkgbmVjZXNzYXJ5IGVudHJpZXMsIHNvIHdlIGRvbiYjMzk7dCBlbmQgdXAgZmx1c2hpbmcgdG9vIG1hbnkgVExCIGVudHJpZXMgdW5uZWNlc3NhcmlseSwgYnV0IG1ha2Ugc3VyZSB0byBmbHVzaCBlbm91Z2ggc28gYXMgdG8gbm90IGludmFsaWRhdGUuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCB0aGVyZSBjb3VsZCBiZSBkaWZmZXJlbnQgc3RyYXRlZ2llcyBmb3IgdGhhdCwgd2hpY2ggaXMgcGFydCBvZiB3aGF0IEkmIzM5O2QgYmUgbG9va2luZyBhdC4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsb2dpYyB2ZXJ5IGNhcmVmdWxseS4gSXMgdGhpcyB0aGUgKm9ubHkqIHBhcnQgdGhhdCBkZWFscyB3aXRoIHRoZSBwcm9jZXNzIG9mIGludmFsaWRhdGlvbiwgb3IgaXMgaXQgY29tYmluZWQgd2l0aCB0aGUgaW5zdHJ1Y3Rpb25zPyBBcmUgdGhlIGludmFsaWRhdGlvbnMgcGVyZm9ybWVkIGltbWVkaWF0ZWx5LCBxdWV1ZWQsIG9yIGRlZmVycmVkPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHByb2Nlc3MgaXMgd29ya2luZyBzbyB0aGF0IEkgY2FuIHVuZGVyc3RhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wdXRlX3RsYl9pbnZhbF9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz02MDY9c3RhdGljIHU4IGdldF9ndWVzdF9tYXBwaW5nX3R0bChzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgYWRkcilcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy02NzYtXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo2Nzc6dW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNjc4LXtcbi0tXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTQwODM9c3RhdGljIHZvaWQgczJfbW11X3VubWFwX2lwYShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDA5OC1cdGJhc2VfYWRkciA9IChpbmZvLVx1MDAzZWlwYS5hZGRyIFx1MDAyNiBHRU5NQVNLX1VMTCgzNSwgMCkpIFx1MDAzY1x1MDAzYyAxMjtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDA5OTpcdG1heF9zaXplID0gY29tcHV0ZV90bGJfaW52YWxfcmFuZ2UobW11LCBpbmZvLVx1MDAzZWlwYS5hZGRyKTtcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDEwMC1cdGJhc2VfYWRkciBcdTAwMjY9IH4obWF4X3NpemUgLSAxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDIgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMjIKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBNYW5hZ2VtZW50IElzc3VlKioKCkFscmlnaHQsIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IHNvbWV0aGluZyB0aGF0IHNlZW1zIHRvIG9yaWdpbmF0ZSBmcm9tIGBzMl9tbXVfdW5tYXBfaXBhYC4gVGhpcyBmdW5jdGlvbiBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0JiMzOTtzIHRyaWdnZXJlZCBmcm9tIHRoZSBzeXN0ZW0gcmVnaXN0ZXIgaGFuZGxlcnMsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIHByZXR0eSBsb3ctbGV2ZWwgYW5kIGxpa2VseSBwZXJmb3JtYW5jZS1zZW5zaXRpdmUuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgcGF0aCBiYWNrd2FyZC4gV2hlcmUgZG9lcyBgczJfbW11X3VubWFwX2lwYWAgZ2V0IGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gVGhlIG5leHQgc3RlcCBpcyBjbGVhciDigJMgSSB3YW50IHRvIGxvb2sgYXQgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYC4gSSBzdXNwZWN0IHRoZXJlJiMzOTtzIGEgY29ubmVjdGlvbiB0aGVyZSwgcHJvYmFibHkgcmVsYXRlZCB0byBhbGxvY2F0aW5nIG9yIG1hbmFnaW5nIHRoZSBWaXJ0dWFsIE5ldHdvcmsgQ29udGV4dCBSZWdpb24gKFZOQ1IpIFRMQi4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgdW5tYXBwaW5nIGlzIGFjdHVhbGx5IGluaXRpYXRlZCBvciB0cmlnZ2VyZWQsIG9yIHBlcmhhcHMgd2hlcmUgdGhlIFRMQiBlbnRyaWVzIHJlbGF0ZWQgdG8gdGhlIElQQSBtYXBwaW5nIGFyZSBhbGxvY2F0ZWQuIFRoaXMgZmVlbHMgbGlrZSBhIGdvb2QgbGVhZCBpbiBuYXJyb3dpbmcgZG93biB3aGVyZSB0byBsb29rLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9hcm0uYz05MjE9aW50IGt2bV9hcmNoX3ZjcHVfcnVuX3BpZF9jaGFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL2FybS5jLTk1MS1cdGlmICh2Y3B1X2hhc19udih2Y3B1KSkge1xuYXJjaC9hcm02NC9rdm0vYXJtLmM6OTUyOlx0XHRyZXQgPSBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYih2Y3B1KTtcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTk1My1cdFx0aWYgKHJldClcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMjg0PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTM0Ny1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEzNDg6aW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzNDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTU5NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlY2VudCBDaGFuZ2VzIGluIHRoZSBLVk0gQXJjaGl0ZWN0dXJlKioKCk9rYXksIHNvIHRoaXMgY2hhbmdlIHN0ZW1zIGZyb20gYSBjYWxsIHdpdGhpbiBga3ZtX2FyY2hfdmNwdV9ydW5fcGlkX2NoYW5nZWAuIFRoYXQgbmFycm93cyB0aGUgZm9jdXMgY29uc2lkZXJhYmx5LiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBzeW1ib2xzOiBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCwgYGt2bV9oYW5kbGVfczFlMl90bGJpYCwgYGt2bV9uZXN0ZWRfczJfd3BgLCBga3ZtX25lc3RlZF9zMl91bm1hcGAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGFuZCBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkgaG90IHpvbmUuCgpIb2xkIG9uLi4uIEkgbm90aWNlZCBzb21ldGhpbmcuIGBrdm1fbmVzdGVkX3MyX3VubWFwYCBpdHNlbGYgd2FzbiYjMzk7dCBkaXJlY3RseSB0b3VjaGVkLiBCdXQsIGBrdm1faW52YWxpZGF0ZV92bmNyX2lwYWAsIHdoaWNoIGl0IGNhbGxzLCAqd2FzKiBtb2RpZmllZC4gVGhhdCBjaGFuZ2VzIHRoaW5ncyBhIGJpdC4gSSBzaG91bGQgcmVhbGx5IGNvbmZpcm0gdGhlIGludGVyYWN0aW9uIHdpdGggYGt2bV9uZXN0ZWRfczJfdW5tYXBgIGl0c2VsZi4gR290dGEgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IHN1YnRsZSBpbXBhY3RzIG9mIHRoYXQgaW5kaXJlY3QgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1fbmVzdGVkX3MyX3VubWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL21tdS5jPTExMDQ9dm9pZCBzdGFnZTJfdW5tYXBfdm0oc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExMTctXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTE4Olx0a3ZtX25lc3RlZF9zMl91bm1hcChrdm0sIHRydWUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTExOS1cbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNDM0PWJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNDQyLVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjQ0MzpcdGt2bV9uZXN0ZWRfczJfdW5tYXAoa3ZtLCByYW5nZS1cdTAwM2VtYXlfYmxvY2spO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMjQ0NC1cdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNzE3PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI3MjQtXHRrdm1fc3RhZ2UyX3VubWFwX3JhbmdlKFx1MDAyNmt2bS1cdTAwM2VhcmNoLm1tdSwgZ3BhLCBzaXplLCB0cnVlKTtcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI3MjU6XHRrdm1fbmVzdGVkX3MyX3VubWFwKGt2bSwgdHJ1ZSk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNzI2LVx0d3JpdGVfdW5sb2NrKFx1MDAyNmt2bS1cdTAwM2VtbXVfbG9jayk7XG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTIyOT12b2lkIGt2bV9uZXN0ZWRfczJfd3Aoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyNDctXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMjQ4OnZvaWQga3ZtX25lc3RlZF9zMl91bm1hcChzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgbWF5X2Jsb2NrKVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTI0OS17XG4tLVxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz0zOTM4PXN0YXRpYyBib29sIGhhbmRsZV9hbGxlMWlzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzk1MS1cdCAqL1xuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzozOTUyOlx0a3ZtX25lc3RlZF9zMl91bm1hcCh2Y3B1LVx1MDAzZWt2bSwgdHJ1ZSk7XG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTM5NTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEzOjAwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NzIwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqTmF2aWdhdGluZyB0aGUgS1ZNIEluaXRpYWxpemF0aW9uIExhbmRzY2FwZSoqCgpBbHJpZ2h0LCBzbyB0aGUgY2FsbCBvcmlnaW5hdGVkIGZyb20gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKE1NVSkgYW5kIHN5c3RlbSByZWdpc3RlcnMsIHdoaWNoIGlzIGdvb2QgY29udGV4dC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIEtWTSBpbml0aWFsaXphdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBga3ZtX2luaXRfbmVzdGVkYC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGFuZCBpdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIHBpZWNlcyBjb25uZWN0aW5nIHRoZSBNTVUgYW5kIHN5c3RlbSByZWdpc3RlciBpbnRlcmFjdGlvbnMgY29tZSB0b2dldGhlciBpbiB0aGlzIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiBteSBpbnR1aXRpb24gaXMgY29ycmVjdCBhbmQgZHJpbGwgZG93biBpbnRvIGBrdm1faW5pdF9uZXN0ZWRgIHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGlzIHNwZWNpZmljIGNhbGwgcGF0aC4gSSYjMzk7bGwgYWxzbyBjaGVjayBpZiBJIGhhdmUgZW5jb3VudGVyZWQgdGhpcyBjYWxsIHByZXZpb3VzbHksIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiBhbnkgdHJpY2t5IHBhcnRzIG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIE1NVSwgdGhlIHN5c3RlbSByZWdpc3RlcnMsIGFuZCB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNldHVwIHdpdGhpbiBLVk0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEzOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9pbml0X25lc3RlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L2t2bS9hcm0uYz0yMjI9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vYXJtLmMtMjM4LVxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MjM5Olx0a3ZtX2luaXRfbmVzdGVkKGt2bSk7XG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yNDAtXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9OTgxPWludCBrdm1faW5pdF9zdGFnZTJfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9zMl9tbXUgKm1tdSwgdW5zaWduZWQgbG9uZyB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMzYtXHRpZiAoa3ZtX2lzX25lc3RlZF9zMl9tbXUoa3ZtLCBtbXUpKVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTAzNzpcdFx0a3ZtX2luaXRfbmVzdGVkX3MyX21tdShtbXUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAzOC1cbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xMTI1PXZvaWQga3ZtX2ZyZWVfc3RhZ2UyX3BnZChzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExMzgtXHRpZiAoa3ZtX2lzX25lc3RlZF9zMl9tbXUoa3ZtLCBtbXUpKVxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTEzOTpcdFx0a3ZtX2luaXRfbmVzdGVkX3MyX21tdShtbXUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE0MC1cbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0yMD1zdHJ1Y3Qgdm5jcl90bGIge1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTQ2LVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6NDc6dm9pZCBrdm1faW5pdF9uZXN0ZWQoc3RydWN0IGt2bSAqa3ZtKVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtNDgte1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTgwNT1zdGF0aWMgc3RydWN0IGt2bV9zMl9tbXUgKmdldF9zMl9tbXVfbmVzdGVkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy04NjktXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo4NzA6dm9pZCBrdm1faW5pdF9uZXN0ZWRfczJfbW11KHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy04NzEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMiAxMzowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYzMgoJCQkJCQkJb3V0cHV0OiAxODEKCQkJCQkJCXRob3VnaHRzOiA3NDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVGhpcyBLVk0gQVJNNjQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkmIzM5O20gc2VlaW5nLCBga3ZtX2luaXRfbmVzdGVkYCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gY2FsbGVkIGZyb20gYGt2bV9hcmNoX2luaXRfdm1gLiBJdCYjMzk7cyBiYXNpY2FsbHkgdGhlIHNldHVwIGZ1bmN0aW9uIGZvciB0aGlzIHNwZWNpZmljIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LgoKTXkgaW5pdGlhbCBmb2N1cyBoZXJlLCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZXMsIGlzIGFyb3VuZCBob3cgVmlydHVhbCBOZXN0ZWQgQ29udHJvbCBSZWdpc3RlcnMgKFZOQ1IpIGFuZCBUTEIgaW52YWxpZGF0aW9uIGFyZSBoYW5kbGVkLiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBrZXkgc3ltYm9scyB0aGlzIHBhdGNoIHNlZW1zIHRvIHRvdWNoOiBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCwgYGt2bV9oYW5kbGVfczFlMl90bGJpYCwgYGt2bV9uZXN0ZWRfczJfd3BgLCBga3ZtX25lc3RlZF9zMl91bm1hcGAsIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAsIGFuZCBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY29uZmlybSB0aGVzZSBzeW1ib2wgbmFtZXMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBZZXAsIHRoZXkgY2hlY2sgb3V0LgoKQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgIGFuZCBgYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY2AuIENsZWFybHksIHRoaXMgaXMgY29yZSBLVk0gQVJNNjQgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBJJiMzOTttIG5vdGluZyB0aGF0IGBDT05GSUdfS1ZNYCBpcyB0aGUgZW5jb21wYXNzaW5nIGNvbmZpZyBvcHRpb24uCgpUaGUga2V5IHRha2Vhd2F5IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBjaGFuZ2luZyBmdW5kYW1lbnRhbCBhc3BlY3RzIG9mIFZOQ1IgVExCIGhhbmRsaW5nIGFuZCB0aGUgY29tcHV0YXRpb24vYXBwbGljYXRpb24gb2YgVExCIGludmFsaWRhdGlvbiByYW5nZXMgd2l0aGluIHRoZSBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGVudmlyb25tZW50LiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIHRvIGludHJvZHVjZSBzdWJ0bGUsIGJ1dCBjcml0aWNhbCwgYnVncy4gU28sIEkgbmVlZCB0byBmbGFnIHRoaXMgZm9yIGZ1enppbmcuIFRoZXNlIGFyZSByZWFjaGFibGUsIGtlcm5lbCBwYXRocyB0aGF0IG5lZWQgcmlnb3JvdXMgdGVzdGluZyB0byBwcmV2ZW50IHJlZ3Jlc3Npb25zIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuCgpUaGVyZWZvcmUsIEkmIzM5O20gbWFya2luZyB0aGlzIGZvciBmdXp6aW5nLCB1c2luZyBgS1ZNYCBhcyB0aGUgY29uZmlnLiBNeSBhbmFseXNpcyBpZGVudGlmaWVzIHRoZSBmb2xsb3dpbmcgc3ltYm9sczoKLSBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YAotIGBrdm1faGFuZGxlX3MxZTJfdGxiaWAKLSBga3ZtX25lc3RlZF9zMl93cGAKLSBga3ZtX25lc3RlZF9zMl91bm1hcGAKLSBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgCi0gYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYAphbmQgSSYjMzk7bGwgdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gcmVsYXkgdGhlc2UgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAyIDEzOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faGFuZGxlX3ZuY3JfYWJvcnQmIzM0OywKICAgICYjMzQ7a3ZtX2hhbmRsZV9zMWUyX3RsYmkmIzM0OywKICAgICYjMzQ7a3ZtX25lc3RlZF9zMl93cCYjMzQ7LAogICAgJiMzNDtrdm1fbmVzdGVkX3MyX3VubWFwJiMzNDssCiAgICAmIzM0O2NvbXB1dGVfdGxiX2ludmFsX3JhbmdlJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBWTkNSIChWaXJ0dWFsIE5lc3RlZCBDb250cm9sIFJlZ2lzdGVyKSBUTEIgaGFuZGxpbmcgYW5kIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgdHJhY2tpbmcgbWVjaGFuaXNtcyBhbmQgbW9kaWZpZXMgaG93IFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIGFyZSBjb21wdXRlZCBhbmQgYXBwbGllZC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faGFuZGxlX3ZuY3JfYWJvcnQmIzM0OywKICAgICYjMzQ7a3ZtX2hhbmRsZV9zMWUyX3RsYmkmIzM0OywKICAgICYjMzQ7a3ZtX25lc3RlZF9zMl93cCYjMzQ7LAogICAgJiMzNDtrdm1fbmVzdGVkX3MyX3VubWFwJiMzNDssCiAgICAmIzM0O2NvbXB1dGVfdGxiX2ludmFsX3JhbmdlJiMzNDssCiAgICAmIzM0O2t2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBWTkNSIChWaXJ0dWFsIE5lc3RlZCBDb250cm9sIFJlZ2lzdGVyKSBUTEIgaGFuZGxpbmcgYW5kIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgdHJhY2tpbmcgbWVjaGFuaXNtcyBhbmQgbW9kaWZpZXMgaG93IFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIGFyZSBjb21wdXRlZCBhbmQgYXBwbGllZC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTI6NTg6MjkuMTUzNDUxMjgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0MTI2MTQwMjY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9oYW5kbGVfdm5jcl9hYm9ydFwiLFxuICAgIFwia3ZtX2hhbmRsZV9zMWUyX3RsYmlcIixcbiAgICBcImt2bV9uZXN0ZWRfczJfd3BcIixcbiAgICBcImt2bV9uZXN0ZWRfczJfdW5tYXBcIixcbiAgICBcImNvbXB1dGVfdGxiX2ludmFsX3JhbmdlXCIsXG4gICAgXCJrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBWTkNSIChWaXJ0dWFsIE5lc3RlZCBDb250cm9sIFJlZ2lzdGVyKSBUTEIgaGFuZGxpbmcgYW5kIGludmFsaWRhdGlvbi4gSXQgaW50cm9kdWNlcyBuZXcgdHJhY2tpbmcgbWVjaGFuaXNtcyBhbmQgbW9kaWZpZXMgaG93IFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIGFyZSBjb21wdXRlZCBhbmQgYXBwbGllZC4gVGhlc2UgYXJlIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIGNvcnJlY3RuZXNzIGFuZCBwcmV2ZW50IHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1ODoyOS4xNTM0NjU5MzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0OTc4NjU3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU5ZDVhZTlkNDhiODE0ZThjOGY2N2U0MzMyNWMyZWZjMjg4MDhiZGFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBBdWcgMiAxMjo1ODoyOCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5pbmRleCBiYWUyYzRmOTJlZjVjLi4xMDg5NjZhOWRiMTJiIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbkBAIC00MTEsOCArNDExLDggQEAgc3RydWN0IGt2bV9hcmNoIHtcXG4gXFx0LyogTWFza3MgZm9yIFZOQ1ItYmFja2VkIGFuZCBnZW5lcmFsIEVMMiBzeXNyZWdzICovXFxuIFxcdHN0cnVjdCBrdm1fc3lzcmVnX21hc2tzXFx0KnN5c3JlZ19tYXNrcztcXG4gXFxuLVxcdC8qIENvdW50IHRoZSBudW1iZXIgb2YgVk5DUl9FTDIgY3VycmVudGx5IG1hcHBlZCAqL1xcbi1cXHRhdG9taWNfdCB2bmNyX21hcF9jb3VudDtcXG4rXFx0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovXFxuK1xcdGF0b21pY190IHZuY3JfdGxiX2NvdW50O1xcbiBcXG4gXFx0LypcXG4gXFx0ICogRm9yIGFuIHVudHJ1c3RlZCBob3N0IFZNLCAncGt2bS5oYW5kbGUnIGlzIHVzZWQgdG8gbG9va3VwXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmhcXG5pbmRleCAwMTJkNzExMDM0ZDE3Li5jYzQ4ODE3YTViZjdhIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmhcXG5AQCAtMzg4LDYgKzM4OCw4IEBAIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCB7XFxuIFxcdGJvb2xcXHRmYWlsZWQ7XFxuIH07XFxuIFxcbisjZGVmaW5lIFMxX01NVV9ESVNBQkxFRFxcdFxcdCgtMTI3KVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIGZhaWxfczFfd2FsayhzdHJ1Y3QgczFfd2Fsa19yZXN1bHQgKndyLCB1OCBmc3QsIGJvb2wgczFwdHcpXFxuIHtcXG4gXFx0d3ItXFx1MDAzZWZzdFxcdFxcdD0gZnN0O1xcbkBAIC0zOTYsNiArMzk4LDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWlsX3MxX3dhbGsoc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTggZnN0LCBib29sIHMxcHR3KVxcbiBcXHR3ci1cXHUwMDNlZmFpbGVkXFx0PSB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIGJvb2wgczFfbW11X2Rpc2FibGVkKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IpXFxuK3tcXG4rXFx0cmV0dXJuIHdyLVxcdTAwM2VsZXZlbCA9PSBTMV9NTVVfRElTQUJMRUQ7XFxuK31cXG4rXFxuIGludCBfX2t2bV90cmFuc2xhdGVfdmEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgczFfd2Fsa19pbmZvICp3aSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU2NCB2YSk7XFxuIGludCBfX2t2bV9maW5kX3MxX2Rlc2NfbGV2ZWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdmEsIHU2NCBpcGEsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2F0LmMgYi9hcmNoL2FybTY0L2t2bS9hdC5jXFxuaW5kZXggNjQwZjJkYzAwYThiYS4uMDkyNjQyNmI4Nzk4OSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2t2bS9hdC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vYXQuY1xcbkBAIC0xMSw4ICsxMSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20va3ZtX21tdS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL2xzdWkuaFxcdTAwM2VcXG4gXFxuLSNkZWZpbmUgUzFfTU1VX0RJU0FCTEVEXFx0XFx0KC0xMjcpXFxuLVxcbiBzdGF0aWMgaW50IGdldF9pYV9zaXplKHN0cnVjdCBzMV93YWxrX2luZm8gKndpKVxcbiB7XFxuIFxcdHJldHVybiA2NCAtIHdpLVxcdTAwM2V0eHN6O1xcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xcbmluZGV4IGJiZTljZWJkM2Q5ZDUuLmViNTk1NDllYzIxNzIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcXG5AQCAtNDI0LDExICs0MjQsMTEgQEAgc3RhdGljIGJvb2wga3ZtX2h5cF9oYW5kbGVfdGxiaV9lbDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgKmV4aXRfY29kZSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgbWFwcGluZyBiZWluZyBpbnZhbGlkYXRlZCxcXG4rXFx0ICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgVExCIGJlaW5nIGludmFsaWRhdGVkLFxcbiBcXHQgKiBnbyBiYWNrIHRvIHRoZSBzbG93IHBhdGggZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cXG4gXFx0ICovXFxuIFxcdGlmICh2Y3B1X2VsMl9lMmhfaXNfc2V0KHZjcHUpIFxcdTAwMjZcXHUwMDI2IHZjcHVfZWwyX3RnZV9pc19zZXQodmNwdSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIGF0b21pY19yZWFkKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQpKVxcbitcXHQgICAgYXRvbWljX3JlYWQoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bmNyX3RsYl9jb3VudCkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdF9fa3ZtX3NraXBfaW5zdHIodmNwdSk7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcXG5pbmRleCBkZmI5NmVkYmRjNDNjLi4xZTNmZDk4ZjY1ODliIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXFxuKysrIGIvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcXG5AQCAtNDgsNyArNDgsNyBAQCB2b2lkIGt2bV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtICprdm0pXFxuIHtcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLm5lc3RlZF9tbXVzID0gTlVMTDtcXG4gXFx0a3ZtLVxcdTAwM2VhcmNoLm5lc3RlZF9tbXVzX3NpemUgPSAwO1xcbi1cXHRhdG9taWNfc2V0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQsIDApO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudm5jcl90bGJfY291bnQsIDApO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGluaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUpXFxuQEAgLTUwNiw3ICs1MDYsNyBAQCBpbnQga3ZtX3dhbGtfbmVzdGVkX3MyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGh5c19hZGRyX3QgZ2lwYSxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgX190dGxfdG9fc2l6ZSh1OCB0dGwpXFxuIHtcXG4gXFx0aW50IGxldmVsID0gdHRsIFxcdTAwMjYgMztcXG4gXFx0aW50IGdyYW4gPSAodHRsIFxcdTAwM2VcXHUwMDNlIDIpIFxcdTAwMjYgMztcXG5AQCAtNTYyLDEwICs1NjIsMjIgQEAgc3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpXFxuIFxcdHJldHVybiBtYXhfc2l6ZTtcXG4gfVxcbiBcXG4tc3RhdGljIHU4IHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHUxNiBzaGlmdCwgdTggbGV2ZWwpXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxcbit7XFxuK1xcdHJldHVybiBfX3R0bF90b19zaXplKHR0bCkgPzogU1pfMUc7XFxuK31cXG4rXFxuK3N0YXRpYyB1OCBwZ3NoaWZ0X2xldmVsX3RvX3R0bCh1MTYgc2hpZnQsIHM4IGxldmVsKVxcbiB7XFxuIFxcdHU4IHR0bDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIElmIHdlIGRvbid0IGhhdmUgYSBwcm9wZXIgbGV2ZWwsIGZhbGxiYWNrIHRvIHRoZSBtYXhpbXVtXFxuK1xcdCAqIHNpemUuXFxuK1xcdCAqL1xcbitcXHRpZiAobGV2ZWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdHN3aXRjaChzaGlmdCkge1xcbiBcXHRjYXNlIDEyOlxcbiBcXHRcXHR0dGwgPSBUTEJJX1RUTF9UR180SztcXG5AQCAtNjc2LDcgKzY4OCwxMSBAQCB1bnNpZ25lZCBsb25nIGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlKHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHU2NCB2YWwpXFxuIFxcdFxcdHR0bCA9IGdldF9ndWVzdF9tYXBwaW5nX3R0bChtbXUsIGFkZHIpO1xcbiBcXHR9XFxuIFxcbi1cXHRtYXhfc2l6ZSA9IHR0bF90b19zaXplKHR0bCk7XFxuK1xcdC8qXFxuK1xcdCAqIERvbid0IHVzZSB0aGUgZGVmYXVsdCAxR0IgZmFsbGJhY2ssIGFzIHdlIGNhbiBhZGFwdCB0byB0aGVcXG4rXFx0ICogbWF4IG1hcHBpbmcgc2l6ZSB3ZSBhbGxvdyBhdCBTMi5cXG4rXFx0ICovXFxuK1xcdG1heF9zaXplID0gX190dGxfdG9fc2l6ZSh0dGwpO1xcbiBcXG4gXFx0aWYgKCFtYXhfc2l6ZSkge1xcbiBcXHRcXHQvKiBDb21wdXRlIHRoZSBtYXhpbXVtIGV4dGVudCBvZiB0aGUgaW52YWxpZGF0aW9uICovXFxuQEAgLTg3OSw2ICs4OTUsMTIgQEAgdm9pZCBrdm1fdmNwdV9sb2FkX2h3X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgdW5tYXBfbDFfdm5jcihzdHJ1Y3Qgdm5jcl90bGIgKnZ0KVxcbit7XFxuK1xcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC1cXHUwMDNlY3B1KSk7XFxuK1xcdHZ0LVxcdTAwM2VjcHUgPSAtMTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiB7XFxuIFxcdGlmICghaG9zdF9kYXRhX3Rlc3RfZmxhZyhMMV9WTkNSX01BUFBFRCkpXFxuQEAgLTg4NywxMCArOTA5LDggQEAgc3RhdGljIHZvaWQgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRCVUdfT04odmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYi1cXHUwMDNlY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7XFxuIFxcdEJVR19PTihpc19oeXBfY3R4dCh2Y3B1KSk7XFxuIFxcbi1cXHRjbGVhcl9maXhtYXAodm5jcl9maXhtYXAodmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYi1cXHUwMDNlY3B1KSk7XFxuLVxcdHZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGItXFx1MDAzZWNwdSA9IC0xO1xcbitcXHR1bm1hcF9sMV92bmNyKHZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGIpO1xcbiBcXHRob3N0X2RhdGFfY2xlYXJfZmxhZyhMMV9WTkNSX01BUFBFRCk7XFxuLVxcdGF0b21pY19kZWMoXFx1MDAyNnZjcHUtXFx1MDAzZWt2bS1cXHUwMDNlYXJjaC52bmNyX21hcF9jb3VudCk7XFxuIH1cXG4gXFxuIHZvaWQga3ZtX3ZjcHVfcHV0X2h3X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuQEAgLTk3OCwxMSArOTk4LDI3IEBAIHUxNiBnZXRfYXNpZF9ieV9yZWdpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHRyYW5zX3JlZ2ltZSByZWdpbWUpXFxuIFxcdHJldHVybiBhc2lkO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dClcXG4rc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZuY3JfdGxiICp2dClcXG4ge1xcbitcXHRCVUdfT04oIXZ0LVxcdTAwM2V2YWxpZCk7XFxuIFxcdHZ0LVxcdTAwM2V2YWxpZCA9IGZhbHNlO1xcbitcXHRhdG9taWNfZGVjKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpO1xcbiBcXHRpZiAodnQtXFx1MDAzZWNwdSAhPSAtMSlcXG4tXFx0XFx0Y2xlYXJfZml4bWFwKHZuY3JfZml4bWFwKHZ0LVxcdTAwM2VjcHUpKTtcXG4rXFx0XFx0dW5tYXBfbDFfdm5jcih2dCk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsXFxuK1xcdFxcdFxcdFxcdHU2NCBzY29wZV9zdGFydCwgdTY0IHNjb3BlX3NpemUpXFxuK3tcXG4rXFx0dTY0IHRsYl9zaXplLCB0bGJfc3RhcnQsIHRsYl9lbmQsIHNjb3BlX2VuZDtcXG4rXFxuK1xcdHRsYl9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXFx1MDAzZXdpLnBnc2hpZnQsIHZ0LVxcdTAwM2V3ci5sZXZlbCkpO1xcbitcXG4rXFx0dGxiX3N0YXJ0ID0gYWRkciBcXHUwMDI2IH4odGxiX3NpemUgLSAxKTtcXG4rXFx0dGxiX2VuZCA9IHRsYl9zdGFydCArIHRsYl9zaXplIC0gMTtcXG4rXFx0c2NvcGVfZW5kID0gc2NvcGVfc3RhcnQgKyBzY29wZV9zaXplIC0gMTtcXG4rXFxuK1xcdHJldHVybiAhKHRsYl9lbmQgXFx1MDAzYyBzY29wZV9zdGFydCB8fCB0bGJfc3RhcnQgXFx1MDAzZSBzY29wZV9lbmQpO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC0xMDA3LDE5ICsxMDQzLDkgQEAgc3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgc3RhcnQsIHU2NCBlbmQpXFxuIFxcdGlmICgha3ZtX2hhc19mZWF0KGt2bSwgSURfQUE2NE1NRlI0X0VMMSwgTlZfZnJhYywgTlYyX09OTFkpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xcbi1cXHRcXHR1NjQgaXBhX3N0YXJ0LCBpcGFfZW5kLCBpcGFfc2l6ZTtcXG4tXFxuLVxcdFxcdGlwYV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXFx1MDAzZXdpLnBnc2hpZnQsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB2dC1cXHUwMDNld3IubGV2ZWwpKTtcXG4tXFx0XFx0aXBhX3N0YXJ0ID0gdnQtXFx1MDAzZXdyLnBhIFxcdTAwMjYgfihpcGFfc2l6ZSAtIDEpO1xcbi1cXHRcXHRpcGFfZW5kID0gaXBhX3N0YXJ0ICsgaXBhX3NpemU7XFxuLVxcbi1cXHRcXHRpZiAoaXBhX2VuZCBcXHUwMDNjPSBzdGFydCB8fCBpcGFfc3RhcnQgXFx1MDAzZT0gZW5kKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGludmFsaWRhdGVfdm5jcih2dCk7XFxuLVxcdH1cXG4rXFx0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pXFxuK1xcdFxcdGlmICh2bmNyX3RsYl9pbnRlcnNlY3RzKHZ0LCB2dC1cXHUwMDNld3IucGEsIHN0YXJ0LCBlbmQgLSBzdGFydCkpXFxuK1xcdFxcdFxcdGludmFsaWRhdGVfdm5jcihrdm0sIHZ0KTtcXG4gfVxcbiBcXG4gc3RydWN0IHMxZTJfdGxiaV9zY29wZSB7XFxuQEAgLTEwNDUsMjggKzEwNzEsMTkgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2a3ZtLVxcdTAwM2VtbXVfbG9jayk7XFxuIFxcbiBcXHRrdm1fZm9yX2VhY2hfdm5jcl90bGIoaSwgdmNwdSwgdnQsIGt2bSkge1xcbi1cXHRcXHR1NjQgdmFfc3RhcnQsIHZhX2VuZCwgdmFfc2l6ZTtcXG4tXFxuLVxcdFxcdHZhX3NpemUgPSB0dGxfdG9fc2l6ZShwZ3NoaWZ0X2xldmVsX3RvX3R0bCh2dC1cXHUwMDNld2kucGdzaGlmdCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgdnQtXFx1MDAzZXdyLmxldmVsKSk7XFxuLVxcdFxcdHZhX3N0YXJ0ID0gdnQtXFx1MDAzZWd2YSBcXHUwMDI2IH4odmFfc2l6ZSAtIDEpO1xcbi1cXHRcXHR2YV9lbmQgPSB2YV9zdGFydCArIHZhX3NpemU7XFxuLVxcbiBcXHRcXHRzd2l0Y2ggKHNjb3BlLVxcdTAwM2V0eXBlKSB7XFxuIFxcdFxcdGNhc2UgVExCSV9BTEw6XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0Y2FzZSBUTEJJX1ZBOlxcbi1cXHRcXHRcXHRpZiAodmFfZW5kIFxcdTAwM2M9IHNjb3BlLVxcdTAwM2V2YSB8fFxcbi1cXHRcXHRcXHQgICAgdmFfc3RhcnQgXFx1MDAzZT0gKHNjb3BlLVxcdTAwM2V2YSArIHNjb3BlLVxcdTAwM2VzaXplKSlcXG4rXFx0XFx0XFx0aWYgKCF2bmNyX3RsYl9pbnRlcnNlY3RzKHZ0LCB2dC1cXHUwMDNlZ3ZhLCBzY29wZS1cXHUwMDNldmEsIHNjb3BlLVxcdTAwM2VzaXplKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdGlmICh2dC1cXHUwMDNld3IubkcgXFx1MDAyNlxcdTAwMjYgdnQtXFx1MDAzZXdyLmFzaWQgIT0gc2NvcGUtXFx1MDAzZWFzaWQpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGNhc2UgVExCSV9WQUE6XFxuLVxcdFxcdFxcdGlmICh2YV9lbmQgXFx1MDAzYz0gc2NvcGUtXFx1MDAzZXZhIHx8XFxuLVxcdFxcdFxcdCAgICB2YV9zdGFydCBcXHUwMDNlPSAoc2NvcGUtXFx1MDAzZXZhICsgc2NvcGUtXFx1MDAzZXNpemUpKVxcbitcXHRcXHRcXHRpZiAoIXZuY3JfdGxiX2ludGVyc2VjdHModnQsIHZ0LVxcdTAwM2VndmEsIHNjb3BlLVxcdTAwM2V2YSwgc2NvcGUtXFx1MDAzZXNpemUpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0xMDc2LDcgKzEwOTMsNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0aW52YWxpZGF0ZV92bmNyKHZ0KTtcXG4rXFx0XFx0aW52YWxpZGF0ZV92bmNyKGt2bSwgdnQpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTExMjYsOCArMTE0Myw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLFxcbiBcXHRjYXNlIE9QX1RMQklfVkFMRTFPU05YUzpcXG4gXFx0XFx0c2NvcGUtXFx1MDAzZXR5cGUgPSBUTEJJX1ZBO1xcbiBcXHRcXHRzY29wZS1cXHUwMDNlc2l6ZSA9IHR0bF90b19zaXplKEZJRUxEX0dFVChUTEJJX1RUTF9NQVNLLCB2YWwpKTtcXG4tXFx0XFx0aWYgKCFzY29wZS1cXHUwMDNlc2l6ZSlcXG4tXFx0XFx0XFx0c2NvcGUtXFx1MDAzZXNpemUgPSBTWl8xRztcXG4gXFx0XFx0c2NvcGUtXFx1MDAzZXZhID0gdGxiaV92YV9zMV90b192YSh2YWwpIFxcdTAwMjYgfihzY29wZS1cXHUwMDNlc2l6ZSAtIDEpO1xcbiBcXHRcXHRzY29wZS1cXHUwMDNlYXNpZCA9IEZJRUxEX0dFVChUTEJJUl9BU0lEX01BU0ssIHZhbCk7XFxuIFxcdFxcdGJyZWFrO1xcbkBAIC0xMTU0LDggKzExNjksNiBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX3MxX3RsYmlfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbCxcXG4gXFx0Y2FzZSBPUF9UTEJJX1ZBQUxFMU9TTlhTOlxcbiBcXHRcXHRzY29wZS1cXHUwMDNldHlwZSA9IFRMQklfVkFBO1xcbiBcXHRcXHRzY29wZS1cXHUwMDNlc2l6ZSA9IHR0bF90b19zaXplKEZJRUxEX0dFVChUTEJJX1RUTF9NQVNLLCB2YWwpKTtcXG4tXFx0XFx0aWYgKCFzY29wZS1cXHUwMDNlc2l6ZSlcXG4tXFx0XFx0XFx0c2NvcGUtXFx1MDAzZXNpemUgPSBTWl8xRztcXG4gXFx0XFx0c2NvcGUtXFx1MDAzZXZhID0gdGxiaV92YV9zMV90b192YSh2YWwpIFxcdTAwMjYgfihzY29wZS1cXHUwMDNlc2l6ZSAtIDEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBPUF9UTEJJX1JWQUUyOlxcbkBAIC0xMzE2LDEzICsxMzI5LDIwIEBAIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X2FsbChzdHJ1Y3Qga3ZtICprdm0pXFxuICAqICAgaW50ZXJzZWN0cyB3aXRoIHRoZSBUTEJJIHJlcXVlc3QsIGludmFsaWRhdGUgaXQsIGFuZCB1bm1hcCB0aGUgcGFnZVxcbiAgKiAgIGZyb20gdGhlIGZpeG1hcC4gQmVjYXVzZSB3ZSBuZWVkIHRvIGxvb2sgYXQgYWxsIHRoZSB2Y3B1LXByaXZhdGUgVExCcyxcXG4gICogICB0aGlzIHJlcXVpcmVzIHNvbWUgd2lkZS1yYW5naW5nIGxvY2tpbmcgdG8gZW5zdXJlIHRoYXQgbm90aGluZyByYWNlc1xcbi0gKiAgIGFnYWluc3QgaXQuIFRoaXMgbWF5IHJlcXVpcmUgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW5cXG4tICogICBubyBzdWNoIFRMQiBpcyBwcmVzZW50LlxcbisgKiAgIGFnYWluc3QgaXQuIFRoaXMgcmVxdWlyZXMgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW5cXG4rICogICBubyBzdWNoIFRMQiBpcyBwcmVzZW50IChzZWUgYmVsb3cpLlxcbiAgKlxcbiAgKiAtIE9uIE1NVSBub3RpZmllcnMsIHdlIG11c3QgaW52YWxpZGF0ZSBvdXIgVExCIGluIGEgc2ltaWxhciB3YXksIGJ1dFxcbiAgKiAgIGxvb2tpbmcgYXQgdGhlIElQQSBpbnN0ZWFkLiBUaGUgZnVubnkgcGFydCBpcyB0aGF0IHRoZXJlIG1heSBub3QgYmUgYVxcbiAgKiAgIHN0YWdlLTIgbWFwcGluZyBmb3IgdGhpcyBwYWdlIGlmIEwxIGhhc24ndCBhY2Nlc3NlZCBpdCB1c2luZyBMRC9TVFxcbiAgKiAgIGluc3RydWN0aW9ucy5cXG4rICpcXG4rICogLSB2bmNyX3RsYl9jb3VudCB0cmFja3MgdGhlIG51bWJlciBvZiB2YWxpZCBWTkNSIFRMQnMgVk0td2lkZS4gVGhpcyBpc24ndFxcbisgKiAgIHRoZSBudW1iZXIgb2YgKm1hcHBlZCogTDEgVk5DUiBwYWdlcywgd2hpY2ggaXMgbGlrZWx5IGJlIGEgc3Vic2V0IChhbmRcXG4rICogICBieSBkZWZpbml0aW9uLCBhIFRMQkkgaGFuZGxlZCBmcm9tIEwxIHJ1bnMgd2l0aCB0aGUgY2Fub25pY2FsIFZOQ1JcXG4rICogICBwYWdlLCBub3QgdGhlIEwxJ3MpLiBUaGUgaW5uZXJtb3N0IHRyYXAgaGFuZGxpbmcgY29kZSBjaGVja3MgdGhpcyB0b1xcbisgKiAgIGZpbmQgb3V0IHdoZXRoZXIgdG8gcmV0dXJuIHRvIHRoZSBndWVzdCBBU0FQIChubyBMMSBUTEJzKSBvciB0byB2aXNpdFxcbisgKiAgIHRoaXMgcGFydCBvZiB0aGUgd29ybGQgZm9yIHNvbWUgZXh0cmEgaW52YWxpZGF0aW9uIHdvcmsuXFxuICAqL1xcbiBcXG4gaW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG5AQCAtMTM3Nyw3ICsxMzk3LDggQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxcbiBcXHQgKi9cXG4gXFx0c2NvcGVkX2d1YXJkKHdyaXRlX2xvY2ssIFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKSB7XFxuIFxcdFxcdHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwKHZjcHUpO1xcbi1cXHRcXHR2dC1cXHUwMDNldmFsaWQgPSBmYWxzZTtcXG4rXFx0XFx0aWYgKHZ0LVxcdTAwM2V2YWxpZClcXG4rXFx0XFx0XFx0aW52YWxpZGF0ZV92bmNyKHZjcHUtXFx1MDAzZWt2bSwgdnQpO1xcbiBcXG4gXFx0XFx0dnQtXFx1MDAzZXdpID0gKHN0cnVjdCBzMV93YWxrX2luZm8pIHtcXG4gXFx0XFx0XFx0LnJlZ2ltZVxcdD0gVFJfRUwyMCxcXG5AQCAtMTQ0OSw2ICsxNDcwLDggQEAgc3RhdGljIGludCBrdm1fdHJhbnNsYXRlX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sICppc19nbWVtKVxcbiBcXHRcXHR2dC1cXHUwMDNldmFsaWQgPSB0cnVlO1xcbiBcXHRcXHR2dC1cXHUwMDNlY3B1ID0gLTE7XFxuIFxcbitcXHRcXHRhdG9taWNfaW5jKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZWFyY2gudm5jcl90bGJfY291bnQpO1xcbitcXG4gXFx0XFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX01BUF9MMV9WTkNSX0VMMiwgdmNwdSk7XFxuIFxcdFxcdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZSh2Y3B1LVxcdTAwM2Vrdm0sIHBhZ2UsIGZhbHNlLCB2dC1cXHUwMDNld3IucHcgXFx1MDAyNlxcdTAwMjYgdnQtXFx1MDAzZWhwYV93cml0YWJsZSk7XFxuIFxcdH1cXG5AQCAtMTU2OCw2ICsxNTkxLDkgQEAgc3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4gXFx0aWYgKCF2dC1cXHUwMDNldmFsaWQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGlmICghKHZjcHVfcmVhZF9zeXNfcmVnKHZjcHUsIFNDVExSX0VMMikgXFx1MDAyNiBTQ1RMUl9FTHhfTSkgIT0gczFfbW11X2Rpc2FibGVkKFxcdTAwMjZ2dC1cXHUwMDNld3IpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHRpZiAocmVhZF92bmNyX2VsMih2Y3B1KSAhPSB2dC1cXHUwMDNlZ3ZhKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbkBAIC0xNTkyLDcgKzE2MTgsNiBAQCBzdGF0aWMgdm9pZCBrdm1fbWFwX2wxX3ZuY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbiBcXHRpZiAocGdwcm90X3ZhbChwcm90KSAhPSBwZ3Byb3RfdmFsKFBBR0VfTk9ORSkpIHtcXG4gXFx0XFx0X19zZXRfZml4bWFwKHZuY3JfZml4bWFwKHZ0LVxcdTAwM2VjcHUpLCB2dC1cXHUwMDNlaHBhLCBwcm90KTtcXG4gXFx0XFx0aG9zdF9kYXRhX3NldF9mbGFnKEwxX1ZOQ1JfTUFQUEVEKTtcXG4tXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2dmNwdS1cXHUwMDNla3ZtLVxcdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KTtcXG4gXFx0fVxcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1ODoyOS43MDQzNDgzOTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTM1NzUyMjU3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2hhbmRsZV92bmNyX2Fib3J0XCIsXG4gICAgXCJrdm1faGFuZGxlX3MxZTJfdGxiaVwiLFxuICAgIFwia3ZtX25lc3RlZF9zMl93cFwiLFxuICAgIFwia3ZtX25lc3RlZF9zMl91bm1hcFwiLFxuICAgIFwiY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VcIixcbiAgICBcImt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIFZOQ1IgKFZpcnR1YWwgTmVzdGVkIENvbnRyb2wgUmVnaXN0ZXIpIFRMQiBoYW5kbGluZyBhbmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyB0cmFja2luZyBtZWNoYW5pc21zIGFuZCBtb2RpZmllcyBob3cgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvbXB1dGVkIGFuZCBhcHBsaWVkLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU5ZDVhZTlkNDhiODE0ZThjOGY2N2U0MzMyNWMyZWZjMjg4MDhiZGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyIDEyOjU4OjI4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5pbmRleCBiYWUyYzRmOTJlZjVjLi4xMDg5NjZhOWRiMTJiIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC00MTEsOCArNDExLDggQEAgc3RydWN0IGt2bV9hcmNoIHtcbiBcdC8qIE1hc2tzIGZvciBWTkNSLWJhY2tlZCBhbmQgZ2VuZXJhbCBFTDIgc3lzcmVncyAqL1xuIFx0c3RydWN0IGt2bV9zeXNyZWdfbWFza3NcdCpzeXNyZWdfbWFza3M7XG4gXG4tXHQvKiBDb3VudCB0aGUgbnVtYmVyIG9mIFZOQ1JfRUwyIGN1cnJlbnRseSBtYXBwZWQgKi9cbi1cdGF0b21pY190IHZuY3JfbWFwX2NvdW50O1xuK1x0LyogQ291bnQgdGhlIG51bWJlciBvZiBWTkNSX0VMMiBUTEJzICovXG4rXHRhdG9taWNfdCB2bmNyX3RsYl9jb3VudDtcbiBcbiBcdC8qXG4gXHQgKiBGb3IgYW4gdW50cnVzdGVkIGhvc3QgVk0sICdwa3ZtLmhhbmRsZScgaXMgdXNlZCB0byBsb29rdXBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9uZXN0ZWQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG5pbmRleCAwMTJkNzExMDM0ZDE3Li5jYzQ4ODE3YTViZjdhIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbmVzdGVkLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX25lc3RlZC5oXG5AQCAtMzg4LDYgKzM4OCw4IEBAIHN0cnVjdCBzMV93YWxrX3Jlc3VsdCB7XG4gXHRib29sXHRmYWlsZWQ7XG4gfTtcbiBcbisjZGVmaW5lIFMxX01NVV9ESVNBQkxFRFx0XHQoLTEyNylcbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgZmFpbF9zMV93YWxrKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU4IGZzdCwgYm9vbCBzMXB0dylcbiB7XG4gXHR3ci1cdTAwM2Vmc3RcdFx0PSBmc3Q7XG5AQCAtMzk2LDYgKzM5OCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmFpbF9zMV93YWxrKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IsIHU4IGZzdCwgYm9vbCBzMXB0dylcbiBcdHdyLVx1MDAzZWZhaWxlZFx0PSB0cnVlO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgczFfbW11X2Rpc2FibGVkKHN0cnVjdCBzMV93YWxrX3Jlc3VsdCAqd3IpXG4re1xuK1x0cmV0dXJuIHdyLVx1MDAzZWxldmVsID09IFMxX01NVV9ESVNBQkxFRDtcbit9XG4rXG4gaW50IF9fa3ZtX3RyYW5zbGF0ZV92YShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzMV93YWxrX2luZm8gKndpLFxuIFx0XHQgICAgICAgc3RydWN0IHMxX3dhbGtfcmVzdWx0ICp3ciwgdTY0IHZhKTtcbiBpbnQgX19rdm1fZmluZF9zMV9kZXNjX2xldmVsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHZhLCB1NjQgaXBhLFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2F0LmMgYi9hcmNoL2FybTY0L2t2bS9hdC5jXG5pbmRleCA2NDBmMmRjMDBhOGJhLi4wOTI2NDI2Yjg3OTg5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vYXQuY1xuKysrIGIvYXJjaC9hcm02NC9rdm0vYXQuY1xuQEAgLTExLDggKzExLDYgQEBcbiAjaW5jbHVkZSBcdTAwM2Nhc20va3ZtX21tdS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL2xzdWkuaFx1MDAzZVxuIFxuLSNkZWZpbmUgUzFfTU1VX0RJU0FCTEVEXHRcdCgtMTI3KVxuLVxuIHN0YXRpYyBpbnQgZ2V0X2lhX3NpemUoc3RydWN0IHMxX3dhbGtfaW5mbyAqd2kpXG4ge1xuIFx0cmV0dXJuIDY0IC0gd2ktXHUwMDNldHhzejtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvdmhlL3N3aXRjaC5jIGIvYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY1xuaW5kZXggYmJlOWNlYmQzZDlkNS4uZWI1OTU0OWVjMjE3MiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL2h5cC92aGUvc3dpdGNoLmNcbkBAIC00MjQsMTEgKzQyNCwxMSBAQCBzdGF0aWMgYm9vbCBrdm1faHlwX2hhbmRsZV90bGJpX2VsMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCAqZXhpdF9jb2RlKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHQvKlxuLVx0ICogSWYgd2UgaGF2ZSB0byBjaGVjayBmb3IgYW55IFZOQ1IgbWFwcGluZyBiZWluZyBpbnZhbGlkYXRlZCxcbitcdCAqIElmIHdlIGhhdmUgdG8gY2hlY2sgZm9yIGFueSBWTkNSIFRMQiBiZWluZyBpbnZhbGlkYXRlZCxcbiBcdCAqIGdvIGJhY2sgdG8gdGhlIHNsb3cgcGF0aCBmb3IgZnVydGhlciBwcm9jZXNzaW5nLlxuIFx0ICovXG4gXHRpZiAodmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcdTAwMjZcdTAwMjYgdmNwdV9lbDJfdGdlX2lzX3NldCh2Y3B1KSBcdTAwMjZcdTAwMjZcbi1cdCAgICBhdG9taWNfcmVhZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KSlcbitcdCAgICBhdG9taWNfcmVhZChcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0X19rdm1fc2tpcF9pbnN0cih2Y3B1KTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG5pbmRleCBkZmI5NmVkYmRjNDNjLi4xZTNmZDk4ZjY1ODliIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcbisrKyBiL2FyY2gvYXJtNjQva3ZtL25lc3RlZC5jXG5AQCAtNDgsNyArNDgsNyBAQCB2b2lkIGt2bV9pbml0X25lc3RlZChzdHJ1Y3Qga3ZtICprdm0pXG4ge1xuIFx0a3ZtLVx1MDAzZWFyY2gubmVzdGVkX21tdXMgPSBOVUxMO1xuIFx0a3ZtLVx1MDAzZWFyY2gubmVzdGVkX21tdXNfc2l6ZSA9IDA7XG4tXHRhdG9taWNfc2V0KFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50LCAwKTtcbitcdGF0b21pY19zZXQoXHUwMDI2a3ZtLVx1MDAzZWFyY2gudm5jcl90bGJfY291bnQsIDApO1xuIH1cbiBcbiBzdGF0aWMgaW50IGluaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUpXG5AQCAtNTA2LDcgKzUwNiw3IEBAIGludCBrdm1fd2Fsa19uZXN0ZWRfczIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwaHlzX2FkZHJfdCBnaXBhLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGludCB0dGxfdG9fc2l6ZSh1OCB0dGwpXG4rc3RhdGljIHVuc2lnbmVkIGludCBfX3R0bF90b19zaXplKHU4IHR0bClcbiB7XG4gXHRpbnQgbGV2ZWwgPSB0dGwgXHUwMDI2IDM7XG4gXHRpbnQgZ3JhbiA9ICh0dGwgXHUwMDNlXHUwMDNlIDIpIFx1MDAyNiAzO1xuQEAgLTU2MiwxMCArNTYyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHRsX3RvX3NpemUodTggdHRsKVxuIFx0cmV0dXJuIG1heF9zaXplO1xuIH1cbiBcbi1zdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCB1OCBsZXZlbClcbitzdGF0aWMgdW5zaWduZWQgaW50IHR0bF90b19zaXplKHU4IHR0bClcbit7XG4rXHRyZXR1cm4gX190dGxfdG9fc2l6ZSh0dGwpID86IFNaXzFHO1xuK31cbitcbitzdGF0aWMgdTggcGdzaGlmdF9sZXZlbF90b190dGwodTE2IHNoaWZ0LCBzOCBsZXZlbClcbiB7XG4gXHR1OCB0dGw7XG4gXG4rXHQvKlxuK1x0ICogSWYgd2UgZG9uJ3QgaGF2ZSBhIHByb3BlciBsZXZlbCwgZmFsbGJhY2sgdG8gdGhlIG1heGltdW1cbitcdCAqIHNpemUuXG4rXHQgKi9cbitcdGlmIChsZXZlbCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRzd2l0Y2goc2hpZnQpIHtcbiBcdGNhc2UgMTI6XG4gXHRcdHR0bCA9IFRMQklfVFRMX1RHXzRLO1xuQEAgLTY3Niw3ICs2ODgsMTEgQEAgdW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxuIFx0XHR0dGwgPSBnZXRfZ3Vlc3RfbWFwcGluZ190dGwobW11LCBhZGRyKTtcbiBcdH1cbiBcbi1cdG1heF9zaXplID0gdHRsX3RvX3NpemUodHRsKTtcbitcdC8qXG4rXHQgKiBEb24ndCB1c2UgdGhlIGRlZmF1bHQgMUdCIGZhbGxiYWNrLCBhcyB3ZSBjYW4gYWRhcHQgdG8gdGhlXG4rXHQgKiBtYXggbWFwcGluZyBzaXplIHdlIGFsbG93IGF0IFMyLlxuK1x0ICovXG4rXHRtYXhfc2l6ZSA9IF9fdHRsX3RvX3NpemUodHRsKTtcbiBcbiBcdGlmICghbWF4X3NpemUpIHtcbiBcdFx0LyogQ29tcHV0ZSB0aGUgbWF4aW11bSBleHRlbnQgb2YgdGhlIGludmFsaWRhdGlvbiAqL1xuQEAgLTg3OSw2ICs4OTUsMTIgQEAgdm9pZCBrdm1fdmNwdV9sb2FkX2h3X21tdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHVubWFwX2wxX3ZuY3Ioc3RydWN0IHZuY3JfdGxiICp2dClcbit7XG4rXHRjbGVhcl9maXhtYXAodm5jcl9maXhtYXAodnQtXHUwMDNlY3B1KSk7XG4rXHR2dC1cdTAwM2VjcHUgPSAtMTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdGhpc19jcHVfcmVzZXRfdm5jcl9maXhtYXAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuIHtcbiBcdGlmICghaG9zdF9kYXRhX3Rlc3RfZmxhZyhMMV9WTkNSX01BUFBFRCkpXG5AQCAtODg3LDEwICs5MDksOCBAQCBzdGF0aWMgdm9pZCB0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRCVUdfT04odmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiLVx1MDAzZWNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpO1xuIFx0QlVHX09OKGlzX2h5cF9jdHh0KHZjcHUpKTtcbiBcbi1cdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGItXHUwMDNlY3B1KSk7XG4tXHR2Y3B1LVx1MDAzZWFyY2gudm5jcl90bGItXHUwMDNlY3B1ID0gLTE7XG4rXHR1bm1hcF9sMV92bmNyKHZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYik7XG4gXHRob3N0X2RhdGFfY2xlYXJfZmxhZyhMMV9WTkNSX01BUFBFRCk7XG4tXHRhdG9taWNfZGVjKFx1MDAyNnZjcHUtXHUwMDNla3ZtLVx1MDAzZWFyY2gudm5jcl9tYXBfY291bnQpO1xuIH1cbiBcbiB2b2lkIGt2bV92Y3B1X3B1dF9od19tbXUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuQEAgLTk3OCwxMSArOTk4LDI3IEBAIHUxNiBnZXRfYXNpZF9ieV9yZWdpbWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBlbnVtIHRyYW5zX3JlZ2ltZSByZWdpbWUpXG4gXHRyZXR1cm4gYXNpZDtcbiB9XG4gXG4tc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyKHN0cnVjdCB2bmNyX3RsYiAqdnQpXG4rc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IHZuY3JfdGxiICp2dClcbiB7XG4rXHRCVUdfT04oIXZ0LVx1MDAzZXZhbGlkKTtcbiBcdHZ0LVx1MDAzZXZhbGlkID0gZmFsc2U7XG4rXHRhdG9taWNfZGVjKFx1MDAyNmt2bS1cdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KTtcbiBcdGlmICh2dC1cdTAwM2VjcHUgIT0gLTEpXG4tXHRcdGNsZWFyX2ZpeG1hcCh2bmNyX2ZpeG1hcCh2dC1cdTAwM2VjcHUpKTtcbitcdFx0dW5tYXBfbDFfdm5jcih2dCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsXG4rXHRcdFx0XHR1NjQgc2NvcGVfc3RhcnQsIHU2NCBzY29wZV9zaXplKVxuK3tcbitcdHU2NCB0bGJfc2l6ZSwgdGxiX3N0YXJ0LCB0bGJfZW5kLCBzY29wZV9lbmQ7XG4rXG4rXHR0bGJfc2l6ZSA9IHR0bF90b19zaXplKHBnc2hpZnRfbGV2ZWxfdG9fdHRsKHZ0LVx1MDAzZXdpLnBnc2hpZnQsIHZ0LVx1MDAzZXdyLmxldmVsKSk7XG4rXG4rXHR0bGJfc3RhcnQgPSBhZGRyIFx1MDAyNiB+KHRsYl9zaXplIC0gMSk7XG4rXHR0bGJfZW5kID0gdGxiX3N0YXJ0ICsgdGxiX3NpemUgLSAxO1xuK1x0c2NvcGVfZW5kID0gc2NvcGVfc3RhcnQgKyBzY29wZV9zaXplIC0gMTtcbitcbitcdHJldHVybiAhKHRsYl9lbmQgXHUwMDNjIHNjb3BlX3N0YXJ0IHx8IHRsYl9zdGFydCBcdTAwM2Ugc2NvcGVfZW5kKTtcbiB9XG4gXG4gLypcbkBAIC0xMDA3LDE5ICsxMDQzLDkgQEAgc3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgc3RhcnQsIHU2NCBlbmQpXG4gXHRpZiAoIWt2bV9oYXNfZmVhdChrdm0sIElEX0FBNjRNTUZSNF9FTDEsIE5WX2ZyYWMsIE5WMl9PTkxZKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pIHtcbi1cdFx0dTY0IGlwYV9zdGFydCwgaXBhX2VuZCwgaXBhX3NpemU7XG4tXG4tXHRcdGlwYV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXHUwMDNld2kucGdzaGlmdCxcbi1cdFx0XHRcdFx0XHRcdCAgICB2dC1cdTAwM2V3ci5sZXZlbCkpO1xuLVx0XHRpcGFfc3RhcnQgPSB2dC1cdTAwM2V3ci5wYSBcdTAwMjYgfihpcGFfc2l6ZSAtIDEpO1xuLVx0XHRpcGFfZW5kID0gaXBhX3N0YXJ0ICsgaXBhX3NpemU7XG4tXG4tXHRcdGlmIChpcGFfZW5kIFx1MDAzYz0gc3RhcnQgfHwgaXBhX3N0YXJ0IFx1MDAzZT0gZW5kKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRpbnZhbGlkYXRlX3ZuY3IodnQpO1xuLVx0fVxuK1x0a3ZtX2Zvcl9lYWNoX3ZuY3JfdGxiKGksIHZjcHUsIHZ0LCBrdm0pXG4rXHRcdGlmICh2bmNyX3RsYl9pbnRlcnNlY3RzKHZ0LCB2dC1cdTAwM2V3ci5wYSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSlcbitcdFx0XHRpbnZhbGlkYXRlX3ZuY3Ioa3ZtLCB2dCk7XG4gfVxuIFxuIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUge1xuQEAgLTEwNDUsMjggKzEwNzEsMTkgQEAgc3RhdGljIHZvaWQgaW52YWxpZGF0ZV92bmNyX3ZhKHN0cnVjdCBrdm0gKmt2bSxcbiBcdGxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoXHUwMDI2a3ZtLVx1MDAzZW1tdV9sb2NrKTtcbiBcbiBcdGt2bV9mb3JfZWFjaF92bmNyX3RsYihpLCB2Y3B1LCB2dCwga3ZtKSB7XG4tXHRcdHU2NCB2YV9zdGFydCwgdmFfZW5kLCB2YV9zaXplO1xuLVxuLVx0XHR2YV9zaXplID0gdHRsX3RvX3NpemUocGdzaGlmdF9sZXZlbF90b190dGwodnQtXHUwMDNld2kucGdzaGlmdCxcbi1cdFx0XHRcdFx0XHRcdCAgIHZ0LVx1MDAzZXdyLmxldmVsKSk7XG4tXHRcdHZhX3N0YXJ0ID0gdnQtXHUwMDNlZ3ZhIFx1MDAyNiB+KHZhX3NpemUgLSAxKTtcbi1cdFx0dmFfZW5kID0gdmFfc3RhcnQgKyB2YV9zaXplO1xuLVxuIFx0XHRzd2l0Y2ggKHNjb3BlLVx1MDAzZXR5cGUpIHtcbiBcdFx0Y2FzZSBUTEJJX0FMTDpcbiBcdFx0XHRicmVhaztcbiBcbiBcdFx0Y2FzZSBUTEJJX1ZBOlxuLVx0XHRcdGlmICh2YV9lbmQgXHUwMDNjPSBzY29wZS1cdTAwM2V2YSB8fFxuLVx0XHRcdCAgICB2YV9zdGFydCBcdTAwM2U9IChzY29wZS1cdTAwM2V2YSArIHNjb3BlLVx1MDAzZXNpemUpKVxuK1x0XHRcdGlmICghdm5jcl90bGJfaW50ZXJzZWN0cyh2dCwgdnQtXHUwMDNlZ3ZhLCBzY29wZS1cdTAwM2V2YSwgc2NvcGUtXHUwMDNlc2l6ZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRpZiAodnQtXHUwMDNld3IubkcgXHUwMDI2XHUwMDI2IHZ0LVx1MDAzZXdyLmFzaWQgIT0gc2NvcGUtXHUwMDNlYXNpZClcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRjYXNlIFRMQklfVkFBOlxuLVx0XHRcdGlmICh2YV9lbmQgXHUwMDNjPSBzY29wZS1cdTAwM2V2YSB8fFxuLVx0XHRcdCAgICB2YV9zdGFydCBcdTAwM2U9IChzY29wZS1cdTAwM2V2YSArIHNjb3BlLVx1MDAzZXNpemUpKVxuK1x0XHRcdGlmICghdm5jcl90bGJfaW50ZXJzZWN0cyh2dCwgdnQtXHUwMDNlZ3ZhLCBzY29wZS1cdTAwM2V2YSwgc2NvcGUtXHUwMDNlc2l6ZSkpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRicmVhaztcbiBcbkBAIC0xMDc2LDcgKzEwOTMsNyBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG4gXG4tXHRcdGludmFsaWRhdGVfdm5jcih2dCk7XG4rXHRcdGludmFsaWRhdGVfdm5jcihrdm0sIHZ0KTtcbiBcdH1cbiB9XG4gXG5AQCAtMTEyNiw4ICsxMTQzLDYgQEAgc3RhdGljIHZvaWQgY29tcHV0ZV9zMV90bGJpX3JhbmdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwsXG4gXHRjYXNlIE9QX1RMQklfVkFMRTFPU05YUzpcbiBcdFx0c2NvcGUtXHUwMDNldHlwZSA9IFRMQklfVkE7XG4gXHRcdHNjb3BlLVx1MDAzZXNpemUgPSB0dGxfdG9fc2l6ZShGSUVMRF9HRVQoVExCSV9UVExfTUFTSywgdmFsKSk7XG4tXHRcdGlmICghc2NvcGUtXHUwMDNlc2l6ZSlcbi1cdFx0XHRzY29wZS1cdTAwM2VzaXplID0gU1pfMUc7XG4gXHRcdHNjb3BlLVx1MDAzZXZhID0gdGxiaV92YV9zMV90b192YSh2YWwpIFx1MDAyNiB+KHNjb3BlLVx1MDAzZXNpemUgLSAxKTtcbiBcdFx0c2NvcGUtXHUwMDNlYXNpZCA9IEZJRUxEX0dFVChUTEJJUl9BU0lEX01BU0ssIHZhbCk7XG4gXHRcdGJyZWFrO1xuQEAgLTExNTQsOCArMTE2OSw2IEBAIHN0YXRpYyB2b2lkIGNvbXB1dGVfczFfdGxiaV9yYW5nZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBpbnN0LCB1NjQgdmFsLFxuIFx0Y2FzZSBPUF9UTEJJX1ZBQUxFMU9TTlhTOlxuIFx0XHRzY29wZS1cdTAwM2V0eXBlID0gVExCSV9WQUE7XG4gXHRcdHNjb3BlLVx1MDAzZXNpemUgPSB0dGxfdG9fc2l6ZShGSUVMRF9HRVQoVExCSV9UVExfTUFTSywgdmFsKSk7XG4tXHRcdGlmICghc2NvcGUtXHUwMDNlc2l6ZSlcbi1cdFx0XHRzY29wZS1cdTAwM2VzaXplID0gU1pfMUc7XG4gXHRcdHNjb3BlLVx1MDAzZXZhID0gdGxiaV92YV9zMV90b192YSh2YWwpIFx1MDAyNiB+KHNjb3BlLVx1MDAzZXNpemUgLSAxKTtcbiBcdFx0YnJlYWs7XG4gXHRjYXNlIE9QX1RMQklfUlZBRTI6XG5AQCAtMTMxNiwxMyArMTMyOSwyMCBAQCB2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGwoc3RydWN0IGt2bSAqa3ZtKVxuICAqICAgaW50ZXJzZWN0cyB3aXRoIHRoZSBUTEJJIHJlcXVlc3QsIGludmFsaWRhdGUgaXQsIGFuZCB1bm1hcCB0aGUgcGFnZVxuICAqICAgZnJvbSB0aGUgZml4bWFwLiBCZWNhdXNlIHdlIG5lZWQgdG8gbG9vayBhdCBhbGwgdGhlIHZjcHUtcHJpdmF0ZSBUTEJzLFxuICAqICAgdGhpcyByZXF1aXJlcyBzb21lIHdpZGUtcmFuZ2luZyBsb2NraW5nIHRvIGVuc3VyZSB0aGF0IG5vdGhpbmcgcmFjZXNcbi0gKiAgIGFnYWluc3QgaXQuIFRoaXMgbWF5IHJlcXVpcmUgc29tZSByZWZjb3VudGluZyB0byBhdm9pZCB0aGUgc2VhcmNoIHdoZW5cbi0gKiAgIG5vIHN1Y2ggVExCIGlzIHByZXNlbnQuXG4rICogICBhZ2FpbnN0IGl0LiBUaGlzIHJlcXVpcmVzIHNvbWUgcmVmY291bnRpbmcgdG8gYXZvaWQgdGhlIHNlYXJjaCB3aGVuXG4rICogICBubyBzdWNoIFRMQiBpcyBwcmVzZW50IChzZWUgYmVsb3cpLlxuICAqXG4gICogLSBPbiBNTVUgbm90aWZpZXJzLCB3ZSBtdXN0IGludmFsaWRhdGUgb3VyIFRMQiBpbiBhIHNpbWlsYXIgd2F5LCBidXRcbiAgKiAgIGxvb2tpbmcgYXQgdGhlIElQQSBpbnN0ZWFkLiBUaGUgZnVubnkgcGFydCBpcyB0aGF0IHRoZXJlIG1heSBub3QgYmUgYVxuICAqICAgc3RhZ2UtMiBtYXBwaW5nIGZvciB0aGlzIHBhZ2UgaWYgTDEgaGFzbid0IGFjY2Vzc2VkIGl0IHVzaW5nIExEL1NUXG4gICogICBpbnN0cnVjdGlvbnMuXG4rICpcbisgKiAtIHZuY3JfdGxiX2NvdW50IHRyYWNrcyB0aGUgbnVtYmVyIG9mIHZhbGlkIFZOQ1IgVExCcyBWTS13aWRlLiBUaGlzIGlzbid0XG4rICogICB0aGUgbnVtYmVyIG9mICptYXBwZWQqIEwxIFZOQ1IgcGFnZXMsIHdoaWNoIGlzIGxpa2VseSBiZSBhIHN1YnNldCAoYW5kXG4rICogICBieSBkZWZpbml0aW9uLCBhIFRMQkkgaGFuZGxlZCBmcm9tIEwxIHJ1bnMgd2l0aCB0aGUgY2Fub25pY2FsIFZOQ1JcbisgKiAgIHBhZ2UsIG5vdCB0aGUgTDEncykuIFRoZSBpbm5lcm1vc3QgdHJhcCBoYW5kbGluZyBjb2RlIGNoZWNrcyB0aGlzIHRvXG4rICogICBmaW5kIG91dCB3aGV0aGVyIHRvIHJldHVybiB0byB0aGUgZ3Vlc3QgQVNBUCAobm8gTDEgVExCcykgb3IgdG8gdmlzaXRcbisgKiAgIHRoaXMgcGFydCBvZiB0aGUgd29ybGQgZm9yIHNvbWUgZXh0cmEgaW52YWxpZGF0aW9uIHdvcmsuXG4gICovXG4gXG4gaW50IGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbkBAIC0xMzc3LDcgKzEzOTcsOCBAQCBzdGF0aWMgaW50IGt2bV90cmFuc2xhdGVfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgKmlzX2dtZW0pXG4gXHQgKi9cbiBcdHNjb3BlZF9ndWFyZCh3cml0ZV9sb2NrLCBcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VtbXVfbG9jaykge1xuIFx0XHR0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcCh2Y3B1KTtcbi1cdFx0dnQtXHUwMDNldmFsaWQgPSBmYWxzZTtcbitcdFx0aWYgKHZ0LVx1MDAzZXZhbGlkKVxuK1x0XHRcdGludmFsaWRhdGVfdm5jcih2Y3B1LVx1MDAzZWt2bSwgdnQpO1xuIFxuIFx0XHR2dC1cdTAwM2V3aSA9IChzdHJ1Y3QgczFfd2Fsa19pbmZvKSB7XG4gXHRcdFx0LnJlZ2ltZVx0PSBUUl9FTDIwLFxuQEAgLTE0NDksNiArMTQ3MCw4IEBAIHN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcbiBcdFx0dnQtXHUwMDNldmFsaWQgPSB0cnVlO1xuIFx0XHR2dC1cdTAwM2VjcHUgPSAtMTtcbiBcbitcdFx0YXRvbWljX2luYyhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfdGxiX2NvdW50KTtcbitcbiBcdFx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX01BUF9MMV9WTkNSX0VMMiwgdmNwdSk7XG4gXHRcdGt2bV9yZWxlYXNlX2ZhdWx0aW5fcGFnZSh2Y3B1LVx1MDAzZWt2bSwgcGFnZSwgZmFsc2UsIHZ0LVx1MDAzZXdyLnB3IFx1MDAyNlx1MDAyNiB2dC1cdTAwM2VocGFfd3JpdGFibGUpO1xuIFx0fVxuQEAgLTE1NjgsNiArMTU5MSw5IEBAIHN0YXRpYyB2b2lkIGt2bV9tYXBfbDFfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4gXHRpZiAoIXZ0LVx1MDAzZXZhbGlkKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAoISh2Y3B1X3JlYWRfc3lzX3JlZyh2Y3B1LCBTQ1RMUl9FTDIpIFx1MDAyNiBTQ1RMUl9FTHhfTSkgIT0gczFfbW11X2Rpc2FibGVkKFx1MDAyNnZ0LVx1MDAzZXdyKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0aWYgKHJlYWRfdm5jcl9lbDIodmNwdSkgIT0gdnQtXHUwMDNlZ3ZhKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTU5Miw3ICsxNjE4LDYgQEAgc3RhdGljIHZvaWQga3ZtX21hcF9sMV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbiBcdGlmIChwZ3Byb3RfdmFsKHByb3QpICE9IHBncHJvdF92YWwoUEFHRV9OT05FKSkge1xuIFx0XHRfX3NldF9maXhtYXAodm5jcl9maXhtYXAodnQtXHUwMDNlY3B1KSwgdnQtXHUwMDNlaHBhLCBwcm90KTtcbiBcdFx0aG9zdF9kYXRhX3NldF9mbGFnKEwxX1ZOQ1JfTUFQUEVEKTtcbi1cdFx0YXRvbWljX2luYyhcdTAwMjZ2Y3B1LVx1MDAzZWt2bS1cdTAwM2VhcmNoLnZuY3JfbWFwX2NvdW50KTtcbiBcdH1cbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1ODoyOS43MDQzNTA4ODZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODcxMDIzOTMyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIEtWTSBBUk02NCBOZXN0ZWQgVmlydHVhbGl6YXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIHBva2luZyBhcm91bmQgaW4gS1ZNJ3MgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGltcGxlbWVudGF0aW9uIGZvciBBUk02NCwgc3BlY2lmaWNhbGx5IHRoZSBWTkNSIChWaXJ0dWFsIE5lc3RlZCBDb250cm9sIFJlZ2lzdGVyKSBUTEIgaGFuZGxpbmcuIEl0J3MgbWFraW5nIGNoYW5nZXMgdGhhdCBzZWVtIHByZXR0eSBmdW5kYW1lbnRhbCwgbGlrZSByZW5hbWluZyBgdm5jcl9tYXBfY291bnRgIHRvIGB2bmNyX3RsYl9jb3VudGAsIGFuZCBhZGp1c3RpbmcgaG93IHRoZXNlIFZOQ1IgVExCcyBhcmUgaW52YWxpZGF0ZWQgYW5kIHRyYWNrZWQuIEkgc2VlIG5ldyBmdW5jdGlvbnMgYmVpbmcgaW50cm9kdWNlZDogYHMxX21tdV9kaXNhYmxlZCgpYCBhbmQgYF9fdHRsX3RvX3NpemUoKWAsIHBsdXMgc29tZSBtb2RpZmljYXRpb25zIHRvIGV4aXN0aW5nIGxvZ2ljIGluIGB0dGxfdG9fc2l6ZSgpYC4gVGhlbiwgd2UgaGF2ZSBjaGFuZ2VzIGluIGZ1bmN0aW9ucyBsaWtlIGBpbnZhbGlkYXRlX3ZuY3JfdmEoKWAsIGBrdm1faW52YWxpZGF0ZV92bmNyX2lwYSgpYCwgYHRoaXNfY3B1X3Jlc2V0X3ZuY3JfZml4bWFwKClgLCBgaW52YWxpZGF0ZV92bmNyKClgLCBga3ZtX3RyYW5zbGF0ZV92bmNyKClgLCBhbmQgYGt2bV9tYXBfbDFfdm5jcigpYC4gVGhlc2UgYXJlIGFsbCBjb3JlIEtWTSBBUk02NCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gZnVuY3Rpb25zLlxuXG5UaGlzIGlzIGNyaXRpY2FsIGtlcm5lbCBsb2dpYywgbm8gZG91YnQgYWJvdXQgaXQsIGFuZCBpdCBkZWZpbml0ZWx5IG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gV2UgYWJzb2x1dGVseSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucyBvciB2dWxuZXJhYmlsaXRpZXMuXG5cbk15IGZpcnN0IHN0ZXAgaXMgdG8gbmFpbCBkb3duIHRoZSBmb2N1cyBzeW1ib2xzIGFuZCByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBhc3N1bWluZyB3ZSdsbCBuZWVkIGBDT05GSUdfS1ZNYCBhbmQgYENPTkZJR19BUk02NGAsIHdoaWNoIGlzIGltcGxpY2l0IGdpdmVuIHRoZSBhcmNoaXRlY3R1cmUsIG9mIGNvdXJzZS4gRm9yIG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBzcGVjaWZpY2FsbHksIHRoZXJlIG1pZ2h0IGJlIGEgbW9yZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBvciB0d28sIGJ1dCB0aGUgc3RhbmRhcmQgS1ZNIEFSTTY0IGNvbmZpZyB0eXBpY2FsbHkgY292ZXJzIHRoYXQuIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIGBhcmNoL2FybTY0L2t2bS9LY29uZmlnYCB0byBiZSBzdXJlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNvbmZpcm0gYWxsIHJlcXVpcmVkIGNvbmZpZyBvcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Njk5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTI6NTg6NDguNDE0NTkzNjg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODg0NjM4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vS2NvbmZpZz0xOD1pZiBWSVJUVUFMSVpBVElPTlxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMTktXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzoyMDptZW51Y29uZmlnIEtWTVxcbmFyY2gvYXJtNjQva3ZtL0tjb25maWctMjEtXFx0Ym9vbCBcXFwiS2VybmVsLWJhc2VkIFZpcnR1YWwgTWFjaGluZSAoS1ZNKSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1ODo0OC41NDM0NDU1NDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDk1NzU0MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgc3RyZWFtIG9mIHRob3VnaHQ6XG5cbioqQ2hlY2tpbmcgZm9yIEFSTTY0IE5lc3RlZCBLVk0gQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0IHRoaW5ncyBmaXJzdCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgZG93biB0aGlzIHJhYmJpdCBob2xlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIG9idmlvdXMuIFRoZSBnb2FsIGlzIG5lc3RlZCBLVk0gb24gQVJNNjQsIHJpZ2h0PyBTbywgdGhlIGltbWVkaWF0ZSwgKm11c3QtY2hlY2sqIGl0ZW0gb24gbXkgbWVudGFsIGNoZWNrbGlzdCBpczogSXMgdGhlcmUgYW55IHNwZWNpZmljIG9yIGRlZGljYXRlZCBjb25maWd1cmF0aW9uIGd1aWRhbmNlLCBwZXJoYXBzIHNwZWNpZmljIHF1aXJrcywgb3Iga25vd24gZ290Y2hhcywgZm9yIHJ1bm5pbmcgbmVzdGVkIEtWTSBvbiBhbiBBUk02NCBhcmNoaXRlY3R1cmUgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZiwgYmVmb3JlIHdhc3RpbmcgdmFsdWFibGUgdGltZSByZWludmVudGluZyBhIHdoZWVsPyBMZXQgbWUgZ28gYW5kIGNvbmZpcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc0NzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1ODo1OC4wMzkyMDI1MDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE3MTIwNTUwLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1ODo1OC4zNTYzMzU5NThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgwNTgwNzExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgS1ZNIE5lc3RlZCBWaXJ0dWFsaXphdGlvbiBvbiBBUk02NCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBzdGF0dXMgb2YgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQgaW4gS1ZNIG9uIEFSTTY0LiBJbnN0ZWFkIG9mIG1hbnVhbGx5IHNpZnRpbmcgdGhyb3VnaCB0aGUgc291cmNlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIGxldCdzIGJlIGVmZmljaWVudC4gVGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBoaWdoLWxldmVsIHZpZXcgb2YgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb25zIGlzIG9mdGVuIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGxvb2sgaW4gYGFyY2gvYXJtNjQva3ZtL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhhdCBmaWxlIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRoZSB0ZXJtIFwiTkVTVEVELlwiIFRoYXQgc2hvdWxkIGhpZ2hsaWdodCBhbnkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGZlYXR1cmUuIFRoYXQncyBhIG11Y2ggZmFzdGVyIGFuZCBmb2N1c2VkIGFwcHJvYWNoIHRoYW4gc3RhcnRpbmcgYSBkZWVwIGRpdmUgZnJvbSBzY3JhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjkyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTI6NTk6MDEuODM2OTE5Mzk5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTY2NDAzMywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkVTVEVEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEyOjU5OjAxLjk1MjU4OTMxMVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDgzNDcxMTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKk5lc3RlZCBWaXJ0dWFsaXphdGlvbiBvbiBBUk02NCAtIERpZ2dpbmcgaW50byB0aGUgQ29kZSoqXG5cbkFscmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb24gQVJNNjQuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyBpdCBoYXZlIGl0cyBvd24gZGVkaWNhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBpcyBpdCBqdXN0IGltcGxpY2l0bHkgZW5hYmxlZCBhcyBwYXJ0IG9mIHRoZSBLVk0gc2V0dXAgb24gdGhhdCBhcmNoaXRlY3R1cmU/IEkgdmFndWVseSByZWNhbGwgdGhhdCBuZXN0ZWQgdmlydHVhbGl6YXRpb24gb24geDg2IGhhcyBpdHMgb3duIHNwZWNpYWwga25vYiwgYnV0IEknbSBkcmF3aW5nIGEgYmxhbmsgb24gQVJNNjQuIEkgc2hvdWxkIHJlYWxseSBicnVzaCB1cCBvbiBteSBLVk0gaW50ZXJuYWxzIGFnYWluLi4uXG5cblRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyLCBJJ20gZ29pbmcgdG8gaGVhZCBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgIGZpbGUgc2hvdWxkIGJlIHRoZSBwbGFjZSB0byBzdGFydC4gSSdtIGhvcGluZyB0byBmaW5kIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBpbiB0aGVyZSwgc29tZXRoaW5nIGxpa2UgYCNpZmRlZiBDT05GSUdfU09NRVRISU5HX05FU1RFRF9BUk02NGAuIElmIGl0ICppcyogY29uZGl0aW9uYWxseSBjb21waWxlZCwgdGhhdCB3aWxsIGdpdmUgbWUgbXkgYW5zd2VyIHF1aWNrbHkuIElmIG5vdCwgaXQgbWVhbnMgbmVzdGVkIHZpcnR1YWxpemF0aW9uIG1pZ2h0IGJlIGEgc3RhbmRhcmQgcGFydCBvZiBLVk0ncyBBUk02NCBzdXBwb3J0LCB3aGljaCBpcyBzdGlsbCBpbXBvcnRhbnQgdG8gZGV0ZXJtaW5lLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzkyNiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEyOjU5OjA2LjY2MDkzODQ3NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE4ODAxMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmVzdGVkLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU9MTY9a3ZtLXkgKz0gYXJtLm8gbW11Lm8gbW1pby5vIHBzY2kubyBoeXBlcmNhbGxzLm8gcHZ0aW1lLm8gXFxcXFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMTktXFx0IHZnaWMtc3lzLXJlZy12My5vIGZwc2ltZC5vIHBrdm0ubyBcXFxcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MjA6XFx0IGFyY2hfdGltZXIubyB0cm5nLm8gdm1pZC5vIGVtdWxhdGUtbmVzdGVkLm8gbmVzdGVkLm8gYXQubyBcXFxcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjEtXFx0IHZnaWMvdmdpYy5vIHZnaWMvdmdpYy1pbml0Lm8gXFxcXFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGUtMjUtXFx0IHZnaWMvdmdpYy1tbWlvLXYzLm8gdmdpYy92Z2ljLWt2bS1kZXZpY2UubyBcXFxcXFxuYXJjaC9hcm02NC9rdm0vTWFrZWZpbGU6MjY6XFx0IHZnaWMvdmdpYy1pdHMubyB2Z2ljL3ZnaWMtZGVidWcubyB2Z2ljL3ZnaWMtdjMtbmVzdGVkLm8gXFxcXFxcbmFyY2gvYXJtNjQva3ZtL01ha2VmaWxlLTI3LVxcdCB2Z2ljL3ZnaWMtdjUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1OTowNi43NTI4Mjk5MThaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODEyMzI3OTcwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBQYXRjaCBmb3IgS2V5IE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgcmVsYXRlZCB0byBLVk0sIHNwZWNpZmljYWxseSB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGFzcGVjdHMsIHNpbmNlIGl0J3MgdW5jb25kaXRpb25hbGx5IGNvbXBpbGVkIHdoZW4gS1ZNIGlzIGVuYWJsZWQuIFNvLCBgS1ZNYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIHRoYXQgZHJpdmVzIHRoaXMuIE5vdywgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjb3JlIGNoYW5nZXMuXG5cbkxldCdzIHNlZSwgdGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgaW4gdGhlIGZvbGxvd2luZzpcblxuLSAgIGBrdm1faW5pdF9uZXN0ZWRgXG4tICAgYHR0bF90b19zaXplYFxuLSAgIGBwZ3NoaWZ0X2xldmVsX3RvX3R0bGBcbi0gICBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgXG4tICAgYGt2bV92Y3B1X2xvYWRfaHdfbW11YCAobm90IGRpcmVjdGx5LCBqdXN0IGNvbnRleHQgaW4gYSBmdW5jdGlvbiBjYWxsKVxuLSAgIGB1bm1hcF9sMV92bmNyYFxuLSAgIGB0aGlzX2NwdV9yZXNldF92bmNyX2ZpeG1hcGBcbi0gICBgaW52YWxpZGF0ZV92bmNyYFxuLSAgIGB2bmNyX3RsYl9pbnRlcnNlY3RzYFxuLSAgIGBrdm1faW52YWxpZGF0ZV92bmNyX2lwYWBcbi0gICBgaW52YWxpZGF0ZV92bmNyX3ZhYFxuLSAgIGBjb21wdXRlX3MxX3RsYmlfcmFuZ2VgXG4tICAgYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYFxuLSAgIGBrdm1fdHJhbnNsYXRlX3ZuY3JgXG4tICAgYGt2bV9tYXBfbDFfdm5jcmBcblxuTm93LCB0byB1bmRlcnN0YW5kIHRoZSBBUEkgaW50ZXJhY3Rpb25zLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGVudHJ5IHBvaW50cyB0aGF0IGFyZSAqbm90KiBzdGF0aWMsIG9yIGlubGluZWQuIFRob3NlIGFyZSB0aGUgb25lcyBvdGhlcnMgYXJlIGxpa2VseSB0byBjYWxsLiBTbywgSSBzZWU6XG5cbi0gICBga3ZtX2luaXRfbmVzdGVkYFxuLSAgIGBrdm1fd2Fsa19uZXN0ZWRfczJgIChjb250ZXh0KVxuLSAgIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWBcbi0gICBga3ZtX3ZjcHVfcHV0X2h3X21tdWAgKGNvbnRleHQpXG4tICAgYGt2bV9hcmNoX2ZsdXNoX3NoYWRvd19hbGxgIChjb250ZXh0KVxuLSAgIGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmBcblxuV2FpdCwgYGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhYCBpcyBzdGF0aWM/IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdDsgdGhlcmUncyBhIGdvb2QgY2hhbmNlIEkgbmVlZCB0byB0cmFjayBkb3duIG90aGVyIGNhbGxlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NDEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTI6NTk6MTQuODc2MTEzMjc2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTExNjU2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faW52YWxpZGF0ZV92bmNyX2lwYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMDEwPXN0YXRpYyBib29sIHZuY3JfdGxiX2ludGVyc2VjdHMoc3RydWN0IHZuY3JfdGxiICp2dCwgdTY0IGFkZHIsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMDM0LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEwMzU6c3RhdGljIHZvaWQga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoc3RydWN0IGt2bSAqa3ZtLCB1NjQgc3RhcnQsIHU2NCBlbmQpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTAzNi17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMjI5PXZvaWQga3ZtX25lc3RlZF9zMl93cChzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjQ0LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEyNDU6XFx0a3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoa3ZtLCAwLCBCSVQoa3ZtLVxcdTAwM2VhcmNoLm1tdS5wZ3QtXFx1MDAzZWlhX2JpdHMpKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjQ2LX1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEyNDg9dm9pZCBrdm1fbmVzdGVkX3MyX3VubWFwKHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBtYXlfYmxvY2spXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjYzLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEyNjQ6XFx0a3ZtX2ludmFsaWRhdGVfdm5jcl9pcGEoa3ZtLCAwLCBCSVQoa3ZtLVxcdTAwM2VhcmNoLm1tdS5wZ3QtXFx1MDAzZWlhX2JpdHMpKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjY1LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTI6NTk6MTQuOTU1MjM3MzIxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3OTAwNTUwODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqS1ZNIFZpcnR1YWxpemF0aW9uIElucXVpcnkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEtWTSBjb2RlLi4uIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBga3ZtX2ludmFsaWRhdGVfdm5jcl9pcGFgIGlzIGRlZmluaXRlbHkgYSBzdGF0aWMgZnVuY3Rpb24uIE5vIHN1cnByaXNlcyB0aGVyZSwgbWFrZXMgc2Vuc2UgaW4gdGhlIGNvbnRleHQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXM6IFdoYXQgYWJvdXQgYGt2bV90cmFuc2xhdGVfdm5jcmA/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpdHMgc2NvcGUgYW5kIHVzYWdlLiBJcyBpdCBzdGF0aWMgYXMgd2VsbCwgb3IgaXMgaXQgZXhwb3NlZCBtb3JlIGJyb2FkbHk/IFVuZGVyc3RhbmRpbmcgdGhhdCBmdW5jdGlvbidzIHZpc2liaWxpdHkgd2lsbCBiZSBrZXkgdG8gZmlndXJpbmcgb3V0IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgdmlydHVhbGl6YXRpb24gaW5mcmFzdHJ1Y3R1cmUuIE5lZWQgdG8ga2VlcCBkaWdnaW5nLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MjYsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMjo1OTo0Mi44NTU3OTQwMzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NDk2NDI5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1fdHJhbnNsYXRlX3ZuY3JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTM3Mz1zdGF0aWMgdTY0IHJlYWRfdm5jcl9lbDIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTM3Ny1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzc4OnN0YXRpYyBpbnQga3ZtX3RyYW5zbGF0ZV92bmNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCAqaXNfZ21lbSlcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzc5LXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE1MTA9aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTI3LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE1Mjg6XFx0cmV0ID0ga3ZtX3RyYW5zbGF0ZV92bmNyKHZjcHUsIFxcdTAwMjZpc19nbWVtKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTI5LVxcdHN3aXRjaCAocmV0KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEyOjU5OjQzLjEzMDc2NTA2M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTQ5MTA0MTMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gVk5DUiBBYm9ydCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBWaXJ0dWFsIE5lc3RlZCBDb2RlIFJlLWVudHJ5IChWTkNSKSBhYm9ydHMgYXJlIGhhbmRsZWQgd2l0aGluIHRoZSBLVk0gaHlwZXJ2aXNvci4gSSBzZWUgYGt2bV9oYW5kbGVfdm5jcl9hYm9ydGAgaXMgdGhlIGZ1bmN0aW9uIHdlJ3JlIGNvbmNlcm5lZCB3aXRoIGluaXRpYWxseS4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQgY2FsbHMgYGt2bV90cmFuc2xhdGVfdm5jcmAuIFRoYXQgbWFrZXMgc2Vuc2UgLSB3ZSBuZWVkIHRvIHRyYW5zbGF0ZSB0aGUgZmF1bHRpbmcgYWRkcmVzcyB0byBmaWd1cmUgb3V0IHdoYXQgd2VudCB3cm9uZy5cblxuQnV0LCBhbmQgdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlciBsb29rLCB3aGF0J3MgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIGBrdm1fbWFwX2wxX3ZuY3JgPyBXZSdyZSBkZWFsaW5nIHdpdGggbmVzdGVkIHBhZ2luZyBoZXJlLCBhbmQgSSBzdXNwZWN0IGBrdm1fbWFwX2wxX3ZuY3JgIG1pZ2h0IGJlIGNydWNpYWwgaW4gZXN0YWJsaXNoaW5nIG9yIG1haW50YWluaW5nIHRoZSBMMSBtYXBwaW5ncyB0aGF0IGFyZSByZWxldmFudCBpbiB0aGlzIHNjZW5hcmlvLiBJcyB0aGUgYWJvcnQgaGFwcGVuaW5nIGJlY2F1c2Ugb2YgYW4gaXNzdWUgZHVyaW5nIHRoZSBtYXBwaW5nIHByb2Nlc3MgZG9uZSBieSBga3ZtX21hcF9sMV92bmNyYCwgb3IgaXMgdGhpcyBmdW5jdGlvbiBtb3JlIG9mIGEgc2V0dXAsIGFuZCB0aGUgYWN0dWFsIHRyYW5zbGF0aW9uIGRvbmUgYnkgYGt2bV90cmFuc2xhdGVfdm5jcmAgaXMgdGhlIGN1bHByaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSB0d28gZnVuY3Rpb25zIGludGVyYWN0IHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGUgYWJvcnQgaGFuZGxpbmcgZmxvdy4gSSdsbCBuZWVkIHRvIHRyYWNlIGJhY2sgdGhlIGNhbGwgcGF0aHMgYW5kIGNvbnNpZGVyIHRoZSBzcGVjaWZpYyBjb250ZXh0IG9mIHRoZSBWTkNSIGFib3J0IHRvIHNlZSBob3cgdGhlIEwxIG1hcHBpbmdzIHBsYXkgYSByb2xlLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHN1cnJvdW5kaW5nIGNvZGUgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMwMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEyOjU5OjU4LjYyMTgxMDc4NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE1MzkwOTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9tYXBfbDFfdm5jclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9uZXN0ZWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xNTEwPWludCBrdm1faGFuZGxlX3ZuY3JfYWJvcnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTU2OS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxNTcwOnN0YXRpYyB2b2lkIGt2bV9tYXBfbDFfdm5jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTU3MS17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xOTU3PXZvaWQgY2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTk3MC1cXHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9NQVBfTDFfVk5DUl9FTDIsIHZjcHUpKVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE5NzE6XFx0XFx0a3ZtX21hcF9sMV92bmNyKHZjcHUpO1xcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE5NzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEyOjU5OjU4LjkzNzIwNjg5NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTUzMjUwOTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBjb25zaWRlcmluZyBJJ20gYW4gZXhwZXJ0OlxuXG4qKk5hdmlnYXRpbmcgS1ZNIFZpcnR1YWxpemF0aW9uIEludGVybmFscyoqXG5cbk9rYXksIGxldCBtZSBzZWUuLi4gSSdtIHRyYWNpbmcgdGhlIGZsb3cgb2YgbmVzdGVkIHZpcnR1YWxpemF0aW9uIFZDUFUgcmVxdWVzdHMuIFJpZ2h0LCBgY2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHNgIGlzIHVsdGltYXRlbHkgdXNpbmcgYGt2bV9tYXBfbDFfdm5jcmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0J3MgdGhlIGNvcmUgbWFwcGluZyBmdW5jdGlvbiBmb3IgdGhlIEwxIFZOQ3IgKE5lc3RlZCBWaXJ0dWFsIENQVSBSZXF1ZXN0KSBzdHJ1Y3R1cmUuIEJ1dCBteSBtaW5kIGRyaWZ0cy4gVGhhdCdzIGZpbmUuXG5cbkhvbGQgb24uLi4gSSBuZWVkIHRvIGNvbnNpZGVyIGBpbnZhbGlkYXRlX3ZuY3JfdmFgLiBUaGF0J3MgY3JpdGljYWwgdG9vLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgaXMgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjbGVhcmluZyB0aGUgdmlydHVhbCBhZGRyZXNzIG1hcHBpbmcgYXNzb2NpYXRlZCB3aXRoIHRoZSBWTkNSLiBUaGlzIGNvdWxkIGhhcHBlbiBvbiBhIFZNIGV4aXQsIGFuIGludmFsaWRhdGlvbiBvZiB0aGUgZ3Vlc3QgcGFnZSB0YWJsZXMsIG9yIHNvbWUgb3RoZXIgZXZlbnQgdGhhdCByZXF1aXJlcyB0aGUgb2xkIFZOQ1IgdG8gYmUgcmUtbWFwcGVkIG9uIGEgcmUtZW50cnkgZXZlbnQuIEkgbmVlZCB0byBrZWVwIHRoYXQgb25lIGZyZXNoIGluIG15IGhlYWQgYXMgSSBjb250aW51ZS4gTGV0IG1lIG1lbnRhbGx5IGxpbmsgdGhvc2UgdHdvIGZvciBub3csIGp1c3QgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbG9zZSB0aGUgdGhyZWFkLi4uIGBjaGVja19uZXN0ZWRfdmNwdV9yZXF1ZXN0c2Agd2l0aCBpdHMgZGVwZW5kZW5jeSBvbiBga3ZtX21hcF9sMV92bmNyYCwgYW5kIHRoZW4gY29uc2lkZXIgdGhlIGludmFsaWRhdGlvbiBsb2dpYyBvZiBgaW52YWxpZGF0ZV92bmNyX3ZhYC4gVGhhdCdzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTcxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTM6MDA6MDQuMDkwNDcxNDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDM2NDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnZhbGlkYXRlX3ZuY3JfdmFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTA1MT1zdHJ1Y3QgczFlMl90bGJpX3Njb3BlIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEwNjMtXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTA2NDpzdGF0aWMgdm9pZCBpbnZhbGlkYXRlX3ZuY3JfdmEoc3RydWN0IGt2bSAqa3ZtLFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEwNjUtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzMWUyX3RsYmlfc2NvcGUgKnNjb3BlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTIxOT12b2lkIGt2bV9oYW5kbGVfczFlMl90bGJpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjI1LVxcdGd1YXJkKHdyaXRlX2xvY2spKFxcdTAwMjZ2Y3B1LVxcdTAwM2Vrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMjI2OlxcdGludmFsaWRhdGVfdm5jcl92YSh2Y3B1LVxcdTAwM2Vrdm0sIFxcdTAwMjZzY29wZSk7XFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTIyNy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAwOjA0LjE5MDg1ODgzNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzUzODU3NTY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgVExCIEludmFsaWRhdGlvbiBDaGFuZ2VzKipcblxuT2theSwgc28gYGt2bV9oYW5kbGVfczFlMl90bGJpYCB1bHRpbWF0ZWx5IGNhbGxzIGBpbnZhbGlkYXRlX3ZuY3JfdmFgLiBUaGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IG1vdmUgaXMgdG8gaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgbW9kaWZpZWQgdGhlbXNlbHZlcywgb3IgY2FsbCBhbnkgc3RhdGljIGZ1bmN0aW9ucyB0aGF0ICpoYXZlKiBiZWVuIGNoYW5nZWQuIFRoYXQgZ2l2ZXMgbWUgYSBnb29kIG92ZXJ2aWV3IG9mIHRoZSByaXBwbGUgZWZmZWN0LlxuXG5MZXQncyBzZWUuLi4gdGhlIGxpc3QgSSd2ZSBnb3QgaXM6XG4tIGBrdm1faW5pdF9uZXN0ZWRgXG4tIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWBcbi0gYGt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiYFxuLSBga3ZtX25lc3RlZF9zMl93cGBcbi0gYGt2bV9uZXN0ZWRfczJfdW5tYXBgXG4tIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgXG4tIGBjaGVja19uZXN0ZWRfdmNwdV9yZXF1ZXN0c2Bcbi0gYGt2bV9oYW5kbGVfczFlMl90bGJpYFxuLSBga3ZtX3ZjcHVfcHV0X2h3X21tdWBcbi0gYGt2bV92Y3B1X2xvYWRfaHdfbW11YFxuXG5UaGVzZSBhbGwgbG9vayBsaWtlIHBvdGVudGlhbCBjYW5kaWRhdGVzIGZvciBpbmNsdXNpb24gaW4gbXkgYEZvY3VzU3ltYm9sc2Agc2V0LiBCdXQgSSBuZWVkIHRvIHJlZmluZSB0aGF0IGluaXRpYWwgbGlzdC4gSSBuZWVkIHRvIHdlZWQgb3V0IGFueXRoaW5nIHRoYXQncyB0b28gZ2VuZXJpYyBvciwgbW9yZSBpbXBvcnRhbnRseSwgaW4gYSBob3QgcGF0aC5cblxuQWxyaWdodCwgYGt2bV92Y3B1X3B1dF9od19tbXVgIGFuZCBga3ZtX3ZjcHVfbG9hZF9od19tbXVgIGFyZSBkZWZpbml0ZWx5IHBlcmZvcm1hbmNlIGNyaXRpY2FsLCBzbyB0aGF0IGlzIG9mZiB0aGUgbGlzdC4gVGhlbiBgY2hlY2tfbmVzdGVkX3ZjcHVfcmVxdWVzdHNgIGlzIGNhbGxlZCBvbiBldmVyeSB2Q1BVIHJ1biAtIG9idmlvdXNseSBhIGhvdCBwYXRoLlxuXG5Ob3csIHRoYXQgbGVhdmVzIGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgIGFzIGEgZmF1bHQgaGFuZGxlciAtIHRoYXQncyBnb29kLiBBbmQgYGt2bV9oYW5kbGVfczFlMl90bGJpYCBpcyBhbiBpbnN0cnVjdGlvbiBoYW5kbGVyLCB3aGljaCBJIGFsc28gbGlrZS4gVGhlbiBga3ZtX25lc3RlZF9zMl93cGAgYW5kIGBrdm1fbmVzdGVkX3MyX3VubWFwYCBsb29rIHJlbGV2YW50LCBhbmQgZmluYWxseSBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgIGFuZCBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgIGFyZSBnb29kIHBpY2tzLlxuXG5OZXh0IEknbGwgcXVpY2tseSBjaGVjayBpZiBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YCBhbmQgYGt2bV9oYW5kbGVfczFlMl90bGJpYCBhcmUgZXhwb3J0ZWQsIG9yIHNpbXBseSBub24tc3RhdGljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYwMywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMzowMDoyMS43Mjk0Mzc1NzZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODcyMTc0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faGFuZGxlX3ZuY3JfYWJvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9hcm02NC9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmM9Mzc2PXN0YXRpYyBleGl0X2hhbmRsZV9mbiBhcm1fZXhpdF9oYW5kbGVyc1tdID0ge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYy0zOTUtXFx0W0VTUl9FTHhfRUNfREFCVF9MT1ddXFx0PSBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0LFxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmM6Mzk2OlxcdFtFU1JfRUx4X0VDX0RBQlRfQ1VSXVxcdD0ga3ZtX2hhbmRsZV92bmNyX2Fib3J0LFxcbmFyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmMtMzk3LVxcdFtFU1JfRUx4X0VDX1NPRlRTVFBfTE9XXT0ga3ZtX2hhbmRsZV9ndWVzdF9kZWJ1ZyxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE0ODU9c3RhdGljIHZvaWQgaGFuZGxlX3ZuY3JfcGVybShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xNTA5LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjE1MTA6aW50IGt2bV9oYW5kbGVfdm5jcl9hYm9ydChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTUxMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAwOjIxLjg1ODE2OTYzOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY2OTMxNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgRXhpdCBIYW5kbGVycyBpbiBLVk0qKlxuXG5Pa2F5LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGV4aXQgaGFuZGxlcnMsIGNvbmZpcm1lZC4gR29vZCwgdGhhdCdzIHRoZSBzdGFydGluZyBwb2ludC4gTm93LCB0byBnZXQgdG8gdGhlIHNwZWNpZmljcyBhbmQgdW5kZXJzdGFuZCB0aGUgZmxvdywgSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBga3ZtX2hhbmRsZV9zMWUyX3RsYmlgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHRoaXMgbWlnaHQgYmUgYSBrZXkgaGFuZGxlci4gVGltZSB0byBkZWx2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpdCdzIHJlc3BvbnNpYmxlIGZvciwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIFRMQkkgb3BlcmF0aW9ucy4gTGV0J3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgdGlkYml0cyBpdCBtaWdodCBob2xkLiBJIGFudGljaXBhdGUgdGhhdCB0aGlzIHdpbGwgYmUgYSB3b3J0aHdoaWxlIHBhdGggdG8gdW5kZXJzdGFuZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NzEsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMzowMDoyNS4wMjUxMDUyNzhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTI5Nzg0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faGFuZGxlX3MxZTJfdGxiaVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTEwMj1zdGF0aWMgdm9pZCBjb21wdXRlX3MxX3RsYmlfcmFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgaW5zdCwgdTY0IHZhbCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyMTgtXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTIxOTp2b2lkIGt2bV9oYW5kbGVfczFlMl90bGJpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwpXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTIyMC17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTQxMzU9c3RhdGljIGJvb2wgaGFuZGxlX3RsYmlfZWwyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTQyLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM6NDE0MzpcXHRrdm1faGFuZGxlX3MxZTJfdGxiaSh2Y3B1LCBzeXNfZW5jb2RpbmcsIHAtXFx1MDAzZXJlZ3ZhbCk7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTQ0LVxcdHJldHVybiB0cnVlO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYz00MTQ3PXN0YXRpYyBib29sIGhhbmRsZV90bGJpX2VsMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtNDE3Ny1cXHRpZiAodmNwdV9lbDJfZTJoX2lzX3NldCh2Y3B1KSBcXHUwMDI2XFx1MDAyNiB2Y3B1X2VsMl90Z2VfaXNfc2V0KHZjcHUpKSB7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MTc4OlxcdFxcdGt2bV9oYW5kbGVfczFlMl90bGJpKHZjcHUsIHN5c19lbmNvZGluZywgcC1cXHUwMDNlcmVndmFsKTtcXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jLTQxNzktXFx0XFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAwOjI1LjE0NjQxNzE1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTA3ODk1NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFN5c3RlbSBSZWdpc3RlciBIYW5kbGVyIENhbGwqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2x1ZSBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBjYWxscyBvcmlnaW5hdGluZyBmcm9tIHRoZSBgc3lzX3JlZ3NgIGhhbmRsZXJzLiBUaGF0IGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2Ygd2hhdCB3ZSBuZWVkIHRvIGxvb2sgYXQuIFdlJ3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIHN5c3RlbSByZWdpc3RlciBhY2Nlc3MsIGxpa2VseSB3aXRoaW4gYSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29udGV4dC4gTXkgZmlyc3Qgc3RlcCBpcyB0byBmb2N1cyBvbiBtZW1vcnkgbWFuYWdlbWVudCB3aXRoIG5lc3RlZCB2aXJ0dWFsaXphdGlvbi5cblxuVGhlIG5leHQgdGhpbmcgdG8gY2hlY2sgaXMgZGVmaW5pdGVseSBnb2luZyB0byBiZSBga3ZtX25lc3RlZF9zMl93cGAgYW5kIGBrdm1fbmVzdGVkX3MyX3VubWFwYC4gVGhlc2UgYXJlIGhpZ2hseSBsaWtlbHkgY2FuZGlkYXRlcyBmb3IgYmVpbmcgaW52b2x2ZWQuIFRoZSBcIldQXCIgc3VnZ2VzdHMgXCJ3cml0ZSBwcm90ZWN0aW9uLFwiIHdoaWNoIGlzIGEgY29tbW9uIGNvbmNlcm4gaW4gaHlwZXJ2aXNvciBlbnZpcm9ubWVudHMuIFdlIG5lZWQgdG8gbG9vayBpbnRvIGhvdyB0aGUgc3lzdGVtIGhhbmRsZXMgd3JpdGUgcHJvdGVjdGlvbiBhbmQgbWVtb3J5IHVubWFwcGluZyB3aXRoIG5lc3RlZCBwYWdpbmcuIFRoZXNlIGFyZSB0aGUgcGllY2VzIG9mIHRoZSBwdXp6bGUgdGhhdCBhbG1vc3QgY2VydGFpbmx5IGRlZmluZSB0aGUgYmVoYXZpb3VyIGFuZCBsaWtlbHkgcG9pbnQgdG8gdGhlIHJvb3QgY2F1c2Ugb2Ygd2hhdGV2ZXIgaXMgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIGd1ZXN0J3MgdmlldyBvZiBtZW1vcnkgd2l0aGluIHRoZSBuZXN0ZWQgdmlydHVhbGl6YXRpb24gc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTYxLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTM6MDA6MjguNzk3MjExNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY1NzcxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX25lc3RlZF9zMl93cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbW11LmM9MTI2Nz1zdGF0aWMgdm9pZCBrdm1fbW11X3dwX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCBpbnQgc2xvdClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEyODAtXFx0a3ZtX3N0YWdlMl93cF9yYW5nZShcXHUwMDI2a3ZtLVxcdTAwM2VhcmNoLm1tdSwgc3RhcnQsIGVuZCk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTI4MTpcXHRrdm1fbmVzdGVkX3MyX3dwKGt2bSk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTI4Mi1cXHR3cml0ZV91bmxvY2soXFx1MDAyNmt2bS1cXHUwMDNlbW11X2xvY2spO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTMyNT12b2lkIGt2bV9hcmNoX21tdV9lbmFibGVfbG9nX2RpcnR5X3B0X21hc2tlZChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMzQ3LVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEzNDg6XFx0a3ZtX25lc3RlZF9zMl93cChrdm0pO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEzNDktfVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTIxOT12b2lkIGt2bV9oYW5kbGVfczFlMl90bGJpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGluc3QsIHU2NCB2YWwpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjI4LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjEyMjk6dm9pZCBrdm1fbmVzdGVkX3MyX3dwKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjMwLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTM6MDA6MjguODYzNzk3MzM2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyODk0MTYzODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdGV4dDpcblxuKipBbmFseXppbmcgTU1VIENvZGUgYW5kIFRMQiBJbnZhbGlkYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZSBNTVUgY29kZS4gVGhpcyBsaWtlbHkgbWVhbnMgSSdtIGRlYWxpbmcgd2l0aCBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBwZXJoYXBzIHNvbWUgc3VidGxlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGNvbnRleHQgc3dpdGNoaW5nIG9yIGNvbmN1cnJlbnQgYWNjZXNzLiBTcGVjaWZpY2FsbHksIG15IGZvY3VzIGlzIGN1cnJlbnRseSBvbiB0aGUgZnVuY3Rpb25zIGJlaW5nIGNhbGxlZCAqZnJvbSogdGhlIE1NVSBjb2RlIGl0c2VsZi4gVGhpcyBpcyBhbHdheXMgYSBjcml0aWNhbCBhcmVhIHRvIGV4YW1pbmUsIGFzIGVmZmljaWVuY3kgaGVyZSBkaXJlY3RseSBpbXBhY3RzIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLlxuXG5MZXQncyB6b29tIGluIG9uIGBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZWAuIFRoaXMgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSBjbHVlcyBtZSBpbiB0byBUTEIgaW52YWxpZGF0aW9uLCBsaWtlbHkgcmVsYXRlZCB0byBhZGRyZXNzIHNwYWNlIG1vZGlmaWNhdGlvbnMgKG1hcHBpbmdzIGJlaW5nIGFsdGVyZWQsIHVubWFwcGVkLCBvciBpbnZhbGlkYXRlZCBkdWUgdG8gbWVtb3J5IHByb3RlY3Rpb24gY2hhbmdlcywgZm9yIGV4YW1wbGUpLiBgY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VgICpzdWdnZXN0cyogaXQncyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIHNwZWNpZmljICpyYW5nZSogb2YgVExCIGVudHJpZXMgdGhhdCBuZWVkIGludmFsaWRhdGlvbiDigJMgYSBrZXkgb3B0aW1pemF0aW9uLiBJdCB3aWxsIHByb2JhYmx5IGRldGVybWluZSB0aGUgbWluaW1hbGx5IG5lY2Vzc2FyeSBlbnRyaWVzLCBzbyB3ZSBkb24ndCBlbmQgdXAgZmx1c2hpbmcgdG9vIG1hbnkgVExCIGVudHJpZXMgdW5uZWNlc3NhcmlseSwgYnV0IG1ha2Ugc3VyZSB0byBmbHVzaCBlbm91Z2ggc28gYXMgdG8gbm90IGludmFsaWRhdGUuIERlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCB0aGVyZSBjb3VsZCBiZSBkaWZmZXJlbnQgc3RyYXRlZ2llcyBmb3IgdGhhdCwgd2hpY2ggaXMgcGFydCBvZiB3aGF0IEknZCBiZSBsb29raW5nIGF0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMgdmVyeSBjYXJlZnVsbHkuIElzIHRoaXMgdGhlICpvbmx5KiBwYXJ0IHRoYXQgZGVhbHMgd2l0aCB0aGUgcHJvY2VzcyBvZiBpbnZhbGlkYXRpb24sIG9yIGlzIGl0IGNvbWJpbmVkIHdpdGggdGhlIGluc3RydWN0aW9ucz8gQXJlIHRoZSBpbnZhbGlkYXRpb25zIHBlcmZvcm1lZCBpbW1lZGlhdGVseSwgcXVldWVkLCBvciBkZWZlcnJlZD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwcm9jZXNzIGlzIHdvcmtpbmcgc28gdGhhdCBJIGNhbiB1bmRlcnN0YW5kIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyOTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMzowMDozNC4xNTMyMTgyNzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyNjQwNDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXB1dGVfdGxiX2ludmFsX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz02MDY9c3RhdGljIHU4IGdldF9ndWVzdF9tYXBwaW5nX3R0bChzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgYWRkcilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTY3Ni1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzo2Nzc6dW5zaWduZWQgbG9uZyBjb21wdXRlX3RsYl9pbnZhbF9yYW5nZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1NjQgdmFsKVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTY3OC17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jPTQwODM9c3RhdGljIHZvaWQgczJfbW11X3VubWFwX2lwYShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MDk4LVxcdGJhc2VfYWRkciA9IChpbmZvLVxcdTAwM2VpcGEuYWRkciBcXHUwMDI2IEdFTk1BU0tfVUxMKDM1LCAwKSkgXFx1MDAzY1xcdTAwM2MgMTI7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYzo0MDk5OlxcdG1heF9zaXplID0gY29tcHV0ZV90bGJfaW52YWxfcmFuZ2UobW11LCBpbmZvLVxcdTAwM2VpcGEuYWRkcik7XFxuYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYy00MTAwLVxcdGJhc2VfYWRkciBcXHUwMDI2PSB+KG1heF9zaXplIC0gMSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAwOjM0LjI0NTg2NjM1NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Nzc0NzI5MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE1lbW9yeSBNYW5hZ2VtZW50IElzc3VlKipcblxuQWxyaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBzb21ldGhpbmcgdGhhdCBzZWVtcyB0byBvcmlnaW5hdGUgZnJvbSBgczJfbW11X3VubWFwX2lwYWAuIFRoaXMgZnVuY3Rpb24gaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCdzIHRyaWdnZXJlZCBmcm9tIHRoZSBzeXN0ZW0gcmVnaXN0ZXIgaGFuZGxlcnMsIHdoaWNoIG1lYW5zIGl0J3MgcHJldHR5IGxvdy1sZXZlbCBhbmQgbGlrZWx5IHBlcmZvcm1hbmNlLXNlbnNpdGl2ZS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIHBhdGggYmFja3dhcmQuIFdoZXJlIGRvZXMgYHMyX21tdV91bm1hcF9pcGFgIGdldCBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFRoZSBuZXh0IHN0ZXAgaXMgY2xlYXIg4oCTIEkgd2FudCB0byBsb29rIGF0IGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAuIEkgc3VzcGVjdCB0aGVyZSdzIGEgY29ubmVjdGlvbiB0aGVyZSwgcHJvYmFibHkgcmVsYXRlZCB0byBhbGxvY2F0aW5nIG9yIG1hbmFnaW5nIHRoZSBWaXJ0dWFsIE5ldHdvcmsgQ29udGV4dCBSZWdpb24gKFZOQ1IpIFRMQi4gVGhpcyBjb3VsZCBiZSB3aGVyZSB0aGUgdW5tYXBwaW5nIGlzIGFjdHVhbGx5IGluaXRpYXRlZCBvciB0cmlnZ2VyZWQsIG9yIHBlcmhhcHMgd2hlcmUgdGhlIFRMQiBlbnRyaWVzIHJlbGF0ZWQgdG8gdGhlIElQQSBtYXBwaW5nIGFyZSBhbGxvY2F0ZWQuIFRoaXMgZmVlbHMgbGlrZSBhIGdvb2QgbGVhZCBpbiBuYXJyb3dpbmcgZG93biB3aGVyZSB0byBsb29rLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAyMiwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAwOjQxLjAyMDYwMTI0OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0OTM3NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcm0uYz05MjE9aW50IGt2bV9hcmNoX3ZjcHVfcnVuX3BpZF9jaGFuZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vYXJtLmMtOTUxLVxcdGlmICh2Y3B1X2hhc19udih2Y3B1KSkge1xcbmFyY2gvYXJtNjQva3ZtL2FybS5jOjk1MjpcXHRcXHRyZXQgPSBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYih2Y3B1KTtcXG5hcmNoL2FybTY0L2t2bS9hcm0uYy05NTMtXFx0XFx0aWYgKHJldClcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEyODQ9dm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3dfYWxsKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzNDctXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTM0ODppbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzNDkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMlQxMzowMDo0MS4xNDU1NDY4MTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1MTE1OTYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlY2VudCBDaGFuZ2VzIGluIHRoZSBLVk0gQXJjaGl0ZWN0dXJlKipcblxuT2theSwgc28gdGhpcyBjaGFuZ2Ugc3RlbXMgZnJvbSBhIGNhbGwgd2l0aGluIGBrdm1fYXJjaF92Y3B1X3J1bl9waWRfY2hhbmdlYC4gVGhhdCBuYXJyb3dzIHRoZSBmb2N1cyBjb25zaWRlcmFibHkuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZXNlIHN5bWJvbHM6IGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLCBga3ZtX2hhbmRsZV9zMWUyX3RsYmlgLCBga3ZtX25lc3RlZF9zMl93cGAsIGBrdm1fbmVzdGVkX3MyX3VubWFwYCwgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCwgYW5kIGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAuIFRoYXQncyB0aGUgbGlrZWx5IGhvdCB6b25lLlxuXG5Ib2xkIG9uLi4uIEkgbm90aWNlZCBzb21ldGhpbmcuIGBrdm1fbmVzdGVkX3MyX3VubWFwYCBpdHNlbGYgd2Fzbid0IGRpcmVjdGx5IHRvdWNoZWQuIEJ1dCwgYGt2bV9pbnZhbGlkYXRlX3ZuY3JfaXBhYCwgd2hpY2ggaXQgY2FsbHMsICp3YXMqIG1vZGlmaWVkLiBUaGF0IGNoYW5nZXMgdGhpbmdzIGEgYml0LiBJIHNob3VsZCByZWFsbHkgY29uZmlybSB0aGUgaW50ZXJhY3Rpb24gd2l0aCBga3ZtX25lc3RlZF9zMl91bm1hcGAgaXRzZWxmLiBHb3R0YSBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBzdWJ0bGUgaW1wYWN0cyBvZiB0aGF0IGluZGlyZWN0IGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1OTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTM6MDA6NDcuNzk2NzEwMTkyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTkzOTU3MzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX25lc3RlZF9zMl91bm1hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9rdm0vbW11LmM9MTEwND12b2lkIHN0YWdlMl91bm1hcF92bShzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTE3LVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExMTg6XFx0a3ZtX25lc3RlZF9zMl91bm1hcChrdm0sIHRydWUpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExMTktXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNDM0PWJvb2wga3ZtX3VubWFwX2dmbl9yYW5nZShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fZ2ZuX3JhbmdlICpyYW5nZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI0NDItXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MjQ0MzpcXHRrdm1fbmVzdGVkX3MyX3VubWFwKGt2bSwgcmFuZ2UtXFx1MDAzZW1heV9ibG9jayk7XFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjQ0NC1cXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0yNzE3PXZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93X21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMjcyNC1cXHRrdm1fc3RhZ2UyX3VubWFwX3JhbmdlKFxcdTAwMjZrdm0tXFx1MDAzZWFyY2gubW11LCBncGEsIHNpemUsIHRydWUpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI3MjU6XFx0a3ZtX25lc3RlZF9zMl91bm1hcChrdm0sIHRydWUpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI3MjYtXFx0d3JpdGVfdW5sb2NrKFxcdTAwMjZrdm0tXFx1MDAzZW1tdV9sb2NrKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTEyMjk9dm9pZCBrdm1fbmVzdGVkX3MyX3dwKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEyNDctXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6MTI0ODp2b2lkIGt2bV9uZXN0ZWRfczJfdW5tYXAoc3RydWN0IGt2bSAqa3ZtLCBib29sIG1heV9ibG9jaylcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMjQ5LXtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmM9MzkzOD1zdGF0aWMgYm9vbCBoYW5kbGVfYWxsZTFpcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzk1MS1cXHQgKi9cXG5hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jOjM5NTI6XFx0a3ZtX25lc3RlZF9zMl91bm1hcCh2Y3B1LVxcdTAwM2Vrdm0sIHRydWUpO1xcbmFyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMtMzk1My1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTM6MDA6NDguMDU2MTEyNjU1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjEwNzcwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtWTSBJbml0aWFsaXphdGlvbiBMYW5kc2NhcGUqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgY2FsbCBvcmlnaW5hdGVkIGZyb20gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQgKE1NVSkgYW5kIHN5c3RlbSByZWdpc3RlcnMsIHdoaWNoIGlzIGdvb2QgY29udGV4dC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIEtWTSBpbml0aWFsaXphdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBga3ZtX2luaXRfbmVzdGVkYC4gVGhhdCBmdW5jdGlvbiBpcyBjcnVjaWFsIGZvciBuZXN0ZWQgdmlydHVhbGl6YXRpb24sIGFuZCBpdCdzIGxpa2VseSB3aGVyZSB0aGUgcGllY2VzIGNvbm5lY3RpbmcgdGhlIE1NVSBhbmQgc3lzdGVtIHJlZ2lzdGVyIGludGVyYWN0aW9ucyBjb21lIHRvZ2V0aGVyIGluIHRoaXMgY29udGV4dC4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gaWYgbXkgaW50dWl0aW9uIGlzIGNvcnJlY3QgYW5kIGRyaWxsIGRvd24gaW50byBga3ZtX2luaXRfbmVzdGVkYCB0byBzZWUgaG93IGl0IGhhbmRsZXMgdGhpcyBzcGVjaWZpYyBjYWxsIHBhdGguIEknbGwgYWxzbyBjaGVjayBpZiBJIGhhdmUgZW5jb3VudGVyZWQgdGhpcyBjYWxsIHByZXZpb3VzbHksIGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiBhbnkgdHJpY2t5IHBhcnRzIG9mIHRoZSBjb2RlLiBUaGlzIHdpbGwgY2xhcmlmeSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIE1NVSwgdGhlIHN5c3RlbSByZWdpc3RlcnMsIGFuZCB0aGUgbmVzdGVkIHZpcnR1YWxpemF0aW9uIHNldHVwIHdpdGhpbiBLVk0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzIwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDJUMTM6MDA6NTEuNzE3MTk0MDg0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQyNjU1MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtX2luaXRfbmVzdGVkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvYXJtNjQva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L2t2bS9hcm0uYz0yMjI9aW50IGt2bV9hcmNoX2luaXRfdm0oc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9hcm0uYy0yMzgtXFxuYXJjaC9hcm02NC9rdm0vYXJtLmM6MjM5OlxcdGt2bV9pbml0X25lc3RlZChrdm0pO1xcbmFyY2gvYXJtNjQva3ZtL2FybS5jLTI0MC1cXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTk4MT1pbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMzYtXFx0aWYgKGt2bV9pc19uZXN0ZWRfczJfbW11KGt2bSwgbW11KSlcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMDM3OlxcdFxcdGt2bV9pbml0X25lc3RlZF9zMl9tbXUobW11KTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMDM4LVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MTEyNT12b2lkIGt2bV9mcmVlX3N0YWdlMl9wZ2Qoc3RydWN0IGt2bV9zMl9tbXUgKm1tdSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExMzgtXFx0aWYgKGt2bV9pc19uZXN0ZWRfczJfbW11KGt2bSwgbW11KSlcXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoxMTM5OlxcdFxcdGt2bV9pbml0X25lc3RlZF9zMl9tbXUobW11KTtcXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0xMTQwLVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MjA9c3RydWN0IHZuY3JfdGxiIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTQ2LVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jOjQ3OnZvaWQga3ZtX2luaXRfbmVzdGVkKHN0cnVjdCBrdm0gKmt2bSlcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy00OC17XFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz04MDU9c3RhdGljIHN0cnVjdCBrdm1fczJfbW11ICpnZXRfczJfbW11X25lc3RlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy04NjktXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM6ODcwOnZvaWQga3ZtX2luaXRfbmVzdGVkX3MyX21tdShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTg3MS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAwOjUxLjg0MTQ2NjQ3NloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTI5NjU5NTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBUaGlzIEtWTSBBUk02NCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIGBrdm1faW5pdF9uZXN0ZWRgIGlzIHRoZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBjYWxsZWQgZnJvbSBga3ZtX2FyY2hfaW5pdF92bWAuIEl0J3MgYmFzaWNhbGx5IHRoZSBzZXR1cCBmdW5jdGlvbiBmb3IgdGhpcyBzcGVjaWZpYyBuZXN0ZWQgdmlydHVhbGl6YXRpb24gY29udGV4dC5cblxuTXkgaW5pdGlhbCBmb2N1cyBoZXJlLCBnaXZlbiB0aGUgZnVuY3Rpb24gbmFtZXMsIGlzIGFyb3VuZCBob3cgVmlydHVhbCBOZXN0ZWQgQ29udHJvbCBSZWdpc3RlcnMgKFZOQ1IpIGFuZCBUTEIgaW52YWxpZGF0aW9uIGFyZSBoYW5kbGVkLiBJJ3ZlIGlkZW50aWZpZWQgdGhlIGtleSBzeW1ib2xzIHRoaXMgcGF0Y2ggc2VlbXMgdG8gdG91Y2g6IGBrdm1faGFuZGxlX3ZuY3JfYWJvcnRgLCBga3ZtX2hhbmRsZV9zMWUyX3RsYmlgLCBga3ZtX25lc3RlZF9zMl93cGAsIGBrdm1fbmVzdGVkX3MyX3VubWFwYCwgYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYCwgYW5kIGBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYmAuIEknbSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhlc2Ugc3ltYm9sIG5hbWVzIHdpdGggdGhlIGRlZmluaXRpb25zIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gWWVwLCB0aGV5IGNoZWNrIG91dC5cblxuQWxyaWdodCwgc28gdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgYXJjaC9hcm02NC9rdm0vbmVzdGVkLmNgIGFuZCBgYXJjaC9hcm02NC9rdm0vaHlwL3ZoZS9zd2l0Y2guY2AuIENsZWFybHksIHRoaXMgaXMgY29yZSBLVk0gQVJNNjQgZnVuY3Rpb25hbGl0eSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gbmVzdGVkIHZpcnR1YWxpemF0aW9uLiBJJ20gbm90aW5nIHRoYXQgYENPTkZJR19LVk1gIGlzIHRoZSBlbmNvbXBhc3NpbmcgY29uZmlnIG9wdGlvbi5cblxuVGhlIGtleSB0YWtlYXdheSBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgY2hhbmdpbmcgZnVuZGFtZW50YWwgYXNwZWN0cyBvZiBWTkNSIFRMQiBoYW5kbGluZyBhbmQgdGhlIGNvbXB1dGF0aW9uL2FwcGxpY2F0aW9uIG9mIFRMQiBpbnZhbGlkYXRpb24gcmFuZ2VzIHdpdGhpbiB0aGUgS1ZNIEFSTTY0IG5lc3RlZCB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudC4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2Ugc3VidGxlLCBidXQgY3JpdGljYWwsIGJ1Z3MuIFNvLCBJIG5lZWQgdG8gZmxhZyB0aGlzIGZvciBmdXp6aW5nLiBUaGVzZSBhcmUgcmVhY2hhYmxlLCBrZXJuZWwgcGF0aHMgdGhhdCBuZWVkIHJpZ29yb3VzIHRlc3RpbmcgdG8gcHJldmVudCByZWdyZXNzaW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5UaGVyZWZvcmUsIEknbSBtYXJraW5nIHRoaXMgZm9yIGZ1enppbmcsIHVzaW5nIGBLVk1gIGFzIHRoZSBjb25maWcuIE15IGFuYWx5c2lzIGlkZW50aWZpZXMgdGhlIGZvbGxvd2luZyBzeW1ib2xzOlxuLSBga3ZtX2hhbmRsZV92bmNyX2Fib3J0YFxuLSBga3ZtX2hhbmRsZV9zMWUyX3RsYmlgXG4tIGBrdm1fbmVzdGVkX3MyX3dwYFxuLSBga3ZtX25lc3RlZF9zMl91bm1hcGBcbi0gYGNvbXB1dGVfdGxiX2ludmFsX3JhbmdlYFxuLSBga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGJgXG5hbmQgSSdsbCB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCB0byByZWxheSB0aGVzZSBmaW5kaW5ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MzIsIk91dHB1dFRva2VucyI6MTgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAyVDEzOjAxOjAzLjEzODA2NTMzNFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MTUwMTQyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2hhbmRsZV92bmNyX2Fib3J0XCIsXG4gICAgXCJrdm1faGFuZGxlX3MxZTJfdGxiaVwiLFxuICAgIFwia3ZtX25lc3RlZF9zMl93cFwiLFxuICAgIFwia3ZtX25lc3RlZF9zMl91bm1hcFwiLFxuICAgIFwiY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VcIixcbiAgICBcImt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIFZOQ1IgKFZpcnR1YWwgTmVzdGVkIENvbnRyb2wgUmVnaXN0ZXIpIFRMQiBoYW5kbGluZyBhbmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyB0cmFja2luZyBtZWNoYW5pc21zIGFuZCBtb2RpZmllcyBob3cgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvbXB1dGVkIGFuZCBhcHBsaWVkLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2hhbmRsZV92bmNyX2Fib3J0XCIsXG4gICAgXCJrdm1faGFuZGxlX3MxZTJfdGxiaVwiLFxuICAgIFwia3ZtX25lc3RlZF9zMl93cFwiLFxuICAgIFwia3ZtX25lc3RlZF9zMl91bm1hcFwiLFxuICAgIFwiY29tcHV0ZV90bGJfaW52YWxfcmFuZ2VcIixcbiAgICBcImt2bV92Y3B1X2FsbG9jYXRlX3ZuY3JfdGxiXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBLVk0gQVJNNjQgbmVzdGVkIHZpcnR1YWxpemF0aW9uIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIFZOQ1IgKFZpcnR1YWwgTmVzdGVkIENvbnRyb2wgUmVnaXN0ZXIpIFRMQiBoYW5kbGluZyBhbmQgaW52YWxpZGF0aW9uLiBJdCBpbnRyb2R1Y2VzIG5ldyB0cmFja2luZyBtZWNoYW5pc21zIGFuZCBtb2RpZmllcyBob3cgVExCIGludmFsaWRhdGlvbiByYW5nZXMgYXJlIGNvbXB1dGVkIGFuZCBhcHBsaWVkLiBUaGVzZSBhcmUgcmVhY2hhYmxlIGNvcmUga2VybmVsIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgY29ycmVjdG5lc3MgYW5kIHByZXZlbnQgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmr[1] Phase: Succeeded StartedAt: 2026-08-02 13:01:28 +0000 UTC FinishedAt: 2026-08-02 13:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-02 13:01:28 +0000 UTC FinishedAt: 2026-08-02 13:01:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2] Phase: Succeeded StartedAt: 2026-08-02 13:01:28 +0000 UTC FinishedAt: 2026-08-02 13:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-02 13:01:28 +0000 UTC FinishedAt: 2026-08-02 13:51:51 +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":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:01:28 +0000 UTC FinishedAt: 2026-08-02 13:01:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:01:28 +0000 UTC FinishedAt: 2026-08-02 13:01:41 +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":["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-workflow2mvmr/series-workflow2mvmr-convert-artifact-1482769089/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:01:50 +0000 UTC FinishedAt: 2026-08-02 13:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:01:50 +0000 UTC FinishedAt: 2026-08-02 13:22: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:*83e6d83f-e74c-4e66-bfac-5bbe9e86b4f8,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-workflow2mvmr/series-workflow2mvmr-convert-artifact-1482769089/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": "82a6e539-f0fa-4e4c-8abd-75fd2944422b", "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-workflow2mvmr/series-workflow2mvmr-build-action-309225711/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:01:50 +0000 UTC FinishedAt: 2026-08-02 13:22:07 +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:*83e6d83f-e74c-4e66-bfac-5bbe9e86b4f8,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-workflow2mvmr/series-workflow2mvmr-convert-artifact-1482769089/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": "82a6e539-f0fa-4e4c-8abd-75fd2944422b", "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-workflow2mvmr/series-workflow2mvmr-build-action-309225711/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:22:19 +0000 UTC FinishedAt: 2026-08-02 13:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:22:19 +0000 UTC FinishedAt: 2026-08-02 13:22:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:22:19 +0000 UTC FinishedAt: 2026-08-02 13:22:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:22:19 +0000 UTC FinishedAt: 2026-08-02 13:22: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":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-workflow2mvmr/series-workflow2mvmr-convert-artifact-2722411412/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:22:30 +0000 UTC FinishedAt: 2026-08-02 13:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:22:30 +0000 UTC FinishedAt: 2026-08-02 13:24:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*82a6e539-f0fa-4e4c-8abd-75fd2944422b,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-workflow2mvmr/series-workflow2mvmr-build-action-309225711/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-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:24:33 +0000 UTC FinishedAt: 2026-08-02 13:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:24:33 +0000 UTC FinishedAt: 2026-08-02 13:24:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:24:33 +0000 UTC FinishedAt: 2026-08-02 13:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:24:33 +0000 UTC FinishedAt: 2026-08-02 13:47:18 +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:*83e6d83f-e74c-4e66-bfac-5bbe9e86b4f8,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-workflow2mvmr/series-workflow2mvmr-convert-artifact-2722411412/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": "6ed53783-b03d-4eed-8caf-431386d78025", "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-workflow2mvmr/series-workflow2mvmr-build-action-395123808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:24:33 +0000 UTC FinishedAt: 2026-08-02 13:47:08 +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:*83e6d83f-e74c-4e66-bfac-5bbe9e86b4f8,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-workflow2mvmr/series-workflow2mvmr-convert-artifact-2722411412/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": "6ed53783-b03d-4eed-8caf-431386d78025", "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-workflow2mvmr/series-workflow2mvmr-build-action-395123808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:47:18 +0000 UTC FinishedAt: 2026-08-02 13:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:47:18 +0000 UTC FinishedAt: 2026-08-02 13:47:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:47:18 +0000 UTC FinishedAt: 2026-08-02 13:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:47:18 +0000 UTC FinishedAt: 2026-08-02 13:48:58 +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:*6ed53783-b03d-4eed-8caf-431386d78025,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-workflow2mvmr/series-workflow2mvmr-build-action-395123808/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-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:49:08 +0000 UTC FinishedAt: 2026-08-02 13:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:49:08 +0000 UTC FinishedAt: 2026-08-02 13:51:51 +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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"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:*82a6e539-f0fa-4e4c-8abd-75fd2944422b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6ed53783-b03d-4eed-8caf-431386d78025,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-workflow2mvmr/series-workflow2mvmr-build-action-309225711/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-workflow2mvmr/series-workflow2mvmr-build-action-395123808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:49:08 +0000 UTC FinishedAt: 2026-08-02 13:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:49:08 +0000 UTC FinishedAt: 2026-08-02 13:49:15 +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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"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-workflow2mvmr/series-workflow2mvmr-convert-artifact-1734762685/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:49:08 +0000 UTC FinishedAt: 2026-08-02 13:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:49:08 +0000 UTC FinishedAt: 2026-08-02 13:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:49:08 +0000 UTC FinishedAt: 2026-08-02 13:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:49:18 +0000 UTC FinishedAt: 2026-08-02 13:51:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2mvmr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["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_handle_vncr_abort","kvm_handle_s1e2_tlbi","kvm_nested_s2_wp","kvm_nested_s2_unmap","compute_tlb_inval_range","kvm_vcpu_allocate_vncr_tlb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7d3aae206663c4e006b25a1c7a20a4029e67da76","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"7311056a-fe2f-49db-8048-1d949acbbebb","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-02 13:49:18 +0000 UTC FinishedAt: 2026-08-02 13:51:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*82a6e539-f0fa-4e4c-8abd-75fd2944422b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6ed53783-b03d-4eed-8caf-431386d78025,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-workflow2mvmr/series-workflow2mvmr-build-action-309225711/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-workflow2mvmr/series-workflow2mvmr-build-action-395123808/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-workflow2mvmr/series-workflow2mvmr-convert-artifact-1734762685/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,}